Changes

TRACKERS MB SRC EN SNGDECR

2,008 bytes added, 06:11, 17 July 2019
Created page with ";--- 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 = ma..."
;--- 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

������������������������������������������������������������������������������������������������������������������