1104 lines
14 KiB
Plaintext
1104 lines
14 KiB
Plaintext
|
||
; LAST UPDATE: 13.07.2025 savelij
|
||
|
||
COMMAND LD HL,BUF1
|
||
LD A,(HL)
|
||
OR A
|
||
RET Z
|
||
DEC HL
|
||
SKIPSP INC HL
|
||
LD A,(HL)
|
||
CP 9
|
||
JR Z,SKIPSP
|
||
CP " "
|
||
JR Z,SKIPSP
|
||
COMP01 LD D,H
|
||
LD E,L
|
||
XOR A
|
||
LD BC,255
|
||
CPIR
|
||
LD A,254
|
||
SUB C
|
||
LD C,A
|
||
LD HL,CMDLIST
|
||
COMP004 PUSH BC
|
||
PUSH DE
|
||
COMP000 LD A,(DE)
|
||
CP 'a' ;0x61
|
||
JP C,COMP001
|
||
CP 'z'+1 ;0x7B
|
||
JP NC,COMP001
|
||
SUB 0x20
|
||
COMP001 CP (HL)
|
||
JP NZ,COMP002
|
||
INC HL
|
||
INC DE
|
||
DEC C
|
||
JP NZ,COMP000
|
||
XOR A
|
||
CP (HL)
|
||
JP NZ,COMP002
|
||
POP BC
|
||
POP BC
|
||
LD A,(DE)
|
||
CP " "
|
||
JR NZ,NOSPC
|
||
INC DE
|
||
NOSPC INC HL
|
||
LD A,(HL)
|
||
INC HL
|
||
LD H,(HL)
|
||
LD L,A
|
||
JP (HL)
|
||
|
||
COMP002 XOR A
|
||
LD C,0xFF
|
||
CPI
|
||
JP NZ,$-2
|
||
INC HL
|
||
INC HL
|
||
POP DE
|
||
POP BC
|
||
LD A,(HL)
|
||
OR A
|
||
JP NZ,COMP004
|
||
LD HL,BUF1
|
||
CALL PUTVAR
|
||
LD A,MSG0.MSG_UNK_COMMAND
|
||
CALL MESSAGE
|
||
SCF
|
||
RET
|
||
|
||
CMDLIST DZ "CLOSE"
|
||
DW CCLOSE
|
||
DZ "COPY"
|
||
DW CCOPY
|
||
DZ "DUMP"
|
||
DW CDUMP
|
||
DZ "EJECT"
|
||
DW COPEN
|
||
DZ "HELP"
|
||
DW CHELP
|
||
DZ "LIST"
|
||
DW CDIR
|
||
DZ "OPEN"
|
||
DW COPEN
|
||
DZ "SECTORDUMP"
|
||
DW CDUMP
|
||
DZ "SEND"
|
||
DW SENDPACKET
|
||
DZ "READTOC"
|
||
DW READTOC
|
||
DZ "CLOSETOC"
|
||
DW CLOSETOC
|
||
DB 0
|
||
|
||
RESULT EQU DUMPBUF + 3000
|
||
|
||
CLOSETOC LD A,MSG0.MSG_CLOSETRAY_READTOC
|
||
CALL MESSAGE
|
||
LD HL,APCMD.CLOSETRAY
|
||
CALL SENDPAKET
|
||
CALL CHANGEDISK
|
||
JR READTOC.L2
|
||
|
||
READTOC LD A,MSG0.MSG_READTOC
|
||
CALL MESSAGE
|
||
.L2 LD A,0xAA
|
||
LD (RESULT + 6),A
|
||
LD HL,APCMD.READTOC
|
||
CALL SENDPAKET
|
||
LD HL,RESULT-2
|
||
LD B,0xFF
|
||
LD DE,8
|
||
.L1 INC B
|
||
ADD HL,DE
|
||
LD A,(HL)
|
||
CP 0xAA
|
||
JR NZ,.L1
|
||
LD A,B
|
||
CALL A2HEX
|
||
LD HL,MSG0.MRR2
|
||
LD (HL),B
|
||
INC HL
|
||
LD (HL),A
|
||
LD A,(RESULT)
|
||
CALL A2HEX
|
||
LD HL,MSG0.MRR1
|
||
LD (HL),B
|
||
INC HL
|
||
LD (HL),A
|
||
LD A,MSG0.MSG_RESULT_READTOC
|
||
JP MESSAGE
|
||
|
||
SENDPAKET LD DE,RESULT
|
||
LD A,(CDDRIVE)
|
||
SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD
|
||
RET
|
||
|
||
A2HEX PUSH AF
|
||
AND %11110000
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
CALL .L2
|
||
LD B,A
|
||
POP AF
|
||
AND %00001111
|
||
.L2 ADD A,'0'
|
||
CP '9'+1
|
||
RET C
|
||
ADD A,7
|
||
RET
|
||
|
||
APCMD
|
||
.READTOC DB 0x43,0x02,0x00,0x00,0x00,0x00,0x01,0x03,0x24,0x00,0x00,0x00
|
||
.CLOSETRAY DB 0x1B,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||
|
||
SENDPACKET LD A,MSG0.MSG_SEND_ATAPI
|
||
CALL MESSAGE
|
||
CALL CONV_HEX
|
||
JR NC,.L1
|
||
LD A,MSG0.MSG_ERR_PACKET
|
||
JP MESSAGE
|
||
|
||
.L1 LD A,(CDDRIVE)
|
||
LD HL,APCMD_BUF
|
||
SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Custom_PCMD
|
||
LD A,MSG0.MSG_DONE
|
||
JP MESSAGE
|
||
|
||
; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> HEX <20><><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><>ଠ<EFBFBD>
|
||
CONV_HEX LD HL,APCMD_BUF
|
||
PUSH HL
|
||
LD B,12
|
||
.L1 LD (HL),0
|
||
INC HL
|
||
DJNZ .L1
|
||
LD HL,BUF2
|
||
POP DE
|
||
LD B,12 ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>⢮ <20><><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD>୮<EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
.L2 CALL .GET_HALFBYTE
|
||
RET C
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
LD C,A ; <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD>㡠<EFBFBD><E3A1A0> <20><> <20><>ப<EFBFBD>
|
||
CALL .GET_HALFBYTE
|
||
RET C
|
||
OR C ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>訩 <20><><EFBFBD>㡠<EFBFBD><E3A1A0>
|
||
LD (DE),A ; <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>
|
||
INC DE
|
||
DJNZ .L2
|
||
AND A
|
||
RET
|
||
|
||
; <20><><EFBFBD><EFBFBD>祭<EFBFBD><E7A5AD> <20><><EFBFBD>㡠<EFBFBD><E3A1A0><EFBFBD> <20><> <20><>ப<EFBFBD>
|
||
.GET_HALFBYTE LD A,(HL)
|
||
INC HL
|
||
CP '.' ; ࠧ<><E0A0A7><EFBFBD><EFBFBD>⥫<EFBFBD> <20> HEX <20><>ப<EFBFBD> <20>ய<EFBFBD>᪠<EFBFBD><E1AAA0>
|
||
JR Z,.GET_HALFBYTE
|
||
AND A
|
||
SCF
|
||
RET Z
|
||
CP '0'
|
||
RET C ; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
|
||
CP '9'+1
|
||
JR C,.L3 ; <20><><EFBFBD><EFBFBD><EFBFBD>㦥<EFBFBD><E3A6A5> <20><><EFBFBD><EFBFBD><EFBFBD>
|
||
AND %11011111
|
||
CP 'F'+1
|
||
CCF
|
||
RET C ; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
|
||
CP 'A'
|
||
RET C ; <20><>室 <20><> <20>訡<EFBFBD><E8A8A1>
|
||
SUB 7 ; <20> <20><><EFBFBD> ᨬ<><E1A8AC><EFBFBD> A-F
|
||
.L3 SUB '0' ; <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||
AND A
|
||
RET
|
||
|
||
CHELP: LD A,MSG0.MSG_USAGE
|
||
JP MESSAGE
|
||
|
||
CCLOSE: LD A,MSG0.MSG_TRAY_CLOSE
|
||
CALL MESSAGE
|
||
LD A,(CDDRIVE)
|
||
; LD BC,BIOS.DRV_EXTENDED.ATAPI_Close
|
||
; RST ToBIOS
|
||
SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Close
|
||
LD A,MSG0.MSG_DONE
|
||
JP MESSAGE
|
||
|
||
COPEN: LD A,MSG0.MSG_TRAY_OPEN
|
||
CALL MESSAGE
|
||
LD A,(CDDRIVE)
|
||
; LD BC,BIOS.DRV_EXTENDED.ATAPI_Eject
|
||
; RST ToBIOS
|
||
SPBIOS BIOSF.DRV_EXTENDED,DRV_EXTENDED.ATAPI_Eject
|
||
LD A,MSG0.MSG_DONE
|
||
JP MESSAGE
|
||
|
||
|
||
CCOPY: CALL CHANGEDISK
|
||
JR NC,.CH2OK
|
||
JP ERROR
|
||
.CH2OK: CALL EX_COPY_PARAM
|
||
LD HL,BUF2
|
||
LD DE,FF_STRUCT
|
||
; LD A,FAT_ATTR.NoDIRnoVolID
|
||
LD A, DIR.M_Archive + \
|
||
DIR.M_System + \
|
||
DIR.M_Hidden + \
|
||
DIR.M_ReadOnly
|
||
LD B,1
|
||
CALL F_FIRST
|
||
JP C,ERROR
|
||
.COPIER:
|
||
CALL MAKECOPY
|
||
RET C
|
||
LD A,(COPYMODE)
|
||
BIT DSTFILE,A
|
||
RET NZ
|
||
;
|
||
; LD C,Dss.ScanKey
|
||
; RST ToDSS
|
||
SPDSS DSSF.SCANKEY
|
||
JR Z,.NONSTOP
|
||
LD HL,0x011B ;ESC
|
||
AND A
|
||
SBC HL,DE
|
||
JR NZ,.NONSTOP
|
||
LD A,MSG0.MSG_COPYABORTED
|
||
CALL MESSAGE
|
||
SCF
|
||
RET
|
||
.NONSTOP:
|
||
LD DE,FF_STRUCT
|
||
CALL F_NEXT
|
||
JR NC,.COPIER
|
||
XOR A
|
||
RET
|
||
|
||
; IFNOTFOUND
|
||
; CALL ERROR
|
||
; RET
|
||
|
||
;IFOK
|
||
MAKECOPY:
|
||
LD A,(COPYMODE)
|
||
BIT SRCPATT,A
|
||
JR NZ,.WITH_SRC_PATT
|
||
BIT DSTFILE,A
|
||
JR NZ,.WITH_DST_FILE
|
||
.WITH_SRC_PATT:
|
||
LD HL,CDFNAME
|
||
.YCR1: LD A,(HL)
|
||
CP "A"
|
||
JR C,.NCR1
|
||
CP "Z"+1
|
||
JR NC,.NCR1
|
||
ADD A,0x20
|
||
LD (HL),A
|
||
.NCR1: OR A
|
||
INC HL
|
||
JR NZ,.YCR1
|
||
;
|
||
LD HL,CDFNAME
|
||
LD DE,(SRC_PUT_ADR)
|
||
.CZSL2: LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,.CZSL2
|
||
;
|
||
LD A,(COPYMODE)
|
||
BIT DSTFILE,A
|
||
JR NZ,.WITH_DST_FILE
|
||
;
|
||
LD HL,CDFNAME
|
||
LD DE,(DST_PUT_ADR)
|
||
.CZSL1: LD A,(HL)
|
||
LDI
|
||
OR A
|
||
JR NZ,.CZSL1
|
||
;
|
||
.WITH_DST_FILE:
|
||
LD HL,BUF3
|
||
LD A,(CDFATTR)
|
||
; LD C,Dss.Create
|
||
; RST ToDSS
|
||
SPDSS DSSF.CREATE
|
||
JR NC,.OFOK
|
||
LD A,MSG0.MSG_ERR_DEST
|
||
CALL MESSAGE
|
||
SCF
|
||
RET
|
||
;
|
||
.OFOK: LD (FHND),A
|
||
LD A,MSG0.MSG_COPYFILE
|
||
CALL MESSAGE
|
||
LD HL,BUF2
|
||
; LD C,Dss.PChars
|
||
; RST ToDSS
|
||
SPDSS DSSF.PCHARS
|
||
LD A,MSG0.MSG_COPYTO
|
||
CALL MESSAGE
|
||
LD HL,BUF3
|
||
; LD C,Dss.PChars
|
||
; RST ToDSS
|
||
SPDSS DSSF.PCHARS
|
||
; LD A," "
|
||
; LD C,Dss.PutChar
|
||
; RST ToDSS
|
||
SPDSS DSSF.PUTCHAR,,' '
|
||
LD IX,FF_STRUCT
|
||
|
||
LD E,(IX+LEN1)
|
||
LD D,(IX+LEN2)
|
||
LD (CL_SIZE),DE
|
||
LD E,(IX+LEN3)
|
||
LD D,(IX+LEN4)
|
||
LD (CH_SIZE),DE
|
||
|
||
LD E,(IX+CLU1)
|
||
LD D,(IX+CLU2)
|
||
LD (CL_OFFSET),DE
|
||
LD E,(IX+CLU3)
|
||
LD D,(IX+CLU4)
|
||
LD (CH_OFFSET),DE
|
||
.CDCOPY_LOOP:
|
||
CALL RCDFSB ;!!!!!
|
||
JR C,.COPY_FAULT
|
||
CALL WDATAB
|
||
JR C,.COPY_FAULT
|
||
JR NZ,.CDCOPY_LOOP
|
||
;
|
||
LD DE,(CDFTIME)
|
||
LD BC,(CDFDATE)
|
||
CALL RMKTIME
|
||
LD A,(FHND)
|
||
; LD C,Dss.Put_D_T ;COPY DATE AND TIME
|
||
; RST ToDSS
|
||
SPDSS DSSF.PUT_D_T
|
||
;
|
||
LD A,(FHND)
|
||
; LD C,Dss.Close
|
||
; RST ToDSS
|
||
SPDSS DSSF.CLOSE
|
||
LD A,MSG0.MSG_DONE
|
||
CALL MESSAGE
|
||
AND A
|
||
RET
|
||
.COPY_FAULT:
|
||
LD A,(FHND)
|
||
; LD C,Dss.Close
|
||
; RST ToDSS
|
||
SPDSS DSSF.CLOSE
|
||
SCF
|
||
RET
|
||
|
||
EX_COPY_PARAM
|
||
LD HL,BUF2 ;SOURCE
|
||
LD BC,255
|
||
XOR A
|
||
CPIR
|
||
DEC HL
|
||
EX DE,HL
|
||
LD HL,256
|
||
AND A
|
||
SBC HL,BC
|
||
LD B,H
|
||
LD C,L
|
||
EX DE,HL
|
||
LD A,'\\'
|
||
CPDR
|
||
INC HL
|
||
INC HL
|
||
LD (SRC_PUT_ADR),HL
|
||
;
|
||
LD HL,BUF2
|
||
; LD BC,Dss.EX_Path.GET_ALL
|
||
; RST ToDSS
|
||
SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
|
||
AND 0x80
|
||
LD A,(COPYMODE)
|
||
SET SRCPATT,A
|
||
JR NZ,.NOPATSR
|
||
RES SRCPATT,A
|
||
.NOPATSR:
|
||
LD (COPYMODE),A
|
||
LD HL,BUF3 ;DESTINATION
|
||
; LD BC,Dss.EX_Path.GET_ALL
|
||
; RST ToDSS
|
||
SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
|
||
AND 0x81 ;PATTERN & FILENAME
|
||
CP 0x01 ;IF FILENAME=1 AND PATTERN=0
|
||
LD A,(COPYMODE)
|
||
SET DSTFILE,A
|
||
JR Z,.SINGC1
|
||
RES DSTFILE,A
|
||
.SINGC1:
|
||
LD (COPYMODE),A
|
||
RET Z
|
||
LD HL,BUF3
|
||
LD BC,255
|
||
XOR A
|
||
CPIR ;MOVE TO END OF STRING
|
||
DEC HL ;MOVE TO ZERO-CHAR
|
||
DEC HL ;MOVE TO LAST CHAR
|
||
LD A,(HL) ;GET LAST CHAR
|
||
INC HL ;MOVE TO ZERO-CHAR
|
||
CP '\\' ;IS IT BACKSLASH?
|
||
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||
RET Z
|
||
LD A,'\\'
|
||
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||
INC HL ;MOVE TO THE NEW END OF STRING
|
||
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||
LD (HL),0 ;PUT ZERO CHAR
|
||
RET
|
||
|
||
DSTFILE EQU 0 ;SPECIFIED DESTINATION FILENAME
|
||
SRCPATT EQU 3 ;SPECIFIED SOURCE PATTERN A??.*
|
||
|
||
COPYMODE DB 0
|
||
|
||
SRC_PUT_ADR DW BUF2
|
||
DST_PUT_ADR DW BUF3
|
||
|
||
CL_OFFSET DW 0
|
||
CH_OFFSET DW 0
|
||
CL_SIZE DW 0
|
||
CH_SIZE DW 0
|
||
BYTECOUNTER DW 0
|
||
|
||
WDATAB: LD DE,(BYTECOUNTER)
|
||
LD A,D
|
||
OR E
|
||
RET Z
|
||
LD HL,0xC000
|
||
LD A,(FHND)
|
||
; LD C,Dss.Write
|
||
; RST ToDSS
|
||
SPDSS DSSF.WRITE
|
||
JR C,.WRDERR
|
||
XOR A
|
||
INC A
|
||
RET
|
||
.WRDERR:
|
||
LD A,MSG0.MSG_FAILURE
|
||
CALL MESSAGE
|
||
CALL CRLF
|
||
LD A,MSG0.MSG_F_WRITE_ERR
|
||
CALL MESSAGE
|
||
XOR A
|
||
SCF
|
||
RET
|
||
|
||
RCDFSB: LD HL,(CL_SIZE)
|
||
LD DE,(CH_SIZE)
|
||
LD A,H
|
||
OR L
|
||
OR D
|
||
OR E
|
||
LD BC,0
|
||
LD (BYTECOUNTER),BC
|
||
RET Z ;SIZE = 0
|
||
AND A
|
||
LD BC,0x4000 ;BLOCKSIZE
|
||
SBC HL,BC
|
||
LD B,C
|
||
EX DE,HL
|
||
SBC HL,BC
|
||
EX DE,HL
|
||
LD BC,0x4000
|
||
JR NC,.RC_NOCAR
|
||
;CORRECT RESULT
|
||
ADD HL,BC
|
||
LD B,C
|
||
EX DE,HL
|
||
ADC HL,BC
|
||
EX DE,HL
|
||
LD B,H
|
||
LD C,L
|
||
LD HL,0
|
||
LD DE,0
|
||
.RC_NOCAR:
|
||
LD (CL_SIZE),HL
|
||
LD (CH_SIZE),DE
|
||
LD (BYTECOUNTER),BC
|
||
;
|
||
LD A,B
|
||
SRL B
|
||
SRL B
|
||
SRL B
|
||
AND 0x07
|
||
OR C
|
||
JR Z,.RC_EVEN_NUM
|
||
INC B
|
||
.RC_EVEN_NUM:
|
||
LD A,B
|
||
LD C,B
|
||
LD B,0
|
||
;
|
||
LD IX,(CL_OFFSET)
|
||
LD HL,(CH_OFFSET)
|
||
PUSH IX
|
||
PUSH HL
|
||
ADD IX,BC
|
||
LD C,B
|
||
ADC HL,BC
|
||
LD (CL_OFFSET),IX
|
||
LD (CH_OFFSET),HL
|
||
POP HL
|
||
POP IX
|
||
LD B,A
|
||
LD A,(CDDRIVE)
|
||
LD DE,0xC000
|
||
; LD C,BIOS.DRV_READ
|
||
; RST ToBIOS
|
||
SPBIOS BIOSF.DRV_READ
|
||
LD BC,(BYTECOUNTER)
|
||
RET NC
|
||
LD A,MSG0.MSG_FAILURE
|
||
CALL MESSAGE
|
||
CALL CRLF
|
||
LD A,MSG0.MSG_CD_READ_ERR
|
||
CALL MESSAGE
|
||
SCF
|
||
RET
|
||
|
||
|
||
FHND DB 0xFF
|
||
|
||
;----------------------
|
||
CDIR: CALL CHANGEDISK
|
||
JP C,ERROR
|
||
LD HL,BUF2
|
||
LD A,(HL)
|
||
OR A
|
||
JR NZ,.NODEFD
|
||
LD HL,DEFDIR
|
||
JR .PATPRESNT
|
||
.NODEFD:
|
||
; LD BC,Dss.EX_Path.GET_ALL
|
||
; RST ToDSS
|
||
SPDSS DSSF.EX_PATH,EX_PATH.GET_ALL
|
||
BIT 7,A ;PATTERN
|
||
LD HL,BUF2
|
||
JR NZ,.PATPRESNT
|
||
;
|
||
LD BC,255
|
||
XOR A
|
||
CPIR ;MOVE TO END OF STRING
|
||
DEC HL ;MOVE TO ZERO-CHAR
|
||
DEC HL ;MOVE TO LAST CHAR
|
||
LD A,(HL) ;GET LAST CHAR
|
||
INC HL ;MOVE TO ZERO-CHAR
|
||
CP '\\' ;IS IT BACKSLASH?
|
||
JR Z,.WITHSL9
|
||
LD A,'\\'
|
||
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||
INC HL ;MOVE TO THE NEW END OF STRING
|
||
.WITHSL9:
|
||
LD A,"*"
|
||
LD (HL),A
|
||
INC HL
|
||
LD (HL),"."
|
||
INC HL
|
||
LD (HL),A
|
||
INC HL
|
||
LD (HL),0
|
||
LD HL,BUF2
|
||
.PATPRESNT
|
||
LD DE,FF_STRUCT
|
||
; LD A,FAT_ATTR.NoVolID
|
||
LD A, DIR.M_Archive + \
|
||
DIR.M_Dir + \
|
||
DIR.M_System + \
|
||
DIR.M_Hidden + \
|
||
DIR.M_ReadOnly
|
||
LD B,0
|
||
CALL F_FIRST
|
||
JP C,ERROR
|
||
.CDIR_HEAD:
|
||
LD A,MSG0.MSG_DIRHEAD
|
||
CALL MESSAGE
|
||
LD HL,DIRSPEC
|
||
; LD C,Dss.PChars
|
||
; RST ToDSS
|
||
SPDSS DSSF.PCHARS
|
||
CALL CRLF
|
||
CALL CRLF
|
||
.CDIR_LOOP:
|
||
LD HL,CDFNAME
|
||
CALL PNAME
|
||
LD DE,FF_STRUCT
|
||
CALL F_NEXT
|
||
JR NC,.CDIR_LOOP
|
||
RET
|
||
|
||
; FF_STRUCT
|
||
; DB "12345678"
|
||
; DB "123"
|
||
; DB 0x00
|
||
; DW 0,0,0,0
|
||
; CDFPOSH DW 0 ;CLUSTER HIGH
|
||
; CDFTIME DW 0 ;TIME
|
||
; CDFDATE DW 0 ;DATE
|
||
; CDFPOSL DW 0 ;CLUSTER
|
||
; CDFSIZE DW 0,0 ;SIZE
|
||
; CDFATTR DB 0x00 ;ATTR
|
||
; CDFNAME DB "12345678123",0
|
||
; ; DS 44
|
||
; DS 256-($-FF_STRUCT)
|
||
|
||
PNAME LD BC,8
|
||
LD DE,PRM1
|
||
LDIR
|
||
XOR A
|
||
LD (DE),A
|
||
LD DE,PRM2
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
LD IX,FF_STRUCT
|
||
CALL PRNSIZE
|
||
CALL PRNDATE
|
||
CALL PRNTIME
|
||
LD A,MSG0.MSG_DIRENTRY
|
||
JP MESSAGE
|
||
|
||
PRNDATE LD B,(IX+25)
|
||
LD C,(IX+24)
|
||
LD HL,SIZEBFF
|
||
CALL DATE_
|
||
LD (HL),0
|
||
LD HL,SIZEBFF
|
||
LD DE,PRM4
|
||
LD A,(HL)
|
||
CP "0"
|
||
JP NZ,PUTPRM
|
||
LD (HL),0x20
|
||
JP PUTPRM
|
||
|
||
PRNTIME LD B,(IX+22)
|
||
LD C,(IX+23)
|
||
LD HL,SIZEBFF
|
||
CALL TIME_
|
||
LD (HL),0
|
||
LD HL,SIZEBFF
|
||
LD DE,PRM5
|
||
LD A,(HL)
|
||
CP "0"
|
||
JP NZ,PUTPRM
|
||
LD (HL),0x20
|
||
JP PUTPRM
|
||
|
||
TIME_: SRL C
|
||
RR B
|
||
SRL C
|
||
RR B
|
||
SRL C
|
||
RR B
|
||
SRL B
|
||
SRL B
|
||
LD A,C
|
||
CALL NUMB
|
||
LD (HL),":"
|
||
INC HL
|
||
LD A,B
|
||
JP NUMB
|
||
|
||
DATE_: LD A,C
|
||
AND 0x1F
|
||
PUSH BC
|
||
CALL NUMB
|
||
LD (HL),"."
|
||
INC HL
|
||
POP BC
|
||
LD A,C
|
||
SRL B
|
||
RLA
|
||
RLA
|
||
RLA
|
||
RLA
|
||
AND 0x0F
|
||
CALL NUMB
|
||
LD (HL),"."
|
||
INC HL
|
||
LD A,B
|
||
ADD A,0x50
|
||
CP 100
|
||
JP C,NUMB
|
||
.SUB100:
|
||
SUB 100
|
||
CP 100
|
||
JP C,NUMB
|
||
JR .SUB100
|
||
|
||
NUMB: LD C,0x2F
|
||
.NUMB1: INC C
|
||
SUB 10
|
||
JP NC,.NUMB1
|
||
ADD A,10
|
||
ADD A,0x30
|
||
LD (HL),C
|
||
INC HL
|
||
LD (HL),A
|
||
INC HL
|
||
RET
|
||
|
||
PRNSIZE LD A,(IX+32)
|
||
LD HL,DIRIDD
|
||
AND 0x10
|
||
JP NZ,.PRZ
|
||
LD L,(IX+28)
|
||
LD H,(IX+29)
|
||
EXX
|
||
LD L,(IX+30)
|
||
LD H,(IX+31)
|
||
EXX
|
||
PUSH IX
|
||
CALL MAKE_LN
|
||
LD HL,L32BIT_+9
|
||
LD A,(HL)
|
||
CP 0x20
|
||
JR NZ,.ALR
|
||
LD A,0x30
|
||
LD (HL),A
|
||
.ALR: LD DE,SIZEBFF
|
||
LD HL,L32BIT_;; +1
|
||
LDI
|
||
LD A," "
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD (DE),A
|
||
INC DE
|
||
LDI
|
||
LDI
|
||
LDI
|
||
LD HL,SIZEBFF
|
||
POP IX
|
||
.PRZ: LD DE,PRM3
|
||
JP PUTPRM
|
||
|
||
MAKE_LN:
|
||
LD IX,L32BIT_
|
||
EXX
|
||
LD DE,0x3B9A ; 1000000000
|
||
EXX
|
||
LD DE,0xCA00
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x05F5 ; 100000000
|
||
EXX
|
||
LD DE,0xE100
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0098 ; 10000000
|
||
EXX
|
||
LD DE,0x9680
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x000F ; 1000000
|
||
EXX
|
||
LD DE,0x4240
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0001 ; 100000
|
||
EXX
|
||
LD DE,0x86A0
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0000 ; 10000
|
||
EXX
|
||
LD DE,0x2710
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0000 ; 1000
|
||
EXX
|
||
LD DE,0x03E8
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0000 ; 100
|
||
EXX
|
||
LD DE,0x0064
|
||
CALL GET_DIG
|
||
EXX
|
||
LD DE,0x0000 ; 10
|
||
EXX
|
||
LD DE,0x000A
|
||
CALL GET_DIG
|
||
LD A,L ; 1
|
||
ADD A,0x30
|
||
LD (IX+0),A
|
||
INC IX
|
||
LD HL,L32BIT_
|
||
LD DE,0x2030
|
||
;
|
||
.KILLZ: LD A,(HL)
|
||
CP E
|
||
JR NZ,.KILLZ2
|
||
LD (HL),D
|
||
INC HL
|
||
JP .KILLZ
|
||
.KILLZ2:
|
||
LD HL,L32BIT_+9
|
||
LD A,(HL)
|
||
CP D
|
||
RET NZ
|
||
LD (HL),E
|
||
RET
|
||
|
||
; HL:HL - DE:DE
|
||
|
||
GET_DIG:
|
||
XOR A
|
||
.INC_DG:
|
||
INC A
|
||
SBC HL,DE
|
||
EXX
|
||
SBC HL,DE
|
||
EXX
|
||
JP NC,.INC_DG
|
||
ADD HL,DE
|
||
EXX
|
||
ADC HL,DE
|
||
EXX
|
||
DEC A
|
||
ADD A,0x30
|
||
LD (IX+0),A
|
||
INC IX
|
||
RET
|
||
|
||
L32BIT_ DB "0000000000"
|
||
|
||
DIRIDD DB "<DIR> ",0
|
||
|
||
SIZEBFF DB "0 000 000 000",0,0
|
||
|
||
DEFDIR DB 0x5C,"*.*",0
|
||
|
||
;------------------------
|
||
|
||
CDUMP: LD HL,BUF2
|
||
LD BC,0x0000
|
||
CALL GETNUM
|
||
; LD XL,C
|
||
; LD XH,0
|
||
; LD HL,0
|
||
LD A,(CDDRIVE)
|
||
LD DE,DUMPBUF
|
||
; LD BC,1*256 + BIOS.DRV_READ
|
||
; RST ToBIOS
|
||
SPBIOS BIOSF.DRV_READ,1
|
||
JR C,.DMPERR
|
||
;
|
||
LD HL,BUF3
|
||
CALL GETNUM
|
||
PUSH IX
|
||
POP BC
|
||
LD A,B
|
||
AND 0x07
|
||
LD B,A
|
||
LD HL,2048-0x01C0
|
||
AND A
|
||
SBC HL,BC
|
||
JR NC,.GOODOFFS
|
||
LD BC,2048-0x01C0
|
||
.GOODOFFS:
|
||
LD HL,DUMPBUF
|
||
ADD HL,BC
|
||
;
|
||
CALL DUMP
|
||
JP CRLF
|
||
.DMPERR:
|
||
LD A,MSG0.MSG_IO_ERROR
|
||
JP MESSAGE
|
||
;
|
||
|
||
GETNUM: EXX
|
||
LD IX,0
|
||
LD HL,0
|
||
EXX
|
||
.GETNUM0:
|
||
LD A,(HL)
|
||
OR A
|
||
JR Z,.EGETN
|
||
INC HL
|
||
CP "0"
|
||
JR C,.GETNUM0
|
||
CP "9"+1
|
||
JR NC,.GETNUM0
|
||
SUB "0"
|
||
;
|
||
EXX
|
||
PUSH IX ;
|
||
PUSH HL
|
||
POP DE
|
||
POP BC ;LD DE:BC,HL:IX
|
||
;
|
||
ADD IX,IX
|
||
ADC HL,HL ;x2
|
||
ADD IX,IX
|
||
ADC HL,HL ;x4
|
||
ADD IX,BC
|
||
ADC HL,DE ;x5
|
||
ADD IX,IX
|
||
ADC HL,HL ;x10
|
||
;
|
||
LD C,A
|
||
LD B,0
|
||
ADD IX,BC
|
||
LD C,B
|
||
ADC HL,BC
|
||
EXX
|
||
JR .GETNUM0
|
||
.EGETN: EXX
|
||
;PUSH IX
|
||
PUSH HL
|
||
EXX
|
||
POP HL
|
||
;POP IX
|
||
RET
|
||
;;;;;;;;;;;;;;;
|
||
; LD A,(HL)
|
||
; OR A
|
||
; RET Z
|
||
; INC HL
|
||
; CP "0"
|
||
; JR C,GETNUM
|
||
; CP "9"+1
|
||
; JR NC,GETNUM
|
||
; SUB "0"
|
||
; LD B,A
|
||
;
|
||
; LD A,C
|
||
; ADD A,A
|
||
; ADD A,A
|
||
; ADD A,C
|
||
; ADD A,A
|
||
;
|
||
; ADD A,B
|
||
; LD C,A
|
||
; JR GETNUM
|
||
;;;;;;;;;;;;;;;;
|
||
|
||
UPDUMP: DB " +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF \r\n"
|
||
DZ " -------------------------------------------------- +----------------+"
|
||
|
||
|
||
DUMP: PUSH HL
|
||
LD HL,UPDUMP
|
||
; LD C,Dss.PChars
|
||
; RST ToDSS
|
||
SPDSS DSSF.PCHARS
|
||
POP HL
|
||
LD BC,0x1C00
|
||
.L1: PUSH BC
|
||
PUSH BC
|
||
CALL CRLF
|
||
;
|
||
LD DE,DUMPBUF
|
||
AND A
|
||
SBC HL,DE
|
||
LD A,L
|
||
PUSH AF
|
||
LD A,H
|
||
ADD HL,DE
|
||
;
|
||
CALL PHEX
|
||
POP AF
|
||
CALL PHEX
|
||
LD A,":"
|
||
CALL PRNCHAR
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
POP BC
|
||
PUSH HL
|
||
;
|
||
LD B,0x08
|
||
.L2: PUSH BC
|
||
LD A,(HL)
|
||
INC HL
|
||
CALL PHEX
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
POP BC
|
||
INC C
|
||
DJNZ .L2
|
||
;
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
;
|
||
LD B,0x08
|
||
.L2_00: PUSH BC
|
||
LD A,(HL)
|
||
INC HL
|
||
CALL PHEX
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
POP BC
|
||
INC C
|
||
DJNZ .L2_00
|
||
;
|
||
LD A," "
|
||
CALL PRNCHAR
|
||
;
|
||
LD A,"|"
|
||
CALL PRNCHAR
|
||
POP HL
|
||
LD B,0x10
|
||
.LLL: LD A,(HL)
|
||
INC HL
|
||
PUSH BC
|
||
CALL PRINT_
|
||
POP BC
|
||
DJNZ .LLL
|
||
LD A,"|"
|
||
CALL PRNCHAR
|
||
;
|
||
LD A,C
|
||
POP BC
|
||
LD C,A
|
||
DJNZ .L1
|
||
RET
|
||
|
||
PHEX: LD E,A
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
RRCA
|
||
AND 0x0F
|
||
ADD A,0x30
|
||
CP 0x3A
|
||
JR C,.PHEX2
|
||
ADD A,7
|
||
.PHEX2: CALL PRINT_
|
||
LD A,E
|
||
AND 0x0F
|
||
ADD A,0x30
|
||
CP 0x3A
|
||
JR C,.PHEX3
|
||
ADD A,7
|
||
.PHEX3: CALL PRINT_
|
||
RET
|
||
|
||
PRNCHAR:
|
||
; LD C,Dss.PutChar
|
||
; JP ToDSS
|
||
SPDSS DSSF.PUTCHAR
|
||
RET
|