diff --git a/z80_unpacker/unpack.asm b/z80_unpacker/unpack.asm index 324f032..a2d1fc9 100644 --- a/z80_unpacker/unpack.asm +++ b/z80_unpacker/unpack.asm @@ -15,7 +15,7 @@ ;; modifies: all registers except IY, requires 10 bytes of stack space ;; -; DEFINE BACKWARDS_UNPACK ; uncomment to build backwards depacker +; DEFINE BACKWARDS_UNPACK ; uncomment to build backwards depacker (write_ptr--, upkr_data_ptr--) ; initial IX points at last byte of compressed data ; initial DE' points at last byte of unpacked data @@ -140,6 +140,7 @@ unpack: push de exx IFNDEF BACKWARDS_UNPACK + ; forward unpack (write_ptr++, upkr_data_ptr++) ld h,d ; DE = write_ptr ld l,e .offset+*: ld bc,0 @@ -147,6 +148,7 @@ unpack: pop bc ; BC = length ldir ELSE + ; backward unpack (write_ptr--, upkr_data_ptr--) .offset+*: ld hl,0 add hl,de ; HL = write_ptr + offset pop bc ; BC = length @@ -311,6 +313,37 @@ decode_number: jr c,.fix_bit_pos ; until stop bit is reached (all bits did land to correct position) ret ; return with CF=0 (important for unpack routine) +/* + archived: negligibly faster but +6B longer decode_number variant using HL' and BC' to + do `number|=(1<