какая-то из уже перепиленных версий

This commit is contained in:
Tolik 2025-01-17 23:41:59 +10:00
commit 3a5f267f9a
6 changed files with 2783 additions and 0 deletions

524
CDX.ASM Normal file
View 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
View 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
View 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
View 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

File diff suppressed because it is too large Load Diff

1
Shared_Includes Submodule

@ -0,0 +1 @@
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa