;============================================================ ;tilemap data decompression routine from Sylvan Tale ; ; DATA is stored into RAM, not VRAM. can be modified to do so but have to read from vram. ; ; Hl = address of compressed data ; DE = RAM address to load data into SylvanTaleTilemapDecompression: --: ld c,(hl) ; load control byte inc hl ; ld b,$08 ; repeat 8 times -: rr c ; evaluate a bit from control byte jr nc,TD_decomp ; if bit 0 load new pointer ldi ; (de) = (hl) inc bc ; restore bc from the ldi jr + ; TD_decomp: ; loads new source pointer + count byte push bc ; ld c,(hl) ; inc hl ; ld b,(hl) ; inc hl ; bc = (hl) ld a,c ; or b ; jr z,TD_exit ; finish if bc = 0; push hl ; ld a,b ; or $f0 ; ld h,a ; ld l,c ; add hl,de ; hl = de + (bc OR $f000) = new pointer ld a,b ; and $f0 ; rrca ; rrca ; rrca ; rrca ; a = high nibble of b add a,$03 ; ld c,a ; ld b,$00 ; counter = high nibble of b + 3 ldir ; load out previous data pop hl ; restore pointer pop bc ; + djnz - ; jr -- ; TD_exit: pop bc ; ret ;