ещё куски для 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
; IX - Capacity sector in bytes
; B - Flags: MASTER/SLAVE, LBA/CHS
; [ ] A - HDD_INIT_TABLE.RemovableMedia
CD_5x_GETMED: LD C,IDE.Device.ATAPI
CALL SELECT_DRIVE
RET C
@ -79,6 +80,7 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI
; 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 L,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ] 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
EX AF,AF'
OUT (SLOT3),A
;AND A
EX AF,AF
RET
;[]================================================================[#58]
@ -255,10 +257,32 @@ CD_5x_LONG_WRITE:
; A - Disk
;Return: CF=0 - A=Drive type
; CF=1 - drive not present, A=#02
CD_5x_DETECT:
LD C,IDE.Device.ATAPI
AND %1011'1111
JP DRV_DETECT
CD_5x_DETECT: LD C,IDE.Device.ATAPI
AND %1011'1111
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]
@ -323,11 +347,8 @@ CD_CHECK_MEDIA_CHANGED:
OR #70
EXX
CP BIOS.Error.ATAPI.NoSence
JP Z,CD_MEDIA_CHANGED_ERROR
;SCF
RET NZ
;
CALL CD_MEDIA_CHANGED_ERROR
; LD A,BIOS.Error.ATAPI.UnitAttention
RET
;----------------------------------------------------------------------;
@ -338,8 +359,7 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
JR Z,EXEC_PACKET_COMMAND
LD HL,ATAPI_CMD_PACKET.OPEN
;JR EXEC_PACKET_COMMAND
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
; INPUT: HL - AP packet (12bytes)
; DE - address for/with data if needed
;
@ -378,9 +398,9 @@ EXEC_PACKET_COMMAND:
;
EXX
CALL CD_WAITPRT
EXX
;RET C
JR C,CD_CHECK_MEDIA_CHANGED.noWait
EXX
JR C,.error
;JR C,CD_CHECK_MEDIA_CHANGED.noWait
;
.READY: LD C,SLOT3
IN B,(C)
@ -413,19 +433,30 @@ EXEC_PACKET_COMMAND:
OUT (C),A
CALL CD_WAITPRT
EXX
;RET C
JR C,CD_CHECK_MEDIA_CHANGED.noWait
JR C,.error
;JR C,CD_CHECK_MEDIA_CHANGED.noWait
;
EXX
LD DE,256*(IDE.CtrlByte.DataRequest+IDE.CtrlByte.Error)+IDE.CtrlByte.DataRequest
CALL CD_WAITPRT.Custom
EXX
BIT IDE.CtrlBit.Error,A
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
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
;
.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
@ -475,7 +506,8 @@ EXEC_PACKET_COMMAND:
EXX
CALL CD_WAITPRT
EXX
RET C
JR C,.error
;
LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.CtrlBit.Error,A
@ -575,7 +607,7 @@ CD_GET_ERROR: LD BC,IDE.Read.Error ;ERROR
;----------------------------------------------------------------------;
; 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
LD HL,#0000
.LOOP: LD A,high IDE.Read.Status
@ -592,11 +624,8 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0
DEC H
JR NZ,.LOOP
DJNZ .LOOP
;
;EX AF,AF'
.error: ; !FIXIT error number
SCF
RET
.error: SCF
RET
;----------------------------------------------------------------------;