
|
MoonBlaster song decruncher Onbekend, 00-00-00
;--- MoonBlaster song decruncher ---
;
; Opslag songdata: Alleen nullen gecrunched.
; Alle waarden boven 242 = 1 of meer nullen, dus max. 13
sngdecrc: ld a,sngpag ; SNGPAG = mapperbank met ONGECRUNCHTE
out (0feh),a ; songdata
ld hl,08000h ; verplaatsen van de instellingen
ld de,08000h+200
ld bc,376 ; aantal bytes v. div. settings
sngdecrl1: call copybyte
inc hl
inc de
dec bc
ld a,b
or c
jr nz,sngdecrl1
ld a,em1pag ; EM1PAG = mapperbank met GECRUNCHTE
out (0feh),a ; songdata
ld a,(08000h) ; last position
inc a
ld b,a
push bc ; verplaats pat/pos data
ld de,08000h
sngdecrl2: call copybyte
inc hl
inc de
djnz sngdecrl2
pop bc
push hl
ld e,1
ld hl,08000h
sngdecrl3: ld a,(hl)
cp e
jr c,sngdecrl4
ld e,a
sngdecrl4: inc hl
djnz sngdecrl3
ld d,0
pop hl
add hl,de
add hl,de ; sla pattern adressen over
ld a,em1pag
out (0feh),a
ld de,08240h ; echte decrunchen van songdata
ld bc,03dc0h ; !maximale! aantal bytes
sngdecrl6: ld a,(hl)
or a
jr z,sngdecrend ; eindmarker gevonden? eerder weg!
cp 243
jr nc,sngdecrl7 ; gecrunchte data? dan decrunchen!
call wrtbyte
sngdecrl9: inc hl
dec bc
ld a,b
or c
jr nz,sngdecrl6
sngdecrend: ld a,sngpag ; einde decrunchen
out (0feh),a
ret
sngdecrl7: push bc ; decrunchen serie nullen
sub 242
ld b,a
sngdecrl8: xor a
call wrtbyte
djnz sngdecrl8
pop bc
jr sngdecrl9
;--- copieer databyte vanuit ene mapperbank naar andere ---
copybyte: ld a,em1pag
out (0feh),a
ld a,(hl)
ex af,af'
ld a,sngpag
out (0feh),a
ex af,af'
ld (de),a
ret
;--- schrijf gedecrunchte databyte ---
wrtbyte: ex af,af'
ld a,sngpag
out (0feh),a
ex af,af'
ld (de),a
ld a,em1pag
out (0feh),a
inc de
ret
|