ATAPI media changed flag

This commit is contained in:
Tolik 2025-01-13 23:12:44 +10:00
parent d25dacb942
commit 82c590c8a4
3 changed files with 76 additions and 54 deletions

@ -1 +1 @@
Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa

View File

@ -28,10 +28,16 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
RET C
LD B,50
.loop: PUSH BC
CALL CD_TEST
LD HL,ATAPI_CMD_PACKET.NOP
LD DE,0 ; ¬ àª¥à ⮣®, çâ® ­¥ ­ã¦­® ç¨â âì á ãáâனá⢠ ¢ އ“
CALL EXEC_PACKET_COMMAND
;!FIXIT ;[ ] sector size. ᤥ« âì २­¨â HDD_INIT_TABLE
POP BC
RET NC
;
CALL CD_CHECK_MEDIA_CHANGED
RET C
;
EI
HALT
DJNZ .loop
@ -51,14 +57,6 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
CD_5x_GETMED: LD C,IDE.Device.ATAPI
CALL SELECT_DRIVE
RET C
; [ ] sector size. media changed
CALL CD_CHECK_MEDIA_CHANGED
JR NC,.get_data
;
CP BIOS.Error.ATAPI.UnitAttention
JR NZ,.get_data
;
;
IN A,(SLOT3)
EX AF,AF'
@ -69,28 +67,21 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI
CALL CD_CHECK_MEDIA_CHANGED
JR NC,.get_data
;
CP BIOS.Error.ATAPI.UnitAttention
JR NZ,.get_data
; CP BIOS.Error.ATAPI.UnitAttention
; JR NZ,.get_data
;
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
LD DE,SYS_PAGE.TMP_BUFFER
CALL EXEC_PACKET_COMMAND
LD HL,#FFFF
JR C,.No_Media
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
AND %1111'1101
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
;
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size (high byte, low byte)
;
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ]sector size
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L ;[ ]sector size
;
.get_data: ;
; LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
; 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 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
LD L,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ] sector size
LD H,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ] sector size
EX DE,HL
LD XL,E
LD XH,D
@ -303,25 +294,40 @@ CD_REQUEST_SENSE:
JR EXEC_PACKET_COMMAND
;----------------------------------------------------------------------;
;[ ] media changed
;----------------------------------------------------------------------;
CD_CHECK_MEDIA_CHANGED:
EXX
LD DE,256*(IDE.CtrlByte.Error) + 0
CALL CD_WAITPRT.Custom
EXX
RET NC
;RET NC
JR C,.noWait
;
EXX
LD BC,SLOT3
IN B,(C)
LD A,SYS_PAGE
OUT (C),A
;
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
OUT (C),B
EXX
RRA
RRA
LD A,BIOS.Error.ATAPI.UnitAttention
RET
;
.noWait: EXX
CALL CD_GET_ERROR
OR #70
EXX
CP BIOS.Error.ATAPI.NoSence
SCF
;SCF
RET NZ
;
CALL CD_MEDIA_CHANGED_ERROR
; CF=1
LD A,BIOS.Error.ATAPI.UnitAttention
; LD A,BIOS.Error.ATAPI.UnitAttention
RET
;----------------------------------------------------------------------;
@ -595,16 +601,14 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0
;----------------------------------------------------------------------;
CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
LD DE,0 ; ¬ àª¥à ⮣®, çâ® ­¥ ­ã¦­® ç¨â âì á ãáâனá⢠ ¢ އ“
JP EXEC_PACKET_COMMAND
; CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
; LD DE,0 ; ¬ àª¥à ⮣®, çâ® ­¥ ­ã¦­® ç¨â âì á ãáâனá⢠ ¢ އ“
; JP EXEC_PACKET_COMMAND
;----------------------------------------------------------------------;
;----------------------------------------------------------------------;
CD_MEDIA_CHANGED_ERROR:
PUSH AF
;
IN A,(SLOT3)
PUSH AF
LD A,SYS_PAGE
@ -625,12 +629,31 @@ CD_MEDIA_CHANGED_ERROR:
AND A
JR NZ,.exit
;
LD A,%0000'0011
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
OR %0000'0011
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
;
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
LD DE,SYS_PAGE.TMP_BUFFER
CALL EXEC_PACKET_COMMAND
LD HL,#FFFF
JR C,.No_Media
;
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size (high byte, low byte)
;
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H ;[ ] sector size
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
;
POP AF
OUT (SLOT3),A
LD A,BIOS.Error.ATAPI.UnitAttention
SCF
RET
;
.exit: POP AF
OUT (SLOT3),A
POP AF
; CF=0
;AND A
RET
;----------------------------------------------------------------------;

View File

@ -523,20 +523,18 @@ WRITE_ATA_SECTORs:
; B - Sector counter
;Return: None
;VERIFY SECTOR(S)
HDD_5x_VERIFY:
PUSH IY
SAFE_PORTY_2
PUSH IX
PUSH HL
CALL VRS000
POP HL
POP IX
RESTORE_PORTY
POP IY
RET
;[]================================================================[#54]
HDD_5x_VERIFY: PUSH IY
SAFE_PORTY_2
PUSH IX
PUSH HL
CALL .VERIFY
POP HL
POP IX
RESTORE_PORTY
POP IY
RET
;VERIFY SECTOR(S)
VRS000: LD C,IDE.Device.HDD
.VERIFY: LD C,IDE.Device.HDD
CALL SELECT_DRIVE
RET C
EXX
@ -549,16 +547,17 @@ VRS000: LD C,IDE.Device.HDD
LD BC,IDE.Write.Command
LD A,IDE.ATA.ReadVerifySectorsWithRetry
OUT (C),A
VRS002: LD BC,IDE.Read.Status
LD BC,IDE.Read.Status
IN A,(C)
BIT IDE.CtrlBit.Error,A
JR Z,VRS003
SCF
RET
VRS003: CALL WAITPRT
;BIT IDE.CtrlBit.Error,A
RRA ;BIT IDE.CtrlBit.Error,A : SCF : RET NZ
RET C
;
CALL WAITPRT
RET C
XOR A
RET
;[]================================================================[#54]
; HL:IX - LBA SECTOR