From 84edf4cbfd22e5e20670769ea00adaeb27d12a6f Mon Sep 17 00:00:00 2001 From: Piotr Fusik Date: Tue, 7 Nov 2017 20:10:19 +0100 Subject: [PATCH] Fix more than 256 codes of same length. Fix all 256 literal codes of same length. --- libsrc/zlib/inflatemem.s | 37 ++++++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/libsrc/zlib/inflatemem.s b/libsrc/zlib/inflatemem.s index f49c5fc79..bc89f2016 100644 --- a/libsrc/zlib/inflatemem.s +++ b/libsrc/zlib/inflatemem.s @@ -1,5 +1,5 @@ ; -; 2017-11-06, Piotr Fusik +; 2017-11-07, Piotr Fusik ; ; unsigned __fastcall__ inflatemem (char* dest, const char* source); ; @@ -344,6 +344,9 @@ buildHuffmanTree_clear: buildHuffmanTree_countCodeLengths: ldx literalSymbolCodeLength,y inc nBitCode_literalCount,x + bne buildHuffmanTree_notAllLiterals + stx allLiteralsCodeLength +buildHuffmanTree_notAllLiterals: cpy #CONTROL_SYMBOLS bcs buildHuffmanTree_noControlSymbol ldx controlSymbolCodeLength,y @@ -394,12 +397,33 @@ fetchCode_nextBit: jsr getBit rol a inx + bcs fetchCode_ge256 +; are all 256 literal codes of this length? + cpx allLiteralsCodeLength + beq fetchCode_allLiterals +; is it literal code of length X? sec sbc nBitCode_literalCount,x - bcc fetchCode_literal + bcs fetchCode_notLiteral +; literal code +; clc + adc nBitCode_literalOffset,x + tax + lda codeToLiteralSymbol,x +fetchCode_allLiterals: + clc + rts +; code >= 256, must be control +fetchCode_ge256: +; sec + sbc nBitCode_literalCount,x + sec +; is it control code of length X? +fetchCode_notLiteral: ; sec sbc nBitCode_controlCount,x bcs fetchCode_nextBit +; control code ; clc adc nBitCode_controlOffset,x tax @@ -408,13 +432,6 @@ fetchCode_nextBit: tax ; sec rts -fetchCode_literal: -; clc - adc nBitCode_literalOffset,x - tax - lda codeToLiteralSymbol,x - clc - rts ; Read A minus 1 bits, but no more than 8 getAMinus1BitsMax8: @@ -523,6 +540,8 @@ nBitCode_literalOffset: .res 2*TREE_SIZE nBitCode_controlOffset: .res 2*TREE_SIZE +allLiteralsCodeLength: + .res 1 codeToLiteralSymbol: .res 256 -- 2.39.5