mirror of
https://github.com/Tolik-Trek/CDX.git
synced 2026-06-15 17:31:39 +03:00
какая-то из уже перепиленных версий
This commit is contained in:
commit
3a5f267f9a
524
CDX.ASM
Normal file
524
CDX.ASM
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;
|
||||||
|
; CDX.EXE [command] [-switches] [directory]
|
||||||
|
;
|
||||||
|
;commands:
|
||||||
|
; OPEN
|
||||||
|
; EJECT
|
||||||
|
; CLOSE
|
||||||
|
; COPY
|
||||||
|
; LIST
|
||||||
|
; DUMP
|
||||||
|
; COMMAND
|
||||||
|
; -h,? Help page
|
||||||
|
|
||||||
|
DEFINE _MAME 1
|
||||||
|
|
||||||
|
|
||||||
|
CR EQU 13
|
||||||
|
LF EQU 10
|
||||||
|
|
||||||
|
INCLUDE "Shared_Includes/constants/BIOS_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/dss_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/Sp2000.inc"
|
||||||
|
|
||||||
|
|
||||||
|
ORG #8100-22
|
||||||
|
|
||||||
|
DB "EXE" ;EXE ID
|
||||||
|
DB #00 ;EXE VERSION
|
||||||
|
DW #0016 ;CODE OFFSET LOW
|
||||||
|
DW #0000 ;CODE OFFSET HIGH
|
||||||
|
DW #0000 ;END-BEG ;PRIMARY LOADER
|
||||||
|
DW #0000 ;
|
||||||
|
DW #0000 ;RESERVED
|
||||||
|
DW #0000 ;
|
||||||
|
DW START ;LOAD ADDRESS
|
||||||
|
DW START ;START ADDRESS
|
||||||
|
DW #BFFF ;STACK ADDRESS
|
||||||
|
;DS 490
|
||||||
|
|
||||||
|
START: PUSH IX
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
;
|
||||||
|
; LD HL,BUF1
|
||||||
|
; LD (HL),A
|
||||||
|
; LD DE,BUF1+1
|
||||||
|
; LD BC,BUFFERS_END-1
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
|
LD HL,'\' ;
|
||||||
|
LD (DIRSPEC),HL
|
||||||
|
;
|
||||||
|
LD HL,BUF1
|
||||||
|
LD B,BUFERS_NUMBER
|
||||||
|
.initBuffersLoop:
|
||||||
|
LD (HL),A
|
||||||
|
INC H
|
||||||
|
DJNZ .initBuffersLoop
|
||||||
|
;
|
||||||
|
|
||||||
|
LD A,MSG_HELLO
|
||||||
|
CALL MESSAGE
|
||||||
|
;
|
||||||
|
CALL INIT
|
||||||
|
JR NC,.next
|
||||||
|
;
|
||||||
|
LD HL,PRM1
|
||||||
|
LD (HL),0
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
;
|
||||||
|
.next: LD C,Dss.Version
|
||||||
|
RST ToDSS ;GET DSS VERSION
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
LD DE,#0146 ;1.70
|
||||||
|
SBC HL,DE ;CHECK DSS VERSION
|
||||||
|
POP HL
|
||||||
|
;
|
||||||
|
JP C,OLD_DSS
|
||||||
|
LD IX,BUF_PTRS
|
||||||
|
CALL EX_COMMAND_LINE
|
||||||
|
|
||||||
|
CALL MALLOC
|
||||||
|
JR C,QUIT
|
||||||
|
|
||||||
|
;CALL FIND_CDROM
|
||||||
|
LD A,(STOPMODE)
|
||||||
|
OR A
|
||||||
|
CALL Z,COMMAND
|
||||||
|
|
||||||
|
CALL MDEALLOC
|
||||||
|
QUIT: CALL CRLF
|
||||||
|
.loop: LD BC,Dss.Exit
|
||||||
|
RST ToDSS
|
||||||
|
JP .loop
|
||||||
|
|
||||||
|
OLD_DSS
|
||||||
|
LD A,MSG_OLD_DSS
|
||||||
|
CALL MESSAGE
|
||||||
|
JR QUIT
|
||||||
|
|
||||||
|
HNDMEM DB #FF
|
||||||
|
|
||||||
|
MALLOC
|
||||||
|
LD BC,2*256 + Dss.GetMem
|
||||||
|
RST ToDSS
|
||||||
|
JR NC,M_ALLOK
|
||||||
|
LD A,MSG_MEMERROR
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
M_ALLOK
|
||||||
|
LD (HNDMEM),A
|
||||||
|
LD BC,1*256 + Dss.SetWin3
|
||||||
|
RST ToDSS
|
||||||
|
LD HL,BANKTBL
|
||||||
|
LD C,BIOS.GetMemBlkPages
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
MDEALLOC
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
LD C,Dss.FreeMem
|
||||||
|
JP ToDSS
|
||||||
|
|
||||||
|
; FIND_CDROM
|
||||||
|
; LD IX,DEV_CFG
|
||||||
|
; LD C,BIOS.DRV_LIST
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD A,(IX+3) ;CDROM
|
||||||
|
; OR A
|
||||||
|
; JR Z,W_O_CD
|
||||||
|
; LD A,(CDDRIVE)
|
||||||
|
; INC A
|
||||||
|
; RET NZ
|
||||||
|
; LD A,SLAVE ;DEFAULT
|
||||||
|
; LD (CDDRIVE),A
|
||||||
|
; RET
|
||||||
|
; W_O_CD LD A,MSG_NO_CDROM
|
||||||
|
; CALL MESSAGE
|
||||||
|
; LD A,1
|
||||||
|
; LD (STOPMODE),A
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;BUF_PRINT
|
||||||
|
; LD HL,BUF_PTRS
|
||||||
|
;BUF_PL LD E,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD D,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; RET Z
|
||||||
|
; PUSH HL
|
||||||
|
; EX DE,HL
|
||||||
|
; LD C,Dss.PCHARS
|
||||||
|
; RST ToDSS
|
||||||
|
; CALL CRLF
|
||||||
|
; POP HL
|
||||||
|
; JR BUF_PL
|
||||||
|
|
||||||
|
;OPEN_FILE
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; XOR A
|
||||||
|
; LD C,Dss.OPEN
|
||||||
|
; RST ToDSS
|
||||||
|
; LD (FILEHND),A
|
||||||
|
; RET NC
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; CALL PUTVAR
|
||||||
|
; LD A,MSG_CANT_OPEN
|
||||||
|
; CALL MESSAGE
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;CLOSE_FILE
|
||||||
|
; LD A,(FILEHND)
|
||||||
|
; LD C,Dss.CLOSE
|
||||||
|
; RST ToDSS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
INIT: XOR A
|
||||||
|
LD (STOPMODE),A
|
||||||
|
DEC A
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
;
|
||||||
|
LD BC,+(#C0-1)*256 + BIOS.DRV_DETECT
|
||||||
|
.loop: INC B
|
||||||
|
LD A,B
|
||||||
|
CP #C4
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
PUSH BC
|
||||||
|
RST ToBIOS
|
||||||
|
POP BC
|
||||||
|
JR C,.loop
|
||||||
|
LD A,B
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; LD C,BIOS.DRV_RESET
|
||||||
|
; JP ToBIOS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;VARIABLES
|
||||||
|
|
||||||
|
; FILENAME DS 256
|
||||||
|
; FILEHND DB #FF
|
||||||
|
|
||||||
|
STOPMODE DB #00
|
||||||
|
|
||||||
|
INCLUDE "cmdparse.asm"
|
||||||
|
INCLUDE "command.asm"
|
||||||
|
INCLUDE "cd_dos.asm"
|
||||||
|
|
||||||
|
CRLF: PUSH HL
|
||||||
|
LD HL,MSG0.crlf
|
||||||
|
LD C,Dss.PChars
|
||||||
|
; LD A,#0D
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
; RST #10
|
||||||
|
; LD A,#0A
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
ERROR: CP MAX_DSS_ERR
|
||||||
|
LD E,A
|
||||||
|
LD D,0
|
||||||
|
JR C,.ERR_MSG
|
||||||
|
LD E,D
|
||||||
|
;JP .ERR_MSG
|
||||||
|
;
|
||||||
|
.ERR_MSG: PUSH DE
|
||||||
|
LD HL,ERRCDX
|
||||||
|
CALL PRINTZ
|
||||||
|
POP DE
|
||||||
|
CALL FMESAGE
|
||||||
|
CALL PRINTZ
|
||||||
|
CALL CRLF
|
||||||
|
JP CRLF
|
||||||
|
|
||||||
|
|
||||||
|
FMESAGE INC DE
|
||||||
|
LD HL,ERR0
|
||||||
|
LD BC,ERR0.Size
|
||||||
|
LCPIR XOR A
|
||||||
|
CPIR
|
||||||
|
RET PO
|
||||||
|
RET NZ
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP NZ,LCPIR
|
||||||
|
RET
|
||||||
|
|
||||||
|
MAX_DSS_ERR EQU 33
|
||||||
|
|
||||||
|
ERRCDX DB "CDX: ",0
|
||||||
|
|
||||||
|
include 'Shared_includes/constants/dss_errors.z80'
|
||||||
|
; ERR0 DB #00
|
||||||
|
; DB "Unknown error",0
|
||||||
|
; DB "Invalid function",0
|
||||||
|
; DB "Invalid drive number",0
|
||||||
|
; DB "File not found",0
|
||||||
|
; DB "Path not found",0
|
||||||
|
; DB "Invalid handle",0
|
||||||
|
; DB "Extended error 6",0
|
||||||
|
; DB "File exist",0
|
||||||
|
; DB "File read only",0
|
||||||
|
; DB "Root overflow",0
|
||||||
|
; DB "No free space",0
|
||||||
|
; DB "Directory not empty",0
|
||||||
|
; DB "Can't delete current directory",0
|
||||||
|
; DB "Invalid media",0
|
||||||
|
; DB "Unknown operation",0 ;R02
|
||||||
|
; DB "Directory exist",0
|
||||||
|
; DB "Invalid filename",0
|
||||||
|
; DB "Invalid EXE-file",0
|
||||||
|
; DB "Not supported EXE-file",0
|
||||||
|
; DB "Access denied",0
|
||||||
|
; DB "Not ready",0
|
||||||
|
; DB "Seek error",0
|
||||||
|
; DB "Sector not found",0
|
||||||
|
; DB "CRC error",0
|
||||||
|
; DB "Write protect",0
|
||||||
|
; DB "Read error",0
|
||||||
|
; DB "Write error",0
|
||||||
|
; DB "Drive failure",0
|
||||||
|
; DB "Extended error 28",0
|
||||||
|
; DB "Extended error 29",0
|
||||||
|
; DB "No free memory",0
|
||||||
|
; DB "Invalid memory block",0
|
||||||
|
; DB "Extended error 32",0
|
||||||
|
; DB "Extended error 33",0
|
||||||
|
; DB "Extended error 34",0
|
||||||
|
; DB "35",0
|
||||||
|
; DB "36",0
|
||||||
|
; DB "37",0
|
||||||
|
; DB "38",0
|
||||||
|
; DB "39",0
|
||||||
|
; DB "40",0
|
||||||
|
; DB "41",0
|
||||||
|
; DB "42",0
|
||||||
|
; DB "43",0
|
||||||
|
; DB "44",0
|
||||||
|
; DB "45",0
|
||||||
|
; DB "46",0
|
||||||
|
; DB "47",0
|
||||||
|
; DB "48",0
|
||||||
|
; DB "49",0
|
||||||
|
; DB "50"
|
||||||
|
; DB 0
|
||||||
|
; ERR1
|
||||||
|
|
||||||
|
;FIND_MESSAGE
|
||||||
|
; LD E,A
|
||||||
|
; LD D,0
|
||||||
|
; CALL MESAGE
|
||||||
|
; RET
|
||||||
|
MESSAGE LD E,A
|
||||||
|
LD D,0
|
||||||
|
CALL MESAGE
|
||||||
|
JP PRINTZ
|
||||||
|
;
|
||||||
|
|
||||||
|
MESAGE INC DE
|
||||||
|
LD HL,MSG0
|
||||||
|
LD BC,MSG1-MSG0
|
||||||
|
LCPIR2 XOR A
|
||||||
|
CPIR
|
||||||
|
RET PO
|
||||||
|
RET NZ
|
||||||
|
DEC DE
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JP NZ,LCPIR2
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRINTZ LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
CP "%"
|
||||||
|
JR NZ,PRINTZ2
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
SUB "1"
|
||||||
|
PUSH HL
|
||||||
|
LD L,A
|
||||||
|
LD H,0
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
ADD HL,HL
|
||||||
|
LD BC,PRM1
|
||||||
|
ADD HL,BC
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
JR PRINTZ
|
||||||
|
PRINTZ2 LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
JP PRINTZ
|
||||||
|
|
||||||
|
PRINT_ LD BC,1*256 + BIOS.LP_PRINT_SYM
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
PUTVAR LD DE,PRM1
|
||||||
|
PUTPRM LD BC,15
|
||||||
|
PUTPRMA LD A,(HL)
|
||||||
|
LDI
|
||||||
|
RET PO
|
||||||
|
OR A
|
||||||
|
JR NZ,PUTPRMA
|
||||||
|
RET
|
||||||
|
|
||||||
|
CDDRIVE DB #FF
|
||||||
|
|
||||||
|
PRM1 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM2 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM3 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM4 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM5 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM6 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM7 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM8 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
PRM9 DB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
|
||||||
|
|
||||||
|
|
||||||
|
MSG_HELLO EQU 0
|
||||||
|
MSG_TRAY_OPEN EQU 1
|
||||||
|
MSG_TRAY_CLOSE EQU 2
|
||||||
|
MSG_USAGE EQU 3
|
||||||
|
MSG_UNK_DEVICE_NUMBER EQU 4
|
||||||
|
MSG_UNK_COMMAND EQU 5
|
||||||
|
;MSG_DISABLED EQU 6
|
||||||
|
;MSG_ENABLED EQU 7
|
||||||
|
MSG_DONE EQU 6 ;8
|
||||||
|
MSG_NO_CDROM EQU 7 ;9
|
||||||
|
MSG_IO_ERROR EQU 8 ;10
|
||||||
|
MSG_OLD_DSS EQU 9 ;11
|
||||||
|
MSG_COPYFILE EQU 10 ;12
|
||||||
|
MSG_DIRHEAD EQU 11 ;13
|
||||||
|
MSG_DIRENTRY EQU 12 ;14
|
||||||
|
MSG_MEMERROR EQU 13 ;15
|
||||||
|
MSG_COPYTO EQU 14 ;16
|
||||||
|
MSG_CD_READ_ERR EQU 15 ;17
|
||||||
|
MSG_F_WRITE_ERR EQU 16 ;18
|
||||||
|
MSG_FAILURE EQU 17 ;19
|
||||||
|
MSG_ERR_DEST EQU 18 ;20
|
||||||
|
MSG_COPYABORTED EQU 19 ;21
|
||||||
|
|
||||||
|
MSG0 BYTE 0
|
||||||
|
;0
|
||||||
|
BYTE "CDROM eXtension utility v1.01, 2023 (c) Sprinter Team",CR,LF
|
||||||
|
DZ "Type CDX.EXE -? for help.",CR,LF,CR,LF
|
||||||
|
;1
|
||||||
|
DZ "Opening tray..."
|
||||||
|
;2
|
||||||
|
DZ "Closing tray..."
|
||||||
|
; 01234567890123456789012345678901234567890123456789012345678901234567890123456789
|
||||||
|
;3
|
||||||
|
BYTE ' Usage: CDX.EXE [-switches] [command] [param1] [param2]',CR,LF,CR,LF
|
||||||
|
BYTE 'Commands:',CR,LF
|
||||||
|
BYTE ' CDX.EXE OPEN - Open tray',CR,LF
|
||||||
|
BYTE ' CDX.EXE CLOSE - Close tray',CR,LF
|
||||||
|
BYTE ' CDX.EXE LIST [\cd_path\][pattern] - Show CDROM filelist',CR,LF
|
||||||
|
BYTE ' CDX.EXE COPY \source d:\destination\ - Copy file(s) from CDROM to another disk',CR,LF
|
||||||
|
BYTE ' CDX.EXE DUMP sector [offset] - Show sector dump from CDROM',CR,LF
|
||||||
|
BYTE CR,LF
|
||||||
|
BYTE 'Switches:',CR,LF
|
||||||
|
BYTE ' -1 CDROM installed as Primary IDE Master device',CR,LF
|
||||||
|
BYTE ' -2 CDROM installed as Primary IDE Slave device',CR,LF
|
||||||
|
BYTE ' -3 CDROM installed as Secondary IDE Master device',CR,LF
|
||||||
|
BYTE ' -4 CDROM installed as Secondary IDE Slave device',CR,LF
|
||||||
|
DZ ' -h,? Help page',CR,LF
|
||||||
|
;4
|
||||||
|
DZ " Error: Unknown device number %1",CR,LF
|
||||||
|
;5
|
||||||
|
DZ " Error: Unknown command: %1",CR,LF
|
||||||
|
;6
|
||||||
|
;DZ "Disabled"
|
||||||
|
;7
|
||||||
|
;DZ "Enabled"
|
||||||
|
;6
|
||||||
|
DZ "Done!",CR,LF
|
||||||
|
;7
|
||||||
|
DZ " Error: Can't find CDROM device %1",CR,LF
|
||||||
|
;8
|
||||||
|
DZ " Error: I/O Error",CR,LF
|
||||||
|
;9
|
||||||
|
DZ " Error: Need DSS version 1.70 or higher",CR,LF
|
||||||
|
;10
|
||||||
|
DZ "Copying "
|
||||||
|
;11
|
||||||
|
DZ "Directory of CDROM:"
|
||||||
|
;12 FILENAME EXT SIZE DATE TIME
|
||||||
|
DZ "%1 %2 %3 %4 %5",CR,LF
|
||||||
|
;13
|
||||||
|
DZ " Error: Memory allocation error",CR,LF
|
||||||
|
;14
|
||||||
|
DZ " to "
|
||||||
|
;15
|
||||||
|
DZ " Error: Reading failure",CR,LF
|
||||||
|
;16
|
||||||
|
DZ " Error: Writing failure",CR,LF
|
||||||
|
;17
|
||||||
|
DZ "Failure!",CR,LF
|
||||||
|
;18
|
||||||
|
DZ " Error: Can't open destination file",CR,LF
|
||||||
|
;19
|
||||||
|
DZ "Copying aborted",CR,LF
|
||||||
|
;20
|
||||||
|
.crlf: DZ CR,LF
|
||||||
|
;21
|
||||||
|
BYTE 0
|
||||||
|
MSG1
|
||||||
|
|
||||||
|
BUF_PTRS
|
||||||
|
DW BUF1,BUF2,BUF3,BUF4,0
|
||||||
|
|
||||||
|
;-------------------------------/BUFFERS\-------------------------------;
|
||||||
|
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
|
||||||
|
;
|
||||||
|
BUFFERS_START EQU $
|
||||||
|
;DS 256-($-FF_STRUCT)
|
||||||
|
|
||||||
|
DIRSPEC: EQU FF_STRUCT+256
|
||||||
|
;DB '\',0
|
||||||
|
;DS 254
|
||||||
|
BUF1 EQU DIRSPEC+256
|
||||||
|
BUF2 EQU DIRSPEC+256+256
|
||||||
|
BUF3 EQU DIRSPEC+256+256+256
|
||||||
|
BUF4 EQU DIRSPEC+256+256+256+256
|
||||||
|
ARGCBUF EQU DIRSPEC+256+256+256+256+256
|
||||||
|
DUMPBUF EQU DIRSPEC+256+256+256+256+256+256
|
||||||
|
BUFFERS_END EQU DUMPBUF+2048-BUFFERS_START
|
||||||
|
;
|
||||||
|
BUFERS_NUMBER EQU 6
|
||||||
|
;
|
||||||
|
ASSERT (DUMPBUF+2048 < #C000), "NO FREE SPACE FOR BUFFERS"
|
||||||
|
;-----------------------------------------------------------------------;
|
||||||
|
DEV_CFG
|
||||||
|
;[END]
|
||||||
7
CDX.TXT
Normal file
7
CDX.TXT
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
CDROM eXtension utility version 1.01
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
It's utility came for solving the problem with support CDROM in DSS ver 1.x.
|
||||||
|
It's allow browse and copy files that stored on your CD. Also utility has commands
|
||||||
|
for tray control.
|
||||||
89
CMDPARSE.ASM
Normal file
89
CMDPARSE.ASM
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
; HL - exe-prefix
|
||||||
|
; IX - pointers at work buffers
|
||||||
|
EX_COMMAND_LINE
|
||||||
|
INC HL
|
||||||
|
NEXTPR LD DE,ARGCBUF
|
||||||
|
LD BC,Dss.EX_Path.GSWITCH
|
||||||
|
RST ToDSS
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
LD A,(ARGCBUF)
|
||||||
|
OR A
|
||||||
|
JR Z,EOCL ;end of command line
|
||||||
|
CP "-"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
CP "/"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
LD HL,ARGCBUF
|
||||||
|
LD E,(IX+0)
|
||||||
|
LD D,(IX+1)
|
||||||
|
INC IX
|
||||||
|
INC IX
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,CL_FAILURE
|
||||||
|
; LD A,1
|
||||||
|
; LD (NAME_FLG),A
|
||||||
|
MOVNAME LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,MOVNAME
|
||||||
|
EOCL POP HL
|
||||||
|
POP AF
|
||||||
|
JR NC,NEXTPR
|
||||||
|
RET
|
||||||
|
|
||||||
|
CL_FAILURE
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ITCKEY: LD A,(ARGCBUF+1)
|
||||||
|
CP "5"
|
||||||
|
JR NC,.HELP
|
||||||
|
CP "1"
|
||||||
|
JR NC,.number
|
||||||
|
; ERROR
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_UNK_DEVICE_NUMBER
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
;
|
||||||
|
.number:;
|
||||||
|
SUB A,'1'
|
||||||
|
OR #C0
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
LD C,BIOS.DRV_RESET
|
||||||
|
RST ToBIOS
|
||||||
|
JR NC,EOCL
|
||||||
|
;
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
SCF
|
||||||
|
JR CL_FAILURE
|
||||||
|
;
|
||||||
|
.HELP: LD A,MSG_USAGE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; MAS_CD:
|
||||||
|
; ;LD A,MASTER
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
|
|
||||||
|
; SLA_CD:
|
||||||
|
; ;LD A,SLAVE
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
942
COMMAND.ASM
Normal file
942
COMMAND.ASM
Normal file
@ -0,0 +1,942 @@
|
|||||||
|
|
||||||
|
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 #61
|
||||||
|
JP C,COMP001
|
||||||
|
CP #7B
|
||||||
|
JP NC,COMP001
|
||||||
|
SUB #20
|
||||||
|
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
|
||||||
|
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,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.CD_Close
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
COPEN: LD A,MSG_TRAY_OPEN
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD BC,BIOS.DRV_EXTENDED.CD_Eject
|
||||||
|
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
|
||||||
|
;
|
||||||
1220
Cd_dos.asm
Normal file
1220
Cd_dos.asm
Normal file
File diff suppressed because it is too large
Load Diff
1
Shared_Includes
Submodule
1
Shared_Includes
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa
|
||||||
Loading…
Reference in New Issue
Block a user