From 8e5298caee30769740557fc3785f6596341c0537 Mon Sep 17 00:00:00 2001 From: "Peter Helcmanovsky (Ped)" Date: Mon, 19 Sep 2022 01:09:21 +0200 Subject: [PATCH] z80_unpacker: optimisation: -1B in decode_number = 172B (but +4T per length) --- z80_unpacker/example/example.sna | Bin 49179 -> 49179 bytes z80_unpacker/unpack.asm | 9 ++++----- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/z80_unpacker/example/example.sna b/z80_unpacker/example/example.sna index f9d8ac6a21f3660ab798d06a222eb4ffeaf3405a..0bb80da49a0c00415f7f501071bc24f56ac9cb94 100644 GIT binary patch delta 222 zcmbQ;z&yKwd4u>u#&eS;7FzfhKC}?vIa~Pfw4lMy%9}#MHv=SIR4qiQ7qaeW1uE2J;j^VCy|J$rj<&zgI zH0I#|8z^;J8c0vRzfjI!<`KvenMY7dq+yoGJOWx0_XuK%&?BHFagU&ua2|ZS18Bz~ h6g#v*b|^iXyl|lr$P%D|U`u2+cQ1M=Gr4I0N&rZMXd3_k delta 224 zcmbQ;z&yKwd4u>u#`BXU7Fq-pJ+u(uIa~Dbw4lMy%9}#MHv=SIRPrMCIf5@i*~0L6)dIn!I445y%#xiC|mgHg_(1DKoib|8fAh4QNmR diff --git a/z80_unpacker/unpack.asm b/z80_unpacker/unpack.asm index cb458e4..e925d07 100644 --- a/z80_unpacker/unpack.asm +++ b/z80_unpacker/unpack.asm @@ -122,8 +122,7 @@ unpack: cp d ; CF = prev_was_match call nc,decode_bit ; if not prev_was_match, then upkr_decode_bit(256) jr nc,.keep_offset ; if neither, keep old offset - inc c ; context_index to first "number" set for offsets decoding (257) - call decode_number + call decode_number ; context_index is already 257-1 as needed by decode_number dec de ; offset = upkr_decode_length(257) - 1; ld a,d or e @@ -136,7 +135,7 @@ unpack: ; ++write_ptr; ; } ; prev_was_match = 1; - ld c,low(257 + NUMBER_BITS) ; context_index to second "number" set for lengths decoding + ld c,low(257 + NUMBER_BITS - 1) ; context_index to second "number" set for lengths decoding call decode_number ; length = upkr_decode_length(257 + 64); push de exx @@ -288,7 +287,7 @@ int upkr_decode_length(int context_index) { decode_number: ; HL = upkr_state ; IX = upkr_data_ptr - ; BC = probs+context_index + ; BC = probs+context_index-1 ; A' = upkr_current_byte (!!! init to 0x80 at start, not 0x00) ; return length in DE, CF=0 ld de,$7FFF ; length = 0 with positional-stop-bit @@ -298,8 +297,8 @@ decode_number: call decode_bit rr d rr e ; DE = length = (length >> 1) | (bit << 15); - inc c ; context_index += 2 .loop_entry: + inc c ; context_index += 2 call decode_bit jr c,.loop .fix_bit_pos: