ATAPI media changed flag
This commit is contained in:
parent
d25dacb942
commit
82c590c8a4
@ -1 +1 @@
|
|||||||
Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e
|
Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa
|
||||||
@ -28,10 +28,16 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
RET C
|
RET C
|
||||||
LD B,50
|
LD B,50
|
||||||
.loop: PUSH BC
|
.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
|
;!FIXIT ;[ ] sector size. ᤥ« âì २¨â HDD_INIT_TABLE
|
||||||
POP BC
|
POP BC
|
||||||
RET NC
|
RET NC
|
||||||
|
;
|
||||||
|
CALL CD_CHECK_MEDIA_CHANGED
|
||||||
|
RET C
|
||||||
|
;
|
||||||
EI
|
EI
|
||||||
HALT
|
HALT
|
||||||
DJNZ .loop
|
DJNZ .loop
|
||||||
@ -51,14 +57,6 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI
|
|||||||
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
|
||||||
; [ ] 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)
|
IN A,(SLOT3)
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
@ -69,28 +67,21 @@ 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.UnitAttention
|
||||||
JR NZ,.get_data
|
; JR NZ,.get_data
|
||||||
;
|
;
|
||||||
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
||||||
LD DE,SYS_PAGE.TMP_BUFFER
|
AND %1111'1101
|
||||||
CALL EXEC_PACKET_COMMAND
|
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
|
||||||
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 ;[ ]sector size
|
|
||||||
;
|
|
||||||
.get_data: ;
|
.get_data: ;
|
||||||
; 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 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
|
||||||
EX DE,HL
|
EX DE,HL
|
||||||
LD XL,E
|
LD XL,E
|
||||||
LD XH,D
|
LD XH,D
|
||||||
@ -303,25 +294,40 @@ CD_REQUEST_SENSE:
|
|||||||
JR EXEC_PACKET_COMMAND
|
JR EXEC_PACKET_COMMAND
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;[ ] media changed
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_CHECK_MEDIA_CHANGED:
|
CD_CHECK_MEDIA_CHANGED:
|
||||||
EXX
|
EXX
|
||||||
LD DE,256*(IDE.CtrlByte.Error) + 0
|
LD DE,256*(IDE.CtrlByte.Error) + 0
|
||||||
CALL CD_WAITPRT.Custom
|
CALL CD_WAITPRT.Custom
|
||||||
EXX
|
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
|
.noWait: EXX
|
||||||
CALL CD_GET_ERROR
|
CALL CD_GET_ERROR
|
||||||
OR #70
|
OR #70
|
||||||
EXX
|
EXX
|
||||||
CP BIOS.Error.ATAPI.NoSence
|
CP BIOS.Error.ATAPI.NoSence
|
||||||
SCF
|
;SCF
|
||||||
RET NZ
|
RET NZ
|
||||||
;
|
;
|
||||||
CALL CD_MEDIA_CHANGED_ERROR
|
CALL CD_MEDIA_CHANGED_ERROR
|
||||||
; CF=1
|
; LD A,BIOS.Error.ATAPI.UnitAttention
|
||||||
LD A,BIOS.Error.ATAPI.UnitAttention
|
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
@ -595,16 +601,14 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0
|
|||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
; CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
||||||
LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
; LD DE,0 ; ¬ થà ⮣®, çâ® ¥ 㦮 ç¨â âì á ãáâனá⢠¢ އ“
|
||||||
JP EXEC_PACKET_COMMAND
|
; JP EXEC_PACKET_COMMAND
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_MEDIA_CHANGED_ERROR:
|
CD_MEDIA_CHANGED_ERROR:
|
||||||
PUSH AF
|
|
||||||
;
|
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
PUSH AF
|
PUSH AF
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
@ -625,12 +629,31 @@ CD_MEDIA_CHANGED_ERROR:
|
|||||||
AND A
|
AND A
|
||||||
JR NZ,.exit
|
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 (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
|
.exit: POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
POP AF
|
; CF=0
|
||||||
|
;AND A
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|||||||
@ -523,20 +523,18 @@ WRITE_ATA_SECTORs:
|
|||||||
; B - Sector counter
|
; B - Sector counter
|
||||||
;Return: None
|
;Return: None
|
||||||
;VERIFY SECTOR(S)
|
;VERIFY SECTOR(S)
|
||||||
HDD_5x_VERIFY:
|
HDD_5x_VERIFY: PUSH IY
|
||||||
PUSH IY
|
SAFE_PORTY_2
|
||||||
SAFE_PORTY_2
|
PUSH IX
|
||||||
PUSH IX
|
PUSH HL
|
||||||
PUSH HL
|
CALL .VERIFY
|
||||||
CALL VRS000
|
POP HL
|
||||||
POP HL
|
POP IX
|
||||||
POP IX
|
RESTORE_PORTY
|
||||||
RESTORE_PORTY
|
POP IY
|
||||||
POP IY
|
RET
|
||||||
RET
|
|
||||||
;[]================================================================[#54]
|
|
||||||
;VERIFY SECTOR(S)
|
;VERIFY SECTOR(S)
|
||||||
VRS000: LD C,IDE.Device.HDD
|
.VERIFY: LD C,IDE.Device.HDD
|
||||||
CALL SELECT_DRIVE
|
CALL SELECT_DRIVE
|
||||||
RET C
|
RET C
|
||||||
EXX
|
EXX
|
||||||
@ -549,16 +547,17 @@ VRS000: LD C,IDE.Device.HDD
|
|||||||
LD BC,IDE.Write.Command
|
LD BC,IDE.Write.Command
|
||||||
LD A,IDE.ATA.ReadVerifySectorsWithRetry
|
LD A,IDE.ATA.ReadVerifySectorsWithRetry
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
VRS002: 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
|
||||||
JR Z,VRS003
|
RRA ;BIT IDE.CtrlBit.Error,A : SCF : RET NZ
|
||||||
SCF
|
RET C
|
||||||
RET
|
;
|
||||||
VRS003: CALL WAITPRT
|
CALL WAITPRT
|
||||||
RET C
|
RET C
|
||||||
XOR A
|
XOR A
|
||||||
RET
|
RET
|
||||||
|
;[]================================================================[#54]
|
||||||
|
|
||||||
|
|
||||||
; HL:IX - LBA SECTOR
|
; HL:IX - LBA SECTOR
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user