This commit is contained in:
Tolik 2024-12-04 22:18:39 +10:00
parent f580b60110
commit c82b010f1e
15 changed files with 4137 additions and 2450 deletions

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
JP 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]

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.

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

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
;

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,525 @@
NAM EQU 0
EXT EQU 8
ATR EQU 11
CLU3 EQU 20
CLU4 EQU 21
TIM1 EQU 22
TIM2 EQU 23
DAT1 EQU 24
DAT2 EQU 25
CLU1 EQU 26
CLU2 EQU 27
LEN1 EQU 28
LEN2 EQU 29
LEN3 EQU 30
LEN4 EQU 31
POS1 EQU 32
POS2 EQU 33
POS3 EQU 34
POS4 EQU 35
DIRCLU1 EQU 36
DIRCLU2 EQU 37
HND1 EQU 38
HND2 EQU 39
FDRV EQU 40
AMODE EQU 41
FTASK EQU 42
DIR EQU #C000
DIRPAGE EQU 0
;ACCESS MODE:
; 00 - READ/WRITE
; 01 - READ
; 02 - WRITE
;File Manipulator (FM)
FM_BUF DEFB ". " ;+00 NAME
DEFB " " ;+08 EXT
DEFB #10 ;+11 ATTRIBUT
DEFB 0,0,0,0,0,0,0,0,0,0 ;+12 RESERVED
DEFW #0000 ;+22 TIME
DEFW #0000 ;+24 DATE
DEFW #0000 ;+26 START CLUSTER
DEFW #0000,#0000 ;+28 SIZE FILE
DEFW #0000,#0000 ;+32 FILE POSITION (FP)
DEFW #0000 ;+36 DIRECTORY CLUSTER
DEFW #0000 ;+38 HANDLE NUMBER
DEFB #00 ;+40 DRIVE OR CURRENT
DEFB #00 ;+41 ACCESS MODE
DEFB #00 ;+42 TASK
DEFB #00 ;+43 EMPTY
END_FM
;End of FM
DEFS 44*1,0
FM_SIZE EQU END_FM-FM_BUF
SET_FM PUSH DE
INC A
LD IY,FM_BUF-FM_SIZE
LD DE,FM_SIZE
SET_FM1 ADD IY,DE
DEC A
JR NZ,SET_FM1
POP DE
LD A,(IY+0)
OR A
LD A,0
RET NZ
LD A,5
SCF
RET
; HL:IX - OFFSET POINTER
; A - FILE MANIPULATOR
MOVE_FP CALL SET_FM
RET C
INC B
DEC B
JP Z,MOVE_FA
DEC B
JP Z,MOVE_FB
DEC B
JP Z,MOVE_FC
LD A,1
SCF
RET
;from Start File
MOVE_FA LD BC,0
LD DE,0
JR MOVE_F1
;from End File
MOVE_FC LD C,(IY+28)
LD B,(IY+29)
LD E,(IY+30)
LD D,(IY+31)
JR MOVE_F1
;from Current Position
MOVE_FB LD C,(IY+32)
LD B,(IY+33)
LD E,(IY+34)
LD D,(IY+35)
MOVE_F1 ADD IX,BC
ADC HL,DE
LD D,HX
LD E,LX
LD (IY+32),E
LD (IY+33),D
LD (IY+34),L
LD (IY+35),H
XOR A
RET
;FP COMPARE
; CY - FILE POINTER > SIZE
; NC - FILE POINTER < SIZE
MOVE_CP LD L,(IY+28)
LD H,(IY+29)
LD E,(IY+32)
LD D,(IY+33)
AND A
SBC HL,DE
LD L,(IY+30)
LD H,(IY+31)
LD E,(IY+34)
LD D,(IY+35)
SBC HL,DE
RET
INITDISK
LD B,4
CD_I_LP PUSH BC
LD DE,DIR
LD HL,#0000
LD IX,#0010
LD BC,#0105
; LD A,(DRIVE)
CALL CDCMD
; RST #18
POP BC
JR NC,CD_I_OK
DJNZ CD_I_LP
UNKCD SCF
RET
CD_I_OK LD HL,DIR
LD A,(HL)
INC HL
CP #01
JR NZ,UNKCD
LD A,(HL)
INC HL
CP "C"
JR NZ,UNKCD
LD A,(HL)
INC HL
CP "D"
JR NZ,UNKCD
LD HL,DIR+#009E
LD DE,ROOTDIR
LDI
LDI
LDI
LDI
LD HL,DIR+#00A6
LD DE,ROOTLEN
LDI
LDI
LDI
LDI
; POP AF
; OUT (PAGE3),A
; LD HL,0
; LD (FATCASH),HL
XOR A
RET
LOADDIR XOR A
LD A,DIRPAGE
CALL BANK
PUSH AF
LD B,3
LOADFFF PUSH BC
LD HL,#C000
LD DE,#C001
LD BC,#3FFF
LD (HL),L
LDIR
; LD A,(DRIVE)
; LD (IY+FDRV),A
;; LD C,(IY+LEN1)
LD C,(IY+LEN2)
LD B,(IY+LEN3)
LD E,(IY+LEN4)
LD D,0
SRL D
RR E
RR B
RR C
SRL D
RR E
RR B
RR C
SRL D
RR E
RR B
RR C
LD E,(IY+CLU1)
LD D,(IY+CLU2)
LD L,(IY+CLU3)
LD H,(IY+CLU4)
LD HX,D
LD LX,E
LD B,C
LD A,B
OR A
JR Z,ERRLEND
CP #08
JR C,NORLEND
LD B,8
NORLEND LD A,(DRIVE)
LD C,5
LD DE,DIR
CALL CDCMD
; RST #18
POP BC
JR NC,LOADMMM
DEC B
JP NZ,LOADFFF
POP AF
OUT (PAGE3),A
SCF
LD A,20
RET
ERRLEND POP BC
POP AF
OUT (PAGE3),A
SCF
LD A,20
RET
LOADMMM POP AF
OUT (PAGE3),A
CALL CORRDIR
AND A
RET
CORRDIR LD A,DIRPAGE
CALL BANK
PUSH AF
LD HL,DIR
LD DE,DIR
CORRL1 PUSH DE
LD C,(HL)
LD B,0
LD DE,ENTRYBF
LDIR
POP DE
PUSH HL
LD HL,FCDFLEN
LD C,(HL)
LD B,0
ADD HL,BC
INC HL
LD (HL),0
SBC HL,BC
PUSH DE
CALL MASK
POP HL
LD BC,11
ADD HL,BC
LD A,(FCDFLAG)
AND 2
LD A,#00 ;ATTRIBUT FILE
JR Z,CORRL0
LD A,#10 ;ATTRIBUT DIRECTORY
CORRL0 LD (HL),A
INC HL
XOR A
LD B,8
FILLCDN LD (HL),A
INC HL
DJNZ FILLCDN
LD A,(FCDSEC+2)
LD (HL),A
INC HL
LD A,(FCDSEC+3)
LD (HL),A
INC HL
LD DE,#0000 ;TIME
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,#0000 ;DATE
LD (HL),E
INC HL
LD (HL),D
INC HL
LD DE,(FCDSEC)
LD (HL),E
INC HL
LD (HL),D
INC HL
EX DE,HL
LD HL,FCDLEN
LDI
LDI
LDI
LDI
POP HL
BIT 7,H
JR Z,CORRL2
LD A,(HL)
OR A
JP NZ,CORRL1
LD L,0
INC H
JR Z,CORRL2
LD A,(HL)
OR A
JP NZ,CORRL1
CORRL2 XOR A
LD (DE),A
LD DE,(ROOTDIR+0)
LD L,(IY+CLU1)
LD H,(IY+CLU2)
AND A
SBC HL,DE
JR NZ,CORRL6
LD DE,(ROOTDIR+2)
LD L,(IY+CLU3)
LD H,(IY+CLU4)
AND A
SBC HL,DE
JR NZ,CORRL6
LD HL,DIR
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),#E5
LD BC,#0020
ADD HL,BC
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),#E5
JR CORRL4
CORRL6 LD HL,DIR
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),"."
LD BC,#0020
ADD HL,BC
LD A,(HL)
CP " "
JR NZ,CORRL4
LD (HL),"."
INC HL
LD (HL),"."
CORRL4 POP AF
OUT (PAGE3),A
AND A
RET
ENTRYBF
DEFB #00 ;Entry lenght
DEFB #00 ;XAR in LBN
FCDSEC DEFW #00,#00 ;Start sector (Intel)
DEFW #00,#00 ;Start sector (Motorola)
FCDLEN DEFW #00,#00 ;Lenght file (Intel)
DEFW #00,#00 ;Lenght file (Motorola)
FCDYEAR DEFB #00 ;Year
FCDMOUN DEFB #00 ;Month
FCDDAY DEFB #00 ;Day
FCDHOUR DEFB #00 ;Hour
FCDMIN DEFB #00 ;Minute
FCDSECN DEFB #00 ;Second
DEFB #00 ;Reserve
FCDFLAG DEFB #00 ;Flag
DEFB #00 ;Interlive size
DEFB #00 ;Interlive skip factor
DEFW #0000 ;Volume Set Sequence (Intel)
DEFW #0000 ;Volume Set Sequence (Motorola)
FCDFLEN DEFB #00
DEFSA EQU $-ENTRYBF
FCDNAME DEFS #100-DEFSA
ROOTDIR DEFW 0,0
ROOTLEN DEFW 0,0
DIRSIZE DEFW 0
BANK LD C,A
LD B,0
LD HL,BANKTBL
ADD HL,BC
IN A,(PAGE3)
LD C,PAGE3
OUTI
RET
BANKTBL DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
DEFB #FF,#FF,#FF,#FF,#FF,#FF,#FF,#FF
HANDTA DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
MASKARE
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DEFB 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
; HL - MASK "file*.t??"
; DE - 11 bytes filename
; RET: C=2 FILE WITHOUT EXTENTION
; C=1 FILE WITH EXTENTION
MASK PUSH HL
PUSH DE
LD H,D
LD L,E
INC DE
LD (HL),#20
LD BC,10
LDIR
POP DE
POP HL
LD A,(HL)
CP #21
RET C
LD BC,#0902
MASK1 LD A,(HL)
CP #21
CCF
RET NC
CP #22
JR Z,MASK7
CP "*"
JR Z,MASK3
CP "+"
JR Z,MASK7
CP ","
JR Z,MASK7
CP "."
JR Z,MASK5
CP "/"
JR Z,MASK7
CP ":"
JR Z,MASK7
CP ";"
JR Z,MASK7
CP "<"
JR Z,MASK7
CP "="
JR Z,MASK7
CP ">"
JR Z,MASK7
CP "["
JR Z,MASK7
CP '\' ;
JR Z,MASK7
CP "]"
JR Z,MASK7
CP "|"
JR Z,MASK7
CP "a"
JR C,MASK2
CP "{"
JR NC,MASK2
SUB #20
MASK2 LD (DE),A
INC HL
INC DE
DJNZ MASK1
MASK7 LD A,16
SCF
RET
MASK3 LD A,"?"
INC HL
DJNZ MASK6
LD A,16
SCF
RET
MASK6 LD (DE),A
INC DE
DJNZ MASK6
LD B,1
JR MASK1
MASK5 LD A," "
INC HL
DJNZ MASK4
LD B,4
DEC C
JP NZ,MASK1
LD A,16
SCF
RET
MASK4 LD (DE),A
INC DE
DJNZ MASK4
LD B,4
DEC C
JP NZ,MASK1
LD A,16
SCF
RET

View File

@ -0,0 +1,372 @@
MASTER EQU 0
SLAVE EQU 1
;========================================================
R170 EQU #0050 ;Data
R171 EQU #0051 ;Error
R172 EQU #0052 ;Direct
R173 EQU #0053 ;Reserve
R174 EQU #0054 ;Lenght block low
R175 EQU #0055 ;Lenght block high
R176 EQU #4052 ;Drive device
R177 EQU #4053 ;Status
W170 EQU #0150 ;Data
W171 EQU #0151 ;????
W172 EQU #0152 ;????
W173 EQU #0153 ;Reserve
W174 EQU #0154 ;Lenght block low
W175 EQU #0155 ;Lenght block high
W176 EQU #4152 ;Drive device
W177 EQU #4153 ;Command
BSY EQU 7
DRQ EQU 3
ERR EQU 0
;-----------------------------------------------------------------------;
SIZESEC: DW #0800
PKTSIZE: DB 12
;-----------------------------------------------------------------------;
CDCMD BIT 7,C
JP NZ,EXTCD
INC C
DEC C
JP Z,RESETCD ; 0
DEC C
JP Z,RESETCD ; 1
DEC C
JP Z,NOPCDC ; 2
DEC C
JP Z,CHEK_C ; 3
DEC C
JP Z,GBPB_C ; 4 ; [ ] ¯¥à¥­¥á⨠¢ DSS
DEC C
JP Z,READC ; 5
DEC C
JP Z,NOPCDC ; 6
NOPCDC LD A,1
SCF
RET
EXTCD RES 7,C
INC C
DEC C
JP Z,NOPCDC
DEC C
JP Z,OPENC
DEC C
JP Z,CLOSC
JP NOPCDC
RESETCD LD B,50
RESECD PUSH BC
LD A,(CDDRIVE)
CALL CD_TEST
POP BC
RET NC
OR A
RET Z
EI
HALT
DJNZ RESECD
RET
CHEK_C LD A,(CDDRIVE)
CALL CD_TEST
LD A,#FF
AND A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; [ ] ¯¥à¥­¥á⨠¢ DSS
GBPB_C LD HL,CD_BPB
LD BC,#0200
LDIR
XOR A
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
READC LD A,(CDDRIVE)
JP CD_READ
OPENC LD A,(CDDRIVE)
JP CD_OPEN
CLOSC LD A,(CDDRIVE)
JP CD_CLOS
CD_TEST LD HL,CMDNOPP
LD DE,0
JP AP_COM
CD_OPEN LD HL,CMDOPEN
LD DE,0
JP AP_COM
CD_CLOS LD HL,CMDCLOS
LD DE,0
JP AP_COM
; HL:IX - SECTOR
; DE - ADDRESS
; B - SECTOR COUNT
; A - DRIVE
CD_READ:
LD C,A
LD A,H
LD (SECREAD+0),A
LD A,L
LD (SECREAD+1),A
LD A,XH
LD (SECREAD+2),A
LD A,XL
LD (SECREAD+3),A
LD A,B
LD (COUNT+1),A
LD HL,CMDREAD
LD A,C
CALL AP_COM
RET
; INPUT: HL - AP paket (12bytes)
; RETURN: CF - ERROR
; 01h - RECOVERED ERROR
; 02h - NOT READY
; 03h - MEDIUM ERROR
; 04h - HARDWARE ERROR
; 05h - ILLEGAL REQUEST
; 06h - UNIT ATTETION
; 07h - DATA PROTECT
; 0Bh - ABORTED COMMAND
; 80h - TIME OUT
AP_COM ;AND #01
;LD A,#A0 ;0
;JR Z,APCOM1
;LD A,#B0
APCOM1 ;LD BC,W176
;OUT (C),A ;SELECT DRIVE
EXX
LD DE,#8000
LD BC,R177
CALL WAITPRT
EXX
JR NC,CDREADY
LD BC,W177
LD A,#08
OUT (C),A
LD B,#80
DJNZ $
EXX
LD DE,#8000
LD BC,R177
CALL WAITPRT
EXX
RET C
CDREADY XOR A
EXX
LD BC,W171
OUT (C),A
LD DE,(SIZESEC) ;SIZE BLOCK
LD BC,W174
OUT (C),E
LD BC,W175
OUT (C),D
LD BC,W177
LD A,#A0 ;ATAPI.Packet
OUT (C),A
LD DE,#8000
LD BC,R177
CALL WAITPRT
EXX
RET C
EXX
LD DE,#0908
LD BC,R177
CALL WAITPRT
EXX
BIT ERR,A
JR NZ,CDERROR
JR NC,YEP_DRQ
LD A,#80
RET
YEP_DRQ LD BC,W170
LD A,(PKTSIZE)
SRL A
OUTPKT OUTI
OUTI
DEC A
JR NZ,OUTPKT
LD B,#80
DJNZ $
AP_LOOP EXX
LD DE,#8000
LD BC,R177
CALL WAITPRT
EXX
RET C
LD BC,R177
IN A,(C)
BIT ERR,A
JR Z,NO_ERR
CDERROR LD BC,R171 ;ERROR
IN A,(C)
RRCA
RRCA
RRCA
RRCA
AND #0F
SCF
RET
NO_ERR BIT DRQ,A
LD A,0
RET Z ;NO DATA REQUEST
EX DE,HL
LD BC,R174
IN E,(C)
LD BC,R175
IN D,(C) ;TRANSFER BLOCK SIZE
LD A,D
OR E
RET Z ;BLOCK = 0
LD BC,R172
IN A,(C)
AND #02
;CP #02
JP NZ,FROM_CD
TO_CD LD BC,R170
WR_T_CD OUTI
OUTI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,WR_T_CD
EX DE,HL
JR AP_LOOP
FROM_CD LD A,H
OR L
JR Z,NULL
LD BC,R170
RD_F_CD INI
INI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,RD_F_CD
EX DE,HL
JR AP_LOOP
NULL LD BC,R170
RD_N_CD IN A,(C)
DEC B
IN A,(C)
DEC B
DEC DE
DEC DE
LD A,D
OR E
JR NZ,RD_N_CD
; DE = 0 !!!
JR AP_LOOP
; E - Second * 10
PAUSE LD HL,#0000
PAUSE1 DEC L
JR NZ,PAUSE1
DEC H
JR NZ,PAUSE1
DEC E
JR NZ,PAUSE1
RET
; D - MASK
; E - PATTERN
; BC - PORT
WAITPRT LD A,100
LD HL,#0000
WAITPX EX AF,AF'
WAITP0 IN A,(C)
CP #FF
JR Z,WAITP1
AND D
CP E
JR NZ,WAITP2
AND A
RET
WAITP2 DEC L
JR NZ,WAITP0
DEC H
JR NZ,WAITP0
EX AF,AF'
DEC A
JR NZ,WAITPX
EX AF,AF'
WAITP1 SCF
RET
CMDNOPP DEFB #00
DEFB 00,00,00
DEFB #00
DEFB 00,00,00
DEFB 00,00,00
DEFB #00
CMDOPEN DEFB #1B
DEFB #00,#00,#00
DEFB #02
DEFB #00,#00,#00,#00,#00,#00,#00
CMDCLOS DEFB #1B
DEFB #00,#00,#00
DEFB #03
DEFB #00,#00,#00,#00,#00,#00,#00
;CMDREAD DEFB #28,#00
CMDREAD DEFB #28,#00
SECREAD DEFB #00,#00,#00,#00
DEFB #00
COUNT DEFB #00,#01
DEFB #00,#00,#00
; Area for boot sector [512Bytes]
CD_BPB DB #00,#00,#00 ; +00 JMP
DB " " ; +03 DOS NAME
; Block Parameters BIOS
DW #0200 ; +0B BYTE PER SECTOR
DB 4 ; +0D SECTORS PER CLUSTER
DW 1 ; +0E RESERVE SECTORS
DB 1 ; +10 AMOUNT FATS
DW 512 ; +11 FILES IN DIRECTORY
DW 0 ; +13 ALL SECTORS ON DISK
DB #F8 ; +15 ID FORMAT
DW 1 ; +16 SIZE FAT IN SECTORS
DW 63 ; +18 SECTOR PER TRACK
DW 255 ; +1A AMOUNT SIDES
DW #0010 ; +1C HIDDEN SECTORS
DS 24
DB "FAT16" ; +36 FAT ID
DS 453
; end boot sector
;========================================================

View File

@ -0,0 +1,356 @@
;CD ROM DRIVE DRIVER
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
; 02-08-2001 DNS Initial this module
;---------------------------------------------------------------
;========================================================
R170 EQU #0050 ;Data
R171 EQU #0051 ;Error
R172 EQU #0052 ;Direct
R173 EQU #0053 ;Reserve
R174 EQU #0054 ;Lenght block low
R175 EQU #0055 ;Lenght block high
R176 EQU #4052 ;Drive device
R177 EQU #4053 ;Status
W170 EQU #0150 ;Data
W171 EQU #0151 ;????
W172 EQU #0152 ;????
W173 EQU #0153 ;Reserve
W174 EQU #0154 ;Lenght block low
W175 EQU #0155 ;Lenght block high
W176 EQU #4152 ;Drive device
W177 EQU #4153 ;Command
RAM_ATAPI_PK EQU #FEE0
RAM_ATAPI_READ EQU #FEF0
; BSY EQU 7
; DRQ EQU 3
; ERR EQU 0
RESETC
RESETCD LD B,50
RESECD PUSH BC
LD A,1
CALL CD_TEST
POP BC
RET NC
EI
HALT
DJNZ RESECD
RET
LREADC
READC LD A,1
JP CD_READ
OPENC LD A,1
JP CD_OPEN
CLOSC LD A,1
JP CD_CLOS
SIZESEC EQU #0800
PKTSIZE EQU 12
CD_TEST LD HL,CMDNOPP
LD DE,0
CALL AP_COM
RET
DETECTC
CD_OPEN LD HL,CMDOPEN
LD DE,0
CALL AP_COM
RET
CD_CLOS LD HL,CMDCLOS
LD DE,0
CALL AP_COM
RET
; HL:IX - SECTOR
; DE - ADDRESS
; B - SECTOR COUNT
; A - DRIVE
CD_READ LD C,A
EXX
LD C,PAGE3
IN A,(C)
PUSH AF
LD A,SYSPAGE
OUT (C),A
LD HL,CMDREAD
LD DE,RAM_ATAPI_READ
LD BC,PKTSIZE
LDIR
EXX
LD A,H
LD (RAM_ATAPI_READ+SECREAD+0),A ;R01
LD A,L
LD (RAM_ATAPI_READ+SECREAD+1),A ;R01
LD A,XH
LD (RAM_ATAPI_READ+SECREAD+2),A ;R01
LD A,XL
LD (RAM_ATAPI_READ+SECREAD+3),A ;R01
LD A,B
LD (RAM_ATAPI_READ+COUNT+1),A ;R01
POP AF
OUT (PAGE3),A
;R01 LD HL,CMDREAD
LD HL,RAM_ATAPI_READ
LD A,C
CALL AP_COM
RET
; INPUT: HL - AP paket (12bytes)
; RETURN: CF - ERROR
; 01h - RECOVERED ERROR
; 02h - NOT READY
; 03h - MEDIUM ERROR
; 04h - HARDWARE ERROR
; 05h - ILLEGAL REQUEST
; 06h - UNIT ATTETION
; 07h - DATA PROTECT
; 0Bh - ABORTED COMMAND
; 80h - TIME OUT
AP_COM AND #01
LD A,#A0
JR Z,APCOM1
LD A,#B0
APCOM1 LD BC,W176
OUT (C),A ;SELECT DRIVE
EXX
LD DE,#8000
LD BC,R177
CALL CWAITPRT
EXX
JR NC,CDREADY
LD BC,W177
LD A,#08
OUT (C),A
LD B,#00
DJNZ $
EXX
LD DE,#8000
LD BC,R177
CALL CWAITPRT
EXX
RET C
CDREADY
LD C,PAGE3
IN B,(C)
PUSH DE
PUSH BC
LD A,SYSPAGE
OUT (C),A
LD A,B
LD DE,RAM_ATAPI_PK
LD BC,PKTSIZE
LDIR
POP BC
POP DE
OUT (C),B
XOR A
EXX
OUT (C),A
XOR A
LD BC,W171
OUT (C),A
LD DE,SIZESEC ;SIZE BLOCK
LD BC,W174
OUT (C),E
LD BC,W175
OUT (C),D
LD BC,W177
LD A,#A0
OUT (C),A
LD DE,#8000
LD BC,R177
CALL CWAITPRT
EXX
RET C
EXX
IF _MAME
LD DE,#0808
ELSE
LD DE,#0908
ENDIF
LD BC,R177
CALL CWAITPRT
EXX
BIT ERR,A
JR NZ,CDERROR
JR NC,YEP_DRQ
LD A,#80
RET
YEP_DRQ LD C,PAGE3
IN B,(C)
PUSH BC
LD A,SYSPAGE
OUT (PAGE3),A
LD HL,RAM_ATAPI_PK
LD BC,W170
LD A,PKTSIZE
SRL A
OUTPKT OUTI
OUTI
DEC A
JR NZ,OUTPKT
POP BC
OUT (C),B
LD B,#80
DJNZ $
AP_LOOP EXX
LD DE,#8000
LD BC,R177
CALL CWAITPRT
EXX
RET C
LD BC,R177
IN A,(C)
BIT ERR,A
JR Z,NO_ERR
CDERROR LD BC,R171 ;ERROR
IN A,(C)
RRCA
RRCA
RRCA
RRCA
AND #0F
SCF
RET
NO_ERR BIT DRQ,A
LD A,0
RET Z ;NO DATA REQUEST
EX DE,HL
LD BC,R174
IN E,(C)
LD BC,R175
IN D,(C) ;TRANSFER BLOCK SIZE
LD A,D
OR E
RET Z ;BLOCK = 0
LD BC,R172
IN A,(C)
AND #02
CP #02
JP Z,FROM_CD
TO_CD LD BC,R170
WR_T_CD OUTI
OUTI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,WR_T_CD
EX DE,HL
JR AP_LOOP
FROM_CD LD A,H
OR L
JR Z,NULL
LD BC,R170
RD_F_CD INI
INI
DEC DE
DEC DE
LD A,D
OR E
JR NZ,RD_F_CD
EX DE,HL
JR AP_LOOP
NULL LD BC,R170
RD_N_CD IN A,(C)
DEC B
IN A,(C)
DEC B
DEC DE
DEC DE
LD A,D
OR E
JR NZ,RD_N_CD
; DE = 0 !!!
JR AP_LOOP
; E - Second * 10
PAUSE LD HL,#0000
PAUSE1 DEC L
JR NZ,PAUSE1
DEC H
JR NZ,PAUSE1
DEC E
JR NZ,PAUSE1
RET
; D - MASK
; E - PATTERN
; BC - PORT
CWAITPRT
LD A,100
LD HL,#0000
CWAITPX EX AF,AF'
CWAITP0 IN A,(C)
CP #FF
JR Z,CWAITP1
AND D
CP E
JR NZ,CWAITP2
AND A
RET
CWAITP2 DEC L
JR NZ,CWAITP0
DEC H
JR NZ,CWAITP0
EX AF,AF'
DEC A
JR NZ,CWAITPX
EX AF,AF'
CWAITP1 SCF
RET
CMDNOPP DEFB #00
DEFB 00,00,00
DEFB #00
DEFB 00,00,00
DEFB 00,00,00
DEFB #00
CMDOPEN DEFB #1B
DEFB #00,#00,#00
DEFB #02
DEFB #00,#00,#00,#00,#00,#00,#00
CMDCLOS DEFB #1B
DEFB #00,#00,#00
DEFB #03
DEFB #00,#00,#00,#00,#00,#00,#00
CMDREAD DEFB #28,#00
SECREAD EQU $-CMDREAD
DEFB #00,#00,#00,#00
DEFB #00
COUNT EQU $-CMDREAD
DEFB #00,#01
DEFB #00,#00,#00
;========================================================

View File

@ -0,0 +1,104 @@
DSS_VERSION EQU #00
DSS_CHDISK EQU #01
DSS_CURDISK EQU #02
DSS_DSKINFO EQU #03
;DSS_G_ENTRY EQU #04
; EQU #05
; EQU #06
; EQU #07
; EQU #08
DSS_BOOTDSK EQU #09
;File io
DSS_CREATE EQU #0A
DSS_CREAT_N EQU #0B
; EQU #0C
;DSS_ERASE EQU #0D
DSS_DELETE EQU #0E
;DSS_MOVE EQU #0F
DSS_RENAME EQU #10
DSS_OPEN EQU #11
DSS_CLOSE EQU #12
DSS_READ EQU #13
DSS_WRITE EQU #14
DSS_MOVE_FP EQU #15
DSS_ATTRIB EQU #16
DSS_GET_D_T EQU #17
DSS_PUT_D_T EQU #18
DSS_F_FIRST EQU #19
DSS_F_NEXT EQU #1A
DSS_MKDIR EQU #1B
DSS_RMDIR EQU #1C
DSS_CHDIR EQU #1D
DSS_CURDIR EQU #1E
; EQU #1F
; EQU #20
DSS_SYSTIME EQU #21
DSS_SETTIME EQU #22
; EQU #23
; EQU #24
; EQU #25
; EQU #26
; EQU #27
; EQU #28
; EQU #29
; EQU #2A
; EQU #2B
; EQU #2C
; EQU #2D
; EQU #2E
; EQU #2F
;Keyboard
DSS_WAITKEY EQU #30
DSS_SCANKEY EQU #31
DSS_ECHOKEY EQU #32
DSS_CTRLKEY EQU #33
;DSS_EDIT EQU #34
DSS_K_CLEAR EQU #35
DSS_K_SETUP EQU #36
DSS_TESTKEY EQU #37
;Memory
DSS_SETWIN EQU #38
DSS_SETWIN1 EQU #39
DSS_SETWIN2 EQU #3A
DSS_SETWIN3 EQU #3B
DSS_INFOMEM EQU #3C
DSS_GETMEM EQU #3D
DSS_FREEMEM EQU #3E
DSS_SETMEM EQU #3F
;Execution
DSS_EXEC EQU #40
DSS_EXIT EQU #41
DSS_WAIT EQU #42
DSS_GSWITCH EQU #43
DSS_DOSNAME EQU #44
DSS_EX_PATH EQU #45
DSS_ENVIRON EQU #46
DSS_APPINFO EQU #47
; EQU #48
; EQU #49
; EQU #4A
; EQU #4B
; EQU #4C
; EQU #4D
; EQU #4E
; EQU #4F
DSS_SETVMOD EQU #50
DSS_GETVMOD EQU #51
DSS_LOCATE EQU #52
DSS_CURSOR EQU #53
DSS_SELPAGE EQU #54
DSS_SCROLL EQU #55
DSS_CLEAR EQU #56
DSS_RDCHAR EQU #57
DSS_WRCHAR EQU #58
DSS_WINCOPY EQU #59
DSS_WINREST EQU #5A
DSS_PUTCHAR EQU #5B
DSS_PCHARS EQU #5C
;DSS_RES_PRN EQU #5D
;DSS_CTRLPRN EQU #5E
DSS_PRINT EQU #5F
;

View File

@ -0,0 +1,6 @@
00000000 00 43 44 30 30 31 01 45 4c 20 54 4f 52 49 54 4f |.CD001.EL TORITO|
00000010 20 53 50 45 43 49 46 49 43 41 54 49 4f 4e 00 00 | SPECIFICATION..|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000040 00 00 00 00 00 00 00 13 00 00 00 00 00 00 00 00 |................|

View File

@ -1,495 +0,0 @@
;!TODO ª®¤ ¤¨ª® ª®áâë«ì­ë© ¨ ¡ã¤¥â ¯¥à¥¤¥« ­ ¢¬¥áâ¥ á ¯à®æ¥¤ãன INITDVC
ReScanDRV:
.NUMBER_OF_SUBTABLES EQU 2 ;ª®«¨ç¥á⢮ â ¡«¨æ ¢â®à®£® ã஢­ï (LOGDRV, RMDRIVE)
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 0. § ¯®¬¨­ ¥¬ ¡ãâ-¤¨áª
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,B
LD (.old_letter),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 1. ª®¯¨à㥬 ¢ ¡ãä¥à â ¡«¨æë DEVICE, LOGDRV, RAMDTBL
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD HL,DEVICE
LD DE,OLD_TABLES.DEVICE
LD BC,OLD_TABLES.DEVICE - DEVICE
LDIR
;
LD A,.NUMBER_OF_SUBTABLES
LD (Fill_if_Exists.tbl),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 2. ¢ë§ë¢ ¥¬ ¨­¨æ¨ «¨§ æ¨î ¤à ©¢®¢
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
CALL INITDVC_RET_DRIVE
LD (DRV_PAGE.LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 3. áà ¢­¨¢ ¥¬ § ¯¨á¨ áâ àëå â ¡«¨æ á ­®¢ë¬¨:
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD HL,OLD_TABLES.DEVICE
LD B,DSS_MAX_DRIVES_AMOUNT
.tbl_scanNew_mainLoop:
PUSH BC
PUSH HL
; ¯®«ãç ¥¬ ­®¬¥à ¯à®æ¥¤ãàë ¤«ï í⮩ ¡ãª¢ë ¤¨áª 
LD A,(HL)
;
CP #FF
JR Z,.nextN
;
LD B,A
INC HL
LD A,(HL)
INC HL
LD H,(HL)
LD L,A
; [¨é¥¬ çâ® §  ¤à ©¢]
EX DE,HL
; FDD?
LD HL,FDD_DRV.API_TABLE
AND A
SBC HL,DE
JR Z,.nextN ; ¯à®¯ã᪠FDD ¤à ©¢®¢
; HDD?
LD HL,HDDRIVE
AND A
SBC HL,DE
; HDD! ‘¢¥àª  ¯® â ¡«¨æ¥ LOGDRV
JP Z,SCAN_TABLES.HARD_DRV
; RD?
LD HL,RMDRIVE
AND A
SBC HL,DE
; RAM Drive! ‘¢¥àª  ¯® â ¡«¨æ¥ RAMDTBL
JP Z,SCAN_TABLES.RAM_DRV
; CD/DVD?
;LD HL,CDDRIVE
;AND A
;SUB HL,DE
; CD/DVD!
; JR Z,SCAN_TABLES.CD_ROM
; á«¥¤ãî騩 ¢¨â®ª
.nextN: POP HL
.nextN2:
INC HL
INC HL
INC HL
POP BC
DJNZ .tbl_scanNew_mainLoop
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 4. áà ¢­¨¢ ¥¬ § ¯¨áì ­®¢ëå â ¡«¨æ á® áâ à묨
;  . ¥á«¨ ¤à ©¢ ⮫쪮 ¢ ­®¢®©:
;  1) ¢â몠¥¬ ¥£® ¢ ¯¥à¢ãî ᢮¡®¤­ãî § ¯¨áì ¢ DEVICE (¨«¨ áâ ¢¨¬ ¯®á«¥ ¯®á«¥¤­¥£® ¤à ©¢ )
;
; ‚•Ž„: IX - OLD_TABLES.DEVICE
; HL - OLD_TABLES.DEVICE.End
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
INC HL
LD (OLD_TABLES_CURRENT),HL
EXX
LD HL,OLD_TABLES.LOGDRV - LOGDRV
LD B,DSS_MAX_DRIVES_AMOUNT
EXX
; ­ å®¤¨¬ ¢ áâ à®© DEVICE ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã (¯à®¢¥à塞 á ª®­æ  ¢ ­ ç «®)
LD IX,OLD_TABLES.DEVICE + OLD_TABLES.DEVICE.Size - OLD_TABLES.DEVICE.TBL_Entry
LD IY,LOGDRV
LD DE,-OLD_TABLES.DEVICE.TBL_Entry ; ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ­ § ¤
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop1: LD A,#FF
CP (IX+0)
JR NZ,.loop2_start
ADD IX,DE
DJNZ .loop1
.loop1_exit:
LD A,C ; § ª®­ç¨«¨ áç¨â âì ¯¥à¥¬¥­­ãî LDRIVE
LD (DRV_PAGE.LDRIVE),A
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 5. ¯à®¢¥à塞, ­¥ £à®å­ã«áï «¨ ¡ãâ-¤¨áª.
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
.old_letter+1:
LD A,0
_CALC_DEVICE_ENTRY OLD_TABLES.DEVICE
LD A,(HL)
INC A
SCF
;JP Z,ERROR_BOOTDRV_DIES
RET Z
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
; 6. § ¬¥­ï¥¬ ­®¢ë¥ â ¡«¨æë ­  ¬®¤¨ä¨æ¨à®¢ ­­ë¥ áâ àë¥
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD HL,OLD_TABLES.DEVICE
LD DE,DEVICE
LD BC,OLD_TABLES.DEVICE - DEVICE
LDIR
;
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;7. ¢ë室
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
LD A,(DRV_PAGE.LDRIVE)
AND A
RET
; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -;
;-----------------------[]
.loop2_start:
LD C,B ; ­ ç¨­ ¥¬ áç¨â âì ¯¥à¥¬¥­­ãî LDRIVE
LD A,DSS_MAX_DRIVES_AMOUNT
SUB B ; ᪮«ìª® è £®¢ ¢¯¥àñ¤ ¯® â ¡«¨æ¥ ®áâ «®áì
LD B,A
;
.loop2: LD DE,DEVICE.TBL_Entry ; ⥯¥àì ¤¢¨£ ¥¬áï ¯® â ¡«¨æ¥ ¢¯¥àñ¤
ADD IX,DE
; âãâ 㪠§ â¥«ì ¯®ª §ë¢ ¥â ­  ¯¥à¢ãî ᢮¡®¤­ãî ï祩ªã ¯®á«¥ ¡«®ª  á ¤ ­­ë¬¨ ¤à ©¢®¢
PUSH IX
PUSH BC
CALL Fill_if_Exists
POP BC
POP IX
; NC:
; DE =  ¤à¥á ¯à®æ¥¤ãàë ®¡à ¡®â稪  â ¡«¨æë
; A = «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ ¢ â ¡«¨æ¥ ®¡à ¡®â稪 
;
; CF - ­¥â ¡®«ìè¥ ­®¢ëå § ¯¨á¥©
JR C,.loop1_exit
LD (IX+0),A
LD (IX+1),E
LD (IX+2),D
;
INC C ; ¤®¡ ¢¨«¨ ¤à ©¢
;
DJNZ .loop2
JR .loop1_exit
;-----------------------[]
;-----------------------[]
Fill_if_Exists:
.tbl+1: LD B,ReScanDRV.NUMBER_OF_SUBTABLES
DJNZ 1F
; B=1, RAMDTBL
LD A,RAMDTBL.TBL_Entry
LD IY,RAMDTBL
CALL .RUN
LD DE,RMDRIVE
RET NC
LD A,(.tbl)
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«­¥­¨¥
LD (.tbl),A
RET
;
1: DJNZ 1F
; B=2, LOGDRV
LD A,LOGDRV.TBL_Entry
LD IY,LOGDRV
CALL .RUN
LD DE,HDDRIVE
RET NC
; ¯¥à¥å®¤¨¬ ­  ¤àã£ãî â ¡«¨æã - RAMDTBL
LD A,(.tbl)
DEC A ;!!!!! ¬®¦¥â ¡ëâì ¯¥à¥¯®«­¥­¨¥
LD (.tbl),A
LD HL,OLD_TABLES.RAMDTBL
LD (OLD_TABLES_CURRENT),HL
EXX
LD B,MAX_RAMDRIVES
EXX
JR Fill_if_Exists
;
1: SCF ; unknown table number
RET
;
.RUN: EXX
;
LD D,0
LD E,A
PUSH DE
;
LD A,#FE ; ’ ª ¯®¨áª § ª®­ç¨âáï «¨¡® ­  ­®¬¥à¥ ¤à ©¢ , «¨¡® ¯® ª®­æã â ¡«¨æë
PUSH BC
CALL Find_Record.loop1 ; ¨é¥â ¢ ­®¢®© â ¡«¨æ¥ ­®¢ãî § ¯¨áì
POP BC
JR NC,1F
;
POP DE
EXX
RET
;
1: PUSH IY ; á®å࠭塞 ⥪ã騩  ¤à¥á ­®¢®© â ¡«¨æë
;
LD IY,(OLD_TABLES_CURRENT)
;
LD A,#FF ; ’ ª ¯®¨áª § ª®­ç¨âáï «¨¡® ­  ¯ãá⮩ § ¯¨á¨, «¨¡® ¯® ª®­æã â ¡«¨æë
LD C,D ; ­®¬¥à § ¯¨á¨ ¢ â ¡«¨æ¥. D=0
PUSH BC
CALL Find_Record.loop2
LD A,C
POP BC
JR NC,1F
;
POP DE
POP DE
EXX
RET
;
1: EX (SP),IY ; ¯¥à¥ª«î祭¨¥ á® áâ à®© ­  ­®¢ãî â ¡«¨æã
PUSH IY
EXX
; ¯¥à¥ª¨¤ë¢ ¥¬ § ¯¨áì ¨§ ­®¢®© ¢ áâ àãî
POP HL
POP DE
POP BC
LDIR
LD (IY),#FF ; £à®å ¥¬ ⮫쪮 çâ® ¯¥à¥ª¨­ãâãî § ¯¨áì ¨§ ­®¢®© â ¡«¨æë
AND A
RET
OLD_TABLES_CURRENT: WORD 0
;-----------------------[]
;-----------------------[]
; ‚•Ž„: A - Œ áª  ¤«ï áà ¢­¥­¨ï
; DE - „«¨­  ®¤­®© § ¯¨á¨
; IY - €¤à¥á ¤ ­­ëå ¢ â ¡«¨æ¥
; ‚›•Ž„: NC:
; IY - ­ ç «® ¯®¤å®¤ï饩 § ¯¨á¨
; C - ­®¬¥à ­®¢®© § ¯¨á¨ ¢ áâ à®© â ¡«¨æ¥
; CF - <20>¥ ­ ©¤¥­®, â ¡«¨æ  § ª®­ç¨« áì
Find_Record:
.loop1: CP (IY)
RET NC
ADD IY,DE
INC C
DJNZ .loop1
; â ¡«¨æã ¯à®è¥àá⨫¨
SCF
RET
.loop2: CP (IY)
RET Z
ADD IY,DE
INC C
DJNZ .loop2
; â ¡«¨æã ¯à®è¥àá⨫¨
SCF
RET
;-----------------------[]
;-----------------------[]
; ERROR_BOOTDRV_DIES:
; DI
; LD E,1
; LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default
; RST ToBIOS
; ;
; LD HL,#2050
; LD DE,0
; LD BC,256*COLORS.CGA.PAPER.BLUE + BIOS.LP_CLS_WIN
; RST ToBIOS
; ;
; LD A,1
; OUT (SCREEN_SWITCH),A ; set scr-2
; ;
; LD HL,.ERROR_MSG
; LD DE,#A000
; LD BC,.ERROR_MSG.size
; LD A,C
; LDIR
; ;
; LD DE,16*256 + (80-.ERROR_MSG.size)/2 ;X=0, Y=16
; LD C,BIOS.LP_SET_PLACE
; RST ToBIOS
; ;
; LD HL,#A000
; LD DE,0*256 + COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INK.WHITE
; LD B,A
; LD C,BIOS.LP_PRINT_LINE3
; RST ToBIOS
; ;
; .loop: DI
; HALT
; JR .loop
; ;
; .ERROR_MSG: DZ "Kernel panic! Boot disk lost. Press Ctrl+Alt+Del or RESET."
; .ERROR_MSG.size EQU $-.ERROR_MSG
;-----------------------[]
;-----------------------[]
; <20>… ƒ<>Ž•€œ HL!
;  . ¥á«¨ ¤à ©¢ ¥áâì ¢ ­®¢®© ¨ áâ à®©, â® § â¨à ¥¬ ¢ ­®¢®©
; â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢
; ¡. ¥á«¨ ¤à ©¢ ¥áâì ⮫쪮 ¢ áâ à®©, â®:
; ¡1) £à®å ¥¬ ä ©«®¢ë¥ ¬ ­¨¯ã«ïâ®àë á ¥£® ­®¬¥à®¬
MODULE SCAN_TABLES
; ¢å®¤: B - «®£.­®¬¥à ¤à ©¢ , DE
RAM_DRV:
; <20>®«ãç ¥¬ ­®¬¥à à ¬¤¨áª  ¢ OLD_TABLES.RAMDTBL
LD A,B
LD BC,OLD_TABLES.RAMDTBL
CALL GET_RAMDRV_NUM.skip_tbl
LD (.cur_drv),BC
AND #0F
LD C,A ; ­®¬¥à à ¬¤¨áª 
; ˆé¥¬ ¢ ­®¢®© â ª®© ¦¥ ­®¬¥à à ¬¤¨áª 
LD B,MAX_RAMDRIVES
LD DE,RAMDTBL
.loop: LD A,(DE)
SUB C
JR Z,.found
INC DE
INC DE
DJNZ .loop
; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E>
; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE
POP HL
; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM
POP BC
PUSH BC
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
CALL KILL_FM
; £à®å ¥¬ ¢ áâ à®© RAMDTBL íâ®â ¤à ©¢
EX DE,HL
.cur_drv+1:
LD HL,0
LD (HL),#FF
DEC HL
LD (HL),#FF
EX DE,HL
JP ReScanDRV.nextN2
;
.found: DEC A
; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
LD (DE),A
DEC DE
LD (DE),A
JP ReScanDRV.nextN
;-----[]
HARD_DRV:
LD L,B
LOGDRV_ENTRY_FIND OLD_TABLES.LOGDRV
LD IX,LOGDRV
LD DE,LOGDRV.TBL_Entry
LD B,DSS_MAX_DRIVES_AMOUNT
;
.loop: LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER)
;CP #FF
;JR Z,.skip
CP (IX+LOGDRV.PHISICAL_DRV_NUMBER)
JR NZ,.skip
;
LD A,(IY+LOGDRV.SECTOR_OFFSET)
CP (IX+LOGDRV.SECTOR_OFFSET)
JR NZ,.skip
LD A,(IY+LOGDRV.SECTOR_OFFSET+1)
CP (IX+LOGDRV.SECTOR_OFFSET+1)
JR NZ,.skip
LD A,(IY+LOGDRV.SECTOR_OFFSET+2)
CP (IX+LOGDRV.SECTOR_OFFSET+2)
JR NZ,.skip
LD A,(IY+LOGDRV.SECTOR_OFFSET+3)
CP (IX+LOGDRV.SECTOR_OFFSET+3)
JR NZ,.skip
LD A,(IY+LOGDRV.SIZE_IN_SECTORS)
CP (IX+LOGDRV.SIZE_IN_SECTORS)
JR NZ,.skip
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+1)
CP (IX+LOGDRV.SIZE_IN_SECTORS+1)
JR NZ,.skip
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+2)
CP (IX+LOGDRV.SIZE_IN_SECTORS+2)
JR NZ,.skip
LD A,(IY+LOGDRV.SIZE_IN_SECTORS+3)
CP (IX+LOGDRV.SIZE_IN_SECTORS+3)
JR Z,.found
;
.skip: ADD IX,DE
DJNZ .loop
; ‡€<E280A1>ˆœ <20><20>€‰„…<E2809E>
; ƒà®å ¥¬ áâ àãî § ¯¨áì ¢ OLD_TABLES.LOGDRV
LD A,#FF
LD (IY+LOGDRV.PHISICAL_DRV_NUMBER),A
; „®áâ ñ¬ ¯®«®¦¥­¨¥ ¢ OLD_TABLES.DEVICE
POP HL
; „®áâ ñ¬ è £ ®¡é¥£® 横«  ¤«ï ¯®«ã祭¨ï «®£.­®¬¥à  ¤à ©¢  ¢ KILL_FM
POP BC
PUSH BC
; ƒà®å ¥¬ ”Œ ¨ § ¯¨áì ¢ OLD_TABLES.DEVICE
CALL KILL_FM
;
JP ReScanDRV.nextN2
;
.found: ; § â¨à ¥¬ ¢ ­®¢®© â ¡«¨æ¥ ᮢ¯ ¢è¨© ¤à ©¢ (ç⮡ «¥£ç¥ ¡ë«® ¯ àá¨âì ®á⠢襥áï)
LD (IX+LOGDRV.PHISICAL_DRV_NUMBER),#FF
JP ReScanDRV.nextN
;
; CD_ROM:
; JP ReScanDRV.nextN
;-----[]
; ‚•Ž„: HL - ⥪ãé ï § ¯¨áì ¢ â ¡«¨æ¥ DEVICE
; B - è £ ®¡é¥£® 横« 
KILL_FM:;
LD A,DSS_MAX_DRIVES_AMOUNT
SUB B
LD C,A
; ¢â몠¥¬ áâà ­¨æã ï¤à  á â ¡«¨æ¥© ä ©«®¢ëå ¬ ­¨¯ã«ïâ®à®¢
PUSH BC
LD A,(PORTAL.out_DRV.RETBANK)
LD B,A
LD C,SLOT3
IN A,(SLOT3)
OUT (C),B
POP BC
PUSH AF
; ˜¥àá⨬ ¬ ­¨¯ã«ïâ®àë ­  ­ «¨ç¨¥ ¢ ­¨å £à®å­ã⮣® ¤à ©¢ 
LD IY,CORE_BUFFERS.FM_BUF + #C000 ; - CORE_BUFFERS.FM_BUF.Size
LD B,FMCOUNT - 1 ; ¯à®¯ã᪠¥¬ á«ã¦¥¡­ë© ­ã«¥¢®© ¬ ­¨¯ã«ïâ®à
LD DE,CORE_BUFFERS.FM_BUF.Size
.loop_fm:
ADD IY,DE
LD A,(IY+_sFM.DRIVE)
CP C
JR NZ,.skip
XOR A
LD (IY+_sFM.FS_REC.NAME),A ; £à®å ¥¬ ¬ ­¨¯ã«ïâ®à
.skip: DJNZ .loop_fm
;
POP AF
OUT (SLOT3),A
;
; £à®å ¥¬ ¢ OLD_TABLES.DEVICE 㡨âë© ¤à ©¢
LD (HL),#FF
;
RET
ENDMODULE
;-----------------------[]
/*
[DRIVE TABLES] .Size == DEVICE.Size + LOGDRV.Size + RAMDTBL.Size == 78+1 + 416 + 32 == 526
; «®£¨ç¥áª¨© ­®¬¥à ãáâனá⢠ +  ¤à¥á ®¡à ¡®â稪 .
; <20>®à浪®¢ë© ­®¬¥à * 3 = ¡ãª¢  ¤¨áª  + "A"
DEVICE EQU $
.TBL_Entry EQU 3
.End EQU 1 + $ + DSS_MAX_DRIVES_AMOUNT * .TBL_Entry ; ¤«ï á⮯-¡ ©â  #FF
.Size EQU .End - $
;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
;+01 LONG SECTOR OFFSET
;+05 LONG SIZE IN SECTORS
;+09 LONG Volume Serial Number in HEX ; [ ] ;!TODO
;+13 WORD FREE
;+15 BYTE FREE
; ‹®£¨ç¥áª¨© ­®¬¥à à §¤¥« .
;<3B>®¬¥à £à㯯ë = «®£¨ç¥áª¨© ­®¬¥à à §¤¥«  HDD ¨§ DEVICE
LOGDRV EQU DEVICE + DEVICE.Size
.TBL_Entry EQU 16
.Size EQU DSS_MAX_DRIVES_AMOUNT * .TBL_Entry
; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; Log Number: DB RAM_DRIVE_NUMBER, RAM_DRIVE_ID
RAMDTBL EQU $ + DEVICE.Size + LOGDRV.Size
.TBL_Entry EQU 2
.Size EQU .TBL_Entry * MAX_RAMDRIVES
*/

View File

@ -1,417 +0,0 @@
; Disk Driver Specification ver. 2.00
;[]===========================================================[0]
;Procedure : Initialization
;
;Function : Initialization device(s)
;
;Input : C = 00h
; IX - Environment
;Output : A = Amount drive support
; HL = Size driver
;[]===========================================================[]
;[]===========================================================[1]
;Procedure : Open
;
;Function : Open disk
;
;Input : C = 01h
; A - Drive
;Output : None
;
;[]===========================================================[]
;[]===========================================================[2]
;Procedure : Close
;
;Function : Close disk
;
;Input : C = 02h
; A - Drive
;Output : None
;
;[]===========================================================[]
;[]===========================================================[3]
;Procedure : Media check
;
;Function : Checking change line
;
;Input : C = 03h
; A - Drive
;Output : A = 00h disk no changed
; A = 0FFh disk changed
;
;[]===========================================================[]
;[]===========================================================[4]
;Procedure : Get BPB
;
;Function : Get Block Parameters BIOS
;
;Input : C = 04h
; DE - Address
;Output : None
;
;[]===========================================================[]
;[]===========================================================[5]
;Procedure : Input
;
;Function : Input from disk
;
;Input : C = 05h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[]
;[]===========================================================[6]
;Procedure : Output
;
;Function : Output to disk
;
;Input : C = 06h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[]
;[]===========================================================[7]
;Procedure : Removable
;
;Function : Checking change line
;
;Input : C = 07h
; A - Drive
;Output : A = 00h Removable
; A = FFh Nonremovable
;
;[]===========================================================[]
;[]===========================================================[8]
;Procedure : Generic IOCTL
;
;Function : Generic Input Output Control
;
;Input : C = 08h
; B - Subcommand
; DE = 55AAh Magic Number
; Subcommand
;----------------------
; 00h - Get Device Parameters
; 01h - Read track
; 02h - Test track
; 80h - Set Device Parameters
; 81h - Write track
; 82h - Format track
;Output :
;
;[]===========================================================[]
;
; Errors:
; 0 (00h) - NO ERRORS
; 1 (01h) - BAD COMMAND
; 2 (02h) - BAD DRIVE NUMBER
; 3 (03h) - UNKNOW FORMAT
; 4 (04h) - NOT READY
; 5 (05h) - SEEK ERROR
; 6 (06h) - SECTOR NOT FOUND
; 7 (07h) - CRC ERROR
; 8 (08h) - WRITE PROTECT
; 9 (09h) - READ ERROR
; 10 (0Ah) - WRITE ERROR
; 11 (0Bh) - FAILURE
; 12 (0Ch) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED
; R_COM EQU #0F ;Command/Status
; R_TRK EQU #3F ;Track
; R_SEC EQU #5F ;Sector
; R_DAT EQU #7F ;Data
; R_DSK EQU #FF ;Drive Control
; COM_B EQU #1B
////////////////////////////////////////////////////////////////////////
MODULE FDD_DRV
////////////////////////////////////////////////////////////////////////
;-------------------------------------------------
; Ž¡à ¡®â稪 FDD (rst 18h)
;-------------------------------------------------
API_TABLE: INC C
DEC C
JP Z,Init ;#00 Init
DEC C
JP Z,Open ;#01 Open
DEC C
JP Z,Close ;#02 Close
DEC C
JP Z,MediaCheck ;#03 MediaCheck
DEC C
JP Z,GetBPB ;#04 GetBPB
DEC C
JP Z,Read ;#05 Read
DEC C
JP Z,Write ;#06 Write
DEC C
JP Z,Removable ;#07 Removable
DEC C
JP Z,GenIOCTL ;#08 GenIOCTL
DEC C
JP Z,Reserved ;#09
;
Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Commands for restart #18 ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
Init: LD A,2 ;ª®«¨ç¥á⢮ FDD ¢ ª®¬¯¥ ;!FIXIT   ¥á«¨ ®âª«îçã ¢ <20>ˆŽ?
AND A
RET
; ; ;
;
Open: LD C,BIOS.DRV_RESET
RST ToBIOS
RET
; ; ;
;
Close: XOR A
RET
; ; ;
;!FIXIT ¯à®¢¥àïâì ƒ93 ª®£¤  íâ® áâ ­¥â ¢®§¬®¦­ë¬
MediaCheck: IF NON_REMOVABLE_FDD
XOR A
ELSE
LD A,#FF
OR A
ENDIF
RET
; ; ;
;DE - ADDRESS
GetBPB: LD IX,0
LD HL,0
PUSH DE
PUSH AF
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP DE
POP HL
RET C
LD BC,BOOT_SECTOR.SectorsPerTrack
ADD HL,BC
LD E,(HL)
PUSH DE
LD A,D
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
LD A,H
POP HL
PUSH HL
LD H,A
POP AF
LD C,BIOS.DRV_SET_PAR
RST ToBIOS
XOR A
RET
; ; ;
; !TODO read track?
;READTR: XOR A
; RET
; ; ;
;
Read: LD C,BIOS.DRV_READ
RST ToBIOS
RET
; ; ;
;
Write: LD C,BIOS.DRV_WRITE
RST ToBIOS
RET
; ; ;
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
; 02 - TEST TRACK
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
GenIOCTL: BIT 7,B
JR NZ,.O_CTL_F
INC B
DEC B
JP Z,.GetParams
;!TODO
;DEC B
;JP Z,.ReadTrack
;DEC B
;JP Z,.TestTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
;
.O_CTL_F: RES 7,B
INC B
DEC B
JP Z,.SetParams
;!TODO
;DEC B
;JP Z,.WriteTRK
;DEC B
;JP Z,.FormatTRK
;
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
; ; ;
; ‚室: - A - Drive number
; ‚ë室:
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR. 0 for fdd ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - EXTENDED INFORMATION
; D1..D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.GetParams: EX DE,HL
LD BC,#55AA
AND #0F
SBC HL,BC
JR Z,.next
;
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
;
.next: PUSH AF
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
JR C,.NONE_FDD
PUSH HL
PUSH DE
LD A,H
LD H,0
;
.mull_loop1: ADD HL,HL
DEC A
JR NZ,.mull_loop1
;
; HL - SECTOR PER CYLLINDER
; A=0 ZF=0 CF=0
LD B,H
LD C,L
;LD HL,0
;XOR A
LD H,A
LD L,A
EX AF,AF'
;
.mull_loop2: EX AF,AF'
ADD HL,BC
ADC A,0
DEC DE
EX AF,AF'
LD A,D
OR E
JR NZ,.mull_loop2
;
; A=0 DE=0 ZF=0 CF=0
EX AF,AF'
LD E,A
EX DE,HL
; H=0
LD C,H ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
EXX
POP DE
POP HL
POP AF
EX AF,AF'
; A=0 ZF=0 CF=0
LD B,0
LD C,L
LD L,H
LD H,B
EX DE,HL
EXX
AND A
RET
;
.NONE_FDD: POP BC
LD A,DSS_Error.drv.INVALID_DRIVE
; CF=1
RET
; ; ;
; HL:DE - SECTORS ON LOGICAL DISK
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - EXTENDED INFORMATION
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.SetParams: PUSH AF
EXX
EX DE,HL
LD H,L
LD L,C
POP AF
AND #0F
PUSH AF
PUSH HL
PUSH DE
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP DE
POP HL
JR C,.NONE_FDD
POP AF
LD C,BIOS.DRV_SET_PAR
JP ToBIOS
;RST ToBIOS
;RET C
;AND A
;RET
; ; ;
Removable: ; LD A,1
; AND A
XOR A
INC A
RET
; ; ;
;==============================================
ENDMODULE ; FDD_DRV
////////////////////////////////////////////////////////////////////////

View File

@ -1,715 +0,0 @@
;!TODO ¯à¨¢¥á⨠ª ®¡é¥¬ã ¢¨¤ã ¢ ®¤­ã ¨­áâàãªæ¨î, ¯à®¢¥à¨âì ª®à४⭮áâì
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
;R02 06-08-2001 DNS Secondary IDE
;R01 06-08-2001 DNS Fixed BUG with partitions on Second hard disk
;---------------------------------------------------------------
;
; Disk Driver Specification ver. 2.20
;[]===========================================================[0]
;Procedure: Initialization
;
;Function: Initialization device(s)
;
;Input: C = #00
; IX = Environment
;
;Output: A = Amount drive support
;[]===========================================================[0]
;[]===========================================================[1]
;Procedure: Open
;
;Function: Open disk
;
;Input: C = #01
; A = Drive
;
;Output: None
;[]===========================================================[1]
;[]===========================================================[2]
;Procedure: Close
;
;Function: Close disk
;
;Input: C = #02
; A = Drive
;
;Output: None
;[]===========================================================[2]
;[]===========================================================[3]
;Procedure: Media check
;
;Function: Checking change line
;
;Input: C = #03
; A = Drive
;
;Output: A = #00 disk no changed
; #FF disk changed
;[]===========================================================[3]
;[]===========================================================[4]
;Procedure: Get BPB
;
;Function: Get Block Parameters BIOS
;
;Input: C = #04
; A = Drive
; DE = Address
;
;Output: None
;[]===========================================================[4]
;[]===========================================================[5]
;Procedure: Read
;
;Function: Read from disk
;
;Input: C = #05
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
; A = Drive
;
;Output: None
;[]===========================================================[5]
;[]===========================================================[6]
;Procedure: Write
;
;Function: Write to disk
;
;Input: C = #06
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
;
;Output: None
;[]===========================================================[6]
;[]===========================================================[7]
;Procedure: Removable
;
;Function: Checking change line
;
;Input: C = #07
; A = Drive
;
;Output: A = #00 Removable
; A = #FF Non-removable
;[]===========================================================[7]
;[]===========================================================[8]
;Procedure: Generic IOCTL
;
;Function: Generic Input Output Control
;
;Input: C = #08
; B = Subcommand
; DE = #55AA Magic Number
; A = Drive
;
;Subcommands: #00 - Get Device Parameters
; #01 - Read track
; #02 - Test track
; #80 - Set Device Parameters
; #81 - Write track
; #82 - Format track
;Output:
;[]===========================================================[8]
;[]===========================================================[9]
;Procedure: Read Long
;
;Function: Reading sectors from disk
;
;Input: C = #0A
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
; A' = Page
;
;Output: A' = Next Page
; HL:IX = Next Logical Block (sector)
; DE = Next Address
;[]===========================================================[9]
;[]===========================================================[10]
;Procedure: Write Long
;
;Function: Writing sectors to disk
;
;Input: C = #0B
; HL:IX = Logical Block (sector)
; DE = Address
; B = Sector count
; A' = Page
;
;Output: A' = Next Page
; HL:IX = Next Logical Block (sector)
; DE = Next Address
;[]===========================================================[10]
;
; Errors:
; 0 (#00) - NO ERRORS
; 1 (#01) - BAD COMMAND
; 2 (#02) - BAD DRIVE NUMBER
; 3 (#03) - UNKNOW FORMAT
; 4 (#04) - NOT READY
; 5 (#05) - SEEK ERROR
; 6 (#06) - SECTOR NOT FOUND
; 7 (#07) - CRC ERROR
; 8 (#08) - WRITE PROTECT
; 9 (#09) - READ ERROR
; 10 (#0A) - WRITE ERROR
; 11 (#0B) - FAILURE
; 12 (#0C) - BUSY (DEVICE OPENED)
; 13 (#0D) - RESERVED
; IDE0 EQU #0C1C0
; IDE1 EQU #0C1C8
PARTITION_BUFFER _sBOOT_SECTOR = #C000 ; EQU #C000 _sBOOT_SECTOR
HDDRIVE: INC C
DEC C
JP Z,INIT_H ; c=0 Initialization
DEC C
JP Z,RESE_H ; c=1 open
DEC C
JP Z,STAT_H ; c=2 close
DEC C
JP Z,CHEK_H ; c=3 media check (ᬥ­  ­®á¨â¥«ï)
DEC C
JP Z,GBPB_H ; c=4 get BPB
DEC C
JP Z,READH ; c=5 read (ç⥭¨¥ ᥪâ®à®¢)
DEC C
JP Z,WRITEH ; c=6 write (§ ¯¨áì ᥪâ®à®¢)
DEC C
JP Z,REMOV_H ; c=7 Removable
DEC C
JP Z,IOCTL_H ; c=8 ã§­ âì £¥®¬¥âà¨î ¤¨áª  Generic IOCTL
DEC C
JP Z,.Reserved ; c=9 Reserved
DEC C
JP Z,LREADH ; c=10 Read Long
DEC C
JP Z,LWRITEH ; c=11 Write Long
;
.Reserved: LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
////////////////////////////////////////////////////////////////////////
// Commands for restart #18 //
////////////////////////////////////////////////////////////////////////
;--------------------------------------------------------------------[v]
; c=0 Initialization
INIT_H: PUSH IY
;!TEST ;[ ] ¤«ï rescanDRV
XOR A
LD (DRVCLC.count),A
;
LD HL,LOGDRV
LD (OFFSECT),HL
LD IX,SYS_PAGE.TMP_BUFFER
LD C,BIOS.DRV_LIST
RST ToBIOS
; DRV_LIST:
; +0 LEN
; +1 FDD COUNT
; +2 HDD COUNT
; +3 CDROM COUNT
; +4 RESERVED (28)
;
IN A,(SLOT3)
LD C,A
LD A,SYS_PAGE
OUT (SLOT3),A
XOR A
LD B,(IX+2) ;ª®«¨ç¥á⢮ HDD ¤«ï ¯à®æ¥¤ãàë NX_DVCI
CP B
LD A,C
OUT (SLOT3),A
JR Z,NO_HARDS
LD C,#80 ;!HARDCODE - ID ¢¨­â  ¤«ï ¯à®æ¥¤ãàë BIOS.DRV_DETECT
NX_DVCI: PUSH BC
LD A,C
LD (DRV_NUM),A
LD C,BIOS.DRV_DETECT
RST ToBIOS
;JR C,.NO_DRIVE
CALL NC,DEFINE_PARTITIONS.BEGIN
POP BC
INC C
JR C,NX_DVCI
DJNZ NX_DVCI
;
NO_HARDS:
POP IY
;!TEST
; LD HL,(OFFSECT)
; LD DE,LOGDRV
; XOR A
; SBC HL,DE
; RET Z
; LD DE,LOGDRV.TBL_Entry
DRVCLC: ; INC A
; SBC HL,DE
; JR NZ,DRVCLC
;
.count+1: LD A,0
;
AND A
RET
;---------------------------------------------------------------------[^]
; ;+00 BYTE MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
; ;+01 DWORD SECTOR OFFSET
; ;+05 DWORD SIZE IN SECTORS
; ;+09 FREE
; ;+15
; LOGDRV: BLOCK .TBL_Entry * LD_DSK,0
; .TBL_Entry EQU 16
; .Size EQU $-LOGDRV
SELHDD: PUSH DE
PUSH HL
;
LD L,A
LOGDRV_ENTRY_FIND LOGDRV
; !HARDCODE
LD E,(IY+1)
LD D,(IY+2)
ADD IX,DE
LD E,(IY+3)
LD D,(IY+4)
POP HL
ADC HL,DE
LD A,(IY+0) ;DRIVE NUMBER
POP DE
RET
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
; 02 - TEST TRACK
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
IOCTL_H BIT 7,B
JR NZ,O_CTL_H
INC B
DEC B
JP Z,HGETPRM
DEC B
JP Z,HRDTRAC
DEC B
JP Z,HCHTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
O_CTL_H RES 7,B
INC B
DEC B
JP Z,HSETPRM
DEC B
JP Z,HWRTRAC
DEC B
JP Z,HFRTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
HRDTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
HCHTRAC LD B,L
CALL CHECKH
RET
HSETPRM AND A
RET
HWRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
HFRTRAC LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET
; HL:DE - SECTORS ON LOGICAL DISK
; C - PARTITION RECORD NUMBER IN DRIVE MBR. if #FF - then not supported ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - DRIVE/HEAD REGISTER PHISICAL DISK:
; bit7 - reserved "1"
; bit6 - ADDRESSING MODE LBA/CHS
; bit5 - reserved "1"
; bit4 - DEVICE MASTER/SLAVE
; bit3 - reserved "0" (MAY BE OTHER)
; bit2 - reserved "0" (MAY BE OTHER)
; bit1 - reserved "0" (MAY BE OTHER)
; bit0 - Primary/Secondary Chanel
HGETPRM:
EX DE,HL
LD BC,#55AA
AND A
SBC HL,BC
LD L,A
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET NZ
;
PUSH IX
PUSH IY
;
LOGDRV_ENTRY_FIND LOGDRV
;
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
PUSH IY
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
POP IY
LD A,DSS_Error.drv.INVALID_DRIVE
JR C,.error
; ¯¥à¥â á®¢ª  ॣ¨áâ஢ á १ã«ìâ â®¬ ®â BIOS
EX DE,HL
LD C,E
LD E,D
LD D,0
LD A,B
LD B,D
EXX
; SECTORS ON LOGICAL DISK
LD E,(IY+LOGDRV.SIZE_IN_SECTORS+0)
LD D,(IY+LOGDRV.SIZE_IN_SECTORS+1)
LD L,(IY+LOGDRV.SIZE_IN_SECTORS+2)
LD H,(IY+LOGDRV.SIZE_IN_SECTORS+3)
;
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD C,(IY+LOGDRV.PARTITION_RECORD_NUM) ; ­®¬¥à ¯ àâ¨æ¨¨ ¢ MBR ¤¨áª 
;
EX AF,AF'
LD A,(IY+LOGDRV.PHISICAL_DRV_NUMBER) ;MASTER/SLAVE PHISICAL DRIVE NUMBER #80/#81/...
EX AF,AF'
;
AND A
.error: POP IY
POP IX
RET
REMOV_H:
LD A,1
AND A
RET
RESE_H: XOR A
RET
STAT_H: XOR A
RET
CHEK_H: ;LD A,#FF
XOR A
;AND A
RET
; DE - ADDRESS
; A - DRIVE
GBPB_H: PUSH IY
PUSH DE
LD L,A
;
LOGDRV_ENTRY_FIND LOGDRV
; !HARDCODE
LD E,(IY+1)
LD D,(IY+2)
LD L,(IY+3)
LD H,(IY+4)
LD XL,E
LD XH,D
LD A,(IY+0)
POP DE
POP IY
LD BC,1*256 + BIOS.DRV_READ
JP ToBIOS
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A'- PAGE
; A - HDD LOG NUMBER
;READ SECTOR
LREADH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_READ_LONG
RST ToBIOS
POP IY
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A'- PAGE
; A - HDD LOG NUMBER
;WRITE SECTOR
LWRITEH:
PUSH IY
CALL SELHDD
LD C,BIOS.DRV_WRITE_LONG
RST ToBIOS
POP IY
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;WRITE SECTOR
WRITEH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_WRITE
RST ToBIOS
POP IY
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;READ SECTOR
READH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_READ
RST ToBIOS
POP IY
RET
;HL:IX - SECTOR
; DE - ADDRESS
; B - COUNTER
; A - HDD LOG NUMBER
;CHECK SECTOR
CHECKH: PUSH IY
CALL SELHDD
LD C,BIOS.DRV_VERIFY
RST ToBIOS
POP IY
RET
;------------------------------[ PARTIT ]------------------------------;
DEFINE_PARTITIONS:
.FAT32_DOS: ;
.EASYDOS: ;
.MEDIDOS: ;
.HIGHDOS: ;
LD E,(IY + BOOT_SECTOR.Partition.Start_LBA + 0)
LD D,(IY + BOOT_SECTOR.Partition.Start_LBA + 1)
LD L,(IY + BOOT_SECTOR.Partition.Start_LBA + 2)
LD H,(IY + BOOT_SECTOR.Partition.Start_LBA + 3)
LD IX,(CURRENT_SECTOR_L)
ADD IX,DE
LD DE,(CURRENT_SECTOR_H)
ADC HL,DE
LD D,XH
LD E,XL
;BPB SECTOR
LD IX,(OFFSECT)
LD (IX + LOGDRV.SECTOR_OFFSET + 0),E
LD (IX + LOGDRV.SECTOR_OFFSET + 1),D
LD (IX + LOGDRV.SECTOR_OFFSET + 2),L
LD (IX + LOGDRV.SECTOR_OFFSET + 3),H
LD E,(IY + BOOT_SECTOR.Partition.Size_LBA + 0)
LD D,(IY + BOOT_SECTOR.Partition.Size_LBA + 1)
LD L,(IY + BOOT_SECTOR.Partition.Size_LBA + 2)
LD H,(IY + BOOT_SECTOR.Partition.Size_LBA + 3)
;SIZE DISK
LD (IX + LOGDRV.SIZE_IN_SECTORS + 0),E
LD (IX + LOGDRV.SIZE_IN_SECTORS + 1),D
LD (IX + LOGDRV.SIZE_IN_SECTORS + 2),L
LD (IX + LOGDRV.SIZE_IN_SECTORS + 3),H
;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
.ExtendedPartitionFlag+1:
LD A,0
OR A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
LD A,#FF
JR NZ,.not_supported ; ¥á«¨ à áè¨à¥­­ë© à §¤¥«, â® ®¡«®¬
;
POP BC
PUSH BC
LD A,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
SUB B
.not_supported: LD (IX + LOGDRV.PARTITION_RECORD_NUM),A
;
;!TEST <09>®¤áâà å®¢ª  ®â ¯¥à¥¯®«­¥­¨ï â ¡«¨æë LOGDRV
LD A,(DRVCLC.count)
INC A
CP DSS_MAX_DRIVES_AMOUNT+1
RET NC
LD (DRVCLC.count),A
;
LD A,(DRV_NUM)
LD (IX + LOGDRV.PHISICAL_DRV_NUMBER),A
LD DE,LOGDRV.TBL_Entry ;DSKITEM
ADD IX,DE
LD (OFFSECT),IX
JP .NextPartition
;
.NotExtended: CP PartitionSysTypes.FAT16
JR Z,.HIGHDOS
CP PartitionSysTypes.FAT16_LBA
JR Z,.HIGHDOS
CP PartitionSysTypes.FAT16_32Mb
JR Z,.MEDIDOS
CP PartitionSysTypes.FAT12
JR Z,.EASYDOS
;[ ] fat32
CP PartitionSysTypes.FAT32
JP Z,.FAT32_DOS
CP PartitionSysTypes.FAT32_LBA
JP Z,.FAT32_DOS
;
CP PartitionSysTypes.Win_Ext_LBA
JR Z,.SubLevel
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¤¥â¥ªâ 
;OR A ;PartitionSysTypes.Empty
;JR NZ,NXTPART
JR .NextPartition ; à §¤¥« ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;POP BC ; ¡ « ­á á⥪ 
;RET
;POP BC
;OR A
;RET Z
;NODEFIN:
;SCF
;RET
;
.BEGIN: IN A,(SLOT3)
PUSH AF
LD A,SHARED_PAGE
OUT (SLOT3),A
CALL .Start
POP AF
OUT (SLOT3),A
RET
.Start: LD IX,0
LD DE,0
LD (EXTDOSL),DE ;R01
LD (EXTDOSH),IX ;R01
;
.LOOP: LD (CURRENT_SECTOR_L),DE
LD (CURRENT_SECTOR_H),IX
CALL .LOAD_SECTOR
;
LD HL,(PARTITION_BUFFER.MBR_SIGNATURE)
LD DE,#AA55
AND A
SBC HL,DE
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
;JR NZ,NODEFIN
SCF
RET NZ
;
LD IY,PARTITION_BUFFER.PARTITION_TABLE ; Offset of partition table in the MBR
LD B,+(_sMBR_PARTITION_TABLE / _sMBR_PARTITION_RECORD) ; Number of entries in the partition table
.DOSAGA: PUSH BC
LD A,(IY+_sMBR_PARTITION_RECORD.FS_ID)
CP PartitionSysTypes.Extended
JR Z,.SubLevel
CP PartitionSysTypes.Win_Ext_LBA
JR NZ,.NotExtended
;
.SubLevel: PUSH IY
LD DE,(CURRENT_SECTOR_L)
LD IX,(CURRENT_SECTOR_H)
PUSH DE
PUSH IX
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(.ExtendedPartitionFlag)
INC A
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
CALL .ParseExtended
;[x] 17/12/23 ¯à®¯ã᪠ࠧ¤¥«®¢ á ­¥¨§¢¥áâ­ë¬¨ ”‘, ®¯â¨¬¨§ æ¨ï ¯¥à¥¡®à  à §¤¥«®¢
LD A,(.ExtendedPartitionFlag)
DEC A
LD (.ExtendedPartitionFlag),A ; !TODO § £à㧪  á à áè¨à¥­­®£® à §¤¥«  ­¥ ¯®¤¤¥à¦¨¢ ¥âáï
;
POP IX
POP DE
LD (CURRENT_SECTOR_L),DE
LD (CURRENT_SECTOR_H),IX
CALL .LOAD_SECTOR
POP IY
.NextPartition: LD DE,_sMBR_PARTITION_RECORD ;Size of a partition table entry
ADD IY,DE
POP BC
DJNZ .DOSAGA
AND A
RET
;
.ParseExtended: LD HL,(EXTDOSL)
LD DE,(EXTDOSH)
LD A,L
OR H
OR E
OR D
LD E,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 0)
LD D,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 1)
LD L,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 2)
LD H,(IY + _sMBR_PARTITION_RECORD.Start_LBA + 3)
JP NZ,.ext_in_ext
LD (EXTDOSL),DE
LD (EXTDOSH),HL
PUSH DE
JR .set_regs
;
.ext_in_ext: LD IX,(EXTDOSL)
ADD IX,DE
LD DE,(EXTDOSH)
ADC HL,DE
PUSH IX
.set_regs: PUSH HL
POP IX
POP DE
JP .LOOP
;
.LOAD_SECTOR: PUSH IY
LD IX,(CURRENT_SECTOR_L)
LD HL,(CURRENT_SECTOR_H)
LD DE,PARTITION_BUFFER
LD A,(DRV_NUM)
LD BC,1*256 + BIOS.DRV_READ
RST ToBIOS
POP IY
RET
;----------------------------------------------------------------------;
;
;=======================================================================
; PHISICAL DRIVE NUMBER
; #80/#81 - primary ¬ áâ¥à/á«¥©¢, #82/#83 - secondary ¬ áâ¥à/á«¥©¢
DRV_NUM: DB #00
CURRENT_SECTOR_L: DW #0000
CURRENT_SECTOR_H: DW #0000
EXTDOSL: DW #0000 ;CURRENT PARTITION TABLE
EXTDOSH: DW #0000
OFFSECT: DW LOGDRV ;POINTER ON CURRENT DISK RECORD
;=======================================================================

View File

@ -1,533 +0,0 @@
; SYSPAGE EQU #FE
; SLOT1 EQU #A2
; SLOT2 EQU #C2
; SLOT3 EQU #E2
; ORG #3CDB
; Disk Driver Specification ver. 2.20
;[]===========================================================[ 0]
;Procedure : Initialization
;
;Function : Initialization device(s)
;
;Input : C = 00h
; IX - Environment
;Output : A = Amount drive support
; HL = Size driver
;[]===========================================================[ 0]
;[]===========================================================[ 1]
;Procedure : Open
;
;Function : Open disk
;
;Input : C = 01h
; A - Drive
;Output : None
;
;[]===========================================================[ 1]
;[]===========================================================[ 2]
;Procedure : Close
;
;Function : Close disk
;
;Input : C = 02h
; A - Drive
;Output : None
;
;[]===========================================================[ 2]
;[]===========================================================[ 3]
;!TODO
;Procedure : Media check
;
;Function : Checking change line
;
;Input : C = 03h
; A - Drive
;Output : A = 00h disk no changed
; A = 0FFh disk changed
;
;[]===========================================================[ 3]
;[]===========================================================[ 4]
;Procedure : Get BPB
;
;Function : Get Block Parameters BIOS
;
;Input : C = 04h
; DE - Address
;Output : None
;
;[]===========================================================[ 4]
;[]===========================================================[ 5]
;Procedure : Input
;
;Function : Input from disk
;
;Input : C = 05h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[ 5]
;[]===========================================================[ 6]
;Procedure : Output
;
;Function : Output to disk
;
;Input : C = 06h
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
;Output : None
;
;[]===========================================================[ 6]
;[]===========================================================[ 7]
;!TODO
;Procedure : Removable
;
;Function : Checking change line
;
;Input : C = 07h
; A - Drive
;Output : A = 00h Removable
; A = FFh Nonremovable
;
;[]===========================================================[ 7]
;[]===========================================================[ 8]
;Procedure : Generic IOCTL
;
;Function : Generic Input Output Control
;
;Input : C = 08h
; B - Subcommand
; DE = 55AAh Magic Number
; Subcommand
;----------------------
; 00h - Get Device Parameters
; 01h - Read track
; 02h - Test track
; 80h - Set Device Parameters
; 81h - Write track
; 82h - Format track
;Output :
;
;[]===========================================================[ 8]
;[]===========================================================[ 9]
; RESERVED
;[]===========================================================[ 9]
;[]===========================================================[ 10]
;!TODO
;Procedure : Read Long
;
;Function : Reading sectors from disk
;
;Input : C = 0Ah
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
; A'- Page
;Output : A'- Next Page
; HL:IX - Next Logical Block (sector)
; DE - Next Address
;
;[]===========================================================[ 10]
;[]===========================================================[ 11]
;!TODO
;Procedure : Write Long
;
;Function : Writing sectors to disk
;
;Input : C = 0Bh
; HL:IX - Logical Block (sector)
; DE - Address
; B - Sector count
; A'- Page
;Output : A'- Next Page
; HL:IX - Next Logical Block (sector)
; DE - Next Address
;
;[]===========================================================[ 11]
;
; Errors:
; 0 (00h) - NO ERRORS
; 1 (01h) - BAD COMMAND
; 2 (02h) - BAD DRIVE NUMBER
; 3 (03h) - UNKNOW FORMAT
; 4 (04h) - NOT READY
; 5 (05h) - SEEK ERROR
; 6 (06h) - SECTOR NOT FOUND
; 7 (07h) - CRC ERROR
; 8 (08h) - WRITE PROTECT
; 9 (09h) - READ ERROR
; 10 (0Ah) - WRITE ERROR
; 11 (0Bh) - FAILURE
; 12 (0Ch) - BUSY (DEVICE OPENED)
; 13 (0Dh) - RESERVED
; MACRO CALL GET_RAMDRV_NUM
; LD BC,RAMDTBL
; SLA A
; ADD A,C
; LD C,A
; LD A,0
; ADC A,B
; LD B,A
; INC BC
; LD A,(BC)
; OR #60 ;!HARDCODE ᤥ« âì ­®¬¥à  à §­ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
; ENDM
; parser
RMDRIVE: INC C
DEC C
JP Z,INIT_RD ; 0
DEC C
JR Z,RESET_RD ; 1
DEC C
JR Z,STATUS_RD ; 2
DEC C
JR Z,CHEK_RD ; 3
DEC C
JR Z,GBPB_RD ; 4
DEC C
JR Z,READ_RD ; 5
DEC C
JR Z,WRITE_RD ; 6
DEC C
JR Z,REMOV_RD ; 7
DEC C
JP Z,IOCTL_RD ; 8
DEC C
JP Z,.error ; 9 RESR_H
DEC C
JP Z,LREAD_RD ; 10
DEC C
JP Z,LWRITE_RD ; 11
.error:
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
REMOV_RD:
RESET_RD:
STATUS_RD: XOR A
RET
;!FIXIT ᤥ« âì ¢ SYS_PAGE ¤«ï à ¬¤¨áª®¢ ¯¥à¥¬¥­­ë¥ ¨ ¡à âì ®ââ㤠 §­ ç¥­¨¥
;!FIXIT ª ª-â® ®¯à¥¤¥«ïâì ᬥ­ã RMD?
; [x] 18/08/2024 ¯®ª  ­¥¬­®£® ª®áâë«ì­® ¨ ®¯ á­®
CHEK_RD: ;LD A,#FF
;AND A
XOR A
;
RET
;DE - ADDRESS
GBPB_RD: LD IX,0
LD HL,0
LD B,#01
;JP READ_RD
;READ SECTORS
; HL:IX - SECTOR
; DE - ADDRESS
; B - COUNT
; A - DRIVE
READ_RD: PUSH BC
CALL GET_RAMDRV_NUM
POP BC
LD C,BIOS.DRV_READ
JP ToBIOS
; RST ToBIOS
; XOR A
; RET
LREAD_RD:
PUSH BC
CALL GET_RAMDRV_NUM
POP BC
LD C,BIOS.DRV_READ_LONG
JP ToBIOS
; RST ToBIOS
; XOR A
; RET
;WRITE SECTORS
; HL:IX - SECTOR
; DE - ADDRESS
; B - COUNT
; A - DRIVE
WRITE_RD:
PUSH BC
CALL GET_RAMDRV_NUM
POP BC
LD C,BIOS.DRV_WRITE
JP ToBIOS
; RST ToBIOS
; XOR A
; RET
LWRITE_RD:
PUSH BC
CALL GET_RAMDRV_NUM
POP BC
LD C,BIOS.DRV_WRITE_LONG
JP ToBIOS
; RST ToBIOS
; XOR A
; RET
;
;;
;;;
;----------------------------------------------------------------------;!TEST
; ;S_P_P DB #00
; INIT_RD:
; ; .SectorSize EQU 512 ;!HARDCODE
; ; LD HL,.SectorSize
; ; LD A,#80
; ; .loop: SRL A
; ; RR H
; ; JR NC,.loop
; ; LD (S_P_P),A
; LD BC,#0*256 + BIOS.GET_RAMD_ST ; <20>®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­  RAM-Disk
; LD DE,RAMDTBL
; .initLoop:
; PUSH BC
; LD A,B
; PUSH DE
; RST ToBIOS
; POP DE
; OR A
; JR Z,.noDRV
; LD (DE),A
; INC DE
; POP BC
; LD A,B
; LD (DE),A
; INC DE
; JP 1F
; .noDRV: POP BC
; 1: INC B
; LD A,RAMDTBL.Size / RAMDTBL.TBL_Entry
; CP B
; JR NZ,.initLoop
; LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
; EX DE,HL
; AND A ;!FIXIT ----
; SBC HL,DE ;!FIXIT ADD HL,DE
; SRL L
; LD A,L
; ; LD HL,ENDDRVR
; AND A
; RET
;----------------------------------------------------------------------;!TEST
;;;
;;
;
;
;;
;;;
;----------------------------------------------------------------------;!TEST
;S_P_P DB #00
INIT_RD:
; .SectorSize EQU 512 ;!HARDCODE
; LD HL,.SectorSize
; LD A,#80
; .loop: SRL A
; RR H
; JR NC,.loop
; LD (S_P_P),A
LD BC,0*256+BIOS.GET_RAMD_ST ; <20>®«ã祭¨¥ ¨¤¥­â¨ä¨ª â®à  ¡«®ª , ­ §­ ç¥­­®£® ­  RAM-Disk
LD DE,RAMDTBL
.initLoop: PUSH BC
LD A,B
PUSH DE
RST ToBIOS
POP DE
OR A
JR Z,.noDRV
;
INC DE
LD (DE),A
DEC DE
;
POP BC
LD A,B
LD (DE),A
INC DE
INC DE
JP .skip_pop
;
.noDRV: POP BC
.skip_pop: INC B
LD A,RAMDTBL.Size/RAMDTBL.TBL_Entry
CP B
JR NZ,.initLoop
LD HL,RAMDTBL ;!FIXIT LD HL,-RAMDTBL
EX DE,HL
AND A ;!FIXIT ----
SBC HL,DE ;!FIXIT ADD HL,DE
SRL L
LD A,L
; LD HL,ENDDRVR
AND A
RET
;----------------------------------------------------------------------;!TEST
;;;
;;
;
; ;
; ; <E28099>ˆ€ ‘ŽŽ’‚…’‘’‚ˆŸ Œ…†„“ ”ˆ‡ˆ—…‘ŠˆŒ <20>ŽŒ…<C592>ŽŒ <20>€Œ„ˆŠ€ ˆ …ƒŽ RAM-DISK ID
; ; Log Number: DB RAM_DRIVE_ID, RAM_DRIVE_NUMBER
; RAMDTBL.TBL_Entry EQU 2
; RAMDTBL: DUP MAX_RAMDRIVES * RAMDTBL.TBL_Entry
; DB #FF
; EDUP
; .Size EQU $-RAMDTBL
; ;
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
; 02 - TEST TRACK
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
IOCTL_RD:
BIT 7,B
JR NZ,.O_CTL_F
INC B
DEC B
JP Z,.RGETPRM
;DEC B
;JP Z,FRDTRAC
;DEC B
;JP Z,FCHTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
.O_CTL_F: ;RES 7,B
;INC B
;DEC B
;JP Z,.RSETPRM
;DEC B
;JP Z,FWRTRAC
;DEC B
;JP Z,FFRTRAC
LD A,DSS_Error.drv.INVALID_COMMAND
SCF
RET
; C - PARTITION RECORD NUMBER IN DRIVE MBR must be 0 here ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
; HL:DE - SECTORS ON LOGICAL DISK
; HL' - CYLINDERS ON PHISICAL DISK
; DE' - HEADS ON PHISICAL DISK
; BC' - SECTORS PER TRACK ON PHISICAL DISK
; A' - PHISICAL DRIVE NUMBER
; A - EXTENDED INFORMATION
; D0...D3 - "0" RESERVED (MAY BE OTHER)
; D4 - DEVICE MASTER/SLAVE
; D5 - "1" RESERVED
; D6 - ADDRESSING MODE LBA/CHS
; D7 - "1" RESERVED
.RGETPRM: EX DE,HL
LD BC,#55AA
AND A
SBC HL,BC
LD L,A
LD A,DSS_Error.drv.GENERAL_FAILURE
SCF
RET NZ
;
EX AF,AF'
LD A,L
CALL GET_RAMDRV_NUM
PUSH AF
PUSH AF
EX AF,AF'
POP AF
LD C,BIOS.DRV_GET_PAR
RST ToBIOS
PUSH HL ;ç¨á«® £®«®¢®ª, ç¨á«® ᥪâ®à®¢ (­  楫¨­¤à)
PUSH DE ;ª®«¨ç¥á⢮ 樫¨­¤à®¢
EXX
POP HL ;ª®«¨ç¥á⢮ 樫¨­¤à®¢
POP BC ;ç¨á«® ᥪâ®à®¢ (­  楫¨­¤à)
LD D,0
LD E,B ;ç¨á«® £®«®¢®ª
LD B,D
EXX
LD A,L
RRA
JR C,.end
.loopShift: SLA E
RL D
RRA
JR NC,.loopShift
;
.end: EX AF,AF'
POP AF
EX AF,AF'
XOR A
LD L,A
LD H,L
LD C,A ;[x] 17.12.2023 § £à㧪  á  ªâ¨¢­®£® à §¤¥« ,   ­¥ á ¯¥à¢®£®
LD A,%10100000
RET
; !TODO
; !FIXIT
; .RSETPRM: AND A
; RET
GET_RAMDRV_NUM: LD BC,RAMDTBL
.skip_tbl: ADD A,A
ADD A,C
LD C,A
LD A,0
ADC A,B
LD B,A
;INC BC
LD A,(BC)
OR #60 ;!HARDCODE ᤥ« âì ­®¬¥à  à §­ëå ãáâனá⢠ç¥à¥§ ¬¥âª¨
RET
;
;ENDDRVR EQU $
;

View File

@ -1,290 +0,0 @@
;[BEGIN]
;//MODULE: Shared AUTHOR: Denis Parinov
;//CREATE: A LONG TIME AGO :)
;---------------------------------------------------------------
;Rev Date Name Description
;R01 17-04-2023 BAO „®¡ ¢«¥­  ¯à®æ¥¤ãà  INITDVC_RET_DRIVE ¨ ¨§¬¥­¥­  INTDISK ¤«ï ¯®¤¤¥à¦ª¨ à¥áª ­  ¤à ©¢®¢
;---------------------------------------------------------------
; DISK DRIVER SPECIFICATION
; !FIXIT ­¥ª®à४⭠ï!
;---------------------------------------------
; COMMAND 00h (INITIALIZATION)
;
; INPUT: A - DRIVE LETTER
; IX - ENVIRONMENT
; RETURN: A - AMOUNT DRIVE SUPPORT
; HL - LENGTH DRIVER
;---------------------------------------------
; COMMAND 01h (OPEN)
;
; INPUT: A - DRIVE
;
;---------------------------------------------
; COMMAND 02h (CLOSE)
;
; INPUT: A - DRIVE
; RETURN: A -
;---------------------------------------------
; COMMAND 03h (MEDIA CHECK)
;
; INPUT: A - DRIVE
; RETURN: A - 00h - OLD DISK, 0FFh - NEW DISK
;---------------------------------------------
; COMMAND 04h (GET BPB)
;
; INPUT: HL - ADDRESS
; A - DRIVE
;---------------------------------------------
; COMMAND 05h (INPUT)
;
; INPUT: IX:DE - ABSOLUTE SECTOR
; HL - MEMORY ADDRESS
; B - SECTORS COUNT
; A - DRIVE
;---------------------------------------------
; COMMAND 06h (OUTPUT)
;
; INPUT: IX:DE - ABSOLUTE SECTOR
; HL - MEMORY ADDRESS
; B - SECTORS COUNT
; A - DRIVE
;---------------------------------------------
; COMMAND 07h (REMOVABLE)
;
; INPUT: A - DRIVE
; RETURN: A = 0 - REMOVABLE
; A = 1 - NONREMOVABLE
;---------------------------------------------
; COMMAND 08h (GENERIC IOCTL)
;
; INPUT: A - DRIVE
; B - SUBCOMMAND
; DE - MAGIC NUMBER (55AAh)
; SUBCOMMAND
;----------------------
; 00 - GET DEVICE PARAMETERS
; 01 - READ TRACK
; 02 - TEST TRACK
; 80 - SET DEVICE PARAMETERS
; 81 - WRITE TRACK
; 82 - FORMAT TRACK
;---------------------------------------------
;
; ERRORS:
; 0 - NO ERRORS
; 1 - BAD COMMAND
; 2 - BAD DRIVE NUMBER
; 3 - UNKNOW FORMAT
; 4 - NOT READY
; 5 - SEEK ERROR
; 6 - SECTOR NOT FOUND
; 7 - CRC ERROR
; 8 - WRITE PROTECT
; 9 - READ ERROR
; 10 - WRITE ERROR
; 11 - FAILURE
; 12 - BUSY (DEVICE OPENED)
; 13 - RESERVED
;INTDISK PUSH HL
; PUSH BC
; LD HL,DEVICE
; INC A
;INTD001 DEC A
; JP Z,YEP
; LD C,(HL)
; INC C
; INC HL
; INC HL
; INC HL
; JP NZ,INTD001
; POP BC
; POP HL
; LD A,2
; SCF
; RET
;YEP LD A,(HL)
; INC HL
; LD C,(HL)
; INC HL
; LD H,(HL)
; LD L,C
; POP BC
; EX (SP),HL
; RET
;-----------------------------------------------------------
; <20>à®áª ­¨à®¢ âì á¨á⥬㠭  FDD/HDD ¤¥¢ ©áë ¨ RAM-¤¨áª¨
;-----------------------------------------------------------
INITDVC: XOR A
LD (DRV_PAGE.LDRIVE),A ; á¡à. ï祩ªã
LD HL,DEVICE
LD (PDEVICE),HL ; ¢®ááâ. ï祩ªã
; ‡ ç¨á⪠ â ¡«¨æ. <20>¥®¡ï§ â¥«ì­®, ­® ¬ «® «¨ çñ ¡ã¤¥â ¤ «ìè¥... ;[ ]
LD HL,DEVICE
LD (HL),#FF
LD DE,DEVICE+1
LD BC,DEVICE.Size + LOGDRV.Size + RAMDTBL.Size - 1
LDIR
; FDD ¤¥¢ ©áë
CALL FDD_DRV.Init ; ã§­ âì ç¨á«® FDD-¤¥¢ ©á®¢
LD DE,FDD_DRV.API_TABLE ;  ¤à¥á ®¡à ¡®â稪  ⥪. ¤¥¢ ©á 
CALL MAKEDVC ; ¨­¨æ. â ¡«¨æã ¯¥à¥å®¤®¢
; HDD ¤¥¢ ©áë
.if_old: CALL INIT_H ; ¥á«¨ ­  áâ à⥠¢¥àá¨ï BIOS ­¥ ¯®¤å®¤¨â, â® £à㧨âìáï ¬®¦­® ⮫쪮 á ¤¨áª¥âë, ¤«ï í⮣® âãâ § ¬¥­  ª®¤  ­  XOR A : RET
LD DE,HDDRIVE
CALL MAKEDVC
; RAM-¤¨áª¨
CALL INIT_RD
LD DE,RMDRIVE
CALL MAKEDVC
XOR A
RET
; ˆ­¨æ¨¨à®¢ âì â ¡«¨æã ¯¥à¥å®¤®¢ ¤¥¢ ©á .
; ¢å®¤: de= ¤à¥á ®¡à ¡®â稪  ¤¥¢ ©á 
; a=ç¨á«® ¤¥¢ ©á®¢ (0=­¥â)
MAKEDVC: LD C,A
LD HL,DRV_PAGE.LDRIVE ; ï祩ª  ­®¬¥à  ¯®á«. ¤¨áª 
ADD A,(HL)
LD (HL),A
;!TEST ;[ ] ®¯â¨¬¨§¨à®¢ âì ¡ë«® «¥­ì
CP DSS_MAX_DRIVES_AMOUNT+1
JR C,1F
LD (HL),DSS_MAX_DRIVES_AMOUNT
SUB DSS_MAX_DRIVES_AMOUNT
NEG
ADD C
JP 2F
;
1: LD A,C
OR A
RET Z ; ­¥â ¤¥¢ ©á®¢
2: LD C,0 ; á¡à.
LD HL,(PDEVICE) ; ⥪. ¯®«®¦. ¢ â ¡«¨æ¥
.loop: LD (HL),C ; ­®¬¥à «®£.¤à ©¢  í⮣® ãáâனá⢠
INC HL
LD (HL),E ; de= ¤à¥á ®¡à ¡®â稪 
INC HL
LD (HL),D
INC HL
INC C ; ++­®¬¥à ¤à ©¢ 
DEC A
JR NZ,.loop
LD (PDEVICE),HL
DEC A
LD (HL),A
RET
;!FIXIT ¯®¯¥à¥¤¥«ë¢ âì âã⠢맮¢ë ç¥à¥§ â®çª¨ ¢å®¤  ⨯  RST ¨«¨ ¢ë§®¢ë ⨯  LD C,0 : CALL HDDRIVE ­  ¯àï¬ë¥
;-------------------------------------------------
; RST 18h. ‚¥ªâ®à ¤¨áª®¢ëå ãáâனáâ¢
; ¢å®¤: a=­®¬¥à ãáâனá⢠ (0-25)
;-------------------------------------------------
INTDISK:
;R01
CP #FF
JR NZ,.noNeedRescan
CP C
;JR Z,INITDVC_RET_DRIVE
JR Z,ReScanDRV
.noNeedRescan:
;
PUSH HL
PUSH BC
_CALC_DEVICE_ENTRY DEVICE
LD A,(HL)
CP #FF
JR Z,NODEV
INC HL
LD C,(HL)
INC HL
LD H,(HL)
LD L,C
POP BC
EX (SP),HL
RET
NODEV: POP BC
POP HL
LD A,DSS_Error.drv.INVALID_DRIVE
SCF
RET
PDEVICE DW DEVICE
; DEVICE: BLOCK DSS_MAX_DRIVES_AMOUNT * .TBL_Entry,#FF
; .Size: DB #FF
; .TBL_Entry EQU 3
FLOPPY EQU #0001
FIXED EQU #0002
CDROM EQU #0004
NETWORK EQU #0008
;DISKS: DB 27 ;LENGTH DISK INFO
; DW FLOPPY ;DISK TYPE
; DB 2,"A:" ;DISK NAME
; DB 11,"NO NAME "
; DB 8,"FAT12 "
; DB #00 ;PHISICAL DRIVE NUMBER
;
; DB 27 ;LENGTH DISK INFO
; DW FLOPPY ;DISK TYPE
; DB 2,"B:" ;DISK NAME
; DB 11,"NO NAME "
; DB 8,"FAT12 "
; DB #01 ;PHISICAL DRIVE NUMBER
;
; DB 27 ;LENGTH DISK INFO
; DW FIXED ;DISK TYPE
; DB 2,"C:" ;DISK NAME
; DB 11,"NO NAME "
; DB 8,"FAT16 "
; DB #80 ;PHISICAL DRIVE NUMBER
;
; DB #00 ;END OF TABLE
;-----------------------------------------------------------------------
;R01
; INITDVC_RET_DRIVE:
; CALL INITDVC
; LD A,(DRV_PAGE.LDRIVE)
; AND A
; RET
;
////////////////////////////////////////////////////////////////////////
// NEW RESCAN //
////////////////////////////////////////////////////////////////////////
INCLUDE 'ReScanDRV.ASM'
////////////////////////////////////////////////////////////////////////
;DEVICE DB #00
; DW FDDRIVE ; FDD A
; DB #01
; DW FDDRIVE ; FDD B
; DB #00
; DW HDDRIVE ; HDD C
; DB #01
; DW HDDRIVE ; HDD D
; DB #02
; DW HDDRIVE ; HDD E
; DB #03
; DW HDDRIVE ; HDD F
; DB #04
; DW HDDRIVE ; HDD G
; DB #05
; DW HDDRIVE ; HDD H
; DB #06
; DW HDDRIVE ; HDD I
; DB #07
; DW HDDRIVE ; HDD J
; DB #FF