From 1fb29f3a1b4e55f440446860a81e12a3cbbfad85 Mon Sep 17 00:00:00 2001 From: "Peter Helcmanovsky (Ped)" Date: Sun, 18 Sep 2022 23:41:51 +0200 Subject: [PATCH] z80_unpacker: optimisation: -1B and -1T in decode_bit = 173B --- z80_unpacker/example/example.sna | Bin 49179 -> 49179 bytes z80_unpacker/unpack.asm | 6 +++--- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/z80_unpacker/example/example.sna b/z80_unpacker/example/example.sna index 515f5d68690562b02a92e501cbcea636569d53df..f9d8ac6a21f3660ab798d06a222eb4ffeaf3405a 100644 GIT binary patch delta 149 zcmbQ;z&yKwd4u>u#`BXU7KZU{c_>}A`NZ4c^oM*3XSYnQS?J6o|Ll*vy!^Qj@dvpk zPd>BINJs9Gg#gc4xksl34SrVM6q3FfAn~$-W!DwCM+Q7RXA>SlOb~elG$CQK)*>Y) ol}D2oE|gP1Hi)U|;z_~(^%9(5gQQMN1L@7Zi=N9&F515m0NL(DH~;_u delta 151 zcmbQ;z&yKwd4u>u#tV}r7KZU{eJEYE`NZ4c^oM*3XSYtSS?J6gFaPY1yuAFm50l@z z9GrZ5p^=XKBMSkZv+|El3mW{ayeTAoGeF{H1 250 and thus edge case `ADD hl=(7*128+0),de=(-250)` => CF=1 .bit_is_0_2: ; *** adjust probs[context_index] - ld e,a ; preserve prob rra ; + (bit<<4) ; part of -prob_offset, needs another -16 and $FC ; clear/keep correct bits to get desired (prob>>4) + extras, CF=0 rra rra rra ; A = (bit<<4) + (prob>>4), CF=(prob & 8) adc a,-16 ; A = (bit<<4) - 16 + ((prob + 8)>>4) ; -prob_offset = (bit<<4) - 16 - sub e ; A = (bit<<4) - 16 + ((prob + 8)>>4) - prob ; = ((prob + 8)>>4) - prob_offset - prob - neg ; A = prob_offset + prob - ((prob + 8)>>4) + ld e,a pop bc + ld a,(bc) ; A = prob (cheaper + shorter to re-read again from memory) + sub e ; A = 16 - (bit<<4) + prob - ((prob + 8)>>4) ; = prob_offset + prob - ((prob + 8)>>4) ld (bc),a ; probs[context_index] = prob_offset + prob - ((prob + 8) >> 4); add a,d ; restore CF = bit (D = bit ? $FF : $00 && A > 0) pop de