TRACKERS MB SRC EN SNGDECR
- --- MoonBlaster song decruncher ---
- Storage of song data
- Only zeros crunched.
- All values above 242 = 1 or more zeros, so max. 13
sngdecrc: ld a,sngpag ; SNGPAG = mapperbank with ONGECRUNCHTE
out (0feh),a ; songdata
ld hl,08000h ; move the settings ld de,08000h+200 ld bc,376 ; number of 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 with GECRUNCHTE out (0feh),a ; songdata ld a,(08000h) ; last position inc a ld b,a push bc ; move 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 ; skip pattern adress
ld a,em1pag out (0feh),a
ld de,08240h ; real decreases of song data ld bc,03dc0h ; !maximale! number of bytes sngdecrl6: ld a,(hl) or a jr z,sngdecrend ; found an end marker? gone earlier! cp 243 jr nc,sngdecrl7 ; crunched data? then decrease! call wrtbyte sngdecrl9: inc hl dec bc ld a,b or c jr nz,sngdecrl6 sngdecrend: ld a,sngpag ; end of decrunch out (0feh),a ret
sngdecrl7: push bc ; decreasing series zeros sub 242 ld b,a sngdecrl8: xor a call wrtbyte djnz sngdecrl8 pop bc jr sngdecrl9
- --- copy data byte from one mapper bank to another ---
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
- --- write decrunched 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
������������������������������������������������������������������������������������������������������������������