diff --git a/Shared_Includes b/Shared_Includes index f533c03..4ecde88 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit f533c03f52f53e581c794c1017b7b0d61d39dfbf +Subproject commit 4ecde88739cd3e2b7447dd36b79163f1a5e0d40d diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index c0115a7..f993a38 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -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) diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 494972a..2508338 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ