MoonBlaster music cruncher Onbekend, 00-00-00 ;---- MoonBlaster music cruncher ---- ;em1pag = constante, banknr waar gecrunchte song in moet komen ;sngpag = constante, banknr waar ongecrunchte song in staat. sngcrc: ld hl,08000h+200 ;zet settings neer ld de,08000h ld bc,376 sngcrl1: call copcrbyte inc hl inc de dec bc ld a,b or c jr nz,sngcrl1 ld a,(08000h) ;last position inc a ld b,a push bc ; verplaats pat/pos data ld hl,08000h sngcrl2: call copcrbyte inc hl inc de djnz sngcrl2 push de pop ix ld a,sngpag out (0feh),a pop bc ; zoek hoogste gebruikte pattern ld e,1 ld hl,08000h sngcrl3: ld a,(hl) cp e jr c,sngcrl4 ld e,a sngcrl4: inc hl djnz sngcrl3 ld d,0 push ix dec ix dec ix pop hl add hl,de add hl,de ld a,sngpag out (0feh),a ld b,e ;aantal patterns ex de,hl ld hl,08240h ld a,242 ld (numzer),a sngcrl5: push bc inc ix inc ix ld a,em1pag out (0feh),a push de res 7,d ld (ix+0),e ;pattern adres ld (ix+1),d pop de ld a,sngpag out (0feh),a call sngcrdat ;crunchen echte songdata pop bc djnz sngcrl5 ld a,em1pag out (0feh),a xor a ld (de),a inc de ex de,hl ld de,-08000h add hl,de ld (lengte),hl ;lengte van uiteindelijke gecrunchte ret ;data, is handig voor saven file ;---- crunchen echte songdata ---- sngcrdat: ld b,16 ;aantal steps per pattern sngcrl6: push bc ld b,13 sngcrl7: push bc ;aantal bytes per step ld a,(hl) or a jr nz,sngcrl8 ;niet 0? dan aantal evt. opgespaarde ld a,(numzer) ;nullen schrijven inc a ld (numzer),a call wrtcrbyte ;schrijven aantal nullen byte pop bc djnz sngcrl7 jr sngcrla sngcrl8: ld a,(numzer) cp 242 ;nullen opgespaard? jr z,sngcrl9 inc de ;ja, dan hier al aantal nullen byte sngcrl9: ld a,(hl) ;schrijven niet-nulbyte call wrtcrbyte inc de ld a,242 ld (numzer),a pop bc djnz sngcrl7 sngcrla: ld a,(numzer) cp 242 jr z,sngcrlb inc de ld a,242 ld (numzer),a sngcrlb: pop bc djnz sngcrl6 ret ;--- copieer byte van ene bank naar andere --- copcrbyte: ld a,sngpag out (0feh),a ld a,(hl) ex af,af' ld a,em1pag out (0feh),a ex af,af' ld (de),a ret ;---- schrijf byte in lege pagina --- wrtcrbyte: ex af,af' ld a,em1pag out (0feh),a ex af,af' ld (de),a ld a,sngpag out (0feh),a inc hl ret numzer: db 0 lengte: dw 0 |