mirror of
https://github.com/Tolik-Trek/Estex-DSS.git
synced 2026-06-15 01:11:48 +03:00
prepare
This commit is contained in:
parent
f580b60110
commit
c82b010f1e
524
DSS/drivers/media/ATAPI/CDX.ASM
Normal file
524
DSS/drivers/media/ATAPI/CDX.ASM
Normal file
@ -0,0 +1,524 @@
|
|||||||
|
;[BEGIN]
|
||||||
|
;
|
||||||
|
; CDX.EXE [command] [-switches] [directory]
|
||||||
|
;
|
||||||
|
;commands:
|
||||||
|
; OPEN
|
||||||
|
; EJECT
|
||||||
|
; CLOSE
|
||||||
|
; COPY
|
||||||
|
; LIST
|
||||||
|
; DUMP
|
||||||
|
; COMMAND
|
||||||
|
; -h,? Help page
|
||||||
|
|
||||||
|
DEFINE _MAME 1
|
||||||
|
|
||||||
|
|
||||||
|
CR EQU 13
|
||||||
|
LF EQU 10
|
||||||
|
|
||||||
|
INCLUDE "Shared_Includes/constants/BIOS_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/dss_equ.inc"
|
||||||
|
INCLUDE "Shared_Includes/constants/Sp2000.inc"
|
||||||
|
|
||||||
|
|
||||||
|
ORG #8100-22
|
||||||
|
|
||||||
|
DB "EXE" ;EXE ID
|
||||||
|
DB #00 ;EXE VERSION
|
||||||
|
DW #0016 ;CODE OFFSET LOW
|
||||||
|
DW #0000 ;CODE OFFSET HIGH
|
||||||
|
DW #0000 ;END-BEG ;PRIMARY LOADER
|
||||||
|
DW #0000 ;
|
||||||
|
DW #0000 ;RESERVED
|
||||||
|
DW #0000 ;
|
||||||
|
DW START ;LOAD ADDRESS
|
||||||
|
DW START ;START ADDRESS
|
||||||
|
DW #BFFF ;STACK ADDRESS
|
||||||
|
;DS 490
|
||||||
|
|
||||||
|
START: PUSH IX
|
||||||
|
;
|
||||||
|
XOR A
|
||||||
|
;
|
||||||
|
; LD HL,BUF1
|
||||||
|
; LD (HL),A
|
||||||
|
; LD DE,BUF1+1
|
||||||
|
; LD BC,BUFFERS_END-1
|
||||||
|
; LDIR
|
||||||
|
;
|
||||||
|
LD HL,'\' ;
|
||||||
|
LD (DIRSPEC),HL
|
||||||
|
;
|
||||||
|
LD HL,BUF1
|
||||||
|
LD B,BUFERS_NUMBER
|
||||||
|
.initBuffersLoop:
|
||||||
|
LD (HL),A
|
||||||
|
INC H
|
||||||
|
DJNZ .initBuffersLoop
|
||||||
|
;
|
||||||
|
|
||||||
|
LD A,MSG_HELLO
|
||||||
|
CALL MESSAGE
|
||||||
|
;
|
||||||
|
CALL INIT
|
||||||
|
JR NC,.next
|
||||||
|
;
|
||||||
|
LD HL,PRM1
|
||||||
|
LD (HL),0
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
;
|
||||||
|
.next: LD C,Dss.Version
|
||||||
|
RST ToDSS ;GET DSS VERSION
|
||||||
|
EX DE,HL
|
||||||
|
AND A
|
||||||
|
LD DE,#0146 ;1.70
|
||||||
|
SBC HL,DE ;CHECK DSS VERSION
|
||||||
|
POP HL
|
||||||
|
;
|
||||||
|
JP C,OLD_DSS
|
||||||
|
LD IX,BUF_PTRS
|
||||||
|
CALL EX_COMMAND_LINE
|
||||||
|
|
||||||
|
CALL MALLOC
|
||||||
|
JR C,QUIT
|
||||||
|
|
||||||
|
;CALL FIND_CDROM
|
||||||
|
LD A,(STOPMODE)
|
||||||
|
OR A
|
||||||
|
CALL Z,COMMAND
|
||||||
|
|
||||||
|
CALL MDEALLOC
|
||||||
|
QUIT: CALL CRLF
|
||||||
|
.loop: LD BC,Dss.Exit
|
||||||
|
RST ToDSS
|
||||||
|
JP .loop
|
||||||
|
|
||||||
|
OLD_DSS
|
||||||
|
LD A,MSG_OLD_DSS
|
||||||
|
CALL MESSAGE
|
||||||
|
JR QUIT
|
||||||
|
|
||||||
|
HNDMEM DB #FF
|
||||||
|
|
||||||
|
MALLOC
|
||||||
|
LD BC,2*256 + Dss.GetMem
|
||||||
|
RST ToDSS
|
||||||
|
JR NC,M_ALLOK
|
||||||
|
LD A,MSG_MEMERROR
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
M_ALLOK
|
||||||
|
LD (HNDMEM),A
|
||||||
|
LD BC,1*256 + Dss.SetWin3
|
||||||
|
RST ToDSS
|
||||||
|
LD HL,BANKTBL
|
||||||
|
LD C,BIOS.GetMemBlkPages
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
JP ToBIOS
|
||||||
|
|
||||||
|
MDEALLOC
|
||||||
|
LD A,(HNDMEM)
|
||||||
|
LD C,Dss.FreeMem
|
||||||
|
JP ToDSS
|
||||||
|
|
||||||
|
; FIND_CDROM
|
||||||
|
; LD IX,DEV_CFG
|
||||||
|
; LD C,BIOS.DRV_LIST
|
||||||
|
; RST ToBIOS
|
||||||
|
; LD A,(IX+3) ;CDROM
|
||||||
|
; OR A
|
||||||
|
; JR Z,W_O_CD
|
||||||
|
; LD A,(CDDRIVE)
|
||||||
|
; INC A
|
||||||
|
; RET NZ
|
||||||
|
; LD A,SLAVE ;DEFAULT
|
||||||
|
; LD (CDDRIVE),A
|
||||||
|
; RET
|
||||||
|
; W_O_CD LD A,MSG_NO_CDROM
|
||||||
|
; CALL MESSAGE
|
||||||
|
; LD A,1
|
||||||
|
; LD (STOPMODE),A
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;BUF_PRINT
|
||||||
|
; LD HL,BUF_PTRS
|
||||||
|
;BUF_PL LD E,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD D,(HL)
|
||||||
|
; INC HL
|
||||||
|
; LD A,D
|
||||||
|
; OR E
|
||||||
|
; RET Z
|
||||||
|
; PUSH HL
|
||||||
|
; EX DE,HL
|
||||||
|
; LD C,Dss.PCHARS
|
||||||
|
; RST ToDSS
|
||||||
|
; CALL CRLF
|
||||||
|
; POP HL
|
||||||
|
; JR BUF_PL
|
||||||
|
|
||||||
|
;OPEN_FILE
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; XOR A
|
||||||
|
; LD C,Dss.OPEN
|
||||||
|
; RST ToDSS
|
||||||
|
; LD (FILEHND),A
|
||||||
|
; RET NC
|
||||||
|
; LD HL,FILENAME
|
||||||
|
; CALL PUTVAR
|
||||||
|
; LD A,MSG_CANT_OPEN
|
||||||
|
; CALL MESSAGE
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;CLOSE_FILE
|
||||||
|
; LD A,(FILEHND)
|
||||||
|
; LD C,Dss.CLOSE
|
||||||
|
; RST ToDSS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
INIT: XOR A
|
||||||
|
LD (STOPMODE),A
|
||||||
|
DEC A
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
;
|
||||||
|
LD BC,+(#C0-1)*256 + BIOS.DRV_DETECT
|
||||||
|
.loop: INC B
|
||||||
|
LD A,B
|
||||||
|
CP #C4
|
||||||
|
SCF
|
||||||
|
RET Z
|
||||||
|
PUSH BC
|
||||||
|
RST ToBIOS
|
||||||
|
POP BC
|
||||||
|
JR C,.loop
|
||||||
|
LD A,B
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
; LD C,BIOS.DRV_RESET
|
||||||
|
; JP ToBIOS
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;VARIABLES
|
||||||
|
|
||||||
|
; FILENAME DS 256
|
||||||
|
; FILEHND DB #FF
|
||||||
|
|
||||||
|
STOPMODE DB #00
|
||||||
|
|
||||||
|
INCLUDE "cmdparse.asm"
|
||||||
|
INCLUDE "command.asm"
|
||||||
|
INCLUDE "cd_dos.asm"
|
||||||
|
|
||||||
|
CRLF: PUSH HL
|
||||||
|
LD HL,MSG0.crlf
|
||||||
|
LD C,Dss.PChars
|
||||||
|
; LD A,#0D
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
; RST #10
|
||||||
|
; LD A,#0A
|
||||||
|
; LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
|
||||||
|
ERROR CP MAX_DSS_ERR
|
||||||
|
LD E,A
|
||||||
|
LD D,0
|
||||||
|
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]
|
||||||
7
DSS/drivers/media/ATAPI/CDX.TXT
Normal file
7
DSS/drivers/media/ATAPI/CDX.TXT
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
CDROM eXtension utility version 1.01
|
||||||
|
------------------------------------------------
|
||||||
|
|
||||||
|
It's utility came for solving the problem with support CDROM in DSS ver 1.x.
|
||||||
|
It's allow browse and copy files that stored on your CD. Also utility has commands
|
||||||
|
for tray control.
|
||||||
89
DSS/drivers/media/ATAPI/CMDPARSE.ASM
Normal file
89
DSS/drivers/media/ATAPI/CMDPARSE.ASM
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
|
||||||
|
; HL - exe-prefix
|
||||||
|
; IX - pointers at work buffers
|
||||||
|
EX_COMMAND_LINE
|
||||||
|
INC HL
|
||||||
|
NEXTPR LD DE,ARGCBUF
|
||||||
|
LD BC,Dss.EX_Path.GSWITCH
|
||||||
|
RST ToDSS
|
||||||
|
PUSH AF
|
||||||
|
PUSH HL
|
||||||
|
LD A,(ARGCBUF)
|
||||||
|
OR A
|
||||||
|
JR Z,EOCL ;end of command line
|
||||||
|
CP "-"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
CP "/"
|
||||||
|
JR Z,ITCKEY
|
||||||
|
LD HL,ARGCBUF
|
||||||
|
LD E,(IX+0)
|
||||||
|
LD D,(IX+1)
|
||||||
|
INC IX
|
||||||
|
INC IX
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
JR Z,CL_FAILURE
|
||||||
|
; LD A,1
|
||||||
|
; LD (NAME_FLG),A
|
||||||
|
MOVNAME LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,MOVNAME
|
||||||
|
EOCL POP HL
|
||||||
|
POP AF
|
||||||
|
JR NC,NEXTPR
|
||||||
|
RET
|
||||||
|
|
||||||
|
CL_FAILURE
|
||||||
|
POP HL
|
||||||
|
POP AF
|
||||||
|
RET
|
||||||
|
|
||||||
|
ITCKEY: LD A,(ARGCBUF+1)
|
||||||
|
CP "5"
|
||||||
|
JR NC,.HELP
|
||||||
|
CP "1"
|
||||||
|
JR NC,.number
|
||||||
|
; ERROR
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_UNK_DEVICE_NUMBER
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
;
|
||||||
|
.number:;
|
||||||
|
SUB A,'1'
|
||||||
|
OR #C0
|
||||||
|
LD (CDDRIVE),A
|
||||||
|
LD C,BIOS.DRV_RESET
|
||||||
|
RST ToBIOS
|
||||||
|
JR NC,EOCL
|
||||||
|
;
|
||||||
|
LD HL,ARGCBUF+1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_NO_CDROM
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
SCF
|
||||||
|
JR CL_FAILURE
|
||||||
|
;
|
||||||
|
.HELP: LD A,MSG_USAGE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,1
|
||||||
|
LD (STOPMODE),A
|
||||||
|
JR EOCL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; MAS_CD:
|
||||||
|
; ;LD A,MASTER
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
|
|
||||||
|
; SLA_CD:
|
||||||
|
; ;LD A,SLAVE
|
||||||
|
; ;LD (CDDRIVE),A
|
||||||
|
; JR EOCL
|
||||||
942
DSS/drivers/media/ATAPI/COMMAND.ASM
Normal file
942
DSS/drivers/media/ATAPI/COMMAND.ASM
Normal file
@ -0,0 +1,942 @@
|
|||||||
|
|
||||||
|
COMMAND LD HL,BUF1
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
RET Z
|
||||||
|
DEC HL
|
||||||
|
SKIPSP INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
CP 9
|
||||||
|
JR Z,SKIPSP
|
||||||
|
CP " "
|
||||||
|
JR Z,SKIPSP
|
||||||
|
COMP01 LD D,H
|
||||||
|
LD E,L
|
||||||
|
XOR A
|
||||||
|
LD BC,255
|
||||||
|
CPIR
|
||||||
|
LD A,254
|
||||||
|
SUB C
|
||||||
|
LD C,A
|
||||||
|
LD HL,CMDLIST
|
||||||
|
COMP004 PUSH BC
|
||||||
|
PUSH DE
|
||||||
|
COMP000 LD A,(DE)
|
||||||
|
CP #61
|
||||||
|
JP C,COMP001
|
||||||
|
CP #7B
|
||||||
|
JP NC,COMP001
|
||||||
|
SUB #20
|
||||||
|
COMP001 CP (HL)
|
||||||
|
JP NZ,COMP002
|
||||||
|
INC HL
|
||||||
|
INC DE
|
||||||
|
DEC C
|
||||||
|
JP NZ,COMP000
|
||||||
|
XOR A
|
||||||
|
CP (HL)
|
||||||
|
JP NZ,COMP002
|
||||||
|
POP BC
|
||||||
|
POP BC
|
||||||
|
LD A,(DE)
|
||||||
|
CP " "
|
||||||
|
JR NZ,NOSPC
|
||||||
|
INC DE
|
||||||
|
NOSPC INC HL
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
LD H,(HL)
|
||||||
|
LD L,A
|
||||||
|
JP (HL)
|
||||||
|
|
||||||
|
COMP002 XOR A
|
||||||
|
LD C,#FF
|
||||||
|
CPI
|
||||||
|
JP NZ,$-2
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
POP DE
|
||||||
|
POP BC
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JP NZ,COMP004
|
||||||
|
LD HL,BUF1
|
||||||
|
CALL PUTVAR
|
||||||
|
LD A,MSG_UNK_COMMAND
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
CMDLIST DB "CLOSE",0
|
||||||
|
DW CCLOSE
|
||||||
|
DB "COPY",0
|
||||||
|
DW CCOPY
|
||||||
|
DB "DUMP",0
|
||||||
|
DW CDUMP
|
||||||
|
DB "EJECT",0
|
||||||
|
DW COPEN
|
||||||
|
DB "HELP",0
|
||||||
|
DW CHELP
|
||||||
|
DB "LIST",0
|
||||||
|
DW CDIR
|
||||||
|
DB "OPEN",0
|
||||||
|
DW COPEN
|
||||||
|
DB "SECTORDUMP",0
|
||||||
|
DW CDUMP
|
||||||
|
DB 0
|
||||||
|
|
||||||
|
CHELP: LD A,MSG_USAGE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
CCLOSE: LD A,MSG_TRAY_CLOSE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD BC,BIOS.DRV_EXTENDED.CD_Close
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
COPEN: LD A,MSG_TRAY_OPEN
|
||||||
|
CALL MESSAGE
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD BC,BIOS.DRV_EXTENDED.CD_Eject
|
||||||
|
RST ToBIOS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
|
||||||
|
CCOPY: CALL CHANGEDISK
|
||||||
|
JR NC,.CH2OK
|
||||||
|
JP ERROR
|
||||||
|
.CH2OK: CALL EX_COPY_PARAM
|
||||||
|
LD HL,BUF2
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
LD A,FAT_ATTR.NoDIRnoVolID
|
||||||
|
LD B,1
|
||||||
|
CALL F_FIRST
|
||||||
|
JP C,ERROR
|
||||||
|
.COPIER:
|
||||||
|
CALL MAKECOPY
|
||||||
|
RET C
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT DSTFILE,A
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
LD C,Dss.ScanKey
|
||||||
|
RST ToDSS
|
||||||
|
JR Z,.NONSTOP
|
||||||
|
LD HL,#011B ;ESC
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
JR NZ,.NONSTOP
|
||||||
|
LD A,MSG_COPYABORTED
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
.NONSTOP:
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
CALL F_NEXT
|
||||||
|
JR NC,.COPIER
|
||||||
|
XOR A
|
||||||
|
RET
|
||||||
|
|
||||||
|
; IFNOTFOUND
|
||||||
|
; CALL ERROR
|
||||||
|
; RET
|
||||||
|
|
||||||
|
;IFOK
|
||||||
|
MAKECOPY:
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT SRCPATT,A
|
||||||
|
JR NZ,.WITH_SRC_PATT
|
||||||
|
BIT DSTFILE,A
|
||||||
|
JR NZ,.WITH_DST_FILE
|
||||||
|
.WITH_SRC_PATT:
|
||||||
|
LD HL,CDFNAME
|
||||||
|
.YCR1: LD A,(HL)
|
||||||
|
CP "A"
|
||||||
|
JR C,.NCR1
|
||||||
|
CP "Z"+1
|
||||||
|
JR NC,.NCR1
|
||||||
|
ADD A,#20
|
||||||
|
LD (HL),A
|
||||||
|
.NCR1: OR A
|
||||||
|
INC HL
|
||||||
|
JR NZ,.YCR1
|
||||||
|
;
|
||||||
|
LD HL,CDFNAME
|
||||||
|
LD DE,(SRC_PUT_ADR)
|
||||||
|
.CZSL2: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.CZSL2
|
||||||
|
;
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
BIT DSTFILE,A
|
||||||
|
JR NZ,.WITH_DST_FILE
|
||||||
|
;
|
||||||
|
LD HL,CDFNAME
|
||||||
|
LD DE,(DST_PUT_ADR)
|
||||||
|
.CZSL1: LD A,(HL)
|
||||||
|
LDI
|
||||||
|
OR A
|
||||||
|
JR NZ,.CZSL1
|
||||||
|
;
|
||||||
|
.WITH_DST_FILE:
|
||||||
|
LD HL,BUF3
|
||||||
|
LD A,(CDFATTR)
|
||||||
|
LD C,Dss.Create
|
||||||
|
RST ToDSS
|
||||||
|
JR NC,.OFOK
|
||||||
|
LD A,MSG_ERR_DEST
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.OFOK: LD (FHND),A
|
||||||
|
LD A,MSG_COPYFILE
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,BUF2
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
LD A,MSG_COPYTO
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,BUF3
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
LD A," "
|
||||||
|
LD C,Dss.PutChar
|
||||||
|
RST ToDSS
|
||||||
|
LD IX,FF_STRUCT
|
||||||
|
|
||||||
|
LD E,(IX+LEN1)
|
||||||
|
LD D,(IX+LEN2)
|
||||||
|
LD (CL_SIZE),DE
|
||||||
|
LD E,(IX+LEN3)
|
||||||
|
LD D,(IX+LEN4)
|
||||||
|
LD (CH_SIZE),DE
|
||||||
|
|
||||||
|
LD E,(IX+CLU1)
|
||||||
|
LD D,(IX+CLU2)
|
||||||
|
LD (CL_OFFSET),DE
|
||||||
|
LD E,(IX+CLU3)
|
||||||
|
LD D,(IX+CLU4)
|
||||||
|
LD (CH_OFFSET),DE
|
||||||
|
.CDCOPY_LOOP:
|
||||||
|
CALL RCDFSB ;!!!!!
|
||||||
|
JR C,.COPY_FAULT
|
||||||
|
CALL WDATAB
|
||||||
|
JR C,.COPY_FAULT
|
||||||
|
JR NZ,.CDCOPY_LOOP
|
||||||
|
;
|
||||||
|
LD DE,(CDFTIME)
|
||||||
|
LD BC,(CDFDATE)
|
||||||
|
CALL RMKTIME
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Put_D_T ;COPY DATE AND TIME
|
||||||
|
RST ToDSS
|
||||||
|
;
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Close
|
||||||
|
RST ToDSS
|
||||||
|
LD A,MSG_DONE
|
||||||
|
CALL MESSAGE
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
.COPY_FAULT:
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Close
|
||||||
|
RST ToDSS
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
EX_COPY_PARAM
|
||||||
|
LD HL,BUF2 ;SOURCE
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR
|
||||||
|
DEC HL
|
||||||
|
EX DE,HL
|
||||||
|
LD HL,256
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
EX DE,HL
|
||||||
|
LD A,'\' ;
|
||||||
|
CPDR
|
||||||
|
INC HL
|
||||||
|
INC HL
|
||||||
|
LD (SRC_PUT_ADR),HL
|
||||||
|
;
|
||||||
|
LD HL,BUF2
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
AND #80
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
SET SRCPATT,A
|
||||||
|
JR NZ,.NOPATSR
|
||||||
|
RES SRCPATT,A
|
||||||
|
.NOPATSR:
|
||||||
|
LD (COPYMODE),A
|
||||||
|
LD HL,BUF3 ;DESTINATION
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
AND #81 ;PATTERN & FILENAME
|
||||||
|
CP #01 ;IF FILENAME=1 AND PATTERN=0
|
||||||
|
LD A,(COPYMODE)
|
||||||
|
SET DSTFILE,A
|
||||||
|
JR Z,.SINGC1
|
||||||
|
RES DSTFILE,A
|
||||||
|
.SINGC1:
|
||||||
|
LD (COPYMODE),A
|
||||||
|
RET Z
|
||||||
|
LD HL,BUF3
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR ;MOVE TO END OF STRING
|
||||||
|
DEC HL ;MOVE TO ZERO-CHAR
|
||||||
|
DEC HL ;MOVE TO LAST CHAR
|
||||||
|
LD A,(HL) ;GET LAST CHAR
|
||||||
|
INC HL ;MOVE TO ZERO-CHAR
|
||||||
|
CP '\' ;IS IT BACKSLASH?
|
||||||
|
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||||||
|
RET Z
|
||||||
|
LD A,'\' ;
|
||||||
|
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||||||
|
INC HL ;MOVE TO THE NEW END OF STRING
|
||||||
|
LD (DST_PUT_ADR),HL ;SAVE END ADDRESS
|
||||||
|
LD (HL),0 ;PUT ZERO CHAR
|
||||||
|
RET
|
||||||
|
|
||||||
|
DSTFILE EQU 0 ;SPECIFIED DESTINATION FILENAME
|
||||||
|
SRCPATT EQU 3 ;SPECIFIED SOURCE PATTERN A??.*
|
||||||
|
|
||||||
|
COPYMODE DB 0
|
||||||
|
|
||||||
|
SRC_PUT_ADR DW BUF2
|
||||||
|
DST_PUT_ADR DW BUF3
|
||||||
|
|
||||||
|
CL_OFFSET DW 0
|
||||||
|
CH_OFFSET DW 0
|
||||||
|
CL_SIZE DW 0
|
||||||
|
CH_SIZE DW 0
|
||||||
|
BYTECOUNTER DW 0
|
||||||
|
|
||||||
|
WDATAB: LD DE,(BYTECOUNTER)
|
||||||
|
LD A,D
|
||||||
|
OR E
|
||||||
|
RET Z
|
||||||
|
LD HL,#C000
|
||||||
|
LD A,(FHND)
|
||||||
|
LD C,Dss.Write
|
||||||
|
RST ToDSS
|
||||||
|
JR C,.WRDERR
|
||||||
|
XOR A
|
||||||
|
INC A
|
||||||
|
RET
|
||||||
|
.WRDERR:
|
||||||
|
LD A,MSG_FAILURE
|
||||||
|
CALL MESSAGE
|
||||||
|
CALL CRLF
|
||||||
|
LD A,MSG_F_WRITE_ERR
|
||||||
|
CALL MESSAGE
|
||||||
|
XOR A
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
RCDFSB: LD HL,(CL_SIZE)
|
||||||
|
LD DE,(CH_SIZE)
|
||||||
|
LD A,H
|
||||||
|
OR L
|
||||||
|
OR D
|
||||||
|
OR E
|
||||||
|
LD BC,0
|
||||||
|
LD (BYTECOUNTER),BC
|
||||||
|
RET Z ;SIZE = 0
|
||||||
|
AND A
|
||||||
|
LD BC,#4000 ;BLOCKSIZE
|
||||||
|
SBC HL,BC
|
||||||
|
LD B,C
|
||||||
|
EX DE,HL
|
||||||
|
SBC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD BC,#4000
|
||||||
|
JR NC,.RC_NOCAR
|
||||||
|
;CORRECT RESULT
|
||||||
|
ADD HL,BC
|
||||||
|
LD B,C
|
||||||
|
EX DE,HL
|
||||||
|
ADC HL,BC
|
||||||
|
EX DE,HL
|
||||||
|
LD B,H
|
||||||
|
LD C,L
|
||||||
|
LD HL,0
|
||||||
|
LD DE,0
|
||||||
|
.RC_NOCAR:
|
||||||
|
LD (CL_SIZE),HL
|
||||||
|
LD (CH_SIZE),DE
|
||||||
|
LD (BYTECOUNTER),BC
|
||||||
|
;
|
||||||
|
LD A,B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
AND #07
|
||||||
|
OR C
|
||||||
|
JR Z,.RC_EVEN_NUM
|
||||||
|
INC B
|
||||||
|
.RC_EVEN_NUM:
|
||||||
|
LD A,B
|
||||||
|
LD C,B
|
||||||
|
LD B,0
|
||||||
|
;
|
||||||
|
LD IX,(CL_OFFSET)
|
||||||
|
LD HL,(CH_OFFSET)
|
||||||
|
PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
LD (CL_OFFSET),IX
|
||||||
|
LD (CH_OFFSET),HL
|
||||||
|
POP HL
|
||||||
|
POP IX
|
||||||
|
LD B,A
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD DE,#C000
|
||||||
|
LD C,BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
LD BC,(BYTECOUNTER)
|
||||||
|
RET NC
|
||||||
|
LD A,MSG_FAILURE
|
||||||
|
CALL MESSAGE
|
||||||
|
CALL CRLF
|
||||||
|
LD A,MSG_CD_READ_ERR
|
||||||
|
CALL MESSAGE
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
|
||||||
|
|
||||||
|
FHND DB #FF
|
||||||
|
|
||||||
|
;----------------------
|
||||||
|
CDIR: CALL CHANGEDISK
|
||||||
|
JP C,ERROR
|
||||||
|
LD HL,BUF2
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR NZ,.NODEFD
|
||||||
|
LD HL,DEFDIR
|
||||||
|
JR .PATPRESNT
|
||||||
|
.NODEFD:
|
||||||
|
LD BC,Dss.EX_Path.GET_ALL
|
||||||
|
RST ToDSS
|
||||||
|
BIT 7,A ;PATTERN
|
||||||
|
LD HL,BUF2
|
||||||
|
JR NZ,.PATPRESNT
|
||||||
|
;
|
||||||
|
LD BC,255
|
||||||
|
XOR A
|
||||||
|
CPIR ;MOVE TO END OF STRING
|
||||||
|
DEC HL ;MOVE TO ZERO-CHAR
|
||||||
|
DEC HL ;MOVE TO LAST CHAR
|
||||||
|
LD A,(HL) ;GET LAST CHAR
|
||||||
|
INC HL ;MOVE TO ZERO-CHAR
|
||||||
|
CP '\' ;IS IT BACKSLASH?
|
||||||
|
JR Z,.WITHSL9
|
||||||
|
LD A,'\' ;
|
||||||
|
LD (HL),A ;PUT BACKSLASH TO THE END OF STRING
|
||||||
|
INC HL ;MOVE TO THE NEW END OF STRING
|
||||||
|
.WITHSL9:
|
||||||
|
LD A,"*"
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,BUF2
|
||||||
|
.PATPRESNT
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
LD A,FAT_ATTR.NoVolID
|
||||||
|
LD B,0
|
||||||
|
CALL F_FIRST
|
||||||
|
JP C,ERROR
|
||||||
|
.CDIR_HEAD:
|
||||||
|
LD A,MSG_DIRHEAD
|
||||||
|
CALL MESSAGE
|
||||||
|
LD HL,DIRSPEC
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
CALL CRLF
|
||||||
|
CALL CRLF
|
||||||
|
.CDIR_LOOP:
|
||||||
|
LD HL,CDFNAME
|
||||||
|
CALL PNAME
|
||||||
|
LD DE,FF_STRUCT
|
||||||
|
CALL F_NEXT
|
||||||
|
JR NC,.CDIR_LOOP
|
||||||
|
RET
|
||||||
|
|
||||||
|
; FF_STRUCT
|
||||||
|
; DB "12345678"
|
||||||
|
; DB "123"
|
||||||
|
; DB #00
|
||||||
|
; DW 0,0,0,0
|
||||||
|
; CDFPOSH DW 0 ;CLUSTER HIGH
|
||||||
|
; CDFTIME DW 0 ;TIME
|
||||||
|
; CDFDATE DW 0 ;DATE
|
||||||
|
; CDFPOSL DW 0 ;CLUSTER
|
||||||
|
; CDFSIZE DW 0,0 ;SIZE
|
||||||
|
; CDFATTR DB #00 ;ATTR
|
||||||
|
; CDFNAME DB "12345678123",0
|
||||||
|
; ; DS 44
|
||||||
|
; DS 256-($-FF_STRUCT)
|
||||||
|
|
||||||
|
PNAME LD BC,8
|
||||||
|
LD DE,PRM1
|
||||||
|
LDIR
|
||||||
|
XOR A
|
||||||
|
LD (DE),A
|
||||||
|
LD DE,PRM2
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
LD IX,FF_STRUCT
|
||||||
|
CALL PRNSIZE
|
||||||
|
CALL PRNDATE
|
||||||
|
CALL PRNTIME
|
||||||
|
LD A,MSG_DIRENTRY
|
||||||
|
JP MESSAGE
|
||||||
|
|
||||||
|
PRNDATE LD B,(IX+25)
|
||||||
|
LD C,(IX+24)
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
CALL DATE
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
LD DE,PRM4
|
||||||
|
LD A,(HL)
|
||||||
|
CP "0"
|
||||||
|
JP NZ,PUTPRM
|
||||||
|
LD (HL),#20
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
PRNTIME LD B,(IX+22)
|
||||||
|
LD C,(IX+23)
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
CALL TIME
|
||||||
|
LD (HL),0
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
LD DE,PRM5
|
||||||
|
LD A,(HL)
|
||||||
|
CP "0"
|
||||||
|
JP NZ,PUTPRM
|
||||||
|
LD (HL),#20
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
TIME: SRL C
|
||||||
|
RR B
|
||||||
|
SRL C
|
||||||
|
RR B
|
||||||
|
SRL C
|
||||||
|
RR B
|
||||||
|
SRL B
|
||||||
|
SRL B
|
||||||
|
LD A,C
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),":"
|
||||||
|
INC HL
|
||||||
|
LD A,B
|
||||||
|
JP NUMB
|
||||||
|
|
||||||
|
DATE: LD A,C
|
||||||
|
AND #1F
|
||||||
|
PUSH BC
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
POP BC
|
||||||
|
LD A,C
|
||||||
|
SRL B
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
RLA
|
||||||
|
AND #0F
|
||||||
|
CALL NUMB
|
||||||
|
LD (HL),"."
|
||||||
|
INC HL
|
||||||
|
LD A,B
|
||||||
|
ADD A,#50
|
||||||
|
CP 100
|
||||||
|
JP C,NUMB
|
||||||
|
.SUB100:
|
||||||
|
SUB 100
|
||||||
|
CP 100
|
||||||
|
JP C,NUMB
|
||||||
|
JR .SUB100
|
||||||
|
|
||||||
|
NUMB: LD C,#2F
|
||||||
|
.NUMB1: INC C
|
||||||
|
SUB 10
|
||||||
|
JP NC,.NUMB1
|
||||||
|
ADD A,10
|
||||||
|
ADD A,#30
|
||||||
|
LD (HL),C
|
||||||
|
INC HL
|
||||||
|
LD (HL),A
|
||||||
|
INC HL
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRNSIZE LD A,(IX+32)
|
||||||
|
LD HL,DIRIDD
|
||||||
|
AND #10
|
||||||
|
JP NZ,.PRZ
|
||||||
|
LD L,(IX+28)
|
||||||
|
LD H,(IX+29)
|
||||||
|
EXX
|
||||||
|
LD L,(IX+30)
|
||||||
|
LD H,(IX+31)
|
||||||
|
EXX
|
||||||
|
PUSH IX
|
||||||
|
CALL MAKE_LN
|
||||||
|
LD HL,L32BIT_+9
|
||||||
|
LD A,(HL)
|
||||||
|
CP #20
|
||||||
|
JR NZ,.ALR
|
||||||
|
LD A,#30
|
||||||
|
LD (HL),A
|
||||||
|
.ALR: LD DE,SIZEBFF
|
||||||
|
LD HL,L32BIT_;; +1
|
||||||
|
LDI
|
||||||
|
LD A," "
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD (DE),A
|
||||||
|
INC DE
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LDI
|
||||||
|
LD HL,SIZEBFF
|
||||||
|
POP IX
|
||||||
|
.PRZ: LD DE,PRM3
|
||||||
|
JP PUTPRM
|
||||||
|
|
||||||
|
MAKE_LN:
|
||||||
|
LD IX,L32BIT_
|
||||||
|
EXX
|
||||||
|
LD DE,#3B9A ; 1000000000
|
||||||
|
EXX
|
||||||
|
LD DE,#CA00
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#05F5 ; 100000000
|
||||||
|
EXX
|
||||||
|
LD DE,#E100
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0098 ; 10000000
|
||||||
|
EXX
|
||||||
|
LD DE,#9680
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#000F ; 1000000
|
||||||
|
EXX
|
||||||
|
LD DE,#4240
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0001 ; 100000
|
||||||
|
EXX
|
||||||
|
LD DE,#86A0
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 10000
|
||||||
|
EXX
|
||||||
|
LD DE,#2710
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 1000
|
||||||
|
EXX
|
||||||
|
LD DE,#03E8
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 100
|
||||||
|
EXX
|
||||||
|
LD DE,#0064
|
||||||
|
CALL GET_DIG
|
||||||
|
EXX
|
||||||
|
LD DE,#0000 ; 10
|
||||||
|
EXX
|
||||||
|
LD DE,#000A
|
||||||
|
CALL GET_DIG
|
||||||
|
LD A,L ; 1
|
||||||
|
ADD A,#30
|
||||||
|
LD (IX+0),A
|
||||||
|
INC IX
|
||||||
|
LD HL,L32BIT_
|
||||||
|
LD DE,#2030
|
||||||
|
;
|
||||||
|
.KILLZ: LD A,(HL)
|
||||||
|
CP E
|
||||||
|
JR NZ,.KILLZ2
|
||||||
|
LD (HL),D
|
||||||
|
INC HL
|
||||||
|
JP .KILLZ
|
||||||
|
.KILLZ2:
|
||||||
|
LD HL,L32BIT_+9
|
||||||
|
LD A,(HL)
|
||||||
|
CP D
|
||||||
|
RET NZ
|
||||||
|
LD (HL),E
|
||||||
|
RET
|
||||||
|
|
||||||
|
; HL:HL - DE:DE
|
||||||
|
|
||||||
|
GET_DIG:
|
||||||
|
XOR A
|
||||||
|
.INC_DG:
|
||||||
|
INC A
|
||||||
|
SBC HL,DE
|
||||||
|
EXX
|
||||||
|
SBC HL,DE
|
||||||
|
EXX
|
||||||
|
JP NC,.INC_DG
|
||||||
|
ADD HL,DE
|
||||||
|
EXX
|
||||||
|
ADC HL,DE
|
||||||
|
EXX
|
||||||
|
DEC A
|
||||||
|
ADD A,#30
|
||||||
|
LD (IX+0),A
|
||||||
|
INC IX
|
||||||
|
RET
|
||||||
|
|
||||||
|
L32BIT_ DB "0000000000"
|
||||||
|
|
||||||
|
DIRIDD DB "<DIR> ",0
|
||||||
|
|
||||||
|
SIZEBFF DB "0 000 000 000",0,0
|
||||||
|
|
||||||
|
DEFDIR DB #5C,"*.*",0
|
||||||
|
|
||||||
|
;------------------------
|
||||||
|
|
||||||
|
CDUMP: LD HL,BUF2
|
||||||
|
LD BC,#0000
|
||||||
|
CALL GETNUM
|
||||||
|
; LD XL,C
|
||||||
|
; LD XH,0
|
||||||
|
; LD HL,0
|
||||||
|
LD A,(CDDRIVE)
|
||||||
|
LD DE,DUMPBUF
|
||||||
|
LD BC,1*256 + BIOS.DRV_READ
|
||||||
|
RST ToBIOS
|
||||||
|
JR C,.DMPERR
|
||||||
|
;
|
||||||
|
LD HL,BUF3
|
||||||
|
CALL GETNUM
|
||||||
|
PUSH IX
|
||||||
|
POP BC
|
||||||
|
LD A,B
|
||||||
|
AND #07
|
||||||
|
LD B,A
|
||||||
|
LD HL,2048-#01C0
|
||||||
|
AND A
|
||||||
|
SBC HL,BC
|
||||||
|
JR NC,.GOODOFFS
|
||||||
|
LD BC,2048-#01C0
|
||||||
|
.GOODOFFS:
|
||||||
|
LD HL,DUMPBUF
|
||||||
|
ADD HL,BC
|
||||||
|
;
|
||||||
|
CALL DUMP
|
||||||
|
JP CRLF
|
||||||
|
.DMPERR:
|
||||||
|
LD A,MSG_IO_ERROR
|
||||||
|
JP MESSAGE
|
||||||
|
;
|
||||||
|
|
||||||
|
GETNUM: EXX
|
||||||
|
LD IX,0
|
||||||
|
LD HL,0
|
||||||
|
EXX
|
||||||
|
.GETNUM0:
|
||||||
|
LD A,(HL)
|
||||||
|
OR A
|
||||||
|
JR Z,.EGETN
|
||||||
|
INC HL
|
||||||
|
CP "0"
|
||||||
|
JR C,.GETNUM0
|
||||||
|
CP "9"+1
|
||||||
|
JR NC,.GETNUM0
|
||||||
|
SUB "0"
|
||||||
|
;
|
||||||
|
EXX
|
||||||
|
PUSH IX ;
|
||||||
|
PUSH HL
|
||||||
|
POP DE
|
||||||
|
POP BC ;LD DE:BC,HL:IX
|
||||||
|
;
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x2
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x4
|
||||||
|
ADD IX,BC
|
||||||
|
ADC HL,DE ;x5
|
||||||
|
ADD IX,IX
|
||||||
|
ADC HL,HL ;x10
|
||||||
|
;
|
||||||
|
LD C,A
|
||||||
|
LD B,0
|
||||||
|
ADD IX,BC
|
||||||
|
LD C,B
|
||||||
|
ADC HL,BC
|
||||||
|
EXX
|
||||||
|
JR .GETNUM0
|
||||||
|
.EGETN: EXX
|
||||||
|
;PUSH IX
|
||||||
|
PUSH HL
|
||||||
|
EXX
|
||||||
|
POP HL
|
||||||
|
;POP IX
|
||||||
|
RET
|
||||||
|
;;;;;;;;;;;;;;;
|
||||||
|
; LD A,(HL)
|
||||||
|
; OR A
|
||||||
|
; RET Z
|
||||||
|
; INC HL
|
||||||
|
; CP "0"
|
||||||
|
; JR C,GETNUM
|
||||||
|
; CP "9"+1
|
||||||
|
; JR NC,GETNUM
|
||||||
|
; SUB "0"
|
||||||
|
; LD B,A
|
||||||
|
;
|
||||||
|
; LD A,C
|
||||||
|
; ADD A,A
|
||||||
|
; ADD A,A
|
||||||
|
; ADD A,C
|
||||||
|
; ADD A,A
|
||||||
|
;
|
||||||
|
; ADD A,B
|
||||||
|
; LD C,A
|
||||||
|
; JR GETNUM
|
||||||
|
;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
|
UPDUMP: BYTE " +00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 0123456789ABCDEF ",CR,LF
|
||||||
|
DZ " -------------------------------------------------- +----------------+"
|
||||||
|
|
||||||
|
|
||||||
|
DUMP: PUSH HL
|
||||||
|
LD HL,UPDUMP
|
||||||
|
LD C,Dss.PChars
|
||||||
|
RST ToDSS
|
||||||
|
POP HL
|
||||||
|
LD BC,#1C00
|
||||||
|
.L1: PUSH BC
|
||||||
|
PUSH BC
|
||||||
|
CALL CRLF
|
||||||
|
;
|
||||||
|
LD DE,DUMPBUF
|
||||||
|
AND A
|
||||||
|
SBC HL,DE
|
||||||
|
LD A,L
|
||||||
|
PUSH AF
|
||||||
|
LD A,H
|
||||||
|
ADD HL,DE
|
||||||
|
;
|
||||||
|
CALL PHEX
|
||||||
|
POP AF
|
||||||
|
CALL PHEX
|
||||||
|
LD A,":"
|
||||||
|
CALL PRNCHAR
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
PUSH HL
|
||||||
|
;
|
||||||
|
LD B,#08
|
||||||
|
.L2: PUSH BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CALL PHEX
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
DJNZ .L2
|
||||||
|
;
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD B,#08
|
||||||
|
.L2_00: PUSH BC
|
||||||
|
LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
CALL PHEX
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP BC
|
||||||
|
INC C
|
||||||
|
DJNZ .L2_00
|
||||||
|
;
|
||||||
|
LD A," "
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD A,"|"
|
||||||
|
CALL PRNCHAR
|
||||||
|
POP HL
|
||||||
|
LD B,#10
|
||||||
|
.LLL: LD A,(HL)
|
||||||
|
INC HL
|
||||||
|
PUSH BC
|
||||||
|
CALL PRINT_
|
||||||
|
POP BC
|
||||||
|
DJNZ .LLL
|
||||||
|
LD A,"|"
|
||||||
|
CALL PRNCHAR
|
||||||
|
;
|
||||||
|
LD A,C
|
||||||
|
POP BC
|
||||||
|
LD C,A
|
||||||
|
DJNZ .L1
|
||||||
|
RET
|
||||||
|
|
||||||
|
PHEX: LD E,A
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
RRCA
|
||||||
|
AND #0F
|
||||||
|
ADD A,#30
|
||||||
|
CP #3A
|
||||||
|
JR C,.PHEX2
|
||||||
|
ADD A,7
|
||||||
|
.PHEX2: CALL PRINT_
|
||||||
|
LD A,E
|
||||||
|
AND #0F
|
||||||
|
ADD A,#30
|
||||||
|
CP #3A
|
||||||
|
JR C,.PHEX3
|
||||||
|
ADD A,7
|
||||||
|
.PHEX3: CALL PRINT_
|
||||||
|
RET
|
||||||
|
|
||||||
|
PRNCHAR:
|
||||||
|
LD C,Dss.PutChar
|
||||||
|
JP ToDSS
|
||||||
|
;
|
||||||
1212
DSS/drivers/media/ATAPI/Cd_dos.asm
Normal file
1212
DSS/drivers/media/ATAPI/Cd_dos.asm
Normal file
File diff suppressed because it is too large
Load Diff
525
DSS/drivers/media/ATAPI/Hidden/CDFS0.ASM
Normal file
525
DSS/drivers/media/ATAPI/Hidden/CDFS0.ASM
Normal 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
|
||||||
372
DSS/drivers/media/ATAPI/Hidden/Cd_bios.asm
Normal file
372
DSS/drivers/media/ATAPI/Hidden/Cd_bios.asm
Normal 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
|
||||||
|
;========================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
356
DSS/drivers/media/ATAPI/Hidden/Cdriver.asm
Normal file
356
DSS/drivers/media/ATAPI/Hidden/Cdriver.asm
Normal 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
|
||||||
|
|
||||||
|
;========================================================
|
||||||
|
|
||||||
|
|
||||||
104
DSS/drivers/media/ATAPI/Hidden/DSS.INC
Normal file
104
DSS/drivers/media/ATAPI/Hidden/DSS.INC
Normal 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
|
||||||
|
;
|
||||||
6
DSS/drivers/media/ATAPI/Hidden/DUMP.TXT
Normal file
6
DSS/drivers/media/ATAPI/Hidden/DUMP.TXT
Normal 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 |................|
|
||||||
@ -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
|
|
||||||
*/
|
|
||||||
@ -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
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
|
||||||
@ -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
|
|
||||||
;=======================================================================
|
|
||||||
@ -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 $
|
|
||||||
;
|
|
||||||
@ -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
|
|
||||||
Loading…
Reference in New Issue
Block a user