промежуточные правки ATAPI media changed
This commit is contained in:
parent
5c47eb30d6
commit
d25dacb942
@ -1 +1 @@
|
|||||||
Subproject commit 7ef1dd98b491068d5a9ded34f5ff51430b7fa7e7
|
Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e
|
||||||
@ -13,10 +13,11 @@
|
|||||||
; [ ] ãáâ ®¢ª ¯ à ¬¥âà ¬ ªá¨¬ «ì®£® à §¬¥à ¤«ï ç⥨ï ç¥à¥§ DRV_SET_PAR
|
; [ ] ãáâ ®¢ª ¯ à ¬¥âà ¬ ªá¨¬ «ì®£® à §¬¥à ¤«ï ç⥨ï ç¥à¥§ DRV_SET_PAR
|
||||||
;
|
;
|
||||||
;----------------------------------------------------------------------------------
|
;----------------------------------------------------------------------------------
|
||||||
MAX_ATAPI_SEC_SIZE EQU 4096/2
|
MAX_ATAPI_SEC_SIZE EQU 4096/2
|
||||||
PACKET_SIZE EQU 12 ; !FIXIT ¡à âì ¨§ IDENTIFY PACKET DEVICE
|
PACKET_SIZE EQU 12 ; !FIXIT ¡à âì ¨§ IDENTIFY PACKET DEVICE
|
||||||
RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
|
RAM_ATAPI_PK EQU SYS_PAGE.SHARED_BUFFER_32b
|
||||||
RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
RAM_ATAPI_RW_CMD EQU SYS_PAGE.SHARED_BUFFER_32b+16
|
||||||
|
MAX_DATA_PACKET_FOR_REQUEST_SENSE EQU 254
|
||||||
|
|
||||||
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
|
ASSERT ((PACKET_SIZE % 4) = 0), "PACKET_SIZE must be an even number"
|
||||||
|
|
||||||
@ -47,33 +48,60 @@ 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
|
||||||
CD_5x_GETMED:
|
CD_5x_GETMED: LD C,IDE.Device.ATAPI
|
||||||
LD C,IDE.Device.ATAPI
|
CALL SELECT_DRIVE
|
||||||
CALL SELECT_DRIVE
|
RET C
|
||||||
RET C
|
; [ ] sector size. media changed
|
||||||
; [ ] 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'
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
LD HL,0
|
;
|
||||||
LD D,H
|
; [ ] sector size. media changed
|
||||||
LD L,H
|
CALL CD_CHECK_MEDIA_CHANGED
|
||||||
; LD L,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack)
|
JR NC,.get_data
|
||||||
; LD H,(IY+IDE.HDD_INIT_TABLE.HeadsNumber)
|
;
|
||||||
; LD E,(IY+IDE.HDD_INIT_TABLE.CylinderNumberLow)
|
CP BIOS.Error.ATAPI.UnitAttention
|
||||||
; LD D,(IY+IDE.HDD_INIT_TABLE.CylinderNumberHigh)
|
JR NZ,.get_data
|
||||||
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
|
;
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize) ;[ ]sector size
|
LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA
|
||||||
LD XL,A
|
LD DE,SYS_PAGE.TMP_BUFFER
|
||||||
LD A,(IY+IDE.HDD_INIT_TABLE.SectorSize + 1) ;[ ]sector size
|
CALL EXEC_PACKET_COMMAND
|
||||||
LD XH,A
|
LD HL,#FFFF
|
||||||
EX AF,AF'
|
JR C,.No_Media
|
||||||
OUT (SLOT3),A
|
;
|
||||||
;AND A
|
LD HL,(SYS_PAGE.TMP_BUFFER + 6) ; sector size (high byte, low byte)
|
||||||
RET
|
;
|
||||||
|
.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
|
||||||
|
EX DE,HL
|
||||||
|
LD XL,E
|
||||||
|
LD XH,D
|
||||||
|
;
|
||||||
|
LD HL,0
|
||||||
|
LD D,H
|
||||||
|
LD E,H
|
||||||
|
EX AF,AF'
|
||||||
|
OUT (SLOT3),A
|
||||||
|
;AND A
|
||||||
|
RET
|
||||||
;[]================================================================[#58]
|
;[]================================================================[#58]
|
||||||
|
|
||||||
;!TODO
|
;!TODO
|
||||||
@ -115,9 +143,7 @@ CD_5x_LONG_READ:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
AND A ;read
|
AND A ;read
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
ld
|
CALL RW_ATAPI_SECTORs
|
||||||
; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs
|
|
||||||
CALL NC,RW_ATAPI_SECTORs
|
|
||||||
; [ ] sector size. media changed
|
; [ ] sector size. media changed
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP HDD_5x_LONG_READ.shared
|
||||||
; JP NC,HDD_5x_LONG_READ.shared
|
; JP NC,HDD_5x_LONG_READ.shared
|
||||||
@ -146,6 +172,11 @@ RW_ATAPI_SECTORs:
|
|||||||
PUSH BC
|
PUSH BC
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (C),A
|
OUT (C),A
|
||||||
|
; [ ] media change
|
||||||
|
LD A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia)
|
||||||
|
AND %0000'0010
|
||||||
|
JR NZ,.error_media
|
||||||
|
;
|
||||||
LD HL,ATAPI_CMD_PACKET.READ
|
LD HL,ATAPI_CMD_PACKET.READ
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
JR NC,.read_cmd
|
JR NC,.read_cmd
|
||||||
@ -175,10 +206,16 @@ RW_ATAPI_SECTORs:
|
|||||||
LD HL,RAM_ATAPI_RW_CMD
|
LD HL,RAM_ATAPI_RW_CMD
|
||||||
CALL EXEC_PACKET_COMMAND
|
CALL EXEC_PACKET_COMMAND
|
||||||
;
|
;
|
||||||
POP BC
|
.exit: POP BC
|
||||||
;LD C,SLOT3
|
;LD C,SLOT3
|
||||||
OUT (C),B
|
OUT (C),B
|
||||||
RET
|
RET
|
||||||
|
;
|
||||||
|
.error_media: EXX
|
||||||
|
LD A,BIOS.Error.ATAPI.UnitAttention
|
||||||
|
SCF
|
||||||
|
JR .exit
|
||||||
|
|
||||||
;[]===========================================================[#52, #55]
|
;[]===========================================================[#52, #55]
|
||||||
|
|
||||||
;[]================================================================[#56]
|
;[]================================================================[#56]
|
||||||
@ -218,10 +255,7 @@ CD_5x_LONG_WRITE:
|
|||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
SCF ;write
|
SCF ;write
|
||||||
EX AF,AF'
|
EX AF,AF'
|
||||||
;
|
CALL RW_ATAPI_SECTORs
|
||||||
ld
|
|
||||||
; ¯à®¢¥à¨âì .RemovableMedia bit, ¥á«¨ ãáâ ®¢«¥, â® ¯à®¯ã᪠RW_ATAPI_SECTORs
|
|
||||||
CALL NC,RW_ATAPI_SECTORs
|
|
||||||
;
|
;
|
||||||
JP HDD_5x_LONG_READ.shared
|
JP HDD_5x_LONG_READ.shared
|
||||||
|
|
||||||
@ -238,6 +272,7 @@ CD_5x_DETECT:
|
|||||||
|
|
||||||
|
|
||||||
;[]================================================================[#5E]
|
;[]================================================================[#5E]
|
||||||
|
; [ ]
|
||||||
;Function: Extended
|
;Function: Extended
|
||||||
; A - Disk
|
; A - Disk
|
||||||
; B - SubFunction
|
; B - SubFunction
|
||||||
@ -250,7 +285,9 @@ CD_5x_Extended:
|
|||||||
;
|
;
|
||||||
LD A,B
|
LD A,B
|
||||||
CP 2
|
CP 2
|
||||||
JR C,TRAY_FN
|
JR C,TRAY_FN ; B = 0 ¨«¨ 1
|
||||||
|
;
|
||||||
|
JR Z,CD_REQUEST_SENSE ; B = 2
|
||||||
; ...
|
; ...
|
||||||
; ...
|
; ...
|
||||||
;LD A,#AA
|
;LD A,#AA
|
||||||
@ -259,6 +296,34 @@ CD_5x_Extended:
|
|||||||
RET
|
RET
|
||||||
;[]================================================================[#5E]
|
;[]================================================================[#5E]
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
||||||
|
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
||||||
|
CD_REQUEST_SENSE:
|
||||||
|
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
||||||
|
JR EXEC_PACKET_COMMAND
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
CD_CHECK_MEDIA_CHANGED:
|
||||||
|
EXX
|
||||||
|
LD DE,256*(IDE.CtrlByte.Error) + 0
|
||||||
|
CALL CD_WAITPRT.Custom
|
||||||
|
EXX
|
||||||
|
RET NC
|
||||||
|
;
|
||||||
|
.noWait: EXX
|
||||||
|
CALL CD_GET_ERROR
|
||||||
|
OR #70
|
||||||
|
EXX
|
||||||
|
CP BIOS.Error.ATAPI.NoSence
|
||||||
|
SCF
|
||||||
|
RET NZ
|
||||||
|
;
|
||||||
|
CALL CD_MEDIA_CHANGED_ERROR
|
||||||
|
; CF=1
|
||||||
|
LD A,BIOS.Error.ATAPI.UnitAttention
|
||||||
|
RET
|
||||||
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
||||||
@ -266,9 +331,8 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
|
|||||||
DEC A
|
DEC A
|
||||||
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
|
||||||
@ -312,10 +376,7 @@ EXEC_PACKET_COMMAND:
|
|||||||
;RET C
|
;RET C
|
||||||
JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
JR C,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
;
|
;
|
||||||
.READY: CALL CD_CHECK_MEDIA_CHANGED
|
.READY: LD C,SLOT3
|
||||||
RET C
|
|
||||||
;
|
|
||||||
LD C,SLOT3
|
|
||||||
IN B,(C)
|
IN B,(C)
|
||||||
PUSH DE
|
PUSH DE
|
||||||
PUSH BC
|
PUSH BC
|
||||||
@ -356,7 +417,7 @@ EXEC_PACKET_COMMAND:
|
|||||||
BIT IDE.CtrlBit.Error,A
|
BIT IDE.CtrlBit.Error,A
|
||||||
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
JR NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
JR NC,.YEP_DRQ
|
JR NC,.YEP_DRQ
|
||||||
LD A,BIOS.Error.TimeOut ;!FIXIT media change test
|
LD A,BIOS.Error.ATAPI.TimeOut ;!FIXIT media change test
|
||||||
RET
|
RET
|
||||||
;
|
;
|
||||||
; .CMD_ERROR: CALL CD_GET_ERROR
|
; .CMD_ERROR: CALL CD_GET_ERROR
|
||||||
@ -412,7 +473,7 @@ EXEC_PACKET_COMMAND:
|
|||||||
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 NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
JP NZ,CD_CHECK_MEDIA_CHANGED.noWait
|
||||||
;
|
;
|
||||||
AND IDE.CtrlByte.DataRequest
|
AND IDE.CtrlByte.DataRequest
|
||||||
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
RET Z ;NO DATA REQUEST. A = 0: BIOS.Error.NoErrors
|
||||||
@ -539,54 +600,41 @@ CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP
|
|||||||
JP EXEC_PACKET_COMMAND
|
JP EXEC_PACKET_COMMAND
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
;----------------------------------------------------------------------;!TODO ᤥ« âì ¤®áâ㯮© ç¥à¥§ à áè¨à¥ãî äãªæ¨î API
|
|
||||||
; ¢å®¤: DE - ¤à¥á ¤«ï ¤ ëå
|
|
||||||
CD_REQUEST_SENSE:
|
|
||||||
LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE
|
|
||||||
JP EXEC_PACKET_COMMAND
|
|
||||||
ld
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
CD_MEDIA_CHANGED_ERROR:
|
CD_MEDIA_CHANGED_ERROR:
|
||||||
PUSH AF
|
PUSH AF
|
||||||
|
;
|
||||||
IN A,(SLOT3)
|
IN A,(SLOT3)
|
||||||
EX AF,AF
|
PUSH AF
|
||||||
LD A,SYS_PAGE
|
LD A,SYS_PAGE
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
;
|
;
|
||||||
LD A,%0000'0011
|
LD DE,SYS_PAGE.SHARED_BUFFER_256b
|
||||||
LD (IY + HDD_INIT_TABLE.RemovableMedia),A
|
CALL CD_REQUEST_SENSE
|
||||||
;
|
;
|
||||||
EX AF,AF
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06
|
||||||
|
CP 6
|
||||||
|
JR NZ,.exit
|
||||||
|
;
|
||||||
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey. #28
|
||||||
|
CP #28
|
||||||
|
JR NZ,.exit
|
||||||
|
;
|
||||||
|
LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0
|
||||||
|
AND A
|
||||||
|
JR NZ,.exit
|
||||||
|
;
|
||||||
|
LD A,%0000'0011
|
||||||
|
LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A
|
||||||
|
;
|
||||||
|
.exit: POP AF
|
||||||
OUT (SLOT3),A
|
OUT (SLOT3),A
|
||||||
POP AF
|
POP AF
|
||||||
RET
|
RET
|
||||||
;----------------------------------------------------------------------;
|
;----------------------------------------------------------------------;
|
||||||
|
|
||||||
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
CD_CHECK_MEDIA_CHANGED:
|
|
||||||
EXX
|
|
||||||
LD DE,256*(IDE.CtrlByte.Error) + 0
|
|
||||||
CALL CD_WAITPRT.Custom
|
|
||||||
EXX
|
|
||||||
RET NC
|
|
||||||
;
|
|
||||||
.noWait: EXX
|
|
||||||
CALL CD_GET_ERROR
|
|
||||||
OR #70
|
|
||||||
EXX
|
|
||||||
CP BIOS.Error.UnitAttention
|
|
||||||
SCF
|
|
||||||
RET NZ
|
|
||||||
;
|
|
||||||
CALL CD_MEDIA_CHANGED_ERROR
|
|
||||||
; CF=1
|
|
||||||
LD A,BIOS.Error.UnitAttention
|
|
||||||
RET
|
|
||||||
;----------------------------------------------------------------------;
|
|
||||||
|
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
ATAPI_CMD_PACKET:
|
ATAPI_CMD_PACKET:
|
||||||
|
|||||||
@ -440,7 +440,6 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
OR (HL)
|
OR (HL)
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A
|
||||||
;
|
;
|
||||||
ld
|
|
||||||
; [ ] 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 ; ¯à®á⮠㦥 ¡ë« ¡ãä¥à 8 ¡ ©â®¢
|
||||||
@ -448,12 +447,9 @@ IDESPEC: IN A,(SLOT3)
|
|||||||
LD HL,#FFFF
|
LD HL,#FFFF
|
||||||
JR C,.No_Media
|
JR C,.No_Media
|
||||||
;
|
;
|
||||||
LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size high
|
LD HL,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 6) ; sector size high
|
||||||
LD H,A
|
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H
|
||||||
LD A,(IDENTIFY_DEVICE_BUFFER.ReservedWord224 + 7) ; sector size low
|
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L
|
||||||
LD L,A
|
|
||||||
.No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),L
|
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),H
|
|
||||||
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
LD (IY+IDE.HDD_INIT_TABLE.RemovableMedia),%0000'0001 ; !HARDCODE ATAPI ¯®ª ¢á¥£¤ removable
|
||||||
;
|
;
|
||||||
JR IDESPEC.END
|
JR IDESPEC.END
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user