halt
jr 1$
- ;; Special RLE decoder used for initing global data
-__initrleblock::
- ;; Pop the return address
- pop hl
- ;; Save registers
- push bc
- push de
-
- ;; Pull the destination address out
- ld c,(hl)
- inc hl
- ld b,(hl)
- inc hl
-1$:
- ;; Fetch the run
- ld e,(hl)
- inc hl
- ;; Negative means a run
- bit 7,e
- jp z,2$
- ;; Code for expanding a run
- ld a,(hl)
- inc hl
-3$:
- ld (bc),a
- inc bc
- inc e
- jp nz,3$
- jp 1$
-2$:
- ;; Zero means end of a block
- xor a
- or e
- jp z,4$
- ;; Code for expanding a block
-5$:
- ld a,(hl)
- inc hl
- ld (bc),a
- inc bc
- dec e
- jp nz,5$
- jp 1$
-4$:
- pop de
- pop bc
-
- ;; Push the return address back onto the stack
- push hl
- ret
-
.area _GSINIT
gsinit::