diff --git a/Shared_Includes b/Shared_Includes index d21dd0c..857938d 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit d21dd0c0291e48f53d40b7bd09fcb8e7756dda1e +Subproject commit 857938d1dbf3b332a5e9e8ccabfee531eb3848fa diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index 80ddb4c..50c35f7 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -28,10 +28,16 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI RET C LD B,50 .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 POP BC RET NC + ; + CALL CD_CHECK_MEDIA_CHANGED + RET C + ; EI HALT DJNZ .loop @@ -51,14 +57,6 @@ CD_5x_RESET: LD C,IDE.Device.ATAPI CD_5x_GETMED: LD C,IDE.Device.ATAPI CALL SELECT_DRIVE 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) EX AF,AF' @@ -69,28 +67,21 @@ CD_5x_GETMED: LD C,IDE.Device.ATAPI CALL CD_CHECK_MEDIA_CHANGED JR NC,.get_data ; - CP BIOS.Error.ATAPI.UnitAttention - JR NZ,.get_data + ; CP BIOS.Error.ATAPI.UnitAttention + ; JR NZ,.get_data ; - 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 A,(IY + IDE.HDD_INIT_TABLE.RemovableMedia) + AND %1111'1101 + LD (IY + IDE.HDD_INIT_TABLE.RemovableMedia),A ; - 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: ; ; 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 + 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 @@ -303,25 +294,40 @@ CD_REQUEST_SENSE: JR EXEC_PACKET_COMMAND ;----------------------------------------------------------------------; +;[ ] media changed ;----------------------------------------------------------------------; CD_CHECK_MEDIA_CHANGED: EXX LD DE,256*(IDE.CtrlByte.Error) + 0 CALL CD_WAITPRT.Custom 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 CALL CD_GET_ERROR OR #70 EXX CP BIOS.Error.ATAPI.NoSence - SCF + ;SCF RET NZ ; CALL CD_MEDIA_CHANGED_ERROR - ; CF=1 - LD A,BIOS.Error.ATAPI.UnitAttention + ; LD A,BIOS.Error.ATAPI.UnitAttention RET ;----------------------------------------------------------------------; @@ -595,16 +601,14 @@ CD_WAITPRT: LD DE,256*(IDE.CtrlByte.Busy) + 0 ;----------------------------------------------------------------------; -CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP - LD DE,0 ; маркер того, что не нужно читать с устройства в ОЗУ - JP EXEC_PACKET_COMMAND +; CD_TEST: LD HL,ATAPI_CMD_PACKET.NOP +; LD DE,0 ; маркер того, что не нужно читать с устройства в ОЗУ +; JP EXEC_PACKET_COMMAND ;----------------------------------------------------------------------; ;----------------------------------------------------------------------; CD_MEDIA_CHANGED_ERROR: - PUSH AF - ; IN A,(SLOT3) PUSH AF LD A,SYS_PAGE @@ -625,12 +629,31 @@ CD_MEDIA_CHANGED_ERROR: AND A 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 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 OUT (SLOT3),A - POP AF + ; CF=0 + ;AND A RET ;----------------------------------------------------------------------; diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index 999512d..145fc35 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -523,20 +523,18 @@ WRITE_ATA_SECTORs: ; B - Sector counter ;Return: None ;VERIFY SECTOR(S) -HDD_5x_VERIFY: - PUSH IY - SAFE_PORTY_2 - PUSH IX - PUSH HL - CALL VRS000 - POP HL - POP IX - RESTORE_PORTY - POP IY - RET -;[]================================================================[#54] +HDD_5x_VERIFY: PUSH IY + SAFE_PORTY_2 + PUSH IX + PUSH HL + CALL .VERIFY + POP HL + POP IX + RESTORE_PORTY + POP IY + RET ;VERIFY SECTOR(S) -VRS000: LD C,IDE.Device.HDD +.VERIFY: LD C,IDE.Device.HDD CALL SELECT_DRIVE RET C EXX @@ -549,16 +547,17 @@ VRS000: LD C,IDE.Device.HDD LD BC,IDE.Write.Command LD A,IDE.ATA.ReadVerifySectorsWithRetry OUT (C),A -VRS002: LD BC,IDE.Read.Status + LD BC,IDE.Read.Status IN A,(C) - BIT IDE.CtrlBit.Error,A - JR Z,VRS003 - SCF - RET -VRS003: CALL WAITPRT + ;BIT IDE.CtrlBit.Error,A + RRA ;BIT IDE.CtrlBit.Error,A : SCF : RET NZ + RET C + ; + CALL WAITPRT RET C XOR A RET +;[]================================================================[#54] ; HL:IX - LBA SECTOR