testing
This commit is contained in:
parent
69670d7873
commit
0749fd92b5
@ -1 +1 @@
|
|||||||
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa
|
Subproject commit b3224fc3afac71c6b1d461ff54049e58657bbe5a
|
||||||
@ -480,8 +480,8 @@ TAB_5xFNS:
|
|||||||
DB low FDD_5x_READ ;#55
|
DB low FDD_5x_READ ;#55
|
||||||
DB low FDD_5x_WRITE ;#56
|
DB low FDD_5x_WRITE ;#56
|
||||||
DB low FDD_5x_DETECT ;#57
|
DB low FDD_5x_DETECT ;#57
|
||||||
DB low FDD_5x_GETMED ;#58
|
DB low FDD_5x_GET_PAR ;#58
|
||||||
DB low FDD_5x_SETMED ;#59
|
DB low FDD_5x_SET_PAR ;#59
|
||||||
|
|
||||||
DB low DRV_VERSION ;#5A - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low DRV_VERSION ;#5A - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB low FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
@ -506,8 +506,8 @@ TAB_5xFNS:
|
|||||||
DB low RMD_5x_READ
|
DB low RMD_5x_READ
|
||||||
DB low RMD_5x_WRITE
|
DB low RMD_5x_WRITE
|
||||||
DB low FN_ABSENT_5x
|
DB low FN_ABSENT_5x
|
||||||
DB low RMD_5x_GETMED
|
DB low RMD_5x_GET_PAR
|
||||||
DB low RMD_5x_SETMED
|
DB low RMD_5x_SET_PAR
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
@ -531,8 +531,8 @@ TAB_5xFNS:
|
|||||||
DB low HDD_5x_READ
|
DB low HDD_5x_READ
|
||||||
DB low HDD_5x_WRITE
|
DB low HDD_5x_WRITE
|
||||||
DB low HDD_5x_DETECT
|
DB low HDD_5x_DETECT
|
||||||
DB low HDD_5x_GETMED
|
DB low HDD_5x_GET_PAR
|
||||||
DB low HDD_5x_SETMED
|
DB low HDD_5x_SET_PAR
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
DB low FN_RESERVED_5x
|
DB low FN_RESERVED_5x
|
||||||
@ -556,7 +556,7 @@ TAB_5xFNS:
|
|||||||
DB low CD_5x_READ
|
DB low CD_5x_READ
|
||||||
DB low CD_5x_WRITE ; [ ] new
|
DB low CD_5x_WRITE ; [ ] new
|
||||||
DB low CD_5x_DETECT
|
DB low CD_5x_DETECT
|
||||||
DB low CD_5x_GETMED ; [ ] new
|
DB low CD_5x_GET_PAR ; [ ] new
|
||||||
DB low FN_ABSENT_5x ; SETMED
|
DB low FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB low DRV_VERSION
|
DB low DRV_VERSION
|
||||||
@ -583,8 +583,8 @@ TAB_5xFNS:
|
|||||||
DB high FDD_5x_READ ;#55
|
DB high FDD_5x_READ ;#55
|
||||||
DB high FDD_5x_WRITE ;#56
|
DB high FDD_5x_WRITE ;#56
|
||||||
DB high FDD_5x_DETECT ;#57
|
DB high FDD_5x_DETECT ;#57
|
||||||
DB high FDD_5x_GETMED ;#58
|
DB high FDD_5x_GET_PAR ;#58
|
||||||
DB high FDD_5x_SETMED ;#59
|
DB high FDD_5x_SET_PAR ;#59
|
||||||
|
|
||||||
DB high DRV_VERSION ;#5A - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high DRV_VERSION ;#5A - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
DB high FN_RESERVED_5x ;#5B - „ã¡«ì. <20> íâã äãªæ¨î ¯àë£ ¥â ¨§ ®á®¢®£® ®¡à ¡®â稪
|
||||||
@ -609,8 +609,8 @@ TAB_5xFNS:
|
|||||||
DB high RMD_5x_READ
|
DB high RMD_5x_READ
|
||||||
DB high RMD_5x_WRITE
|
DB high RMD_5x_WRITE
|
||||||
DB high FN_ABSENT_5x
|
DB high FN_ABSENT_5x
|
||||||
DB high RMD_5x_GETMED
|
DB high RMD_5x_GET_PAR
|
||||||
DB high RMD_5x_SETMED
|
DB high RMD_5x_SET_PAR
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
@ -634,8 +634,8 @@ TAB_5xFNS:
|
|||||||
DB high HDD_5x_READ
|
DB high HDD_5x_READ
|
||||||
DB high HDD_5x_WRITE
|
DB high HDD_5x_WRITE
|
||||||
DB high HDD_5x_DETECT
|
DB high HDD_5x_DETECT
|
||||||
DB high HDD_5x_GETMED
|
DB high HDD_5x_GET_PAR
|
||||||
DB high HDD_5x_SETMED
|
DB high HDD_5x_SET_PAR
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
DB high FN_RESERVED_5x
|
DB high FN_RESERVED_5x
|
||||||
@ -659,7 +659,7 @@ TAB_5xFNS:
|
|||||||
DB high CD_5x_READ
|
DB high CD_5x_READ
|
||||||
DB high CD_5x_WRITE ; WRITE ; [ ] new
|
DB high CD_5x_WRITE ; WRITE ; [ ] new
|
||||||
DB high CD_5x_DETECT
|
DB high CD_5x_DETECT
|
||||||
DB high CD_5x_GETMED
|
DB high CD_5x_GET_PAR
|
||||||
DB high FN_ABSENT_5x ; SETMED
|
DB high FN_ABSENT_5x ; SETMED
|
||||||
|
|
||||||
DB high DRV_VERSION
|
DB high DRV_VERSION
|
||||||
@ -695,8 +695,8 @@ EXP_FNS_RST18:
|
|||||||
; HDD_5x_READ
|
; HDD_5x_READ
|
||||||
; HDD_5x_WRITE
|
; HDD_5x_WRITE
|
||||||
; HDD_5x_DETECT
|
; HDD_5x_DETECT
|
||||||
; HDD_5x_GETMED
|
; HDD_5x_GET_PAR
|
||||||
; HDD_5x_SETMED
|
; HDD_5x_SET_PAR
|
||||||
; DRV_VERSION
|
; DRV_VERSION
|
||||||
; FN_RESERVED_5x
|
; FN_RESERVED_5x
|
||||||
; FN_RESERVED_5x
|
; FN_RESERVED_5x
|
||||||
@ -722,10 +722,10 @@ FN_5x_Parser_6: ; HDD_5x_WRITE
|
|||||||
FN_5x_Parser_7: ; HDD_5x_DETECT
|
FN_5x_Parser_7: ; HDD_5x_DETECT
|
||||||
LD C,#07
|
LD C,#07
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_8: ; HDD_5x_GETMED
|
FN_5x_Parser_8: ; HDD_5x_GET_PAR
|
||||||
LD C,#08
|
LD C,#08
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_9: ; HDD_5x_SETMED
|
FN_5x_Parser_9: ; HDD_5x_SET_PAR
|
||||||
LD C,#09
|
LD C,#09
|
||||||
JP FN_5x_Parser
|
JP FN_5x_Parser
|
||||||
FN_5x_Parser_E: ; DRV_EXTENDED
|
FN_5x_Parser_E: ; DRV_EXTENDED
|
||||||
|
|||||||
@ -23,7 +23,7 @@
|
|||||||
; D7 - "1" - High Density, "0" - Double Density
|
; D7 - "1" - High Density, "0" - Double Density
|
||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
;!FIXIT ¢á¥£¤ ¨¤¥â à ¡®â á ¤ 묨 ¤«ï ¤¨áª €
|
;!FIXIT ¢á¥£¤ ¨¤¥â à ¡®â á ¤ 묨 ¤«ï ¤¨áª €
|
||||||
FDD_5x_GETMED:
|
FDD_5x_GET_PAR:
|
||||||
;!TEST FDD 720/1440
|
;!TEST FDD 720/1440
|
||||||
IF FDD_NormalCount
|
IF FDD_NormalCount
|
||||||
LD IY,FDD_INIT_TABLE.FDD_0
|
LD IY,FDD_INIT_TABLE.FDD_0
|
||||||
@ -71,7 +71,7 @@ FDD_5x_GETMED:
|
|||||||
; D7 - "1" - High Density, "0" - Double Density
|
; D7 - "1" - High Density, "0" - Double Density
|
||||||
;Return: None
|
;Return: None
|
||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
FDD_5x_SETMED: ;!TEST FDD 720/1440
|
FDD_5x_SET_PAR: ;!TEST FDD 720/1440
|
||||||
IF FDD_NormalCount
|
IF FDD_NormalCount
|
||||||
LD IY,FDD_INIT_TABLE.FDD_0
|
LD IY,FDD_INIT_TABLE.FDD_0
|
||||||
DEC A
|
DEC A
|
||||||
|
|||||||
@ -28,14 +28,12 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
RET C
|
RET C
|
||||||
LD B,50
|
LD B,50
|
||||||
.loop: PUSH BC
|
.loop: PUSH BC
|
||||||
LD HL,ATAPI_CMD_PACKET.NOP
|
CALL EXEC_NOP_CMD
|
||||||
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
|
||||||
CALL EXEC_PACKET_COMMAND
|
|
||||||
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
||||||
POP BC
|
POP BC
|
||||||
RET NC
|
RET NC
|
||||||
;
|
;
|
||||||
CALL CD_CHECK_MEDIA_CHANGED
|
CALL CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
EI
|
EI
|
||||||
@ -49,17 +47,20 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
;Function: Get Current Media Parameters
|
;Function: Get Current Media Parameters
|
||||||
; A - Disk
|
; A - Disk
|
||||||
;Return:
|
;Return:
|
||||||
; H - Heads
|
; H - Heads ; [ ] For ATAPI HL:DE - media size in sectors
|
||||||
; L - Sectors per cylinder
|
; L - Sectors per cylinder ;
|
||||||
; DE - Cylinders
|
; DE - Cylinders ;
|
||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags: MASTER/SLAVE, LBA/CHS
|
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||||
; [ ] A - HDD_INIT_TABLE.RemovableMedia
|
; [ ] A - HDD_INIT_TABLE.MediaParameters
|
||||||
CD_5x_GETMED: LD C,IDE.Device.ATAPI
|
; IF media changed
|
||||||
|
; [ ] CF' = 1, A' = error number UnitAttention
|
||||||
|
CD_5x_GET_PAR: LD C,IDE.Device.ATAPI
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
;
|
;
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
|
AND A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
@ -68,31 +69,36 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI
|
|||||||
CALL CD_CHECK_MEDIA_CHANGED
|
CALL CD_CHECK_MEDIA_CHANGED
|
||||||
JR NC,.get_data
|
JR NC,.get_data
|
||||||
;
|
;
|
||||||
; CP BIOS.Error.ATAPI.UnitAttention
|
CP BIOS.Error.ATAPI.NotReady
|
||||||
; JR NZ,.get_data
|
;LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
;
|
SCF
|
||||||
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
JR NZ,.UnitAttention
|
||||||
AND %1111'1101
|
LD HL,#FFFF
|
||||||
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
|
LD D,H
|
||||||
|
LD E,L
|
||||||
|
RET
|
||||||
;
|
;
|
||||||
|
.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
|
||||||
|
EX AF,AF'
|
||||||
|
SCF
|
||||||
|
EX AF,AF'
|
||||||
.get_data: ;
|
.get_data: ;
|
||||||
; LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
; LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
|
||||||
; LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
|
||||||
; LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.RemovableMedia)
|
|
||||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
LD L,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ] sector size
|
; [ ] sector size
|
||||||
LD H,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ] sector size
|
LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize)
|
||||||
EX DE,HL
|
LD D,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1)
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD XH,D
|
LD XH,D
|
||||||
|
; [ ] media size
|
||||||
|
LD L,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh)
|
||||||
|
LD H,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1)
|
||||||
|
LD E,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow)
|
||||||
|
LD D,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1)
|
||||||
;
|
;
|
||||||
LD HL,0
|
|
||||||
LD D,H
|
|
||||||
LD E,H
|
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
|
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ®¬¥à ®è¨¡ª¨
|
||||||
EX AF,AF
|
EX AF,AF
|
||||||
RET
|
RET
|
||||||
;[]================================================================[#58]
|
;[]================================================================[#58]
|
||||||
@ -165,7 +171,7 @@ RW_ATAPI_SECTORs:
|
|||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
; [ ] media change
|
; [ ] media change
|
||||||
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
AND %0000'0010
|
AND %0000'0010
|
||||||
JR NZ,.error_media
|
JR NZ,.error_media
|
||||||
;
|
;
|
||||||
@ -196,7 +202,7 @@ RW_ATAPI_SECTORs:
|
|||||||
; POP AF
|
; POP AF
|
||||||
; OUT (SLOT3),A
|
; OUT (SLOT3),A
|
||||||
LD HL,RAM_ATAPI_RW_CMD
|
LD HL,RAM_ATAPI_RW_CMD
|
||||||
CALL EXEC_PACKET_COMMAND
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
;
|
;
|
||||||
.exit: POP BC
|
.exit: POP BC
|
||||||
;LD C,SLOT3
|
;LD C,SLOT3
|
||||||
@ -255,38 +261,60 @@ CD_5x_LONG_WRITE:
|
|||||||
;Function: Detect Disk
|
;Function: Detect Disk
|
||||||
; A - Disk
|
; A - Disk
|
||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type
|
||||||
; B=RemovableMedia byte ; [ ]
|
; B=MediaParameters byte ; [ ] media change
|
||||||
|
; CF=1 - drive not present, A=#02
|
||||||
|
; CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
||||||
|
; AND %1011'1111
|
||||||
|
; .shared: LD D,A
|
||||||
|
; LD E,C
|
||||||
|
; PUSH DE
|
||||||
|
; CALL DRV_DETECT
|
||||||
|
; POP DE
|
||||||
|
; RET C
|
||||||
|
; ;
|
||||||
|
; PUSH AF
|
||||||
|
; LD C,SLOT3
|
||||||
|
; IN B,(C)
|
||||||
|
; LD A,SYS_PAGE
|
||||||
|
; OUT (C),A
|
||||||
|
; INC HL ;!HARDCODE HDD_INIT_TABLE
|
||||||
|
; INC HL
|
||||||
|
; INC HL
|
||||||
|
; LD A,(HL)
|
||||||
|
; OUT (C),B
|
||||||
|
; LD B,A
|
||||||
|
; AND %0000'0011 ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ „‘‘? ; !FIXIT
|
||||||
|
; JR NZ,.error
|
||||||
|
; ;
|
||||||
|
; .exit: POP AF
|
||||||
|
; RET
|
||||||
|
; ;
|
||||||
|
; .error: AND %0000'0010
|
||||||
|
; JR NZ,.UnitAttention
|
||||||
|
; ;
|
||||||
|
; LD A,D
|
||||||
|
; LD C,E
|
||||||
|
; CALL SELECT_DRIVE
|
||||||
|
; CALL CD_CHECK_MEDIA_CHANGED
|
||||||
|
; JR NC,.exit
|
||||||
|
; POP BC
|
||||||
|
; RET
|
||||||
|
; ;
|
||||||
|
; .UnitAttention: POP AF
|
||||||
|
; LD A,BIOS.Error.ATAPI.UnitAttention
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
;[]================================================================[#57]
|
||||||
|
;[]================================================================[#57]
|
||||||
|
;Function: Detect Disk
|
||||||
|
; A - Disk
|
||||||
|
;Return: CF=0 - A=Drive type
|
||||||
|
; B=MediaParameters byte ; [ ] media change
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - drive not present, A=#02
|
||||||
CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
CD_5x_DETECT: LD C,IDE.Device.ATAPI
|
||||||
AND %1011'1111
|
JP HDD_5x_DETECT.shared
|
||||||
.shared: CALL DRV_DETECT
|
|
||||||
RET C
|
|
||||||
;
|
|
||||||
PUSH AF
|
|
||||||
LD C,SLOT3
|
|
||||||
IN B,(C)
|
|
||||||
LD A,SYS_PAGE
|
|
||||||
OUT (C),A
|
|
||||||
INC HL ;!HARDCODE HDD_INIT_TABLE
|
|
||||||
INC HL
|
|
||||||
INC HL
|
|
||||||
LD A,(HL)
|
|
||||||
OUT (C),B
|
|
||||||
LD B,A
|
|
||||||
AND %0000'0010
|
|
||||||
JR Z,.exit
|
|
||||||
;
|
|
||||||
POP AF
|
|
||||||
LD A,BIOS.Error.ATAPI.UnitAttention
|
|
||||||
SCF
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.exit: POP AF
|
|
||||||
RET
|
|
||||||
|
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
|
|
||||||
|
|
||||||
;[]================================================================[#5E]
|
;[]================================================================[#5E]
|
||||||
; [ ]
|
; [ ]
|
||||||
;Function: Extended
|
;Function: Extended
|
||||||
@ -316,17 +344,20 @@ CD_5x_Extended:
|
|||||||
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
||||||
CD_REQUEST_SENSE:
|
CD_REQUEST_SENSE:
|
||||||
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
JR EXEC_PACKET_COMMAND
|
JR EXEC_PACKET_COMMAND.start
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
;[ ] media changed
|
;[ ] media changed
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_CHECK_MEDIA_CHANGED:
|
CD_CHECK_MEDIA_CHANGED:
|
||||||
EXX
|
CALL EXEC_NOP_CMD ;!FIXIT ¬®¦¥â ¨ ¥ ¤®
|
||||||
LD DE,256*(IDE.CtrlByte.Error) + 0
|
; .skip_nop: EXX
|
||||||
CALL CD_WAITPRT.Custom
|
; CALL CD_WAITPRT
|
||||||
EXX
|
; EXX
|
||||||
;RET NC
|
; LD A, high IDE.Read.Status
|
||||||
|
; IN A,(low IDE.Read.Status)
|
||||||
|
; RRA
|
||||||
|
; ;RET NC
|
||||||
JR C,.noWait
|
JR C,.noWait
|
||||||
;
|
;
|
||||||
EXX
|
EXX
|
||||||
@ -335,7 +366,7 @@ CD_CHECK_MEDIA_CHANGED:
|
|||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
;
|
;
|
||||||
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
EXX
|
EXX
|
||||||
RRA
|
RRA
|
||||||
@ -357,7 +388,7 @@ CD_CHECK_MEDIA_CHANGED:
|
|||||||
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||||
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
DEC A
|
DEC A
|
||||||
JR Z,EXEC_PACKET_COMMAND
|
JR Z,EXEC_PACKET_COMMAND.start
|
||||||
LD HL,ATAPI_CMD_PACKET.OPEN
|
LD HL,ATAPI_CMD_PACKET.OPEN
|
||||||
;JR EXEC_PACKET_COMMAND
|
;JR EXEC_PACKET_COMMAND
|
||||||
|
|
||||||
@ -376,20 +407,38 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
|||||||
; #0B - ABORTED COMMAND
|
; #0B - ABORTED COMMAND
|
||||||
; #80 - TIME OUT
|
; #80 - TIME OUT
|
||||||
EXEC_PACKET_COMMAND:
|
EXEC_PACKET_COMMAND:
|
||||||
EXX
|
.error: CP #FF
|
||||||
|
.error_fail: SCF
|
||||||
|
LD A,BIOS.Error.Failure
|
||||||
|
RET Z
|
||||||
|
;
|
||||||
|
LD A,BIOS.Error.Busy
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.error_TimeOut: CP #FF
|
||||||
|
JR Z,.error_fail
|
||||||
|
LD A,BIOS.Error.ATAPI.TimeOut
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
; .CMD_ERROR: CALL CD_GET_ERROR
|
||||||
|
; OR #70
|
||||||
|
; CP BIOS.Error.UnitAttention
|
||||||
|
; CALL Z,CD_MEDIA_CHANGED_ERROR
|
||||||
|
; ;LD BC,IDE.Read.Error ;ERROR
|
||||||
|
; ;IN A,(C)
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;RRCA
|
||||||
|
; ;AND #0F
|
||||||
|
; SCF
|
||||||
|
; RET
|
||||||
|
;
|
||||||
|
.start: EXX
|
||||||
CALL CD_WAITPRT
|
CALL CD_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JR NC,.READY
|
JR NC,.READY
|
||||||
;
|
;
|
||||||
; [ ] media changed
|
|
||||||
; CP +(BIOS.Error.UnitAttention & #0F)
|
|
||||||
; JR NZ,.reset
|
|
||||||
; ;
|
|
||||||
; CALL CD_MEDIA_CHANGED_ERROR
|
|
||||||
; OR #70 ; error prefix for ATAPI in BIOS
|
|
||||||
; SCF
|
|
||||||
; RET
|
|
||||||
;
|
|
||||||
.reset: LD BC,IDE.Write.Command
|
.reset: LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATAPI.Reset
|
LD A,IDE.ATAPI.Reset
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
@ -420,8 +469,6 @@ EXEC_PACKET_COMMAND:
|
|||||||
;
|
;
|
||||||
XOR A
|
XOR A
|
||||||
EXX
|
EXX
|
||||||
;OUT (C),A
|
|
||||||
;XOR A
|
|
||||||
LD BC,IDE.Write.Features
|
LD BC,IDE.Write.Features
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
LD DE,MAX_ATAPI_SEC_SIZE ;SIZE BLOCK ;!HARDCODE ¤®áâ ¢ âì ¨§ ¯¥à¥¬¥®© ª ª®©-¨¡ã¤ì
|
||||||
@ -441,37 +488,8 @@ EXEC_PACKET_COMMAND:
|
|||||||
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
|
||||||
CALL CD_WAITPRT.Custom
|
CALL CD_WAITPRT.Custom
|
||||||
EXX
|
EXX
|
||||||
JR NC,.YEP_DRQ
|
JR C,.error_TimeOut
|
||||||
;
|
;
|
||||||
CP #FF
|
|
||||||
JR Z,.error_fail
|
|
||||||
;
|
|
||||||
RRA ;AND IDE.CtrlByte.Error
|
|
||||||
JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
|
||||||
;
|
|
||||||
LD A,BIOS.Error.ATAPI.TimeOut
|
|
||||||
RET
|
|
||||||
;
|
|
||||||
.error: CP #FF
|
|
||||||
SCF
|
|
||||||
.error_fail: LD A,BIOS.Error.Failure
|
|
||||||
RET Z
|
|
||||||
LD A,BIOS.Error.Busy
|
|
||||||
RET
|
|
||||||
; .CMD_ERROR: CALL CD_GET_ERROR
|
|
||||||
; OR #70
|
|
||||||
; CP BIOS.Error.UnitAttention
|
|
||||||
; CALL Z,CD_MEDIA_CHANGED_ERROR
|
|
||||||
; ;LD BC,IDE.Read.Error ;ERROR
|
|
||||||
; ;IN A,(C)
|
|
||||||
; ;RRCA
|
|
||||||
; ;RRCA
|
|
||||||
; ;RRCA
|
|
||||||
; ;RRCA
|
|
||||||
; ;AND #0F
|
|
||||||
; ;!FIXIT ; [ ] sector size. make REQUEST SENSE if A=6
|
|
||||||
; SCF
|
|
||||||
; RET
|
|
||||||
; EXEC ATAPI PACKET COMMAND
|
; EXEC ATAPI PACKET COMMAND
|
||||||
.YEP_DRQ: LD C,SLOT3
|
.YEP_DRQ: LD C,SLOT3
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
@ -507,10 +525,11 @@ EXEC_PACKET_COMMAND:
|
|||||||
EXX
|
EXX
|
||||||
CALL CD_WAITPRT
|
CALL CD_WAITPRT
|
||||||
EXX
|
EXX
|
||||||
JR C,.error
|
JP C,.error
|
||||||
|
;
|
||||||
|
LD A,high IDE.Read.Status
|
||||||
|
IN A,(low IDE.Read.Status)
|
||||||
;
|
;
|
||||||
LD BC,IDE.Read.Status
|
|
||||||
IN A,(C)
|
|
||||||
BIT IDE.CtrlBit.Error,A
|
BIT IDE.CtrlBit.Error,A
|
||||||
JP NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
JP NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
;
|
;
|
||||||
@ -525,23 +544,35 @@ EXEC_PACKET_COMMAND:
|
|||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD BC,IDE.Read.ByteCountLow
|
LD BC,IDE.Read.ByteCountLow
|
||||||
IN E,(C)
|
IN E,(C)
|
||||||
LD BC,IDE.Read.ByteCountHigh
|
INC C ;LD BC,IDE.Read.ByteCountHigh
|
||||||
IN D,(C) ;TRANSFER BLOCK SIZE
|
IN D,(C) ;TRANSFER BLOCK SIZE
|
||||||
|
;
|
||||||
LD A,D
|
LD A,D
|
||||||
OR E
|
OR E
|
||||||
RET Z ;BLOCK = 0
|
RET Z ;BLOCK = 0
|
||||||
;
|
;
|
||||||
|
; 㬥ìè ¥¬ áçñâ稪 § £à㦠¥¬ëå ¡ ©â®¢ ¢ 2 à § . —¨â ¥¬ ¯® 2 ¡ ©â
|
||||||
|
SRL D
|
||||||
|
RR E
|
||||||
|
;
|
||||||
LD BC,IDE.Read.InterruptReason
|
LD BC,IDE.Read.InterruptReason
|
||||||
IN A,(C)
|
IN A,(C)
|
||||||
AND IDE.InterruptReasonByte.IO
|
AND IDE.InterruptReasonByte.IO
|
||||||
LD BC,IDE.Read.Data
|
LD BC,IDE.Read.Data
|
||||||
JR Z,.WRITE_DATA
|
JR Z,.WRITE_DATA
|
||||||
;
|
|
||||||
;READ
|
;READ
|
||||||
|
; ¯à®¢¥àª â㯮áâì ª®¤¥à
|
||||||
|
; CF=0
|
||||||
|
; ADC HL,DE
|
||||||
|
; JR Z,.good_buffer
|
||||||
|
; JR C,.error_buffer
|
||||||
|
;
|
||||||
|
; .good_buffer: AND A
|
||||||
|
; SBC HL,DE
|
||||||
|
|
||||||
.read_loop: INI
|
.read_loop: INI
|
||||||
INI
|
INI
|
||||||
DEC DE
|
DEC DE
|
||||||
DEC DE
|
|
||||||
LD A,D
|
LD A,D
|
||||||
OR E
|
OR E
|
||||||
JR NZ,.read_loop
|
JR NZ,.read_loop
|
||||||
@ -566,19 +597,20 @@ EXEC_PACKET_COMMAND:
|
|||||||
EX AF,AF' ;<-----------< /
|
EX AF,AF' ;<-----------< /
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
JR .AP_LOOP
|
JR .AP_LOOP
|
||||||
; ;
|
|
||||||
;WRITE
|
;WRITE
|
||||||
.WRITE_DATA: INC B ; LD BC,IDE.Write.Data
|
.WRITE_DATA: INC B ; LD BC,IDE.Write.Data
|
||||||
.write_loop: OUTI
|
.write_loop: OUTI
|
||||||
OUTI
|
OUTI
|
||||||
DEC DE
|
DEC DE
|
||||||
DEC DE
|
|
||||||
LD A,D
|
LD A,D
|
||||||
OR E
|
OR E
|
||||||
JR NZ,.write_loop
|
JR NZ,.write_loop
|
||||||
JR .return_rw
|
JR .return_rw
|
||||||
|
;
|
||||||
;.NULL: LD BC,IDE.Read.Data
|
; !TODO 宫®á⮥ ç⥨¥
|
||||||
|
; .error_buffer: AND A
|
||||||
|
; SBC HL,DE
|
||||||
|
;.NULL:
|
||||||
;.RD_N_CD: IN A,(C)
|
;.RD_N_CD: IN A,(C)
|
||||||
; DEC B
|
; DEC B
|
||||||
; IN A,(C)
|
; IN A,(C)
|
||||||
@ -647,7 +679,9 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
||||||
CALL CD_REQUEST_SENSE
|
CALL CD_REQUEST_SENSE
|
||||||
;
|
;
|
||||||
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06 - UNIT ATTENTION
|
||||||
|
CP 2 ; SenceKey. 02 - NOT READY
|
||||||
|
JR Z,.Not_Ready
|
||||||
CP 6
|
CP 6
|
||||||
JR NZ,.exit
|
JR NZ,.exit
|
||||||
;
|
;
|
||||||
@ -659,17 +693,23 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
AND A
|
AND A
|
||||||
JR NZ,.exit
|
JR NZ,.exit
|
||||||
;
|
;
|
||||||
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
OR %0000'0011
|
OR %0000'0011
|
||||||
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
|
LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A
|
||||||
;
|
;
|
||||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||||
LD DE,SYS_PAGE.TMP_BUFFER
|
LD DE,SYS_PAGE.TMP_BUFFER
|
||||||
CALL EXEC_PACKET_COMMAND
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
JR C,.No_Media
|
JR C,.No_Media
|
||||||
;
|
;
|
||||||
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size (high byte, low byte)
|
LD HL,(SYS_PAGE.TMP_BUFFER) ; media size high
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L
|
||||||
|
LD HL,(SYS_PAGE.TMP_BUFFER + 2) ; media size low
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
|
||||||
|
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size
|
||||||
;
|
;
|
||||||
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
||||||
@ -680,6 +720,12 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
SCF
|
SCF
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
|
.Not_Ready: POP AF
|
||||||
|
OUT (SLOT3),A
|
||||||
|
LD A,BIOS.Error.ATAPI.NotReady
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
|
;
|
||||||
.exit: POP AF
|
.exit: POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
; CF=0
|
; CF=0
|
||||||
@ -687,7 +733,10 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
; SELECT_DRIVE ¤®«¦¥ ®âà ¡®â âì § à ¥¥
|
||||||
|
EXEC_NOP_CMD: LD HL,ATAPI_CMD_PACKET.NOP
|
||||||
|
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
|
JP EXEC_PACKET_COMMAND.start
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
ATAPI_CMD_PACKET:
|
ATAPI_CMD_PACKET:
|
||||||
@ -744,7 +793,7 @@ ATAPI_PACKET:
|
|||||||
; RET
|
; RET
|
||||||
;
|
;
|
||||||
/*
|
/*
|
||||||
…᫨ «®¢¨âáï ®è¨¡ª media changed, â® ¡¨®á ¤®«¦¥ ¢ëáâ ¢«ïâì ¢ HDD_INIT_TABLE.RemovableMedia = 3
|
…᫨ «®¢¨âáï ®è¨¡ª media changed, â® ¡¨®á ¤®«¦¥ ¢ëáâ ¢«ïâì ¢ HDD_INIT_TABLE.MediaParameters = 3
|
||||||
¨ § â¨à âì FF SectorSize.
|
¨ § â¨à âì FF SectorSize.
|
||||||
„®á ¯®á«¥ ¯®«ã票ï â ª®© ®è¨¡ª¨ ¤®«¦¥ ¢ë§ë¢ âì BIOS.DRV_DETECT ¨ ¥á«¨ ¢áñ ŽŠ, â® ReScanDRV
|
„®á ¯®á«¥ ¯®«ã票ï â ª®© ®è¨¡ª¨ ¤®«¦¥ ¢ë§ë¢ âì BIOS.DRV_DETECT ¨ ¥á«¨ ¢áñ ŽŠ, â® ReScanDRV
|
||||||
*/
|
*/
|
||||||
@ -99,7 +99,7 @@ HDD_5x_RESET: ; !FIXIT
|
|||||||
; DE - Cylinders
|
; DE - Cylinders
|
||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags: MASTER/SLAVE, LBA/CHS
|
; B - Flags: MASTER/SLAVE, LBA/CHS
|
||||||
HDD_5x_GETMED:
|
HDD_5x_GET_PAR:
|
||||||
LD C,IDE.Device.HDD
|
LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
@ -107,13 +107,13 @@ HDD_5x_GETMED:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.RemovableMedia)
|
LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
||||||
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
||||||
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
||||||
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
||||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
LD IX,512 ;!HARDCODE sector size
|
LD IX,512 ;!HARDCODE ; [ ] sector size
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -129,7 +129,7 @@ HDD_5x_GETMED:
|
|||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags
|
; B - Flags
|
||||||
;Return: None
|
;Return: None
|
||||||
HDD_5x_SETMED:
|
HDD_5x_SET_PAR:
|
||||||
LD C,IDE.Device.HDD
|
LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
@ -143,6 +143,7 @@ HDD_5x_SETMED:
|
|||||||
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
|
LD (IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh),D
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),B
|
||||||
;!TODO ; [ ] sector size
|
;!TODO ; [ ] sector size
|
||||||
|
;!TODO ; [ ] UnitAttention
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;EX AF,AF'
|
;EX AF,AF'
|
||||||
@ -674,7 +675,35 @@ WAITPRT: LD DE,256*(IDE.CtrlByte.Busy+IDE.CtrlByte.Ready+IDE.CtrlByte.Error)+IDE
|
|||||||
; A - Disk
|
; A - Disk
|
||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - drive not present, A=#02
|
||||||
HDD_5x_DETECT:
|
HDD_5x_DETECT: LD C,IDE.Device.HDD
|
||||||
LD C,IDE.Device.HDD
|
.shared: CALL SELECT_DRIVE
|
||||||
JP CD_5x_DETECT.shared
|
RET C
|
||||||
|
;
|
||||||
|
LD B,A
|
||||||
|
AND %0000'0011 ;[ ] media change ¯¥à¥¤¥« âì «®£¨ªã âãâ ¨ ¢ „‘‘? ; !FIXIT
|
||||||
|
JR NZ,.notZero
|
||||||
|
LD A,C
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.notZero: AND %0000'0010
|
||||||
|
JR NZ,.UnitAttention
|
||||||
|
; C = DriveType
|
||||||
|
LD A,C
|
||||||
|
CP IDE.Device.ATAPI
|
||||||
|
JR Z,.AtapiCheckMedia
|
||||||
|
;!FIXIT AtaCheckMedia - ¥ ᤥ« ®
|
||||||
|
AND A
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.AtapiCheckMedia:
|
||||||
|
PUSH BC ; B - MediaParameters, C - DriveType
|
||||||
|
CALL CD_CHECK_MEDIA_CHANGED
|
||||||
|
POP BC ; B - MediaParameters, C - DriveType
|
||||||
|
RET C
|
||||||
|
LD A,C
|
||||||
|
RET
|
||||||
|
;
|
||||||
|
.UnitAttention: LD A,BIOS.Error.ATAPI.UnitAttention
|
||||||
|
SCF
|
||||||
|
RET
|
||||||
;[]================================================================[#57]
|
;[]================================================================[#57]
|
||||||
@ -1,6 +1,7 @@
|
|||||||
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
;[x] 18/12/2023. ¤®¡ ¢«¥¨¥/¤®¯¨«¨¢ ¨¥ API CD-ROM (ATAPI)
|
||||||
;=======================================================================
|
;=======================================================================
|
||||||
; ‚室: A - ®¬¥à ãáâனáâ¢
|
; ‚室: A - ®¬¥à ãáâனá⢠, C - DriveType
|
||||||
|
; ‚ë室: A - MediaParameters, C - DriveType
|
||||||
SELECT_DRIVE:
|
SELECT_DRIVE:
|
||||||
AND #0F
|
AND #0F
|
||||||
LD IY,IDE.INIT_TBL_IDE0
|
LD IY,IDE.INIT_TBL_IDE0
|
||||||
@ -27,13 +28,7 @@ SELECT_DRIVE:
|
|||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
LD H,(IY + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
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 C,(IY + IDE.HDD_INIT_TABLE.DriveType)
|
||||||
LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
|
LD B,(IY + IDE.HDD_INIT_TABLE.DRV_Flags)
|
||||||
POP AF
|
POP AF
|
||||||
@ -41,16 +36,25 @@ SELECT_DRIVE:
|
|||||||
;
|
;
|
||||||
LD A,C
|
LD A,C
|
||||||
EXX
|
EXX
|
||||||
|
;
|
||||||
CP C
|
CP C
|
||||||
|
;
|
||||||
EXX
|
EXX
|
||||||
SCF
|
SCF
|
||||||
LD A,BIOS.Error.BadNumber
|
LD A,BIOS.Error.BadNumber
|
||||||
RET NZ
|
RET NZ
|
||||||
;
|
;
|
||||||
|
LD A,B
|
||||||
|
RRA
|
||||||
|
LD A,IDE.Chanel.Secondary
|
||||||
|
JR C,.device
|
||||||
|
LD A,IDE.Chanel.Primary
|
||||||
|
.device: OUT (IDE.Chanel.Set),A ;R02
|
||||||
LD A,B
|
LD A,B
|
||||||
AND #F0
|
AND #F0
|
||||||
LD BC,IDE.Write.DeviceHead
|
LD BC,IDE.Write.DeviceHead
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
|
LD A,H
|
||||||
EXX
|
EXX
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
@ -65,32 +69,33 @@ SELECT_DRIVE:
|
|||||||
;Function: Detect Disk
|
;Function: Detect Disk
|
||||||
; A - Disk
|
; A - Disk
|
||||||
; ‘ - Type
|
; ‘ - Type
|
||||||
;Return: CF=0 - A=Drive type
|
;Return: CF=0 - A=Drive type, H=MediaParameters
|
||||||
; CF=1 - drive not present, A=#02
|
; CF=1 - drive not present, A=#02
|
||||||
DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
;DRV_DETECT: CP #84 ;!HARDCODE max IDE drives (#80,#81,#82,#83)
|
||||||
CCF
|
; CCF
|
||||||
JR C,.error
|
; JR C,.error
|
||||||
;
|
; ;
|
||||||
LD HL,IDE.INIT_TBL_IDE0.DriveType
|
; LD IX,IDE.INIT_TBL_IDE0
|
||||||
AND 3
|
; AND 3
|
||||||
JR Z,.get_param
|
; JR Z,.get_param
|
||||||
LD HL,IDE.INIT_TBL_IDE1.DriveType
|
; LD IX,IDE.INIT_TBL_IDE1
|
||||||
DEC A
|
; DEC A
|
||||||
JR Z,.get_param
|
; JR Z,.get_param
|
||||||
LD HL,IDE.INIT_TBL_IDE2.DriveType
|
; LD IX,IDE.INIT_TBL_IDE2
|
||||||
DEC A
|
; DEC A
|
||||||
JR Z,.get_param
|
; JR Z,.get_param
|
||||||
LD HL,IDE.INIT_TBL_IDE3.DriveType
|
; LD IX,IDE.INIT_TBL_IDE3
|
||||||
.get_param: IN A,(SLOT3)
|
; .get_param: IN A,(SLOT3)
|
||||||
LD B,A
|
; LD B,A
|
||||||
LD A,SYS_PAGE
|
; LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
; OUT (SLOT3),A
|
||||||
;
|
; ;
|
||||||
LD A,(HL)
|
; LD H,(IX + IDE.HDD_INIT_TABLE.MediaParameters)
|
||||||
CP C ; compare Type
|
; LD A,(IX + IDE.HDD_INIT_TABLE.DriveType)
|
||||||
LD C,SLOT3
|
; CP C ; compare Type
|
||||||
OUT (C),B
|
; LD C,SLOT3
|
||||||
RET Z
|
; OUT (C),B
|
||||||
SCF
|
; RET Z
|
||||||
.error: LD A,BIOS.Error.BadNumber
|
; SCF
|
||||||
RET
|
; .error: LD A,BIOS.Error.BadNumber
|
||||||
|
; RET
|
||||||
@ -12,7 +12,7 @@
|
|||||||
;Return: None
|
;Return: None
|
||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
;!FIXIT
|
;!FIXIT
|
||||||
RMD_5x_SETMED:
|
RMD_5x_SET_PAR:
|
||||||
and a
|
and a
|
||||||
ret
|
ret
|
||||||
; A - Disk
|
; A - Disk
|
||||||
@ -35,7 +35,7 @@ RMD_5x_SETMED:
|
|||||||
; IX - Capacity sector in bytes
|
; IX - Capacity sector in bytes
|
||||||
; B - Flags: ramblock ID
|
; B - Flags: ramblock ID
|
||||||
;[]===========================================================[]
|
;[]===========================================================[]
|
||||||
RMD_5x_GETMED: AND #0F
|
RMD_5x_GET_PAR: AND #0F
|
||||||
CALL GET_RAMD_ST ; ¯®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª
|
CALL GET_RAMD_ST ; ¯®«ã票¥ ¨¤¥â¨ä¨ª â®à ¡«®ª
|
||||||
RET C
|
RET C
|
||||||
SCF
|
SCF
|
||||||
|
|||||||
@ -406,7 +406,7 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
LD A,(IDENTIFY_DEVICE_BUFFER.GeneralConfiguration)
|
LD A,(IDENTIFY_DEVICE_BUFFER.GeneralConfiguration)
|
||||||
RLCA
|
RLCA
|
||||||
AND %0000'0001
|
AND %0000'0001
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),A
|
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),A
|
||||||
;
|
;
|
||||||
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
LD A,(IDENTIFY_DEVICE_BUFFER.NumSectorsPerTrack)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
LD (IY+IDE.HDD_INIT_TABLE.SectorsPerTrack),A
|
||||||
@ -444,18 +444,28 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
LD HL,ICHANEL
|
LD HL,ICHANEL
|
||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
;
|
; ¢á直© á«ãç ©
|
||||||
|
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
|
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||||
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
; [ ] sector size ATAPI
|
; [ ] sector size ATAPI
|
||||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||||
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à 8 ¡ ©â®¢
|
LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à
|
||||||
CALL EXEC_PACKET_COMMAND
|
CALL EXEC_PACKET_COMMAND.start
|
||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
JR C,.No_Media
|
JR C,.No_Media
|
||||||
;
|
;
|
||||||
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size high
|
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224) ; media size high
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh),H
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1),L
|
||||||
|
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 2) ; media size low
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow),H
|
||||||
|
LD (IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1),L
|
||||||
|
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size
|
||||||
|
;
|
||||||
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
||||||
;
|
;
|
||||||
JR IDESPEC.END
|
JR IDESPEC.END
|
||||||
/////////////////////////////////////////////////////////////////////[^]
|
/////////////////////////////////////////////////////////////////////[^]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user