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