141 lines
1.4 KiB
NASM
141 lines
1.4 KiB
NASM
; pletter v0.5c msx unpacker
|
|
|
|
; call unpack with hl pointing to some pletter5 data, and de pointing to the destination.
|
|
; changes all registers
|
|
|
|
; define lengthindata when the original size is written in the pletter data
|
|
|
|
; define LENGTHINDATA
|
|
|
|
module pletter
|
|
|
|
macro GETBIT
|
|
add a,a
|
|
call z,getbit
|
|
endmacro
|
|
|
|
macro GETBITEXX
|
|
add a,a
|
|
call z,getbitexx
|
|
endmacro
|
|
|
|
@unpack
|
|
|
|
ifdef LENGTHINDATA
|
|
inc hl
|
|
inc hl
|
|
endif
|
|
|
|
ld a,(hl)
|
|
inc hl
|
|
exx
|
|
ld de,0
|
|
add a,a
|
|
inc a
|
|
rl e
|
|
add a,a
|
|
rl e
|
|
add a,a
|
|
rl e
|
|
rl e
|
|
ld hl,modes
|
|
add hl,de
|
|
ld e,(hl)
|
|
ld ixl,e
|
|
inc hl
|
|
ld e,(hl)
|
|
ld ixh,e
|
|
ld e,1
|
|
exx
|
|
ld iy,loop
|
|
literal
|
|
ldi
|
|
loop
|
|
GETBIT
|
|
jr nc,literal
|
|
exx
|
|
ld h,d
|
|
ld l,e
|
|
getlen
|
|
GETBITEXX
|
|
jr nc,.lenok
|
|
.lus
|
|
GETBITEXX
|
|
adc hl,hl
|
|
ret c
|
|
GETBITEXX
|
|
jr nc,.lenok
|
|
GETBITEXX
|
|
adc hl,hl
|
|
ret c
|
|
GETBITEXX
|
|
jp c,.lus
|
|
.lenok
|
|
inc hl
|
|
exx
|
|
ld c,(hl)
|
|
inc hl
|
|
ld b,0
|
|
bit 7,c
|
|
jp z,offsok
|
|
jp ix
|
|
|
|
mode6
|
|
GETBIT
|
|
rl b
|
|
mode5
|
|
GETBIT
|
|
rl b
|
|
mode4
|
|
GETBIT
|
|
rl b
|
|
mode3
|
|
GETBIT
|
|
rl b
|
|
mode2
|
|
GETBIT
|
|
rl b
|
|
GETBIT
|
|
jr nc,offsok
|
|
or a
|
|
inc b
|
|
res 7,c
|
|
offsok
|
|
inc bc
|
|
push hl
|
|
exx
|
|
push hl
|
|
exx
|
|
ld l,e
|
|
ld h,d
|
|
sbc hl,bc
|
|
pop bc
|
|
ldir
|
|
pop hl
|
|
jp iy
|
|
|
|
getbit
|
|
ld a,(hl)
|
|
inc hl
|
|
rla
|
|
ret
|
|
|
|
getbitexx
|
|
exx
|
|
ld a,(hl)
|
|
inc hl
|
|
exx
|
|
rla
|
|
ret
|
|
|
|
modes
|
|
word offsok
|
|
word mode2
|
|
word mode3
|
|
word mode4
|
|
word mode5
|
|
word mode6
|
|
|
|
endmodule
|
|
|
|
;eof |