From f22efa0794b7df4d5e17d61c1f838304d4e33094 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Fri, 18 Apr 2025 05:45:07 +1000 Subject: [PATCH] =?UTF-8?q?=D0=BA=D0=BE=D1=81=D1=82=D1=8B=D0=BB=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=20=D1=81=D0=BC=D0=B5=D0=BD=D0=BE=D0=B9=20=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D0=B8=D1=82=D0=B5=D0=BB=D1=8F=20ATAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 101 ++++++++++++++---------- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 3 files changed, 60 insertions(+), 43 deletions(-) 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 494972ace1bf0c32e6882fda8c8b44e7660f8139..2508338b5f833175757e4a79d0b687b404a59a76 100755 GIT binary patch delta 15134 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 delta 14886 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