DecompressZX2
lda #$80
sta ZPZX2.BitByte
asl @
tay
tax
CopyFromLiteral
jsr GetElias
CopyFromLiteralLoop
jsr GetByte
jsr StoreByte
dex
bne CopyFromLiteralLoop
jsr GetBit
bcs CopyFromNewOffset
CopyFromLastOffset
jsr GetElias
CopyFromLastOffset_a
lda ZPZX2.BufferTo
sbc ZPZX2.Offset
sta ZPZX2.Pointer
lda ZPZX2.BufferTo+1
sbc #0
sta ZPZX2.Pointer+1
CopyFromLastOffsetLoop
lda (ZPZX2.Pointer),y
inc ZPZX2.Pointer
bne CopyFromLastOffsetLoop_a
inc ZPZX2.Pointer+1
CopyFromLastOffsetLoop_a
jsr StoreByte
dex
bne CopyFromLastOffsetLoop
jsr GetBit
bcc CopyFromLiteral
CopyFromNewOffset
jsr GetByte
adc #0
bne CopyFromNewOffset_a
rts
CopyFromNewOffset_a
sta ZPZX2.Offset
jsr GetElias
inx
bcc CopyFromLastOffset_a
//-------------------------------------------//
GetByte
lda (ZPZX2.BufferFrom),y
inc ZPZX2.BufferFrom
bne GetByteDone
inc ZPZX2.BufferFrom+1
GetByteDone
rts
//-------------------------------------------//
GetBit
asl ZPZX2.BitByte
bne GetBitDone
jsr GetByte
rol @
sta ZPZX2.BitByte
GetBitDone
rts
//-------------------------------------------//
GetElias
ldx #1
GetEliasLoop
jsr GetBit
bcc GetEliasDone
asl ZPZX2.BitByte
txa
rol @
tax
bcc GetEliasLoop
GetEliasDone
rts
//-------------------------------------------//
StoreByte
sta (ZPZX2.BufferTo),y
inc ZPZX2.BufferTo
bne StoreByteDone
inc ZPZX2.BufferTo+1
StoreByteDone
rts
//-------------------------------------------//