ещё куски для media change flag

This commit is contained in:
Tolik 2025-01-16 01:26:55 +10:00
parent 82c590c8a4
commit e5856eef12

View File

@ -54,6 +54,7 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
; 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
CD_5x_GETMED: LD C,IDE.Device.ATAPI CD_5x_GETMED: LD C,IDE.Device.ATAPI
CALL SELECT_DRIVE CALL SELECT_DRIVE
RET C RET C
@ -79,6 +80,7 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI
; 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 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 LD L,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ] sector size
LD H,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ] sector size LD H,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ] sector size
@ -91,7 +93,7 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI
LD E,H LD E,H
EX AF,AF' EX AF,AF'
OUT (SLOT3),A OUT (SLOT3),A
;AND A EX AF,AF
RET RET
;[]================================================================[#58] ;[]================================================================[#58]
@ -255,10 +257,32 @@ CD_5x_LONG_WRITE:
; 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
CD_5x_DETECT: CD_5x_DETECT: LD C,IDE.Device.ATAPI
LD C,IDE.Device.ATAPI
AND %1011'1111 AND %1011'1111
JP DRV_DETECT CALL DRV_DETECT
RET C
;
PUSH AF
LD BC,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
AND %0000'0010
JR Z,.exit
;
POP AF
LD A,BIOS.Error.ATAPI.UnitAttention
SCF
RET
;
.exit: POP AF
RET
;[]================================================================[#57] ;[]================================================================[#57]
@ -323,11 +347,8 @@ CD_CHECK_MEDIA_CHANGED:
OR #70 OR #70
EXX EXX
CP BIOS.Error.ATAPI.NoSence CP BIOS.Error.ATAPI.NoSence
JP Z,CD_MEDIA_CHANGED_ERROR
;SCF ;SCF
RET NZ
;
CALL CD_MEDIA_CHANGED_ERROR
; LD A,BIOS.Error.ATAPI.UnitAttention
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
@ -338,8 +359,7 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
JR Z,EXEC_PACKET_COMMAND JR Z,EXEC_PACKET_COMMAND
LD HL,ATAPI_CMD_PACKET.OPEN LD HL,ATAPI_CMD_PACKET.OPEN
;JR EXEC_PACKET_COMMAND ;JR EXEC_PACKET_COMMAND
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; INPUT: HL - AP packet (12bytes) ; INPUT: HL - AP packet (12bytes)
; DE - address for/with data if needed ; DE - address for/with data if needed
; ;
@ -379,8 +399,8 @@ EXEC_PACKET_COMMAND:
EXX EXX
CALL CD_WAITPRT CALL CD_WAITPRT
EXX EXX
;RET C JR C,.error
JR C,CD_CHECK_MEDIA_CHANGED.noWait ;JR C,CD_CHECK_MEDIA_CHANGED.noWait
; ;
.READY: LD C,SLOT3 .READY: LD C,SLOT3
IN B,(C) IN B,(C)
@ -413,19 +433,30 @@ EXEC_PACKET_COMMAND:
OUT (C),A OUT (C),A
CALL CD_WAITPRT CALL CD_WAITPRT
EXX EXX
;RET C JR C,.error
JR C,CD_CHECK_MEDIA_CHANGED.noWait ;JR C,CD_CHECK_MEDIA_CHANGED.noWait
; ;
EXX EXX
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
BIT IDE.CtrlBit.Error,A
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
JR NC,.YEP_DRQ JR NC,.YEP_DRQ
LD A,BIOS.Error.ATAPI.TimeOut ;!FIXIT media change test ;
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 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 ; .CMD_ERROR: CALL CD_GET_ERROR
; OR #70 ; OR #70
; CP BIOS.Error.UnitAttention ; CP BIOS.Error.UnitAttention
@ -475,7 +506,8 @@ EXEC_PACKET_COMMAND:
EXX EXX
CALL CD_WAITPRT CALL CD_WAITPRT
EXX EXX
RET C JR C,.error
;
LD BC,IDE.Read.Status LD BC,IDE.Read.Status
IN A,(C) IN A,(C)
BIT IDE.CtrlBit.Error,A BIT IDE.CtrlBit.Error,A
@ -575,7 +607,7 @@ CD_GET_ERROR: LD BC,IDE.Read.Error ;ERROR
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
; D - MASK, E - PATTERN ; D - MASK, E - PATTERN
CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0 CD_WAITPRT: LD DE,256*IDE.CtrlByte.Busy + 0
.Custom: LD B,100 .Custom: LD B,100
LD HL,#0000 LD HL,#0000
.LOOP: LD A,high IDE.Read.Status .LOOP: LD A,high IDE.Read.Status
@ -592,10 +624,7 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0
DEC H DEC H
JR NZ,.LOOP JR NZ,.LOOP
DJNZ .LOOP DJNZ .LOOP
; .error: SCF
;EX AF,AF'
.error: ; !FIXIT error number
SCF
RET RET
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;