diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 399a8b8..7fd392d 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -557,7 +557,7 @@ TAB_5xFNS: DB low ATAPI_5x_WRITE ; [ ] new DB low ATAPI_5x_DETECT DB low ATAPI_5x_GET_PAR ; [ ] new - DB low FN_ABSENT_5x ; SETMED + DB low ATAPI_5x_SET_PAR ; SETMED DB low DRV_VERSION DB low FN_RESERVED_5x @@ -660,7 +660,7 @@ TAB_5xFNS: DB high ATAPI_5x_WRITE ; WRITE ; [ ] new DB high ATAPI_5x_DETECT DB high ATAPI_5x_GET_PAR - DB high FN_ABSENT_5x ; SETMED + DB high ATAPI_5x_SET_PAR ; SETMED DB high DRV_VERSION DB high FN_RESERVED_5x diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index c0e750f..d75b1de 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -114,6 +114,28 @@ ATAPI_5x_GET_PAR: RET ;[]================================================================[#58] + +;[]================================================================[#59] +; [ ] media changed +ATAPI_5x_SET_PAR: + LD L,B + LD C,IDE.Device.ATAPI + CALL SELECT_DRIVE + RET C + ; + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),B + EX AF,AF + OUT (SLOT3),A + RET +;[]================================================================[#59] + + + ;!TODO ; atapi.pdf стр. 24 запись/чтение могут быть максимальными блоками в несколько заходов ;[]================================================================[#55] diff --git a/src/bios/exp/EXTENDED/IDE/shared.asm b/src/bios/exp/EXTENDED/IDE/shared.asm index 065fd8c..a27b72e 100644 --- a/src/bios/exp/EXTENDED/IDE/shared.asm +++ b/src/bios/exp/EXTENDED/IDE/shared.asm @@ -2,6 +2,7 @@ ;======================================================================= ; Вход: A - номер устройства, C - DriveType ; Выход: A - MediaParameters, C - DriveType +; не портит L SELECT_DRIVE: AND #0F LD IY,IDE.INIT_TBL_IDE0 diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index a236a82..4507232 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -446,20 +446,22 @@ IDESPEC: IN A,(SLOT3) LD (IY+IDE.HDD_INIT_TABLE.DRV_Flags),A ; на всякий случай LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 - ;!FIXIT сделать цикл со счётчиком -.get_error_loop: LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY + LD B,100 ; счётчик попыток (1 попытка - 1 HALT) +.get_error_loop: PUSH BC + LD HL,ATAPI_CMD_PACKET.TEST_UNIT_READY CALL EXEC_PACKET_COMMAND.start + POP BC JR NC,.s_size ; - CP BIOS.Error.ATAPI.NotReady - JR Z,.get_error_loop - ; RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media CP BIOS.Error.ATAPI.UnitAttention JR Z,IDESPEC.END - ; любая непонятная ошибка - нет носителя + ; + CP BIOS.Error.ATAPI.NotReady SCF - JR .set_sector + JR NZ,.set_sector ; любая непонятная ошибка - нет носителя + HALT + DJNZ .get_error_loop ; ; LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE ; LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер @@ -468,6 +470,7 @@ IDESPEC: IN A,(SLOT3) .s_size: LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер CALL EXEC_PACKET_COMMAND.start + ; .set_sector: LD HL,#FFFF JR C,.No_Media ; @@ -481,6 +484,7 @@ IDESPEC: IN A,(SLOT3) ; .No_Media: LD (IY+IDE.HDD_INIT_TABLE.SectorSize),H LD (IY+IDE.HDD_INIT_TABLE.SectorSize + 1),L + RES 1,(IY + IDE.HDD_INIT_TABLE.MediaParameters) ; [ ] removable media ;LD (IY+IDE.HDD_INIT_TABLE.MediaParameters),%0000'0001 ; !HARDCODE ATAPI пока всегда removable ; JR IDESPEC.END diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 30bc5df..86aebc9 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,6 +1,6 @@ ;=======================[All shared EQUs]=======================; -BETA_BUILD EQU 10 ; добавляет строку и сообщение о тестовой сборке на стартовом экране -BETA_RC EQU 1 ; +BETA_BUILD EQU 40 ; добавляет строку и сообщение о тестовой сборке на стартовом экране +BETA_RC EQU 0 ; ;======================[All shared defines]=====================; DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 ;