Fix strings for right offsets

This commit is contained in:
boykovra 2024-06-15 14:04:59 +03:00
parent bc088bb793
commit 6dead9b2a0

170
unzip.asm
View File

@ -1,9 +1,14 @@
DEBUG EQU 1 ; ====================================================
; ==============================================
; PKUNZIP utility for Sprinter version 0.7 ; PKUNZIP utility for Sprinter version 0.7
; Created by Aleksey Gavrilenko 09.02.2002 ; Created by Aleksey Gavrilenko 09.02.2002
; Procedure deflate by Michail Kondratyev ; Procedure deflate by Michail Kondratyev
; ============================================== ; ====================================================
; Set to 1 to turn debug ON with DeZog VSCode plugin
; Set to 0 to compile .EXE
DEBUG EQU 0
SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION SLDOPT COMMENT WPMEM, LOGPOINT, ASSERTION
DEVICE NOSLOT64K DEVICE NOSLOT64K
@ -70,9 +75,9 @@ EXE_HEADER
ORG 0x8100 ORG 0x8100
STACK_TOP STACK_TOP
; ============================================== ; ====================================================
; MAIN Entry point ; MAIN Entry point
; ============================================== ; ====================================================
START START
IF DEBUG == 1 IF DEBUG == 1
LD IX,CMD_LINE2 LD IX,CMD_LINE2
@ -407,11 +412,11 @@ CRC_CHK_ERR
; FILENAME BYTE ; FILENAME BYTE
; ENDS ; ENDS
; -------------------------------------- ; ----------------------------------------------------
; Read local file header ; Read local file header
; ret A=0 - for LocalHileHeader ; ret A=0 - for LocalHileHeader
; A=ff - for CentralDirectory ; A=ff - for CentralDirectory
; --------------------------- ; ----------------------------------------------------
; ZIP Local File Header: ; ZIP Local File Header:
; +0 sw Signature 0x04034b50 ; +0 sw Signature 0x04034b50
; +2 w Version to extract ; +2 w Version to extract
@ -426,7 +431,7 @@ CRC_CHK_ERR
; +28 w Extra field Len (m) ; +28 w Extra field Len (m)
; +30 n FileName ; +30 n FileName
; +30+n m Extra Field ; +30+n m Extra Field
; ---------------------------- ; ----------------------------------------------------
READ_HEADERS READ_HEADERS
LD A,(FH_INP) LD A,(FH_INP)
LD HL,TEMP_BUFFR ; DST ADDR LD HL,TEMP_BUFFR ; DST ADDR
@ -517,11 +522,11 @@ NO_CENTRAL_DIR
AND A AND A
RET RET
; --------------------------------- ; ----------------------------------------------------
; Read next cmd line parameter ; Read next cmd line parameter
; Inp: HL - pointer to cmd line position ; Inp: HL - pointer to cmd line position
; DE - pointer to buffer to place parameter ; DE - pointer to buffer to place parameter
; --------------------------------- ; ----------------------------------------------------
READ_CMD_PAR READ_CMD_PAR
PUSH DE PUSH DE
@ -555,12 +560,12 @@ PARAM_EOL
SCF SCF
RET RET
; --------------------------------- ; ----------------------------------------------------
; File name from filepath ; File name from filepath
; HL - Buffer to seaarch ; HL - Buffer to seaarch
; ret: CF=1 - error ; ret: CF=1 - error
; else FILE_SPEC = file name ; else FILE_SPEC = file name
; --------------------------------- ; ----------------------------------------------------
FIND_FILE_NAME FIND_FILE_NAME
PUSH HL PUSH HL
LD BC,0x80 LD BC,0x80
@ -599,7 +604,7 @@ NOT_BKSL
AND A AND A
RET RET
; --------------------------------- ; ----------------------------------------------------
MAKE_FILE_PATH MAKE_FILE_PATH
PUSH DE PUSH DE
PUSH BC PUSH BC
@ -675,9 +680,9 @@ L_SPC_END
XOR A XOR A
RET RET
; --------------------------------------------------------- ; ----------------------------------------------------
; Main code Variables and Constants ; Main code Variables and Constants
; --------------------------------------------------------- ; ----------------------------------------------------
; Local header parameters from zip file storage ; Local header parameters from zip file storage
LH_PARAMS: LH_PARAMS:
@ -839,21 +844,19 @@ DW_COUNTER_H
DW 0 DW 0
; --------------------------------------------------------- ; ----------------------------------------------------
; End Main code Variables and Constants ; End Main code Variables and Constants
; --------------------------------------------------------- ; ----------------------------------------------------
; -------------------------------------- ; ----------------------------------------------------
; Load BC Bytes to (HL) from input file ; Load BC Bytes to (HL) from input file
; -------------------------------------- ; ----------------------------------------------------
LOAD_DATA_BLK LOAD_DATA_BLK
PUSH BC PUSH BC
POP DE POP DE
PUSH HL PUSH HL
FILEPOS_H EQU $+2 FILEPOS_H+* LD IX,0x0
LD IX,0x0 FILEPOS_L+* LD HL,0x0
FILEPOS_L EQU $+1
LD HL,0x0
LD A,IXH LD A,IXH
OR IXL OR IXL
JR NZ,L_IX_N0 JR NZ,L_IX_N0
@ -886,7 +889,7 @@ LD_NXT_BLK
OUT (PAGE0),A OUT (PAGE0),A
RET RET
; ---------------------------------------------------------- ; ----------------------------------------------------
FL_DECOMP FL_DECOMP
LD A,(LH_PARAMS) LD A,(LH_PARAMS)
AND A AND A
@ -913,11 +916,11 @@ DC_NEXT_BLK
JP C,ERR_FILE_OP JP C,ERR_FILE_OP
JR DC_NEXT_BLK JR DC_NEXT_BLK
; ---------------------------------------------------------- ; ----------------------------------------------------
; Read block of uncompressed data ; Read block of uncompressed data
; HL - buffer to out ; HL - buffer to out
; BC - count of bytes to read ; BC - count of bytes to read
; ---------------------------------------------------------- ; ----------------------------------------------------
UC_READ UC_READ
PUSH BC PUSH BC
POP DE POP DE
@ -951,9 +954,9 @@ RD_DE_BYTES
JP C,ERR_FILE_OP JP C,ERR_FILE_OP
RET RET
; ---------------------------------------------------------- ; ----------------------------------------------------
; Handle errors with file operations ; Handle errors with file operations
; ---------------------------------------------------------- ; ----------------------------------------------------
ERR_FILE_OP ERR_FILE_OP
SUB 0x2 SUB 0x2
LD HL,MSG_WRONG_DEV ; "Wrong device!\r\n" LD HL,MSG_WRONG_DEV ; "Wrong device!\r\n"
@ -1015,9 +1018,9 @@ OF_ALRDY_CL
; - Terminate program ; - Terminate program
; ------------------------------------------ ; ----------------------------------------------------
; Switch pages and do inflate ; Switch pages and do inflate
; ------------------------------------------ ; ----------------------------------------------------
DECOMPRESS DECOMPRESS
DI DI
LD (SAVE_SP),SP LD (SAVE_SP),SP
@ -1029,13 +1032,12 @@ DECOMPRESS
EI EI
RET RET
; ------------------------------------------ ; ----------------------------------------------------
; ZIP file has invalid data format ; ZIP file has invalid data format
; ------------------------------------------ ; ----------------------------------------------------
F_HAS_BAD_TAB F_HAS_BAD_TAB
SAVE_SP EQU $+1 SAVE_SP+* LD SP,0x0
LD SP,0x0 LD HL,(LD_NXT_WRD)
LD HL,(LD_NXT_WRD+1)
CALL WRITE_BUFF CALL WRITE_BUFF
LD A,(SAVE_P0) LD A,(SAVE_P0)
OUT (PAGE0),A OUT (PAGE0),A
@ -1045,20 +1047,20 @@ SAVE_SP EQU $+1
RST DSS RST DSS
RET RET
; ------------------------------------------------------ ; ----------------------------------------------------
SUB_UNCOMP_7 SUB_UNCOMP_7
LD A,C LD A,C
OR B OR B
RET Z RET Z
LD_NXT_WRD LD_NXT_WRD+* LD DE,0x0000
LD DE,0x0
HAZ_BYTEZ HAZ_BYTEZ
LD A,(HL) LD A,(HL)
LD (DE),A LD (DE),A
INC DE INC DE
PUSH DE PUSH DE
PUSH HL PUSH HL
LD (LD_NXT_WRD+1),DE LD (LD_NXT_WRD),DE
LD HL,0x8000 LD HL,0x8000
OR A OR A
SBC HL,DE SBC HL,DE
@ -1068,37 +1070,37 @@ HAZ_BYTEZ
CONT_BYTEZ CONT_BYTEZ
CPI CPI
JP PE,HAZ_BYTEZ JP PE,HAZ_BYTEZ
LD (LD_NXT_WRD+1),DE LD (LD_NXT_WRD),DE
RET RET
NO_BYTEZ NO_BYTEZ
CALL BUFF_IS_FULL CALL BUFF_IS_FULL
POP HL POP HL
POP DE POP DE
LD DE,(LD_NXT_WRD+1) LD DE,(LD_NXT_WRD)
JR CONT_BYTEZ JR CONT_BYTEZ
; ------------------------------------------------------ ; ----------------------------------------------------
PUT_A_TO_BUFF PUT_A_TO_BUFF
PUSH HL PUSH HL
LD HL,(LD_NXT_WRD+1) LD HL,(LD_NXT_WRD)
LD (HL),A LD (HL),A
INC HL INC HL
LD (LD_NXT_WRD+1),HL LD (LD_NXT_WRD),HL
LD A,H LD A,H
CP 80h ; < 0x8000 ? CP 80h ; < 0x8000 ?
POP HL POP HL
RET C RET C
; ------------------------------------------------------ ; ----------------------------------------------------
BUFF_IS_FULL BUFF_IS_FULL
PUSH HL PUSH HL
PUSH DE PUSH DE
PUSH BC PUSH BC
PUSH AF PUSH AF
LD HL,(LD_NXT_WRD+1) LD HL,(LD_NXT_WRD)
LD (SU_L4+1),HL LD (SU_L4+1),HL
CALL FLUSH_BUFF CALL FLUSH_BUFF
LD (LD_NXT_WRD+1),HL LD (LD_NXT_WRD),HL
POP AF POP AF
POP BC POP BC
POP DE POP DE
@ -1123,7 +1125,7 @@ SUNK_NO_WRAP
POP HL POP HL
RET RET
; ------------------------------------------------------ ; ----------------------------------------------------
LOAD_NXT_BLOCK LOAD_NXT_BLOCK
PUSH HL PUSH HL
PUSH DE PUSH DE
@ -1139,11 +1141,11 @@ LOAD_NXT_BLOCK
POP HL POP HL
RET RET
; ------------------------------------------------------ ; ----------------------------------------------------
; Update CRC32 ; Update CRC32
; HL - ptr to byte buffer ; HL - ptr to byte buffer
; BC - bytes in buffer ; BC - bytes in buffer
; ------------------------------------------------------ ; ----------------------------------------------------
UPD_CRC UPD_CRC
LD A,B LD A,B
OR C OR C
@ -1180,7 +1182,7 @@ CRC_NXT_BYTE
POP HL POP HL
RET RET
; ------------------------------------------------------ ; ----------------------------------------------------
WRITE_BUFF WRITE_BUFF
LD A,H LD A,H
OR L OR L
@ -1342,13 +1344,13 @@ NO_WRAP
POP DE POP DE
JR DO_NEXT_BLOCK JR DO_NEXT_BLOCK
; ---------------------------------------------------------- ; ----------------------------------------------------
INFLATE INFLATE
XOR A XOR A
LD (LAST_BLK+1),A LD (LAST_BLK+1),A
CALL LOAD_NXT_BLOCK CALL LOAD_NXT_BLOCK
LD HL,0x0 LD HL,0x0
LD (LD_NXT_WRD+1),HL LD (LD_NXT_WRD),HL
DO_NEXT_BLOCK DO_NEXT_BLOCK
LD HL,(TMP_BUFFER_ADDR+1) LD HL,(TMP_BUFFER_ADDR+1)
@ -1388,7 +1390,7 @@ SU_L3
PUSH AF PUSH AF
POP BC POP BC
EX DE,HL EX DE,HL
LD HL,(LD_NXT_WRD+1) LD HL,(LD_NXT_WRD)
OR A OR A
SBC HL,DE SBC HL,DE
JR NC,SU_L6 JR NC,SU_L6
@ -1421,22 +1423,23 @@ SU_L4
POP BC POP BC
SU_L6 SU_L6
CALL SUB_UNCOMP_7 CALL SUB_UNCOMP_7
LD A,(LD_NXT_WRD+2) LD A,(LD_NXT_WRD+1) ;+1!
CP 0x80 CP 0x80
CALL NC,BUFF_IS_FULL CALL NC,BUFF_IS_FULL
POP DE POP DE
POP BC POP BC
JR SU_L2 JR SU_L2
SU_L7 SU_L7
LD HL,(LD_NXT_WRD+1) LD HL,(LD_NXT_WRD)
; --------------------------------------
; ----------------------------------------------------
FLUSH_BUFF FLUSH_BUFF
LD DE,0x0000 LD DE,0x0000
JP WRITE_BUFF JP WRITE_BUFF
; ---------------------------- ; ----------------------------------------------------
; Data definitions block for LZ77 ; Data definitions block for LZ77
; ---------------------------- ; ----------------------------------------------------
FILL_1 FILL_1
DS 33, 0 DS 33, 0
@ -1453,9 +1456,9 @@ EXTRA_BITS
LZ77_BUFF LZ77_BUFF
DS 70,0 DS 70,0
; ----------------------------------------- ; ----------------------------------------------------
; Return A number of bits in HL from block ; Return A number of bits in HL from block
; ----------------------------------------- ; ----------------------------------------------------
HL_GET_A_BITS HL_GET_A_BITS
CP 0x9 CP 0x9
JR C,HL_LESS_8B JR C,HL_LESS_8B
@ -1474,9 +1477,9 @@ HL_LESS_8B
LD L,A LD L,A
RET RET
; ----------------------------------------- ; ----------------------------------------------------
; Return A number of bits ; Return A number of bits
; ----------------------------------------- ; ----------------------------------------------------
GET_A_BITS GET_A_BITS
LD (XTRA_BITS_OFFS+1),A LD (XTRA_BITS_OFFS+1),A
EX AF,AF' EX AF,AF'
@ -1489,19 +1492,19 @@ XTRA_BITS_OFFS
POP AF POP AF
RET RET
; ----------------------------------------- ; ----------------------------------------------------
; DE/2, B-- ; DE/2, B--
; ----------------------------------------- ; ----------------------------------------------------
DE_DIV_2_Bm1 DE_DIV_2_Bm1
SRL D SRL D
RR E RR E
DEC B DEC B
RET NZ RET NZ
; ----------------------------------------- ; ----------------------------------------------------
; D - next 8 bit from block ; D - next 8 bit from block
; B = 8 ; B = 8
; ----------------------------------------- ; ----------------------------------------------------
D_NEXT_8BIT_B8 D_NEXT_8BIT_B8
PUSH AF PUSH AF
PUSH HL PUSH HL
@ -1520,10 +1523,10 @@ D_NEXT_8BIT_B8
POP AF POP AF
RET RET
; ----------------------------------------- ; ----------------------------------------------------
; Get A number of bits (rigth shift) ; Get A number of bits (rigth shift)
; return DE ; return DE
; ----------------------------------------- ; ----------------------------------------------------
GET_RIGHT_A_BITS GET_RIGHT_A_BITS
CP B CP B
JR C,SHF_RT_DE2 JR C,SHF_RT_DE2
@ -1699,15 +1702,14 @@ SU4_L9
; Init other LZ77 tables ; Init other LZ77 tables
UN_LZ77 UN_LZ77
HLIT EQU $+1 HLIT+* LD BC,0x100 ; Count of literals and lengths
LD BC,0x100 ; Count of literals and lengths
LD DE,CHAR_LENS LD DE,CHAR_LENS
LD HL,HL_VAL_001 LD HL,HL_VAL_001
LD IX,IX_VAL_001 LD IX,IX_VAL_001
CALL UN_LZ77_1 CALL UN_LZ77_1
HDIST EQU $+1
SU4_L11 SU4_L11
LD BC,0x0 HDIST+* LD BC,0x0
LD DE,DISTANCES LD DE,DISTANCES
LD HL,HL_VAL_002 LD HL,HL_VAL_002
LD IX,IX_ARR_000 LD IX,IX_ARR_000
@ -1716,7 +1718,6 @@ SU4_L11
POP BC POP BC
RET RET
UN_LZ77_1 UN_LZ77_1
LD A,B LD A,B
OR C OR C
@ -1808,8 +1809,7 @@ INIT_BUFF5
CHAR_L_NE0 CHAR_L_NE0
POP DE POP DE
PUSH DE PUSH DE
LIT_CNT_LEN EQU $+1 LIT_CNT_LEN+* LD BC,0x0
LD BC,0x0
LD HL,HL_ARR_000 LD HL,HL_ARR_000
INIT_BUFF6 INIT_BUFF6
LD A,(DE) ; Char lengths? LD A,(DE) ; Char lengths?
@ -1892,8 +1892,7 @@ INIT_BUFF11
OR B OR B
JR NZ,INIT_BUFF7 JR NZ,INIT_BUFF7
HL_VAL_000 EQU $+1 HL_VAL_000+* LD HL,0x0
LD HL,0x0
LD E,L LD E,L
LD D,H LD D,H
INC DE INC DE
@ -1905,7 +1904,7 @@ HL_VAL_000 EQU $+1
DEC BC DEC BC
ADD HL,BC ADD HL,BC
EX DE,HL EX DE,HL
LD (IB18_L1+1),IX LD (IB18_L1),IX
LD HL,HL_ARR_000+1 LD HL,HL_ARR_000+1
ADD HL,BC ADD HL,BC
ADD HL,BC ADD HL,BC
@ -1984,8 +1983,7 @@ INIT_BUFF18
LD A,D LD A,D
OR E OR E
JR NZ,INIT_BUFF19 ; (word)(HL) != 0? JR NZ,INIT_BUFF19 ; (word)(HL) != 0?
IB18_L1 IB18_L1+* LD DE,0x0
LD DE,0x0
LD (HL),E LD (HL),E
INC HL INC HL
LD (HL),D LD (HL),D
@ -1999,7 +1997,7 @@ IB18_L1
INC HL INC HL
LD (HL),A LD (HL),A
INC HL INC HL
LD (IB18_L1+1),HL LD (IB18_L1),HL
INIT_BUFF19 INIT_BUFF19
EX DE,HL EX DE,HL
EX AF,AF' EX AF,AF'
@ -2020,7 +2018,7 @@ INIT_BUFF20
JR INIT_BUFF15 JR INIT_BUFF15
; --- Unparsed ------------- ; --- Unparsed -------------
; ----------------------------------- ; ----------------------------------------------------
SUB_UNCOMP_5 SUB_UNCOMP_5
PUSH DE PUSH DE
XOR A XOR A
@ -2077,7 +2075,7 @@ LAB_ram_d58c
CALL SUB_ram_d5cb CALL SUB_ram_d5cb
JR LAB_ram_d560 JR LAB_ram_d560
; ----------------------------------- ; ----------------------------------------------------
SUB_UNCOMP_6 SUB_UNCOMP_6
PUSH DE PUSH DE
XOR A XOR A
@ -2124,7 +2122,7 @@ LAB_ram_d5c5
CALL SUB_ram_d5cb CALL SUB_ram_d5cb
JR LAB_ram_d5a9 JR LAB_ram_d5a9
; ----------------------------------- ; ----------------------------------------------------
SUB_ram_d5cb SUB_ram_d5cb
LD A,0x8 LD A,0x8
CALL GET_RIGHT_A_BITS CALL GET_RIGHT_A_BITS
@ -2144,6 +2142,8 @@ LD_NXT_W
JR NZ,HI_W_BIT1 JR NZ,HI_W_BIT1
RET RET
; ----------------------------------------------------
FILL_2 FILL_2
DS 53, 0 DS 53, 0