костыли со сменой носителя ATAPI

This commit is contained in:
Tolik 2025-04-18 05:45:07 +10:00
parent a26c17f183
commit f22efa0794
3 changed files with 60 additions and 43 deletions

@ -1 +1 @@
Subproject commit f533c03f52f53e581c794c1017b7b0d61d39dfbf
Subproject commit 4ecde88739cd3e2b7447dd36b79163f1a5e0d40d

View File

@ -44,7 +44,7 @@ ATAPI_5x_RESET: LD C,IDE.Device.ATAPI
DJNZ .loop
RET
;[]================================================================[#51]
;[]================================================================[#58]
;Function: Get Current Media Parameters
@ -70,34 +70,33 @@ ATAPI_5x_GET_PAR:
LD A,SYS_PAGE
OUT (SLOT3),A
;
; [ ] sector size. media changed
CALL ATAPI_CHECK_MEDIA_CHANGED
EX AF,AF'
POP AF
EX AF,AF'
JR NC,.get_data
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,.UnitAttention
;
;CP BIOS.Error.ATAPI.NotReady
;SCF
;RET NZ
EX AF,AF'
OUT (SLOT3),A
EX AF,AF
LD HL,#FFFF
LD D,H
LD E,L
SCF
RET
;
.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
EX AF,AF'
SCF
EX AF,AF'
.get_data: ;
LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
; [ ] sector size. media changed
CALL ATAPI_CHECK_MEDIA_CHANGED
EX AF,AF'
POP AF
EX AF,AF'
JR NC,.get_data
;
CP BIOS.Error.ATAPI.UnitAttention
JR Z,.UnitAttention
;
CP BIOS.Error.ATAPI.MediumError
JR NZ,.unknown_error
;
LD A,BIOS.Error.ATAPI.UnitAttention ;!FIXIT ª®áâë«ì
.unknown_error: LD HL,#FFFF
LD D,H
LD E,L
SCF
EX AF,AF' ; âãâ ¬ áª¨à㥬 ®è¨¡ªã, ¨§­ ç «ì­® CF=1 ⮫쪮 ¥á«¨ ãáâனá⢮ ®âáãâáâ¢ã¥â
OUT (SLOT3),A
RET
;
.UnitAttention: RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media
EX AF,AF'
SCF
EX AF,AF'
.get_data: LD A,(IY+IDE.HDD_INIT_TABLE.MediaParameters)
LD B,(IY+IDE.HDD_INIT_TABLE.DRV_Flags)
; [ ] sector size
LD E,(IY+IDE.HDD_INIT_TABLE.SectorSize)
@ -109,10 +108,10 @@ ATAPI_5x_GET_PAR:
LD H,(IY+IDE.HDD_INIT_TABLE.MediaSizeHigh+1)
LD E,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow)
LD D,(IY+IDE.HDD_INIT_TABLE.MediaSizeLow+1)
;
;
EX AF,AF'
OUT (SLOT3),A
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨
OUT (SLOT3),A
LD A,BIOS.Error.ATAPI.UnitAttention ; ¥á«¨ CF, â® ­®¬¥à ®è¨¡ª¨
EX AF,AF
RET
;[]================================================================[#58]
@ -396,16 +395,19 @@ ATAPI_REQUEST_SENSE:
ATAPI_CHECK_MEDIA_CHANGED:
CALL EXEC_TEST_CMD ;!FIXIT   ¬®¦¥â ¨ ­¥ ­ ¤®
RET C
; .skip_nop: EXX
; CALL ATAPI_WAITPRT
; EXX
; LD A, high IDE.Read.Status
; IN A,(low IDE.Read.Status)
; RRA
; ;RET NC
;JR C,.noWait
; JR NC,.next_check
; ;
; CP BIOS.Error.ATAPI.UnitAttention
; SCF
; RET Z
; ;
; CP BIOS.Error.ATAPI.MediumError
; JR Z,.next_check
; ;
; SCF
; RET
;
EXX
.next_check: EXX
LD C,SLOT3
IN B,(C)
LD A,SYS_PAGE
@ -460,6 +462,7 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
; A' - ­ ç «ì­ ï áâà ­¨æ  ¤«ï R/W Long
;
; RETURN: CF - ERROR
; ;!FIXIT ­®¬¥à  ­¥¯à ¢¨«ì­ë¥
; !TODO CD ERRORS to INCLUDES
; #01 - RECOVERED ERROR
; #02 - NOT READY
@ -471,12 +474,26 @@ TRAY_FN: LD HL,ATAPI_CMD_PACKET.CLOSE
; #0B - ABORTED COMMAND
; #80 - TIME OUT
EXEC_PACKET_COMMAND:
; .error_APLOOP: LD A,BIOS.Error.ATAPI.UnitAttention
; RET
;
.error_ex: EX DE,HL
.error: CP #FF
.error_fail: SCF
LD C,A
LD A,BIOS.Error.Failure
RET Z
;
LD A,BIOS.Error.ATAPI.UnitAttention
CP C
SCF
RET Z
;
LD A,BIOS.Error.ATAPI.MediumError
CP C
SCF
RET Z
;
LD A,BIOS.Error.Busy
RET
;
@ -578,7 +595,7 @@ EXEC_PACKET_COMMAND:
EX DE,HL
;
.AP_LOOP: CALL ATAPI_CHECK_DRV
JP C,.error
JP C,.error;_APLOOP
RET Z
;====== IF DATA REQUEST ===============================================;
.data_request: IN A,(SLOT3)

Binary file not shown.