From: Piotr Fusik Date: Tue, 7 Nov 2017 19:10:19 +0000 (+0100) Subject: Fix more than 256 codes of same length. X-Git-Tag: V2.17~77^2 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=refs%2Fpull%2F514%2Fhead;p=cc65 Fix more than 256 codes of same length. Fix all 256 literal codes of same length. --- 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