mirror of
https://github.com/Tolik-Trek/CDX.git
synced 2026-06-15 01:11:38 +03:00
923 lines
13 KiB
NASM
923 lines
13 KiB
NASM
|
|
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'
|
|
JP C,COMP001
|
|
CP 'z' + 1
|
|
JP NC,COMP001
|
|
SUB %0010'0000
|
|
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,#FF
|
|
.loop: CPI
|
|
JP NZ,.loop
|
|
INC HL
|
|
INC HL
|
|
POP DE
|
|
POP BC
|
|
LD A,(HL)
|
|
OR A
|
|
JP NZ,COMP004
|
|
LD HL,BUF1
|
|
CALL PUTVAR
|
|
LD A,MSG_UNK_COMMAND
|
|
CALL MESSAGE
|
|
SCF
|
|
RET
|
|
|
|
CMDLIST: DB "CLOSE",0
|
|
DW CCLOSE
|
|
DB "COPY",0
|
|
DW CCOPY
|
|
DB "DUMP",0
|
|
DW CDUMP
|
|
DB "EJECT",0
|
|
DW COPEN
|
|
DB "HELP",0
|
|
DW CHELP
|
|
DB "LIST",0
|
|
DW CDIR
|
|
DB "OPEN",0
|
|
DW COPEN
|
|
DB "SECTORDUMP",0
|
|
DW CDUMP
|
|
DB 0
|
|
|
|
CHELP: LD A,MSG_USAGE
|
|
JP MESSAGE
|
|
|
|
CCLOSE: LD A,MSG_TRAY_CLOSE
|
|
CALL MESSAGE
|
|
LD A,(CDDRIVE)
|
|
LD BC,BIOS.DRV_EXTENDED.ATAPI_Close
|
|
JR COPEN.cmd
|
|
;
|
|
COPEN: LD A,MSG_TRAY_OPEN
|
|
CALL MESSAGE
|
|
LD A,(CDDRIVE)
|
|
LD BC,BIOS.DRV_EXTENDED.ATAPI_Eject
|
|
.cmd: RST ToBIOS
|
|
LD A,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 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
|
|
JR Z,.NONSTOP
|
|
LD HL,#011B ;ESC
|
|
AND A
|
|
SBC HL,DE
|
|
JR NZ,.NONSTOP
|
|
LD A,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,#20
|
|
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
|
|
JR NC,.OFOK
|
|
LD A,MSG_ERR_DEST
|
|
CALL MESSAGE
|
|
SCF
|
|
RET
|
|
;
|
|
.OFOK: LD (FHND),A
|
|
LD A,MSG_COPYFILE
|
|
CALL MESSAGE
|
|
LD HL,BUF2
|
|
LD C,Dss.PChars
|
|
RST ToDSS
|
|
LD A,MSG_COPYTO
|
|
CALL MESSAGE
|
|
LD HL,BUF3
|
|
LD C,Dss.PChars
|
|
RST ToDSS
|
|
LD A," "
|
|
LD C,Dss.PutChar
|
|
RST ToDSS
|
|
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
|
|
;
|
|
LD A,(FHND)
|
|
LD C,Dss.Close
|
|
RST ToDSS
|
|
LD A,MSG_DONE
|
|
CALL MESSAGE
|
|
AND A
|
|
RET
|
|
;
|
|
.COPY_FAULT: LD A,(FHND)
|
|
LD C,Dss.Close
|
|
RST ToDSS
|
|
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
|
|
AND #80
|
|
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
|
|
AND #81 ;PATTERN & FILENAME
|
|
CP #01 ;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,#C000
|
|
LD A,(FHND)
|
|
LD C,Dss.Write
|
|
RST ToDSS
|
|
JR C,.WRDERR
|
|
XOR A
|
|
INC A
|
|
RET
|
|
;
|
|
.WRDERR: LD A,MSG_FAILURE
|
|
CALL MESSAGE
|
|
CALL CRLF
|
|
LD A,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,#4000 ;BLOCKSIZE
|
|
SBC HL,BC
|
|
LD B,C
|
|
EX DE,HL
|
|
SBC HL,BC
|
|
EX DE,HL
|
|
LD BC,#4000
|
|
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 #07
|
|
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,#C000
|
|
LD C,BIOS.DRV_READ
|
|
RST ToBIOS
|
|
LD BC,(BYTECOUNTER)
|
|
RET NC
|
|
LD A,MSG_FAILURE
|
|
CALL MESSAGE
|
|
CALL CRLF
|
|
LD A,MSG_CD_READ_ERR
|
|
CALL MESSAGE
|
|
SCF
|
|
RET
|
|
|
|
|
|
FHND: DB #FF
|
|
|
|
;----------------------
|
|
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
|
|
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 B,0
|
|
CALL F_FIRST
|
|
JP C,ERROR
|
|
;
|
|
.CDIR_HEAD: LD A,MSG_DIRHEAD
|
|
CALL MESSAGE
|
|
LD HL,DIRSPEC
|
|
LD C,Dss.PChars
|
|
RST ToDSS
|
|
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 #00
|
|
; 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 #00 ;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,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),#20
|
|
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),#20
|
|
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 #1F
|
|
PUSH BC
|
|
CALL NUMB
|
|
LD (HL),"."
|
|
INC HL
|
|
POP BC
|
|
LD A,C
|
|
SRL B
|
|
RLA
|
|
RLA
|
|
RLA
|
|
RLA
|
|
AND #0F
|
|
CALL NUMB
|
|
LD (HL),"."
|
|
INC HL
|
|
LD A,B
|
|
ADD A,#50
|
|
CP 100
|
|
JP C,NUMB
|
|
.SUB100:
|
|
SUB 100
|
|
CP 100
|
|
JP C,NUMB
|
|
JR .SUB100
|
|
|
|
NUMB: LD C,#2F
|
|
.NUMB1: INC C
|
|
SUB 10
|
|
JP NC,.NUMB1
|
|
ADD A,10
|
|
ADD A,#30
|
|
LD (HL),C
|
|
INC HL
|
|
LD (HL),A
|
|
INC HL
|
|
RET
|
|
|
|
PRNSIZE: LD A,(IX+32)
|
|
LD HL,DIRIDD
|
|
AND #10
|
|
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 #20
|
|
JR NZ,.ALR
|
|
LD A,#30
|
|
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,#3B9A ; 1000000000
|
|
EXX
|
|
LD DE,#CA00
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#05F5 ; 100000000
|
|
EXX
|
|
LD DE,#E100
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0098 ; 10000000
|
|
EXX
|
|
LD DE,#9680
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#000F ; 1000000
|
|
EXX
|
|
LD DE,#4240
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0001 ; 100000
|
|
EXX
|
|
LD DE,#86A0
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0000 ; 10000
|
|
EXX
|
|
LD DE,#2710
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0000 ; 1000
|
|
EXX
|
|
LD DE,#03E8
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0000 ; 100
|
|
EXX
|
|
LD DE,#0064
|
|
CALL GET_DIG
|
|
EXX
|
|
LD DE,#0000 ; 10
|
|
EXX
|
|
LD DE,#000A
|
|
CALL GET_DIG
|
|
LD A,L ; 1
|
|
ADD A,#30
|
|
LD (IX+0),A
|
|
INC IX
|
|
LD HL,L32BIT_
|
|
LD DE,#2030
|
|
;
|
|
.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,#30
|
|
LD (IX+0),A
|
|
INC IX
|
|
RET
|
|
|
|
L32BIT_: DB "0000000000"
|
|
|
|
DIRIDD: DB "<DIR> ",0
|
|
|
|
SIZEBFF: DB "0 000 000 000",0,0
|
|
|
|
DEFDIR: DB #5C,"*.*",0
|
|
|
|
;------------------------
|
|
|
|
CDUMP: LD HL,BUF2
|
|
LD BC,#0000
|
|
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
|
|
JR C,.DMPERR
|
|
;
|
|
LD HL,BUF3
|
|
CALL GETNUM
|
|
PUSH IX
|
|
POP BC
|
|
LD A,B
|
|
AND #07
|
|
LD B,A
|
|
LD HL,2048-#01C0
|
|
AND A
|
|
SBC HL,BC
|
|
JR NC,.GOODOFFS
|
|
LD BC,2048-#01C0
|
|
.GOODOFFS: LD HL,DUMPBUF
|
|
ADD HL,BC
|
|
;
|
|
CALL DUMP
|
|
JP CRLF
|
|
.DMPERR: LD A,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: BYTE " +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ",CR,LF
|
|
DZ " -------------------------------------------------- +----------------+"
|
|
|
|
|
|
DUMP: PUSH HL
|
|
LD HL,UPDUMP
|
|
LD C,Dss.PChars
|
|
RST ToDSS
|
|
POP HL
|
|
LD BC,#1C00
|
|
.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,#08
|
|
.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,#08
|
|
.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,#10
|
|
.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 #0F
|
|
ADD A,#30
|
|
CP #3A
|
|
JR C,.PHEX2
|
|
ADD A,7
|
|
.PHEX2: CALL PRINT_
|
|
LD A,E
|
|
AND #0F
|
|
ADD A,#30
|
|
CP #3A
|
|
JR C,.PHEX3
|
|
ADD A,7
|
|
.PHEX3: CALL PRINT_
|
|
RET
|
|
|
|
PRNCHAR: LD C,Dss.PutChar
|
|
JP ToDSS
|
|
; |