This commit is contained in:
Anatoliy Belyanskiy 2023-12-21 05:31:39 +10:00
parent 2d65e4cdd0
commit be6233a072
10 changed files with 486 additions and 361 deletions

@ -1 +1 @@
Subproject commit f112b1359045d7fe7aa47f843011fddc5e03eba2
Subproject commit 226dbc13e8cacb202848245b7f11de3df2f0cbd7

View File

@ -92,11 +92,11 @@ TAB_FNS:
DB low FN_5x_Parser_8 ;#58 - Get Media parameters
DB low FN_5x_Parser_9 ;#59 - Set Media parameters
DB low DRV_VERSION ;#5A - Version number
DB low FN_RESERVED_5x ;#5B
DB low FN_RESERVED_5x ;#5C
DB low FN_RESERVED_5x ;#5D
DB low FN_RESERVED_5x ;#5E
DB low DRV_VERSION ;#5A - Version number
DB low FN_RESERVED_5x ;#5B
DB low FN_RESERVED_5x ;#5C
DB low FN_RESERVED_5x ;#5D
DB low FN_5x_Parser_E ;#5E
DB low DRV_LIST ;#5F
;--------------
@ -288,7 +288,7 @@ TAB_FNS:
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_5x_Parser_E
DB high DRV_LIST
;--------------
@ -434,6 +434,27 @@ TAB_FNS:
DB high REINIT
DB high FN_RESERVED
DB high FN_VERSION
////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
;
; ,----, ,----,.
; ,/ .`| ,' ,' |
; ,` .' : ,--, ,' .' |
; ; ; / ,---, ,--.'| ,----.' .'
; .'___,/ ,' ,---.'| | | : | | .'
; | : | | | : : : ' : : |--, ,--, ,--,
; ; |.'; ; ,--.--. : : : | ' | ,---. : | ;.' \|'. \/ .`|
; `----' | | / \ : |,-.' | | / \ | | |' \/ / ;
; ' : ;.--. .-. || : ' || | : / / | `----'.'\ ; \ \.' /
; | | ' \__\/: . .| | / :' : |__ . ' / | __ \ . | \ ; ;
; ' : | ," .--.; |' : |: || | '.'|' ; /| / /\/ / : / \ \ \
; ; |.' / / ,. || | '/ :; : ;' | / | / ,,/ ',- ./__; ; \
; '---' ; : .' \ : || , / | : | \ ''\ ;| :/\ \ ;
; | , .-./ \ / ---`-' \ \ / \ \ .' `---' `--`
; `--`---' `-'----' `----' `--`-,-'
////////////////////////////////////////////////////////////////////////////////////////
_mInfoALIGN 256,0
@ -451,11 +472,11 @@ TAB_5xFNS:
; --< LOW PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
DB low FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FDD_5x.RESET ;#51
DB low FDD_5x.LONG_READ ;#52
DB low FDD_5x.LONG_WRITE ;#53
DB low FN_ABSENT_5x ;#54
DB low FN_ABSENT_5x ;#54
DB low FDD_5x.READ ;#55
DB low FDD_5x.WRITE ;#56
DB low FDD_5x.DETECT ;#57
@ -463,10 +484,10 @@ TAB_5xFNS:
DB low FDD_5x.SETMED ;#59
DB low DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB low DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
;
;---------------------------------------------------------------------[]
@ -477,14 +498,14 @@ TAB_5xFNS:
;-------------------------------------------------------[ RAM DRIVE #6 ]
;
DB low FN_RESERVED_5x
DB low FN_ABSENT_5x
DB low FN_RESERVED_5x
DB low FN_ABSENT_5x
DB low RMD_5x.LONG_READ
DB low RMD_5x.LONG_WRITE
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low RMD_5x.READ
DB low RMD_5x.WRITE
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low RMD_5x.GETMED
DB low RMD_5x.SETMED
@ -502,7 +523,7 @@ TAB_5xFNS:
;-------------------------------------------------------------[ HDD #8 ]
;
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low HDD_5x.RESET
DB low HDD_5x.LONG_READ
DB low HDD_5x.LONG_WRITE
@ -514,10 +535,10 @@ TAB_5xFNS:
DB low HDD_5x.SETMED
DB low DRV_VERSION
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low DRV_LIST
;---------------------------------------------------------------------[]
@ -527,22 +548,22 @@ TAB_5xFNS:
;-----------------------------------------------------------[ CDROM #C ]
;
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low CD_5x.RESET
DB low CD_5x.LONG_READ
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low CD_5x.READ
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low CD_5x.DETECT
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low FN_ABSENT_5x
DB low DRV_VERSION
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low FN_RESERVED_5x
DB low CD_5x.Extended
DB low DRV_LIST
;---------------------------------------------------------------------[]
@ -554,23 +575,22 @@ TAB_5xFNS:
; --< HIGH PART >--
;-------------------------------------------------------------[ FDD #0 ]
;
DB high FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FDD_5x.RESET ;#51
DB high FDD_5x.LONG_READ ;#52
DB high FDD_5x.LONG_WRITE ;#53
DB high FN_ABSENT_5x ;#54
DB high FDD_5x.READ ;#55
DB high FDD_5x.WRITE ;#56
DB high FDD_5x.DETECT ;#57
DB high FDD_5x.GETMED ;#58
DB high FDD_5x.SETMED ;#59
DB high DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5E - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#50 - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FDD_5x.RESET ;#51
DB high FDD_5x.LONG_READ ;#52
DB high FDD_5x.LONG_WRITE ;#53
DB high FN_ABSENT_5x ;#54
DB high FDD_5x.READ ;#55
DB high FDD_5x.WRITE ;#56
DB high FDD_5x.DETECT ;#57
DB high FDD_5x.GETMED ;#58
DB high FDD_5x.SETMED ;#59
DB high DRV_VERSION ;#5A - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5C - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5D - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
DB high FN_RESERVED_5x ;#5E - Extended functions
DB high DRV_LIST ;#5F - „ã¡«ì. <20>  íâã äã­ªæ¨î ¯à룠¥â ¨§ ®á­®¢­®£® ®¡à ¡®â稪 
;
;---------------------------------------------------------------------[]
@ -580,23 +600,22 @@ TAB_5xFNS:
;-------------------------------------------------------[ RAM DRIVE #6 ]
;
DB high FN_RESERVED_5x
DB high FN_ABSENT_5x
DB high RMD_5x.LONG_READ
DB high RMD_5x.LONG_WRITE
DB high FN_ABSENT_5x
DB high RMD_5x.READ
DB high RMD_5x.WRITE
DB high FN_ABSENT_5x
DB high RMD_5x.GETMED
DB high RMD_5x.SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
DB high FN_RESERVED_5x
DB high FN_ABSENT_5x
DB high RMD_5x.LONG_READ
DB high RMD_5x.LONG_WRITE
DB high FN_ABSENT_5x
DB high RMD_5x.READ
DB high RMD_5x.WRITE
DB high FN_ABSENT_5x
DB high RMD_5x.GETMED
DB high RMD_5x.SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
;---------------------------------------------------------------------[]
;---------------------------------[ #7 ]
@ -605,23 +624,22 @@ TAB_5xFNS:
;-------------------------------------------------------------[ HDD #8 ]
;
DB high FN_RESERVED_5x
DB high HDD_5x.RESET
DB high HDD_5x.LONG_READ
DB high HDD_5x.LONG_WRITE
DB high HDD_5x.VERIFY
DB high HDD_5x.READ
DB high HDD_5x.WRITE
DB high HDD_5x.DETECT
DB high HDD_5x.GETMED
DB high HDD_5x.SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
DB high FN_RESERVED_5x
DB high HDD_5x.RESET
DB high HDD_5x.LONG_READ
DB high HDD_5x.LONG_WRITE
DB high HDD_5x.VERIFY
DB high HDD_5x.READ
DB high HDD_5x.WRITE
DB high HDD_5x.DETECT
DB high HDD_5x.GETMED
DB high HDD_5x.SETMED
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #9..#B ]
@ -630,23 +648,22 @@ TAB_5xFNS:
;----------------------------------------------------------[ CDROM #C0 ]
;
DB high FN_RESERVED_5x
DB high CD_5x.RESET
DB high CD_5x.LONG_READ
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high CD_5x.READ
DB high FN_ABSENT_5x
DB high CD_5x.DETECT
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high DRV_LIST
DB high FN_RESERVED_5x
DB high CD_5x.RESET
DB high CD_5x.LONG_READ
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high CD_5x.READ
DB high FN_ABSENT_5x
DB high CD_5x.DETECT
DB high FN_ABSENT_5x
DB high FN_ABSENT_5x
DB high DRV_VERSION
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high FN_RESERVED_5x
DB high CD_5x.Extended
DB high DRV_LIST
;---------------------------------------------------------------------[]
;-----------------------------[ #D..#F ]
@ -668,31 +685,34 @@ EXP_FNS_RST18:
RET
FN_5x_Parser_1:
LD C,1
JP FN_5x_Parser
LD C,#01
JP FN_5x_Parser
FN_5x_Parser_2:
LD C,2
JP FN_5x_Parser
LD C,#02
JP FN_5x_Parser
FN_5x_Parser_3:
LD C,3
JP FN_5x_Parser
LD C,#03
JP FN_5x_Parser
FN_5x_Parser_4:
LD C,4
JP FN_5x_Parser
FN_5x_Parser_5:
LD C,5
JP FN_5x_Parser
LD C,#04
JP FN_5x_Parser
FN_5x_Parser_6:
LD C,6
JP FN_5x_Parser
LD C,#06
JP FN_5x_Parser
FN_5x_Parser_7:
LD C,7
JP FN_5x_Parser
LD C,#07
JP FN_5x_Parser
FN_5x_Parser_8:
LD C,8
JP FN_5x_Parser
LD C,#08
JP FN_5x_Parser
FN_5x_Parser_9:
LD C,9
LD C,#09
JP FN_5x_Parser
FN_5x_Parser_E:
LD C,#0E
JP FN_5x_Parser
FN_5x_Parser_5:
LD C,5
FN_5x_Parser:
PUSH HL
LD H,A

View File

@ -173,7 +173,7 @@ FDD_5x.READ:
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory ID Block
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
@ -320,7 +320,7 @@ FDD_5x.WRITE:
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory ID Block
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)

View File

@ -1,4 +1,6 @@
;CD ROM DRIVE DRIVER ;!FIXIT ALL!
;[ ] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;CD ROM DRIVE DRIVER
;---------------------------------------------------------------
;Rev Date Name Description
;---------------------------------------------------------------
@ -11,12 +13,15 @@ RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
RAM_ATAPI_READ EQU SYS_PAGE.SHARED_BUFFER_32b+16
ASSERT ((PKTSIZE % 2) = 0), "PKTSIZE must be an even number"
;[]===========================================================[]
;[]================================================================[#51]
CD_5x.RESET:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
LD B,50
.loop:
PUSH BC
LD A,1
CALL CD_TEST
POP BC
RET NC
@ -24,70 +29,46 @@ CD_5x.RESET:
HALT
DJNZ .loop
RET
;[]===========================================================[]
;[]================================================================[#51]
;[]===========================================================[]
CD_5x.LONG_READ: ; !FIXIT ­¥ ­ ¤® á®åà ­ïâì áâà ­¨æã SLOT3 ª ª ¢ ¤àã£¨å ¤à ©¢ å?
;[]===========================================================[]
;[]===========================================================[]
;[]================================================================[#55]
;Function: Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;READ SECTOR(S)
CD_5x.READ:
LD A,1
JP CD_READ
;[]===========================================================[]
;[]===========================================================[]
CD.OPEN:
LD A,1
JP CD_OPEN
;[]===========================================================[]
;[]===========================================================[]
CD.CLOSE:
LD A,1
JP CD_CLOSE
;[]===========================================================[]
CD_TEST LD HL,CMDNOPP
LD DE,0
CALL AP_COM
RET
;
;[]===========================================================[]
CD_5x.DETECT: ; !FIXIT
SCF
RET
;[]===========================================================[]
CD_OPEN:
LD HL,CMDOPEN
LD DE,0
CALL AP_COM
RET
;
CD_CLOSE:
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
EX AF,AF'
IN A,(SLOT3)
EX AF,AF'
;[]================================================================[#52]
;Function: Long Read Sectors
; A - Disk
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
;LONG READ SECTOR(S)
CD_5x.LONG_READ:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
;
EXX
LD C,SLOT3
IN A,(C)
PUSH AF
LD A,SYS_PAGE
OUT (C),A
LD HL,CMDREAD
LD HL,ATAPI_CMD_PACKET.READ
LD DE,RAM_ATAPI_READ
LD BC,PKTSIZE
LDIR
@ -101,59 +82,107 @@ CD_READ:
LD A,H
LD H,L
LD L,A
LD (RAM_ATAPI_READ+SECREAD+0),HL
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+0),HL
;
LD A,XH
LD (RAM_ATAPI_READ+SECREAD+2),A ;R01
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+2),A ;R01
LD A,XL
LD (RAM_ATAPI_READ+SECREAD+3),A ;R01
LD (RAM_ATAPI_READ + ATAPI_PACKET.SECTOR+3),A ;R01
LD A,B
LD (RAM_ATAPI_READ+COUNT+1),A ;R01
POP AF
LD (RAM_ATAPI_READ + ATAPI_PACKET.COUNTER+1),A ;R01
;
EX AF,AF'
OUT (SLOT3),A
;
; POP AF
; OUT (SLOT3),A
;R01 LD HL,CMDREAD
LD HL,RAM_ATAPI_READ
LD A,C
CALL AP_COM
;
POP BC
LD C,SLOT3
OUT (C),B
;
RET
;[]===========================================================[#52, #55]
;[]================================================================[#57]
;Function: Detect Disk
; A - Disk
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
CD_5x.DETECT:
LD C,IDE.Device.CDROM
AND %1011'1111
JP DRV_DETECT
;[]================================================================[#57]
;[]================================================================[#5E]
;Function: Extended
; A - Disk
; B - SubFunction
;Return:
;
CD_5x.Extended:
LD C,IDE.Device.CDROM
CALL SELECT_DRIVE
RET C
;
LD A,B
CP 2
JR C,TRAY_FN
; ...
; ...
LD A,#AA ;!HARDCODE error code
SCF
RET
;[]================================================================[#5E]
;----------------------------------------------------------------------;
TRAY_FN:
LD DE,0 ;!FIXIT ­ã¦­® «¨?
LD HL,ATAPI_CMD_PACKET.CLOSE
DEC A
JR Z,AP_COM
LD HL,ATAPI_CMD_PACKET.OPEN
JR AP_COM
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; 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,IDE.Drive.Master
JR Z,.APCOM1
LD A,IDE.Drive.Slave
.APCOM1 LD BC,IDE.Write.DeviceHead
OUT (C),A ;SELECT DRIVE
; #01 - RECOVERED ERROR
; #02 - NOT READY
; #03 - MEDIUM ERROR
; #04 - HARDWARE ERROR
; #05 - ILLEGAL REQUEST
; #06 - UNIT ATTETION
; #07 - DATA PROTECT
; #0B - ABORTED COMMAND
; #80 - TIME OUT
AP_COM: EXX
LD DE,#8000
CALL CD_WAITPRT
EXX
LD DE,#8000
;LD BC,IDE.Read.Status
CALL CWAITPRT
EXX
JR NC,.CDREADY
JR NC,.READY
LD BC,IDE.Write.Command
LD A,#08
LD A,IDE.ATAPI.Reset
OUT (C),A
LD B,#00
LD B,#80
.pause: DJNZ .pause
EXX
LD DE,#8000
;LD BC,IDE.Read.Status
CALL CWAITPRT
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
.CDREADY:
.READY:
LD C,SLOT3
IN B,(C)
@ -163,7 +192,7 @@ AP_COM: AND #01
LD A,SYS_PAGE
OUT (C),A
LD A,B
LD DE,RAM_ATAPI_PK
LD DE,RAM_ATAPI_PK ;!FIXIT ¬®¦¥â ­  á⥪¥ ¢ë¤¥«ïâì ¬¥áâ®?
LD BC,PKTSIZE
LDIR
@ -173,32 +202,30 @@ AP_COM: AND #01
XOR A
EXX
OUT (C),A
XOR A
LD BC,IDE.Write.Features
OUT (C),A
LD DE,SIZESEC ;SIZE BLOCK
LD BC,IDE.Write.CylinderLow
OUT (C),E
LD BC,IDE.Write.CylinderHigh
OUT (C),D
LD BC,IDE.Write.Command
LD A,IDE.ATAPI.Packet
OUT (C),A
LD DE,#8000
;LD BC,IDE.Read.Status
CALL CWAITPRT
;OUT (C),A
;XOR A
LD BC,IDE.Write.Features
OUT (C),A
LD DE,SIZESEC ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥­­®© ª ª®©-­¨¡ã¤ì
LD BC,IDE.Write.CylinderLow
OUT (C),E
LD BC,IDE.Write.CylinderHigh
OUT (C),D
LD BC,IDE.Write.Command
LD A,IDE.ATAPI.Packet
OUT (C),A
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
EXX
LD DE,#0908
;LD BC,IDE.Read.Status
CALL CWAITPRT
LD DE,#0908
CALL CD_WAITPRT
EXX
BIT IDE.ControlBit.Error,A
JR NZ,.CDERROR
JR NC,.YEP_DRQ
LD A,#80
LD A,#80 ; TIME OUT ;!HARDCODE
RET
.YEP_DRQ:
LD C,SLOT3
@ -209,7 +236,6 @@ AP_COM: AND #01
LD HL,RAM_ATAPI_PK
LD BC,IDE.Write.Data
LD A,PKTSIZE/2
;SRL A
.OUTPKT:
OUTI
OUTI
@ -224,9 +250,8 @@ AP_COM: AND #01
.AP_LOOP:
EXX
LD DE,#8000
;LD BC,IDE.Read.Status
CALL CWAITPRT
LD DE,#8000
CALL CD_WAITPRT
EXX
RET C
LD BC,IDE.Read.Status
@ -245,7 +270,7 @@ AP_COM: AND #01
RET
.NO_ERR:
BIT IDE.ControlBit.DataRequest,A
LD A,0
LD A,BIOS.Error.NoErrors
RET Z ;NO DATA REQUEST
EX DE,HL
LD BC,IDE.Read.CylinderLow
@ -258,8 +283,8 @@ AP_COM: AND #01
LD BC,IDE.Read.Counter
IN A,(C)
AND #02
CP #02
JP Z,.FROM_CD
;CP #02
JP NZ,.FROM_CD
;.TO_CD:
LD BC,IDE.Read.Data
.WR_T_CD:
@ -298,26 +323,15 @@ AP_COM: AND #01
LD A,D
OR E
JR NZ,.RD_N_CD
; DE = 0 !!!
; 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:
CD_WAITPRT:
LD BC,IDE.Read.Status
LD A,100
LD HL,#0000
@ -344,32 +358,50 @@ CWAITPRT:
.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
;========================================================
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
CD_TEST LD HL,ATAPI_CMD_PACKET.NOP
LD DE,0 ;!FIXIT ­ã¦­® «¨?
JP AP_COM
;----------------------------------------------------------------------;
////////////////////////////////////////////////////////////////////////
ATAPI_CMD_PACKET:
.NOP: DUP 12
DB #00
EDUP
;
.OPEN: DB #1B
DB #00,#00,#00
DB #02
DB #00,#00,#00,#00,#00,#00,#00
;
.CLOSE: DB #1B
DB #00,#00,#00
DB #03
DB #00,#00,#00,#00,#00,#00,#00
;
.READ: DB #28,#00
DB #00,#00,#00,#00 ; sector dword
DB #00
DB #00,#01,#00,#00 ; counter dword
DB #00
;
ATAPI_PACKET:
.SECTOR EQU 2
.COUNTER EQU 7
////////////////////////////////////////////////////////////////////////
;
; E - Second * 10
; PAUSE LD HL,#0000
; PAUSE1 DEC L
; JR NZ,PAUSE1
; DEC H
; JR NZ,PAUSE1
; DEC E
; JR NZ,PAUSE1
; RET
;

View File

@ -89,47 +89,6 @@ HDD_5x.RESET: ; !FIXIT
RET
;[]================================================================[#51]
SELECTH:
AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,SELHH
DEC A
LD IY,IDE.INIT_TBL_IDE1
;R02
JR Z,SELHH
DEC A
LD IY,IDE.INIT_TBL_IDE2
JR Z,SELHH
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR NZ,NODRIVE
SELHH: EXX
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
AND #01
LD A,IDE.Chanel.Secondary
JR NZ,SELCHAN
LD A,IDE.Chanel.Primary
SELCHAN:
OUT (IDE.Chanel.Set),A ;R02
LD A,(IY+IDE.HDD_INIT_TABLE.DriveType)
CP IDE.Device.HDD ;!FIXIT ¢®§¬®¦­®, ­ å७ ­¥ ­ã¦­®, ¯®â®¬ã-çâ® ¥á«¨ CD, â® ¯à¨«¥â¨â ¢ ¤à ©¢¥à CD
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
OUT (C),B ;¢®§¢à â áâà ­¨æë
LD BC,IDE.Write.DeviceHead
RES 0,A
OUT (C),A
EXX
RET Z
NODRIVE:
LD A,BIOS.Error.BadDrvNumber
SCF
RET
;[]================================================================[#58]
;Function: Get Current Media Parameters
@ -141,7 +100,8 @@ NODRIVE:
; IX - Capacity sector in bytes
; B - Flags: MASTER/SLAVE, LBA/CHS
HDD_5x.GETMED:
CALL SELECTH
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
IN A,(SLOT3)
EX AF,AF'
@ -170,7 +130,8 @@ HDD_5x.GETMED:
; B - Flags
;Return: None
HDD_5x.SETMED:
CALL SELECTH
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
IN A,(SLOT3)
EX AF,AF'
@ -208,7 +169,7 @@ HDD_5x.READ:
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory ID Block
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
@ -273,7 +234,9 @@ RST8RDR: RESTORE_PORTY
;EX AF,AF' ;!TEST 21/11/23
RET
;READ SECTOR(S)
RDS000: CALL SELECTH
RDS000:
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
@ -333,6 +296,7 @@ RDS004: DUP 16
LD XH,A
EX AF,AF'
OUT (SLOT3),A
;
.W44: INC XL ;INC LOADED SECTORS
EXX
LD DE,#C140 ;WAIT BUSY=0 & ERR=0 & READY=1
@ -369,7 +333,7 @@ HDD_5x.WRITE:
; HL:IX - Sector
; DE - Address
; B - Sector counter
; A'- Memory ID Block
; A'- Memory Page Number
;Return:
; HL:IX - Sector + Sector counter
; DE - Address + (Sector counter * Size sector)
@ -436,7 +400,8 @@ RST8WRR: RESTORE_PORTY
;WRITE SECTOR(S)
WRS000:
CALL SELECTH
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
@ -550,7 +515,9 @@ HDD_5x.VERIFY:
RET
;[]================================================================[#54]
;VERIFY SECTOR(S)
VRS000: CALL SELECTH
VRS000:
LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
LD DE,#C140 ;WAIT BUSY=0 & READY=1 & ERR=0
@ -665,9 +632,9 @@ CHS005: INC A
LD L,A
RET
;----------------------------------------------------------------------;
; D - MASK
; E - PATTERN
//; BC - PORT
WAITPRT:
LD BC,IDE.Read.Status
LD HL,#0000 ; § ¤¥à¦ª  ;!HARDCODE
@ -690,42 +657,46 @@ WAITPRT:
RET
.ok: POP HL
RET
;----------------------------------------------------------------------;
;=======================================================================
;[]================================================================[#57]
;[ ] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;Function: Detect Disk
; A - Disk
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#FF
; CF=1 - drive not present, A=#02
HDD_5x.DETECT:
CP #84 ;!HARDCODE max HDD drives (#80,#81,#82,#83)
CCF
JR C,.error
LD C,IDE.Device.HDD
JP DRV_DETECT
LD HL,IDE.INIT_TBL_IDE0.DriveType
AND 3
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE1.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE2.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE3.DriveType
.get_param:
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
; CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
; CCF
; JR C,.error
; LD HL,IDE.INIT_TBL_IDE0.DriveType
; AND 3
; JR Z,.get_param
; LD HL,IDE.INIT_TBL_IDE1.DriveType
; DEC A
; JR Z,.get_param
; LD HL,IDE.INIT_TBL_IDE2.DriveType
; DEC A
; JR Z,.get_param
; LD HL,IDE.INIT_TBL_IDE3.DriveType
; .get_param:
; IN A,(SLOT3)
; LD B,A
; LD A,SYS_PAGE
; OUT (SLOT3),A
LD A,(HL)
LD C,SLOT3
OUT (C),B
; LD A,(HL)
; LD C,SLOT3
; OUT (C),B
CP IDE.Device.HDD
RET Z
SCF
.error: LD A,BIOS.Error.BadDrvNumber
RET
; CP IDE.Device.HDD
; RET Z
; SCF
; .error: LD A,BIOS.Error.BadDrvNumber
; RET
;[]================================================================[#57]

View File

@ -0,0 +1,100 @@
;[ ] 18/12/2023. ¤®¡ ¢«¥­¨¥/¤®¯¨«¨¢ ­¨¥ API CD-ROM (ATAPI)
;=======================================================================
; ‚室: A - ­®¬¥à ãáâனá⢠
; C - ’¨¯
SELECT_DRIVE:
AND #0F
LD IY,IDE.INIT_TBL_IDE0
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE1
;R02
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE2
JR Z,.channel
DEC A
LD IY,IDE.INIT_TBL_IDE3
;
JR Z,.channel
LD A,BIOS.Error.BadDrvNumber
SCF
RET
;
.channel:
EXX
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
OUT (SLOT3),A
;
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
AND 1
LD A,IDE.Chanel.Secondary
JR NZ,.device
LD A,IDE.Chanel.Primary
.device:
OUT (IDE.Chanel.Set),A ;R02
LD C,(IY+IDE.HDD_INIT_TABLE.DriveType)
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
POP AF
OUT (SLOT3),A ;¢®§¢à â áâà ­¨æë
;
LD A,C
EXX
CP C
EXX
SCF
LD A,BIOS.Error.BadDrvNumber
RET NZ
;
LD A,B
AND #F0
LD BC,IDE.Write.DeviceHead
OUT (C),A
EXX
RET
;
; NODRIVE:
; LD A,BIOS.Error.BadDrvNumber
; SCF
; RET
;=======================================================================
;=======================================================================
;Function: Detect Disk
; A - Disk
; - Type
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
DRV_DETECT:
CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
CCF
JR C,.error
LD HL,IDE.INIT_TBL_IDE0.DriveType
AND 3
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE1.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE2.DriveType
DEC A
JR Z,.get_param
LD HL,IDE.INIT_TBL_IDE3.DriveType
.get_param:
IN A,(SLOT3)
LD B,A
LD A,SYS_PAGE
OUT (SLOT3),A
LD A,(HL)
CP C ; compare Type
LD C,SLOT3
OUT (C),B
RET Z
SCF
.error: LD A,BIOS.Error.BadDrvNumber
RET

View File

@ -119,8 +119,9 @@ DRV_LIST: ; ?????
INCLUDE 'EXTENDED/FDD_DRIVER_2.asm'
INCLUDE 'EXTENDED/RAM_DISK_DRIVER_1.asm'
INCLUDE 'EXTENDED/HDD_DRIVER_6.asm'
INCLUDE 'EXTENDED/CD_DRIVER_0.asm'
INCLUDE 'EXTENDED/IDE/HDD_DRV.asm'
INCLUDE 'EXTENDED/IDE/CD_DRV.asm'
INCLUDE 'EXTENDED/IDE/SHARED.asm'
;DISPLAY " EXTENDED end addr: ", /A, $

View File

@ -4,7 +4,7 @@
;-----------------------------------------------------------------------
;Rev Date Name Description
;-----------------------------------------------------------------------
;R02 17.08.2023 BAO Fixed bug with AUTODETECT ATAPI Drives
;R02 17.08.2023 BAO New AUTODETECT ATA/ATAPI procedure
;R01 01.08.2001 DNS FIX BUG INT "SELECT_IDE"
;R00 24.07.2001 DNS ADD SECONDARY IDE
; 24.07.2001 DNS INITIAL NEW VERSION 2.48
@ -169,7 +169,7 @@ START: CALL SetUP_CHANELS
LD A,#03
CALL STEP1_GETCMOS
;!TEST save hdd parameters to cmos for "setup" in settings
;[x] save hdd parameters to cmos for "setup" in settings
CALL WRITING
;
CALL ScreenPOS.CRLF

View File

@ -884,6 +884,7 @@ RECOVERYstart:
PrepareToBOOT:
CALL INT_ON
HALT ; ¡¥§ ­¥£® ­¥ áà ¡ â뢠¥â § ¦¨¬ ­¨¥ è¨äâ  ¯à¨ áâ à⥠¤®á  ¤«ï ®â¬¥­ë áâ àâ  system.exe
CALL INT_OFF
CALL PORTS_INIT.clean_kbd_buf ;Clearing the keyboard buffer
@ -937,7 +938,7 @@ CDSTART:
POP AF
PUSH AF
CALL PRINT_CHANEL
;
POP BC
SET 6,B
SCF

Binary file not shown.