Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

HTP 2 WAV konverter

117 views
Skip to first unread message

Attila

unread,
Jul 22, 2008, 5:10:55 PM7/22/08
to Homelab/Aircomp levlista
Sziasztok!

Eloszor is: ebreszto!

Masodszor: megtalaltam a HTP-bol WAV-ra konvertalo programom elveszett
forrasat, ami mindenkepp jo hir, hiszen igy kifizetodo volt a
lustasagom, hogy nem irom meg meg egyszer.

Bar nem tudom feldob-e ez meg valakit rajtam kivul :-)

A file-t feltoltottem a csoport archivumaba, remelhetoleg nem okoz
gondot leforditani az egy szem .C forrastfilet egy kelloen elszant
erdeklodonek, ha megis, en forditok majd EXE-t.

Esetleg szakavatott szem at is nezheti megalljak-e a helyuket az
idokonstansok.

Udv,
Attila

Gruby

unread,
Jul 23, 2008, 1:00:09 PM7/23/08
to Homelab/Aircomp levlista
Szia

Ébresztő ?
A HoLa emulátor commandline támogatása fel tudna ébreszteni :-)
A HomeLab GameBase kezelése elég gáz tape becsatolás meg load
beírásával.

Üdv: Gruby

Attila

unread,
Jul 23, 2008, 3:19:14 PM7/23/08
to Homelab/Aircomp levlista
Hali,

On 23 jul, 19:00, Gruby <gruby...@gmail.com> wrote:
> Szia
>
> Ébresztő ?
> A HoLa emulátor commandline támogatása fel tudna ébreszteni :-)
> A HomeLab GameBase kezelése elég gáz tape becsatolás meg load
> beírásával.

OK, akkor az ebredes erdekeben ezt beletettem. Van meg valami
command line opcio esetleg, ami hasznos lenne? Ha nincs, akkor
felteszem az uj buildet ide, vagy a honlapra tesztelni.

Udv,
Attila

Gruby

unread,
Jul 23, 2008, 11:26:52 PM7/23/08
to Homelab/Aircomp levlista
On júl. 23, 21:19, Attila <nerd...@gmail.com> wrote:
> Hali,
> OK, akkor az ebredes erdekeben ezt beletettem. Van meg valami
> command line opcio esetleg, ami hasznos lenne? Ha nincs, akkor
> felteszem az uj buildet ide, vagy a honlapra tesztelni.
>
> Udv,
> Attila

Szia
Pár program külön karakterkészletet használ (Kargen_mod.chr), esetleg
ezekhez vmi commandline opsün jó lenne.

Üdv: Gruby

Attila

unread,
Jul 24, 2008, 2:51:34 AM7/24/08
to Homelab/Aircomp levlista
Hali,

On 24 jul, 05:26, Gruby <gruby...@gmail.com> wrote:
> Pár program külön karakterkészletet használ (Kargen_mod.chr), esetleg
> ezekhez vmi commandline opsün jó lenne.

Ezt már tudja az a verzió szerintem, ami fenn van a honlapomon
(Download):
http://gaia.atilia.eu

A Readme-ben benne van, fejből nem tudom pontosan a szintaxisát.

Üdv,
Attila

Gruby

unread,
Jul 24, 2008, 11:19:52 AM7/24/08
to Homelab/Aircomp levlista
On júl. 24, 08:51, Attila <nerd...@gmail.com> wrote:
> Hali,
>
> Ezt már tudja az a verzió szerintem, ami fenn van a honlapomon
> (Download):http://gaia.atilia.eu
>
> A Readme-ben benne van, fejből nem tudom pontosan a szintaxisát.
>
Bocsi elfelejtettem hogy már november óta benne van :-)
Itt a Script :

;*****************************
;* HoLA! v2.1 GEMUS Script *
;* (c) Gruby *
;* 2007-11-01 *
;*****************************
;
; Emulator Properties:
;
; Emulator File: Homelab.exe
; Use Short Filenames: NO
; File Types: HTP
; HTP - Homelab Tape File
; WAV - Homelab Tape File
; RAW - Homelab Program File
;
; This script was written for HoLa! v2.1
; may not fully compatible with older versions.
;
; Emulator Website: http://gaia.atilia.eu/
;
; ------------------------------------------------------------
; CALL Warning
If VersionComment CONTAINS(*CALL $5000*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $5000, [enter].)
ElseIf VersionComment CONTAINS(*CALL $4300*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $4300, [enter].)
ElseIf VersionComment CONTAINS(*CALL $4FDA*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $4FDA, [enter].)
ElseIf VersionComment CONTAINS(*CALL $7ED5*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $7ED5, [enter].)
ElseIf VersionComment CONTAINS(*CALL $7E7B*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $7E7B, [enter].)
ElseIf VersionComment CONTAINS(*CALL $6800*)
Show_Message(Kazetta becsatolása, és LOAD után az emulátorba írd be:
CALL $6800, [enter].)
End If
;
; ------------------------------------------------------------
; Charset AutoLoad
If VersionComment CONTAINS(*CHAR*)
Add_CLP( /charrom:"char.bin" )
End If

Add_CLP(%gamepathfile%)
Run_Emulator()

Üdv: Gruby

László Princz

unread,
Jan 29, 2022, 4:07:56 PM1/29/22
to Homelab/Aircomp levlista
Szia!
Én most kerültem egy élő Homelab 3 közelébe, de sehol nem találom már a htp2wav programot. Ha akárcsak forrás elérhetőségéről tudsz bármit, azt nagyon megköszönném!

Nagy Attila AT-Vlog

unread,
Jan 31, 2022, 6:23:29 AM1/31/22
to Homelab/Aircomp levlista
Szia!
Az emulátorral ki lehet nyerni a htp -ből a wav -ot.
A weboldalamon a HomelabRM32 -nél, a fájlok között találsz egy drive linket is.
Itt jó pár játék fent van wav -ban is.
Üdv.

Nagy Attila AT-Vlog

unread,
Jan 31, 2022, 6:23:31 AM1/31/22
to hom...@googlegroups.com
Szia!
Az emulátorral ki lehet nyerni a htp -ből a wav -ot.
A weboldalamon a HomelabRM32 -nél, a fájlok között találsz egy drive linket is.
Itt jó pár játék fent van wav -ban is.
Üdv.




--
Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok „Homelab/Aircomp levlista” csoportjára.
Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el ide: https://groups.google.com/d/msgid/homelab/6a7b9103-0bff-4fe2-a23e-409895fc65ccn%40googlegroups.com.

Attila

unread,
Jan 31, 2022, 6:26:16 AM1/31/22
to Homelab/Aircomp levlista
Ha a github-ra felrakom a forrását az jó? Egy szem C file... :)

üdv
Attila

Bonta László

unread,
Jan 31, 2022, 7:58:29 AM1/31/22
to hom...@googlegroups.com
Sziasztok!
Szerintem a forrás mindig mindenképp hasznos, mert azért vannak a
többitől eltérő magnófelvételek, ahol igencsak meg kell változtatni a
paramétereket. Talán mert a szalag nyúlt el, talán mert a magnó
sebessége volt más. De találkoztam már olyannal is, ahol a
hanghullámoknak nem a pozitív tartománya, hanem a negatív tartomány
hordozta a hasznos jelet. Anno DOS alatt Pascalban dekódoltam ezt.
Fejlesztői gépen talán nem gond lefordítani exe-re egy C forrást, csak
odaadni nem könnyű másoknak az exe-t, mert ha nincs tanúsítvánnyal
aláírva, esetleg a Windows élből törli is a fájlt, ha egyáltalán nagy
nehezen sikerülne letölteni.
Üdv:
Laci
> --
> Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok
> szolgáltatásbeli Homelab/Aircomp levlista csoportra.
> Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz
> küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
> Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el
> ide:
> https://groups.google.com/d/msgid/homelab/c6a4ebda-6e5f-4910-9695-a3421ded0706n%40googlegroups.com.
>

Attila Grosz

unread,
Jan 31, 2022, 8:21:25 AM1/31/22
to hom...@googlegroups.com
Itt most nem HTP-ről akarunk WAV-ba konvertálni? Mert ott mindegy mennyire van kinyúlva a szalag (nem is szalagra érdemes másolni, hanem direktben átjátszani a PC hangkártyán keresztül).

üdv
Attila

Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el ide: https://groups.google.com/d/msgid/homelab/CA%2BL8NXWfDiuyvub9h%3DMVF2xgqAvof58H_tg1PFRYjLHXtsYo%2Bg%40mail.gmail.com.

Bonta László

unread,
Jan 31, 2022, 11:37:42 AM1/31/22
to hom...@googlegroups.com
Teljesen igazad van.
A dekódolást példának szántam, hogy a változó paraméterek miatt bizony
jól jön ha megvan a forrás is.
Üdv:
Laci
>> https://groups.google.com/d/msgid/homelab/CA%2BL8NXWfDiuyvub9h%3DMVF2xgqAvof58H_tg1PFRYjLHXtsYo%2Bg%40mail.gmail.com
>> .
>>
>
> --
> Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok
> szolgáltatásbeli Homelab/Aircomp levlista csoportra.
> Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz
> küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
> Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el
> ide:
> https://groups.google.com/d/msgid/homelab/CADu2e8toVyj0efppM4%2Ba8hoLbz1BqctJYjFiR32s%3D6dG1yJdpg%40mail.gmail.com.
>

László Princz

unread,
Feb 1, 2022, 2:06:45 AM2/1/22
to Homelab/Aircomp levlista
Köszönöm, sikerült a WAV fájlokat letölteni, de úgy tűnik, ezek inkább emulátoron futó wav-ok. A bombázónál úgy tűnik, talán módosított karaktertábla kell neki.
Azok a programok, amik után memóriacímek vannak megadva, azok is betöltődnek, de nem tudom, hogyan kellene elindítani. A call és a run nem segített. Erre van tippetek? Vagy ezek csak emulátorban futnak?

László Princz

unread,
Feb 1, 2022, 2:06:51 AM2/1/22
to hom...@googlegroups.com
Én többek közt azért örülnék a forrásnak, mert nem is windowst használok.

Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok „Homelab/Aircomp levlista” csoportjára.

Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el ide: https://groups.google.com/d/msgid/homelab/CADu2e8toVyj0efppM4%2Ba8hoLbz1BqctJYjFiR32s%3D6dG1yJdpg%40mail.gmail.com.

Attila

unread,
Feb 1, 2022, 2:09:00 AM2/1/22
to Homelab/Aircomp levlista
Nem a WAV fut emun hanem valóbansaját karakterkészlet kell neki, ezeket még Imre annak idején megcsinálta magának a saját gépén HW módosítással.

A memóriacímesek CALL-lal indulnak de kell egy $ elé, merthogy hexa, a legtöbb CALL $5000-zel indul

üdv

Attila Grosz

unread,
Feb 1, 2022, 2:27:28 AM2/1/22
to hom...@googlegroups.com
Megtaláltam a forrást, ami azért "veszett el", mert egy progiba kezdtem összerakni az összes WAV-ba konvertálós emulátor formátumot (ez az "emuwav", fent van a honlapomon is asszem).

Nos ahogy nézem a Homelab-es HTP2WAV-ot még ráadásul Linuxon írhattam, mert getopt-ot használok.

Ide bemásolom a kódot, elfér... ennyi az egész. Ahogy nézem nem valami jó a frekvenciakonverzió benne, de úgy emlékszem jól működött.

üdv
Attila



#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>

/* WAV file header structure */
/* should be 1-byte aligned */
#pragma pack(1)
struct wav_header {
    char riff[4];
    unsigned int rLen;
    char WAVEfmt[8];
    unsigned int fLen; /* 0x1020 */
    unsigned short wFormatTag; /* 0x0001 */
    unsigned short nChannels; /* 0x0001 */
    unsigned int nSamplesPerSec;
    unsigned int nAvgBytesPerSec; // nSamplesPerSec*nChannels*(nBitsPerSample%8)
    unsigned short nBlockAlign; /* 0x0001 */
    unsigned short nBitsPerSample; /* 0x0008 */    
    char datastr[4];
    unsigned int data_size;
} wave = {
    'R','I','F','F',
    0,
    'W','A','V','E','f','m','t',' ',
    16,
    1,
    1,
    44100,    
    44100,
    1,        
    8,
    'd','a','t','a',
0
};
#pragma pack()

static unsigned char    p_gain = 60;
const unsigned char     p_silence = 0;
static unsigned int     wav_sample_count = 0;

static unsigned int cycles_to_samples(unsigned int cycles)
{
    return ( cycles * wave.nSamplesPerSec + 0*1500000) / 3000000;
}

static void filter_output( unsigned char level, FILE *wavfile)
{
    static double hp_accu = 0, lp_accu = 0;
    double in = level * 1.0;
    double clipped = lp_accu - hp_accu;
    unsigned char out;
   
if ( clipped >=127.0 )
    clipped = 127.0;
else if ( clipped<-127.0 )
clipped = -127;
       
out = ((unsigned char)(clipped)) ^ 0x80;
lp_accu += ((double)in - lp_accu) * 0.5577;
hp_accu += (lp_accu - hp_accu) * 0.0070984;
fputc( out, wavfile);
}
   
static void dump_bit(FILE *fp, unsigned int bit)
{
    unsigned int i, j;
    unsigned int period = 1 << bit;
   
    for (j=0; j<period; j++) {
        for( i=0; i<cycles_to_samples(546/period); i++) /* 546 ? */
            filter_output( p_gain, fp);
        for( i=0; i<cycles_to_samples(3878/period); i++)
            filter_output( p_silence, fp);
    }    
}

static void dump_last_bit(FILE *fp, unsigned int bit)
{
    unsigned int i, j;
    unsigned int period = 1 << bit;
   
    for (j=0; j<period; j++) {
        for( i=0; i<cycles_to_samples(680/period); i++)
            filter_output( p_gain, fp);
        for( i=0; i<cycles_to_samples(3878/period); i++)
            filter_output( p_silence, fp);
    }    
}

static void close_wav(FILE *outfile)
{
    int foo = ftell(outfile) - 8;
fseek(outfile, 4, SEEK_SET);
fwrite(&foo,sizeof(foo),1,outfile);

foo = foo-sizeof(wave) + 8;
fseek(outfile,sizeof(wave)-sizeof(unsigned long),SEEK_SET);
fwrite(&foo,sizeof(foo),1,outfile);

fclose(outfile);
}

static void output_wav_byte(FILE *wavfile, unsigned char byte)
{
    unsigned int bc = 7;
   
    while ( --bc ) {
        dump_bit( wavfile, (byte>>(7-bc))&1);
    }
    dump_last_bit( wavfile, byte&1);
}

static void init_wav(FILE *wavfile)
{
    unsigned int i, j;
   
    fwrite( &wave, sizeof(wave), 1, wavfile);
    /* Lead in silence */
    for( j=0; j<cycles_to_samples(55300); j++)
        filter_output( p_silence, wavfile);
    for (i=0; i<12; i++) {
        for( j=0; j<cycles_to_samples(2656); j++)
            filter_output( p_silence, wavfile);
        for( j=0; j<cycles_to_samples(2656); j++)
            filter_output( p_gain, wavfile);
    }
    for( i=0; j<cycles_to_samples(25238); j++)
        filter_output( p_silence, wavfile);
}
   
static void process_htp(FILE *input, FILE* output)
{
    unsigned char in;
   
    while (!feof( input ) ) {
        fread( &in, 1, 1, input);
        output_wav_byte( output, in);
    }
    fclose( input );
}    

static void print_usage()
{
    printf( "HTP2WAV v1.0\n");
    printf( "Copyright 2004 by Attila Grosz\n");
    printf( "Usage:\n");
    printf( "htp2wav -i <input_filename> -o <output_filename>\n");
    printf( "Command line option:\n");
    printf( "-g <gain> : gain, must be between 1 and 7 (default: 4)\n");
    printf( "-h        : prints this text\n");
    exit(1);
}    

int main(int argc, char *argv[])
{
    int finished = 0;
    int arg1, arg2;
    FILE *htp = 0, *wav = 0;

    while (!finished) {
        switch (getopt (argc, argv, "?hf:i:o:g:")) {
            case -1:
            case ':':
                finished = 1;
                break;
            case '?':
            case 'h':
                print_usage();
                break;
            case 'f':
                if ( !sscanf( optarg, "%i", &arg1 ) ) {
                    fprintf( stderr, "Error parsing argument for '-f'.\n");
                    exit(2);
                } else {
                    if ( arg1!=48000 && arg1!=44100 && arg1!=22050 &&
                        arg1!=11025 && arg1!=8000 ) {
                            fprintf( stderr, "Unsupported sample rate: %i.\n", arg1);
                            fprintf( stderr, "Supported sample rates are: 48000, 44100, 22050, 11025 and 8000.\n");
                            exit(3);
                    }
                    wave.nSamplesPerSec = arg1;
                    wave.nAvgBytesPerSec = wave.nSamplesPerSec*wave.nChannels
                                            *(wave.nBitsPerSample%8);
                }    
                break;
            case 'g':
                if ( !sscanf( optarg, "%i", &arg1 ) ) {
                    fprintf( stderr, "Error parsing argument for '-g'.\n");
                    exit(2);
                } else {
                    if ( arg1<0 || arg1>7 ) {
                        fprintf( stderr, "Illegal gain value: %i.\n", arg1);
                        fprintf( stderr, "Gain must be between 1 and 7.\n");
                    }
                    p_gain = arg1*0x0f;
                }    
                break;
            case 'i':
                if ( !(htp = fopen( optarg, "rb")) ) {
                    fprintf( stderr, "Error opening %s.\n", optarg);
                    exit(4);
                }
                break;
            case 'o':
                if ( !(wav = fopen( optarg, "wb")) ) {
                    fprintf( stderr, "Error opening %s.\n", optarg);
                    exit(4);
                }
                break;                
            default:
                break;
        }
    }
   
    if ( !htp ) {
        print_usage();
    } else if ( !wav ) {
        print_usage();
    } else {
        init_wav(wav);
        process_htp(htp, wav);
        close_wav( wav );
    }    
   
    return 0;
}

László Princz

unread,
Feb 1, 2022, 7:32:13 AM2/1/22
to hom...@googlegroups.com
Köszönöm! :)

--
Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok „Homelab/Aircomp levlista” csoportjára.
Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el ide: https://groups.google.com/d/msgid/homelab/CADu2e8vwLjqtvTL5GkhMba1PCtZzEoH0EQu1QzWth6G7sY9u5g%40mail.gmail.com.

Nagy Attila AT-Vlog

unread,
Feb 1, 2022, 7:32:17 AM2/1/22
to Homelab/Aircomp levlista
Ezek mennek rendes gépen, és egyikhez sem kell másik karakter ROM.

László Princz

unread,
Feb 1, 2022, 1:37:48 PM2/1/22
to hom...@googlegroups.com
Köszönöm, a programok többsége már fut. Úgy néz ki, a problémám az lehetett, hogy 32 karakteres módban próbáltam, és nincs bővített aritmetika a gépben, így csak decimális számokat kezel. Azért van még egy-két furán futó játék, de a zöme megy, nagyon köszönöm! :)

--
Azért kapta ezt az üzenetet, mert feliratkozott a Google Csoportok „Homelab/Aircomp levlista” csoportjára.
Az erről a csoportról és az ahhoz kapcsolódó e-mailekről való leiratkozáshoz küldjön egy e-amailt a(z) homelab+u...@googlegroups.com címre.
Ha szeretné megtekinteni ezt a beszélgetést az interneten, látogasson el ide: https://groups.google.com/d/msgid/homelab/f74773b3-3bbd-4d05-9deb-8114519f9332n%40googlegroups.com.
Reply all
Reply to author
Forward
0 new messages