depack
; JR NOSTART_
;START_
;YESAUTOEX=$+1
; LD A,0
; CP "U
; JP Z,QUIT_
;NOSTART_
LD (exit_sp),SP
START_1
;LD SP,#5FE6
if 1==0
LD HL,ANYKEY_P
LD (MOD1+1),HL
LD A,#C3
LD HL,START_
LD (MOD2),A
LD (MOD2+1),HL
LD HL,SPISOK+1
LD (UKAZ1),HL
;XOR A
;LD (NO_HOB),A
;LD (HOB),A
LD HL,T_KEY
LD (MODECAT+1),HL
CALL PRCAT
LD A,#4F
LD (TEKATR+1),A
LD HL,0
LD DE,#440
CALL RAMKA
LD HL,T6935
CALL PRINTS_
LD HL,T6935_
CALL PRINTS_
endif
;MANYF LD HL,0
; LD (ML_FLEN),HL
; LD (ML_FLEN+1),HL
;CALL CLS_LINE
CALL PROWERKA ;ш∙хь central directory, фюёЄр╕ь ЄрсышЎє Їрщыют т CAT, чряюыэ хь яхЁхьхээ√х яЁю Їрщы
if 1==0
LD A,(SKIPING)
OR A
JR Z,NOSKIP1
LD HL,T_KEY1
LD (MODECAT+1),HL
CALL VIEWCAT
LD A,#4F
LD (TEKATR+1),A
LD HL,0
LD DE,#440
CALL RAMKA
LD HL,T6935
CALL PRINTS_
LD HL,T6935_
CALL PRINTS_
LD HL,#400
LD DE,#C40
CALL RAMKA
NOSKIP1
endif
;LD A,1
;LD (D_INST),A ;¤Єю с√ыю фы шэшЎшрышчрЎшш TR-DOS яюёых ёьхэ√ фшёър
LD DE,0
LEN_KOM=$-2
LD A,D
OR E
JR Z,PR700
LD HL,#4000
OR A
SBC HL,DE
JR C,PR700 ;ъюььхэЄрЁшщ > 0x4000?
EX DE,HL
LD DE,0 ;size of central directory
SM1=$-2
LD C,0
SM2=$-1
LD HL,(SME_ML) ;start of central directory
LD A,(SME_ST)
ADD HL,DE
ADC A,C
LD DE,#16
LD C,0
ADD HL,DE
ADC A,C
LD IX,BUFER
LD DE,(LEN_KOM) ;ъюььхэЄрЁшщ ьюцхЄ с√Є№ фю 0x4000 (Ёхры№эю ЇюЁьрЄ яючтюы хЄ сюы№°х)
CALL READ
;LD HL,TEXT20
;CALL PRINTS_
if 1==0
LD A,0
MEN=$-1
OR A
JR Z,NM1
CALL INS_DEST
NM1 LD A,(DESTIN)
CP "*"
JR NZ,$+5
LD A,(SOURCE)
SUB #41
LD C,1
CALL TRDOS
LD C,#18
CALL TRDOS
LD HL,FNAME1
LD DE,23773
LD BC,9
LDIR
LD HL,BUFER
LD DE,(LEN_KOM)
LD C,#B
CALL TRDOS
LD A,(MEN)
OR A
JR Z,PR700
CALL INS_SOURC
endif
PR700
;LD HL,TEXT21
;CALL PRINTS_
LD HL,0
KOL_F=$-2
;XOR A
;LD IX,T_BUF
;CALL DS100
;LD HL,T_KOL_F
;CALL PRINTS_
nextfile
;LD A,5
;call ON_BANK
LD HL,0 ;start of central directory (ёфхыры, ўЄюс√ юэ юсэюты ыё ё ърцф√ь эют√ь Їрщыюь)
SME_ML=$-2
LD A,0
SME_ST=$-1
;EXA
if 1==0
LD BC,(KOL_F)
LD A,C
LD (F_KOL),A
Z6013 PUSH BC
LD A,0
F_KOL=$-1
SUB C
INC A
LD (NUM_F),A ;эюьхЁ Їрщыр
endif
if 1==0
PUSH HL
LD HL,#71A ;ъююЁфшэрЄ√
LD (COR),HL
LD B,13
CLS1 PUSH BC
LD A,#20
CALL PR
POP BC
DJNZ CLS1
POP HL
endif
;EXA
LD B,A ;SME_ST
LD IX,BUFER
LD DE,#2E
LD C,41
CALL READ ;ўшЄрхь юяшёрЄхы№ юфэюую Їрщыр
if 1==0
EXX
LD A,(BUFER+#24)
LD HL,CODE
BIT 0,A
JR Z,LL20
LD HL,TEXT
LL20 LD DE,T_TYPE
LD BC,4
LDIR
EXX
endif
LD A,B ;SME_ST
ADD HL,DE
ADC A,D ;яхЁхьх∙рхь єърчрЄхы№ эр шь
LD DE,(Z6638) ;file name length
LD B,A
LD IX,Z664A
CALL READ ;ўшЄрхь шь Їрщыр
;Z664A=╚M▀ TEK╙┘E├O ╘A╔╦└ B APX╚BE
ADD IX,DE
LD (IX),0 ;ъырф╕ь 0 т ъюэхЎ шьхэш (яюыєўшЄё ASCIIZ)
LD A,B
ADD HL,DE
ADC A,0 ;яхЁхьх∙рхь єърчрЄхы№ яюёых шьхэш
LD B,E
DEC D
INC D
JR Z,Z604D ;фышэр шьхэш <256
LD B,0 ;фышэр шьхэш >=256, ёўшЄрхь, ўЄю 256
Z604D LD DE,(Z663A) ;extra field length
ADD HL,DE
ADC A,0 ;яЁюяєёърхь extra field
LD DE,(Z663C) ;file comment length
ADD HL,DE
ADC A,0 ;яЁюяєёърхь file comment length
ld (SME_ML),hl
ld (SME_ST),a
;ёЇюЁьшЁютрЄ№ filename 8.3 (тю тёхї ¤ыхьхэЄрї):
ld hl,Z664A
ld de,filename
;call strcopy
call copyname83
; хёыш ¤Єю фшЁхъЄюЁш , Єю create directory (эряЁшьхЁ, "md scr/1" схч ёых°р т ъюэЎх):
;LD A,(T6624) ;flags
;and 8 ;TODO уфх ¤ЄюЄ Їыру?
;jr nz,readzip_nodir
;єсшЁрхь ёых° т ъюэЎх
ld hl,filename
push hl
pop de ;ld de,filename
xor a
ld b,-1
cpir
ld a,'/'
dec hl ;эр ЄхЁьшэрЄюЁх
dec hl ;яхЁхф ЄхЁьшэрЄюЁюь
sub (hl)
jr nz,readzip_nodir;$+3
ld (hl),a ;0
OS_MKDIR
jp SKIP_noclose
readzip_nodir
ld hl,Z664A;filename
call prtext
call prcrlf
if 1==0
LD HL,#5CE5
LD DE,T_PKT
LD B,3
CALL PROVERK
JR C,NX600
LD A,"C"
LD (#5CE5),A
LD A,(#5CDD)
CP "0"
JR C,$+6
CP ":"
JR NC,NX600
AND 7
OR #30
LD (#5CDD),A
NX600
endif
if 1==0
LD A,(SKIPING)
OR A
JR Z,NOSKIP
LD A,(NUM_F)
LD L,A
LD H,'MARKBUF
LD A,(HL)
AND A
JP Z,SKIP_noclose
NOSKIP
endif
if 1==0
LD IX,T_TEK
LD HL,0
NUM_F=$-2
CALL DS100
LD HL,T_FILE
CALL PRINTS_
endif
;LD HL,#71A ;ъююЁфшэрЄ√
;LD (COR),HL
;LD HL,T61F7
;CALL PRINTS
;LD A,#4F
;LD (TEKATR+1),A
;XOR A
LD HL,-1
LD (ML_CRC32),HL
LD (ST_CRC32),HL
LD HL,(Z6634)
;OR H
;OR L
LD (ML_LEN_ISH),HL
;HL= ╠╦└─╪╚E ┴A╔T█ ─╦╚H█ ╚CXO─HO├O ╘A╔╦A
LD HL,(Z6636)
;OR H
;OR L
LD (ST_LEN_ISH),HL
;HL= CTAP╪╚E ┴A╔╥█ ─╦╚═█ ╚CXO─HO├O ╘A╔╦A
;JP Z,SKIP_noclose; H╙╦┼┬└▀ ─╦╚HA (ЄхяхЁ№ яЁютхЁ хЄё эшцх, ўЄюс√ ёючфрЄ№ Їрщы)
;LD A,L
;LD HL,(ML_LEN_ISH)
;LD IX,T_ORIG
;CALL DES_
LD HL,T6628 ;file last modification time
LD DE,T6221
LD BC,8
LDIR ;??? TODO єёЄрэютшЄ№ фрЄє яюёых Ёрёяръютъш
LD A,(T6624) ;flags
RRA
JR NC,Z60E3
;╘A╔╦ 3AKO─╚POBAH
LD A,3
LD (FLAGS),A ;CRYPTED
Z60E3 LD HL,(T6626)
;T6626=METO─ C╞AT╚▀: 0:STORED, 8:DEFLATE, others unknown
LD A,H
OR A
JR NZ,Z60F1
OR L
JR Z,Z60FC
CP 8
JR Z,Z60FC
Z60F1 ;LD HL,UNKNOWN
;LD DE,T_METOD
;LD BC,7
;LDIR
LD A,2
LD (FLAGS),A ;UNKNOWN (ўшёыю т A эх фюыцэю ёютярфрЄ№ ё 0 шыш 8!)
;JR UNK_
Z60FC
if 1==0
BIT 3,A
LD HL,STORED
JR Z,ST_
LD HL,DEFLATE
ST_ LD DE,T_METOD
LD BC,7
LDIR
endif
UNK_ PUSH AF ;0:STORED, 8:DEFLATE, others unknown ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;LD HL,(Z6630)
;LD A,(Z6632)
;A,HL= ─╦╚HA C╞ATO├O ╘A╔╦└
;LD (ML_PAC_LEN),HL
;LD (ST_PAC_LEN),A
if 1==0
LD IX,T_PACK
CALL DES_
LD B,4
LD HL,CRC_ISH+3
LD DE,T_CRC
L100 LD A,(HL)
CALL HEX
DEC HL
DJNZ L100
CALL T_IND ;шэшЎшрышчрЎш яЁюЎхэЄюьхЁр?
LD HL,0 ;Єхъє∙шщ ЁрчьхЁ Їрщыр фы яЁюЎхэЄюьхЁр
LD (B1),HL
LD (B2),HL
endif
;CALL DATA_COR ;яхўрЄ№ фрЄ√?
;LD HL,T_PACK_L
;CALL PRINTS_
FLAGS=$+1
LD A,0;(FLAGS) ;2:UNKNOWN, 3:CRYPTED, other=OK (ЇюЁьшЁєхЄё т√°х)
;LD HL,T_UNK
CP 2
JR Z,SK__
;LD HL,T_CRYPT
CP 3;:JR Z,SK__
;LD A,(SKIPING):OR A;JR Z,PROD10
JR NZ,PROD10
SK__ ;CALL PRINTS_
;CALL KEY10_
POP AF ;TODO єсЁрЄ№
JP SKIP_noclose
PROD10
if 1==0
LD HL,#5CE5
LD DE,T_TRD
LD B,3
CALL PROVERK
JR C,NXSCL
LD HL,TRDOBR
CALL PRINTS_
KEY11 XOR A
LD (#5C08),A
EI
HALT
LD A,(#5C08)
OR A
JR Z,KEY11
CP "Y"
JR Z,nX601_
CP 13
JR NZ,NX601
nX601_
XOR A
LD (MEN),A
LD A,(DESTIN)
CP "*"
JR Z,MEN100
LD A,(DESTIN)
LD L,A
LD A,(SOURCE)
CP L
JR NZ,MEN100
LD A,1
LD (MEN),A
MEN100
LD A,#C3
LD (SAVE),A
LD HL,SAVETRD
LD (SAVE+1),HL
LD HL,0
LD (TRK_SECT),HL
JR NX602
NXSCL
LD HL,#5CE5
LD DE,T_SCL
LD B,3
CALL PROVERK
JR C,NX601
;EXTRACTING FROM SCL
IFN 1
LD HL,SCLOBR
CALL PRINTS_
KEY11S XOR A
LD (#5C08),A
EI
HALT
LD A,(#5C08)
OR A
JR Z,KEY11S
CP "Y"
JR Z,nX601_S
CP 13
JR NZ,NX601
nX601_S
LD A,"S
LD (YESSCL),A
ELSE
LD A,#C3
LD (SAVE),A
LD HL,SAVESCL
LD (SAVE+1),HL
LD HL,0
LD (TRK_SECT),HL
JR NX602
ENDIF
;NORMAL FILE (NOT TRD OR SCL)
NX601 LD A,#3E
LD (SAVE),A
LD HL,#CD04
LD (SAVE+1),HL
endif
if 1==0
LD A,(ST_LEN_ISH)
OR A
JR NZ,NX602
LD HL,(ML_LEN_ISH)
LD DE,#FF12
OR A
SBC HL,DE
JR NC,NX602
LD A,(#5CE5)
CP "$"
JR NZ,NX602
LD (HOB),A
NX602
endif
LD HL,(Z6646) ;Relative offset of local file header. This is the number of bytes between the start of the first disk on which the file occurs, and the start of the local file header. This allows software reading the central directory to locate the position of the file inside the ZIP file.
LD A,(Z6648)
;jr $
;A,HL= CME┘EH╚E ─O ╦OKA╦▄═O├O 3A├╬╦╬BKA
LD IX,BUFER
LD DE,#1E
LD C,#29
LD B,A
CALL READ
XOR A
ADD HL,DE
ADC A,B
LD DE,(Z6636)
;DE= ─╦╚═A ╚MEH╚ ╘A╔╦A
ADD HL,DE
ADC A,0
LD DE,(Z6638)
;DE= ─O╧O╦H╚TE╦▄═OE ╧O╦E ─╦╚═█
ADD HL,DE
ADC A,0
;LD (Z634C),HL ;Єхъє∙р яючшЎш ўЄхэш т Їрщых
;LD (Z634F),A
;ЄхяхЁ№ Їшчшўхёъш єёЄрэютшь єърчрЄхы№ Їрщыр Єєфр
ld d,0
ld e,a
;ld hl,1
;dehl=shift
ld a,(filehandle)
ld b,a
OS_SEEKHANDLE
call SAVECREATE
LD hl,(ML_LEN_ISH)
ld a,h
or l
LD hl,(ST_LEN_ISH)
or h
or l
jr z,SKIP ;Їрщы эєыхтющ фышэ√
LD IY,DISKBUF+DISKBUFsz-1
;LD HL,0
;LD (T622D),HL
;LD (T622E),HL
;DEPACK
LD HL,0
LD (U6546),HL ;ёъюы№ъю срщЄ ёюїЁрэшЄ№ = Єхъє∙шщ рфЁхё т сєЇхЁх
POP BC ;0:STORED, 8:DEFLATE, others unknown ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
BIT 3,B
;LD (inflateq_sp),SP ;??? TODO
CALL Z635E ;nz=INFLATING
;LD A,(YESSCL)
;CP "S
;CALL Z,DESCLPP
; XOR A
;LD (YESSCL),A
;LD (NO_HOB),A
;LD (HOB),A
LD A,(CRC32_)
CP #C9
JR Z,SKIP
LD HL,ML_CRC32
LD DE,CRC_ISH
LD B,4
Z6159 LD A,(DE)
XOR (HL)
INC HL
inc DE
inc A
C1 JR NZ,crcerror;Z6164
DJNZ Z6159
JR SKIP
crcerror;Z6164
;CRC ERROR
;CALL E_CRC ;!!!!!!!!!!
ld hl,tcrcerror
call prtext
SKIP
readerror
call SAVECLOSE
SKIP_noclose
ld bc,(KOL_F)
cpi
ld (KOL_F),bc
ld sp,(exit_sp)
jp pe,nextfile
E_ZIP
EXIT
exit_sp=$+1
LD SP,#3131
ret
BUFCAT
dw 0
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
PROWERKA
if 1==0
LD A,#4F
LD (TEKATR+1),A
LD HL,#400
LD DE,#C40
CALL RAMKA
LD HL,FNAME
LD DE,T6927
LD BC,8
LDIR
LD A,"."
LD (DE),A
INC DE
LDI
LD A,(HL)
CP #20
JR C,NOEXN
INC HL
LD A,(HL)
DEC HL
CP #20
JR C,NOEXN
LDI
LDI
JR NOEXN+5
NOEXN LD A,#20
LD (DE),A
INC DE
LD (DE),A
LD HL,FNAME
LD DE,N_ARC
LD BC,8
LDIR
LD A,"."
LD (DE),A
INC DE
LDI
LD A,(HL)
CP #20
JR C,NOEHN
INC HL
LD A,(HL)
DEC HL
CP #20
JR C,NOEHN
LDI
LDI
JR NOEHN+5
NOEHN LD A,#20
LD (DE),A
INC DE
LD (DE),A
LD HL,T6918
CALL PRINTS_
endif
;CALL F_OPEN
LD HL,CAT
LD DE,CAT+1
LD BC,#63F
LD (HL),0
LDIR ;TODO єсЁрЄ№
LD HL,CAT
LD (BUFCAT),HL
;╧POBEPKA APX╚BA
;ърЄрыюу ыхцшЄ т ъюэЎх Їрщыр, ъръ фю эхую фюсЁрЄ№ё ?
;Z66FA
;a=??? яюёых F_OPEN (!=0 ЁрчЁх°рхЄ шёърЄ№ эрчрф -0x800 фрцх т ьрыхэ№ъюь Їрщых ы■сюую ЁрчьхЁр) TODO
LD A,(ST_FLEN)
LD HL,(ML_FLEN) ;ahl=фышэр Їрщыр
LD DE,#800
OR A
JR NZ,Z6727
LD A,H
CP 8
LD A,E;0
JR NC,Z6727 ;фышэр Їрщыр >=0x800, Єръ ўЄю эрўэ╕ь яюшёъ ё фышэр Їрщыр-0x800
OR H
JR NZ,Z6714
;фышэр Їрщыр < 0x100
LD A,L
CP #64
JR C,Z6780 ;фышэр Їрщыр < 0x64 - эхЄ эш юфэюую Їрщыр, ю°шсър
Z6714 PUSH HL
XOR A
LD HL,BUFER
LD DE,BUFER+1
LD (HL),A
LD BC,#7FF
LDIR ;юўшёЄшыш сєЇхЁ, ўЄюс√ ёыєўрщэю эх эрщЄш end of central directory эх Єрь
POP DE
Z6723 LD L,A ;ш∙хь т эрўрых Їрщыр
LD H,A
JR _Z672A
Z6727 SBC HL,DE
SBC A,E
_Z672A LD B,A
LD IX,BUFER
;de=0x800
CALL LOAD_B ;яюшёъ сыюър end of central directory
LD A,B
JR Z,Z6747 ;end of central directory
OR L
OR H
JR Z,Z6780 ;фю°ыш фю эрўрыр Їрщыр, р end of central directory эх эр°ыш
LD A,B
LD BC,#7EA ;ёьх∙рхь єърчрЄхы№ Їрщыр эрчрф яюўЄш эр 0x800
SBC HL,BC
SBC A,0
JR NC,_Z672A ;ш∙хь эрчрф
XOR A
JR Z6723 ;ш∙хь т эрўрых Їрщыр
Z6747
;эр°ыш end of central directory (ix = рфЁхё ¤Єюую сыюър т BUFER+)
PUSH IX
POP BC
ADD HL,BC
ADC A,0
LD BC,BUFER
SBC HL,BC
SBC A,0 ;ahl=ёьх∙хэшх end of central directory т Їрщых
LD (Z6896),HL ;Єхъє∙хх ёьх∙хэшх т Їрщых? TODO єсЁрЄ№
LD (Z6894),A
EX DE,HL
LD H,(IX+#11)
LD L,(IX+#10) ;offset of start of central directory
;╠╦└─╪╚┼ ┴A╔T█ CME┘EH╚▀ HA╫A╦└ ╓EHTPA╦▄HO├O KATA╦O├A
LD (SME_ML),HL
LD (IX+2),A ;???
LD A,(IX+#12) ;offset of start of central directory HSB
;CTAP╪╚╔ ┴A╔T CME┘┼═╚▀
LD (SME_ST),A
LD B,(IX+#D)
LD C,(IX+#C)
LD (SM1),BC ;size of central directory
;BC=─╦╚═A ╓EHTPA╦▄HO╔ ─╚PEKTOP╚╚, ╠╦└─╪╚┼ ┴A╔╥█
ADD HL,BC
ADC A,(IX+#E) ;size of central directory HSB
XOR (IX+2) ;???
JR NZ,Z6780 ;ъюэхЎ central directory эх ёююЄтхЄёЄтєхЄ ёьх∙хэш■ сыюър end of central directory - ю°шсър
SBC HL,DE
JR Z,Z6783 ;ъюэхЎ central directory ёююЄтхЄёЄтєхЄ ёьх∙хэш■ сыюър end of central directory
Z6780 JP ERR_Z1 ;фю°ыш фю эрўрыр Їрщыр, р end of central directory эх эр°ыш
Z6783 LD L,(IX+#14)
LD H,(IX+#15)
LD (LEN_KOM),HL
LD A,(IX+#E)
LD (SM2),A ;size of central directory HSB
LD C,(IX+#A)
LD B,(IX+#B)
LD H,(IX+9)
LD L,(IX+8)
;cy=0
;BC=╬┴┘EE ╫╚╤╦O ╘A╔╦╬B B APX╚BE
;HL=╫╚╤╦╬ 3A╧╚CE╔ B KATA╦O├E HA ▌TOM ─╚CKE
LD (KOL_F),HL
SBC HL,BC
JP NZ,ERR_Z2
LD HL,(SME_ML) ;start of central directory
LD A,(SME_ST)
EXA
Z679E PUSH BC
EXA
LD B,A
LD A,1 ;Єшя ёшуэрЄєЁ√
LD DE,#2E
LD IX,BUFER
CALL Z6886 ;ўшЄрхь сыюъ ш яЁютхЁ хь ёшуэрЄєЁє (т√їюф яю ю°шсъх - ERR_Z1)
LD A,(IX+#1D)
;A= ╠╦└─╪╚╔ ┴A╔T ─╦╚═█ ╚MEH╚ ╘A╔╦└
CP 2
JP NC,ERR_Z3
LD D,A
LD E,(IX+#1C)
;DE=─╦╚═└ ╚MEH╚ ╘A╔╦└
CALL Z68D9 ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (ahl) эр bde срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
LD D,(IX+#1F)
LD E,(IX+#1E)
;DE=─O╧O╦═╚TE╦▄HOE ╧╬╦E ─╦╚H█
CALL Z68D9 ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (ahl) эр bde срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
LD D,(IX+#21)
LD E,(IX+#20)
;DE=─╦╚HA KOMEHTAP╚▀ K ╘A╔╦╙
CALL Z68D9 ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (ahl) эр bde срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
PUSH BC,HL
LD B,(IX+#2C)
LD L,(IX+#2A)
LD H,(IX+#2B)
;B,HL=CME┘EH╚E OT HA╫A╦A ╧EPBO├O ─╚CKA C ▌T╚M ╘A╔╦OM
; ─O ╦╬╩└╦▄HO├O 3A├O╦OBKA.
INC IX,IX,HX
LD A,3 ;Єшя ёшуэрЄєЁ√
LD DE,#30
CALL Z68B1 ;ёфтшурхь єърчрЄхы№ bhl эр de срщЄ, ўшЄрхь ш яЁютхЁ хь ёшуэрЄєЁє?
PUSH IX
POP HL
LD DE,#1E
ADD HL,DE
LD (NAMEF3+1),HL
LD E,(IX+#1A)
LD D,(IX+#1B)
ADD HL,DE
LD DE,(BUFCAT)
PUSH DE,DE
LD A," "
LD B,11
LD (DE),A
INC DE
DJNZ $-2
NAMEF3 LD DE,0
NAMEF4 DEC HL
PUSH HL
AND A
SBC HL,DE
POP HL
JR NC,NAMEF5
EX DE,HL
DEC HL
JR NAMEF6
NAMEF5 LD A,(HL)
CP "/"
JR NZ,NAMEF4
NAMEF6 POP DE
INC HL
LD B,8
NAMEF2 LD A,(HL)
INC HL
CP "."
JR Z,NAMEF1
LD (DE),A
INC DE
DJNZ NAMEF2
LD A,(HL)
INC HL
CP "."
JR NZ,$-4
NAMEF1 POP DE
LD B,8
INC DE
DJNZ $-1
LD BC,3
LDIR
LD A,(IX+#16)
LD (DE),A
INC DE
LD A,(IX+#17)
LD (DE),A
INC DE
LD A,(IX+#18)
LD (DE),A
INC DE,DE,DE
EX DE,HL
LD (BUFCAT),HL
LD HL,#1E
LD A,(IX+#1B)
;A=╤╥└╨╪╚╔ ┴A╔T ─╦╚H█ ╤MEH█ ╘A╔╦└
CP 2
JP NC,ERR_Z3
LD D,A
LD E,(IX+#1A)
;DE=─╦╚HA ╤MEH█ ╘A╔╦└
CALL Z68ED ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (bhl) эр de срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
LD D,(IX+#1D)
LD E,(IX+#1C)
;DE=─ATA ╧OC╦E─HE╔ MO─╚╘╚KA╓╚╚
CALL Z68ED ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (bhl) эр de срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
LD D,(IX+#13)
LD E,(IX+#12)
LD A,(IX+#14)
;A,DE=─╦╚HA C╞ATO├O ╘A╔╦A
CALL Z68EE ;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (bhl) эр ade срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
LD A,(IX+#16)
OR (IX+#17)
OR (IX+#18)
OR (IX+#19)
;╚CXO─HA▀ ─╦╚HA ╘A╔╦A
EXA
PUSH IX
POP HL
LD BC,7
ADD HL,BC
RES 7,(IX+7)
;METO─ C╞AT╚▀, CTAP╪╚╔ ┴A╔T
LD B,#18-3
Z6825 LD A,(HL)
DEC H
SUB (HL) ;TODO ўЄю ё ўхь ёЁртэштрхь?
JR NZ,ERR_Z1
INC H,HL
DJNZ Z6825
POP HL,BC
LD A,B
POP BC
EXA
JR Z,Z6838 ;Їрщы фышэющ 0?
LD (Z683F),A
Z6838 DEC BC
LD A,B
OR C
JP NZ,Z679E
Z683E LD A,0
Z683F=Z683E+1
OR A
RET NZ ;Їрщы фышэющ эх 0?
;TODO Їрщы фышэющ 0
ERR_Z1
ERR_Z2
ERR_Z3
JP E_ZIP
;яюшёъ сыюър end of central directory
LOAD_B
;ahl=ёьх∙хэшх т Їрщых
;ix=сєЇхЁ
;de=len
;out: z=end of central directory, bhl=kept
CALL READ
PUSH BC
LD BC,#7EA ;???
ADD IX,BC
;яюшёъ чруюыютър сыюър
Z6861 LD A,#50 ;'P'
CP (IX)
JR NZ,Z687C
LD A,#4B ;'K'
CP (IX+1)
JR NZ,Z687C
LD A,5
CP (IX+2)
JR NZ,Z687C
INC A
CP (IX+3)
JR Z,Z6884 ;05, 06 = end of central directory
Z687C DEC BC
DEC IX
LD A,B
OR C
JR NZ,Z6861 ;яюшёъ чруюыютър сыюър фры№°х
DEC A ;-1, NZ
Z6884 POP BC
RET
Z6886
PUSH HL,DE
LD (signaturetype),A
ADD HL,DE
LD A,B
ADC A,0
JR C,ERR_Z1
EX DE,HL
LD C,A
Z6894=$+1
LD A,0
Z6896=$+1
LD HL,0
SBC HL,DE
SBC A,C
JR C,ERR_Z1
EX DE,HL
POP DE
EX (SP),HL
LD A,B
LD B,C
CALL READ
POP HL
JR Z68AB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Z68AB CALL checksignature;Z6901
RET Z
Z68AF JR ERR_Z1
Z68B1
;ёфтшурхь єърчрЄхы№ bhl эр de срщЄ, ўшЄрхь ш яЁютхЁ хь ёшуэрЄєЁє?
PUSH HL
PUSH DE
LD (signaturetype),A
ADD HL,DE
LD A,B
ADC A,0
JR C,ERR_Z1
EX DE,HL
LD C,A
LD A,(SME_ST)
LD HL,(SME_ML) ;start of central directory
SBC HL,DE
SBC A,C
JR C,Z68AF
EX DE,HL
POP DE
EX (SP),HL
LD A,B
LD B,C
CALL READ
POP HL
JR Z68AB ;check signature
Z68D9
;ёфтшэєЄ№ єърчрЄхы№ т Їрщых (ahl) эр bde срщЄ ш яЁютхЁшЄ№, ўЄю эх т√°ыш чр уЁрэшЎє Їрщыр?
XOR A
ADD HL,DE
ADC A,B
JR C,Z68AF ;ERR_Z1
LD B,A
EX DE,HL
LD A,(Z6894)
LD HL,(Z6896) ;Єхъє∙хх ёьх∙хэшх т Їрщых?
SBC HL,DE
SBC A,B
EX DE,HL
RET NC
JR Z68AF ;ERR_Z1
Z68ED
XOR A
Z68EE
ADD HL,DE
ADC A,B
JR C,Z68AF
LD B,A
EX DE,HL
LD A,(SME_ST)
LD HL,(SME_ML) ;start of central directory
SBC HL,DE
SBC A,B
EX DE,HL
RET NC
JR Z68AF ;ERR_Z1
checksignature;Z6901
LD A,#50
CP (IX)
RET NZ
LD A,#4B
CP (IX+1)
RET NZ
signaturetype=$+1;Z690E
LD A,0 ;Єшя ёшуэрЄєЁ√: 03: local file header, 01: central directory file header, 07: optional data descriptor, 05: end of central directory
CP (IX+2)
RET NZ
INC A
CP (IX+3)
RET
if 1==0
Z631F PUSH BC
POP DE
PUSH HL
POP IX
LD A,0
ST_PAC_LEN=$-1
LD HL,0
ML_PAC_LEN=$-2
OR A
JR NZ,Z633D
PUSH HL
SBC HL,DE
POP HL
JR NC,Z633D
LD E,L
LD D,H
Z633D OR A
SBC HL,DE
SBC A,0
LD (ST_PAC_LEN),A
LD (ML_PAC_LEN),HL
LD A,D
OR E
RET Z
LD HL,0
Z634C=$-2
LD A,0
Z634F=$-1
LD B,A
CALL READ
XOR A
ADD HL,DE
ADC A,B
LD (Z634C),HL
LD (Z634F),A
;CALL STOP_DRV
RET
else
;Z634C
; dw 0
;Z634F
; db 0
endif
Z635E
jp NZ,INFLATING
;stored
ld hl,tstored
call prtext
;LD HL,PROCES
;CALL PRINTS_
;LD A,5
;call ON_BANK
ld hl,(ML_LEN_ISH)
ld a,(ST_LEN_ISH)
;ld c,a
;or h
;or l
;ld a,c
;jr z,storedq
jr stored0go
stored0
push af
;push hl
ziprdbyte
CALL SBYTE
;pop hl
pop af
stored0go
ld bc,1
or a
sbc hl,bc
sbc a,b;0
jr nc,stored0
;LD A,5
;call ON_BANK
;storedq
;jp savelastblock;_ZD1C4 ;save whole buffer (end of file)
savelastblock;_ZD1C4
;jr $
;save whole buffer
;ё■фр яюярфрхь т ъюэЎх Їрщыр
ld hl,tsavelast
call prtext
LD HL,(U6546)
;ld a,h
;cp 0x50
;jr z,$
savehlbytes;ZD1C7
LD DE,0
JP SAVE
saveblock;Z65B8
;save whole buffer
;ё■фр эх яюярфрхь эр ъюЁюЄъшї Їрщырї
PUSH HL,DE,BC,AF
;push ix
;exx
;exa
;push af
;push bc
;push de
;push hl
ld hl,tsaveblock
call prtext
;LD A,5
;CALL ON_BANK
LD HL,(Z6546) ;ёъюы№ъю срщЄ ёюїЁрэшЄ№
LD (TD198),HL ;ёъюы№ъю срщЄ ёюїЁрэ ыш
CALL savehlbytes;ZD1C7 ;SAVE hl bytes
;hl=0
LD (Z6546),HL ;ёъюы№ъю срщЄ ёюїЁрэшЄ№ (=0)
if 1==0 ;юсэютыхэшх ЁрчьхЁр фы яЁюЎхэЄюьхЁр
EX DE,HL
LD HL,(TD198) ;ёъюы№ъю срщЄ ёюїЁрэ ыш
AND A
SBC HL,DE
JR C,CON1 ;???
LD DE,(B2)
ADD HL,DE
LD (B2),HL
LD A,(B1)
ADC A,0
LD (B1),A
CON1
endif
;pop hl
;pop de
;pop bc
;pop af
;exa
;exx
;pop ix
POP AF,BC,DE,HL
RET
tsaveblock
db "save block",13,10,0
tsavelast
db "save last block",13,10,0
tstored
db "stored",13,10,0
ST_LEN DW 0
if 1==0
INFLATING
;ld (inflateq_sp),sp
;LD HL,PROCES
;CALL PRINTS_
;LD A,5
;CALL ON_BANK
CALL ZD140 ;init read buffer, inflate file
;LD A,4
;JP ON_BANK
ret
endif
depkqerror;B_TABL
;ю°шсър т Їрщых
;jr $
ld hl,terror
call prtext
;save whole buffer (Z6546) срщЄ ш т√щЄш
;Z63B4
;inflateq_sp=$+1;Z63B5=$+1
; LD SP,0
;LD HL,(Z6546) ;ёъюы№ъю срщЄ ёюїЁрэшЄ№ = Єхъє∙шщ рфЁхё т сєЇхЁх
;LD DE,0
;CALL SAVE
call savelastblock
;LD A,4
;CALL ON_BANK
;CALL E_TABL
JP SKIP ;тюёёЄрэртыштрхЄ sp
terror
db "error",13,10,0
;PA╤╫ET CRC-32
;ЄєЄ ьюцхЄ с√Є№ ярЄў RET (TODO)
;a=byte
CRC32_ EXX
LD DE,(ST_CRC32)
LD HL,(ML_CRC32)
CRCPR_ XOR L
LD B,H
LD L,A
LD H,TCRC/1024 ;#18
ADD HL,HL
ADD HL,HL
LD A,B
XOR (HL)
LD C,A
INC L
LD A,E
XOR (HL)
LD B,A
INC L
LD A,D
XOR (HL)
LD E,A
INC L
LD D,(HL)
LD (ST_CRC32),DE
LD (ML_CRC32),BC
EXX
RET
;├EHEPA╓╚▀ TA┴╦╚╓█ ─╦▀ PA╤╫ETA CRC-32
initCRC
LD IX,TCRC+#3FC
LD C,0
Z669B LD B,8
LD DE,0
LD H,D
LD L,C
DEC L
Z66A3 SRL D
RR E
RR H
RR L
JR NC,Z66BD
LD A,#ED
XOR D
LD D,A
LD A,#B8
XOR E
LD E,A
LD A,#83
XOR H
LD H,A
LD A,#20
XOR L
LD L,A
Z66BD DJNZ Z66A3
LD (IX),L
LD (IX+1),H
LD (IX+2),E
LD (IX+3),D
LD DE,-4
ADD IX,DE
DEC C
JR NZ,Z669B
;LD A,4
;JP ON_BANK
ret