From 8e8d43a9d56e26c5de85b9975d88da675da84d62 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 2 Mar 2025 23:22:44 +1000 Subject: [PATCH] =?UTF-8?q?=D0=95=D1=89=D1=91=20=D0=BF=D0=BE=D0=BF=D1=8B?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=BF=D0=BE=D1=87=D0=B8=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BF=D0=B5=D1=80=D0=B2=D1=8B=D0=B9=20=D0=B7=D0=B0?= =?UTF-8?q?=D1=85=D0=BE=D0=B4=20=D0=BD=D0=B0=20ZIP?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/BIOS.asm | 4 +- src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM | 51 ++++++++++++++---------- src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM | 8 ++-- src/bios/exp/FUNC_4x.ASM | 12 +++--- src/bios/exp/FUNC_SCREEN 2.ASM | 4 +- src/bios/exp/FUNC_SCREEN.ASM | 2 +- src/bios/rom/SETUP/AUTOIDE.asm | 37 +++++++---------- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes src/bios/shared/VERSION.inc | 2 +- 10 files changed, 63 insertions(+), 59 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 2b1e30c..60b5ff6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 2b1e30c6108f0a5c271f84558e1e5f804a6d623a +Subproject commit 60b5ff6a74b57614b1f54fbe5611585cd46582ab diff --git a/src/bios/BIOS.asm b/src/bios/BIOS.asm index d5897a3..fdecb58 100644 --- a/src/bios/BIOS.asm +++ b/src/bios/BIOS.asm @@ -23,13 +23,15 @@ LUA PASS1 local date, month, year = Get_date_RU(sj.get_define("__DATE__")) BuildDate = "'" .. date .. "." .. month .. "." .. year .. "'" + BuildYear = "'" .. year .. "'" sj.insert_define("BUILD_DATE", BuildDate) + sj.insert_define("BUILD_YEAR", BuildYear) ENDLUA LUA ALLPASS sj.insert_define("BUILD_DATE", BuildDate) + sj.insert_define("BUILD_YEAR", BuildYear) ENDLUA - IF PACKED_MAIN ;------------[MAIN prebuild]------------; LUA PASS1 diff --git a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM index e05ed30..b2455ed 100644 --- a/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATAPI_DRV.ASM @@ -413,13 +413,14 @@ ATAPI_CHECK_MEDIA_CHANGED: RRA LD A,BIOS.Error.ATAPI.UnitAttention RET - ; -.noWait: EXX - CALL ATAPI_GET_ERROR_REG - EXX - CP BIOS.Error.ATAPI.NoSence - JP Z,ATAPI_MEDIA_ERROR - ; !FIXIT скорее всего железо тут выдаст всегда Error.ATAPI.NoSence +;----------------------------------------------------------------------; + +;[ ] media changed +;----------------------------------------------------------------------; +ATAPI_CHECK_ERROR: + CALL ATAPI_GET_ERROR_REG + ;CP BIOS.Error.ATAPI.NoSence + ;JP Z,ATAPI_MEDIA_ERROR CP BIOS.Error.ATAPI.NotReady JP Z,ATAPI_MEDIA_ERROR CP BIOS.Error.ATAPI.UnitAttention @@ -491,7 +492,7 @@ EXEC_PACKET_COMMAND: JR NC,.READY ; .reset: LD BC,IDE.Write.Command - LD A,IDE.ATAPI.Reset + LD A,IDE.CMD.ATAPI.Reset OUT (C),A ; LD B,#80 @@ -528,7 +529,7 @@ EXEC_PACKET_COMMAND: LD BC,IDE.Write.ByteCountHigh OUT (C),D LD BC,IDE.Write.Command - LD A,IDE.ATAPI.Packet + LD A,IDE.CMD.ATAPI.Packet OUT (C),A LD C,H ; признак того, что ошибка смены носителя должна обрабатываться в EXEC_PACKET_COMMAND CALL ATAPI_WAITPRT @@ -592,7 +593,7 @@ EXEC_PACKET_COMMAND: EXX RET Z ; выход, если ошибка обрабатывается не в EXEC_PACKET_COMMAND ; - JP ATAPI_CHECK_MEDIA_CHANGED.noWait + JP ATAPI_CHECK_ERROR ;====== IF DATA REQUEST ===============================================; .data_request: IN A,(SLOT3) EX AF,AF' ;>-----------> \ @@ -743,13 +744,16 @@ ATAPI_READ_CAPACITY_DATA: CP BIOS.Error.ATAPI.NotReady SCF RET NZ + ; + PUSH BC CALL ATAPI_MEDIA_ERROR CP BIOS.Error.ATAPI.NotReady SCF + POP BC RET NZ ; CPI - RET PO + RET PO ;счётчик ; LD HL,0 .pause: DEC HL @@ -779,21 +783,24 @@ ATAPI_MEDIA_ERROR: LD DE,SYS_PAGE.SHARED_BUFFER_256b CALL ATAPI_REQUEST_SENSE.FN ; - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey. 06 - UNIT ATTENTION - CP 2 ; SenceKey. 02 - NOT READY + LD A,(SYS_PAGE.SHARED_BUFFER_256b + 2) ; SenceKey + CP 2 ; NOT READY JR Z,.Not_Ready - CP 6 + CP 6 ; UNIT ATTENTION JR NZ,.unkn_error ; - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey. #28 - CP #28 - JR NZ,.unkn_error + LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey + CP #28 ; NOT READY TO READY TRANSITION + JR Z,.MedCh3 + CP #29 ; POWER ON, RESET OR BUS DEVICE RESET OCCURRED + JR Z,.MedChanged + JR .unkn_error ; - LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0 +.MedCh3: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier. 0 AND A JR NZ,.unkn_error ; - LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) +.MedChanged: LD A,(IY + IDE.HDD_INIT_TABLE.MediaParameters) OR %0000'0011 LD (IY + IDE.HDD_INIT_TABLE.MediaParameters),A ; @@ -826,11 +833,15 @@ ATAPI_MEDIA_ERROR: ; .Not_Ready: LD A,(SYS_PAGE.SHARED_BUFFER_256b + 12) ; AdditionalSenceKey LD C,BIOS.Error.ATAPI.MediumError ; нет носителя + ;!TODO + ; 06,00 - NO REFERENCE POSITION FOUND (media may be upside down) + ; 3A - MEDIUM NOT PRESENT + ; CP 4 JR NZ,.exit ; [ ] !(test for ZIP) LD A,(SYS_PAGE.SHARED_BUFFER_256b + 13) ; AdditionalSenseCodeQualifier - CP 1 + CP 1 ; LOGICAL DRIVE NOT READY - IN PROGRESS OF BECOMING READY JR NZ,.exit ; ; идёт инициализация diff --git a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM index e299d8e..9fa6952 100644 --- a/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/ATA_DRV.ASM @@ -353,10 +353,10 @@ RW_ATA_SECTORs: LD C,IDE.Device.HDD LD XL,0 LD XH,A LD BC,IDE.Write.Command - LD A,IDE.ATA.WriteSectorsWithRetry + LD A,IDE.CMD.ATA.WriteSectorsWithRetry JR C,.set_command ; CF = r/w ; - LD A,IDE.ATA.ReadSectorsWithRetry + LD A,IDE.CMD.ATA.ReadSectorsWithRetry .set_command: OUT (C),A EX AF,AF' EXX @@ -455,7 +455,7 @@ WRITE_ATA_SECTORs: LD XL,0 LD XH,A LD BC,IDE.Write.Command - LD A,IDE.ATA.WriteSectorsWithRetry + LD A,IDE.CMD.ATA.WriteSectorsWithRetry OUT (C),A ; SAVE HL?! EXX @@ -547,7 +547,7 @@ ATA_5x_VERIFY: PUSH IY CALL PRESET POP HL LD BC,IDE.Write.Command - LD A,IDE.ATA.ReadVerifySectorsWithRetry + LD A,IDE.CMD.ATA.ReadVerifySectorsWithRetry OUT (C),A LD BC,IDE.Read.Status IN A,(C) diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index 32cad95..bb8773f 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -228,7 +228,7 @@ FN_HDD_PREPARE: ; .SetCommand: LD BC,IDE.Write.Command - LD A,IDE.ATA.ReadSectorsWithRetry + LD A,IDE.CMD.ATA.ReadSectorsWithRetry ; OUT (C),A AND A RET @@ -276,7 +276,7 @@ FN_HDD_READ: SAFE_PORTY ; LD BC,IDE.Write.Command - LD A,IDE.ATA.ReadSectorsWithRetry + LD A,IDE.CMD.ATA.ReadSectorsWithRetry OUT (C),A .L2: WAIT_HDD ;BIT IDE.CtrlBit.DataRequest,A @@ -348,7 +348,7 @@ FN_HDD_WRITE: EX AF,AF' LD BC,IDE.Write.Command - LD A,IDE.ATA.WriteSectorsWithRetry + LD A,IDE.CMD.ATA.WriteSectorsWithRetry OUT (C),A HD_WR_L2: @@ -387,7 +387,7 @@ FN_HDD_RECAL: LD A,IDE.Drive.Master LD BC,IDE.Write.DeviceHead OUT (C),A - LD A,IDE.ATA.ExecuteDeviceDiagnostic + LD A,IDE.CMD.ATA.ExecuteDeviceDiagnostic CALL HD_CMD_EXE ;AND A CP IDE.CtrlByte.Error @@ -624,7 +624,7 @@ FN_HDD_INIT: ; .L3: WAIT_HDD LD BC,IDE.Write.Command - LD A,IDE.ATA.IdentifyDevice ;!FIXIT переделать + LD A,IDE.CMD.ATA.IdentifyDevice ;!FIXIT переделать OUT (C),A WAIT_HDD AND IDE.CtrlByte.DataRequest @@ -690,7 +690,7 @@ FN_HDD_INIT: OUT (C),A LD A,D OUT (SLOT3),A - LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS + LD A,IDE.CMD.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS ;CALL HD_CMD_EXE ;RET HD_CMD_EXE: diff --git a/src/bios/exp/FUNC_SCREEN 2.ASM b/src/bios/exp/FUNC_SCREEN 2.ASM index ebd7fac..e7cc857 100644 --- a/src/bios/exp/FUNC_SCREEN 2.ASM +++ b/src/bios/exp/FUNC_SCREEN 2.ASM @@ -456,7 +456,7 @@ PIC_FN8: ;************************************************** ; Вывод спрайта на экран -; HL - горизоталь, dE - вертикаль +; HL - горизоталь, DE - вертикаль ; A',HL' - адрес данных PIC_FN9: @@ -577,7 +577,7 @@ GENERATE_PAL1: XOR A JR Z,.PP_NO2 LD L,A .PP_NO2: BIT 2,E ; GREEN - JR Z,.PP_NO3 + JR Z,.PP_NO6 ;JR Z,.PP_NO3 LD B,A .PP_NO3: JR .PP_NO6 ; diff --git a/src/bios/exp/FUNC_SCREEN.ASM b/src/bios/exp/FUNC_SCREEN.ASM index ebd7fac..2fd6ec1 100644 --- a/src/bios/exp/FUNC_SCREEN.ASM +++ b/src/bios/exp/FUNC_SCREEN.ASM @@ -577,7 +577,7 @@ GENERATE_PAL1: XOR A JR Z,.PP_NO2 LD L,A .PP_NO2: BIT 2,E ; GREEN - JR Z,.PP_NO3 + JR Z,.PP_NO6 LD B,A .PP_NO3: JR .PP_NO6 ; diff --git a/src/bios/rom/SETUP/AUTOIDE.asm b/src/bios/rom/SETUP/AUTOIDE.asm index 2353680..a3cdbd3 100644 --- a/src/bios/rom/SETUP/AUTOIDE.asm +++ b/src/bios/rom/SETUP/AUTOIDE.asm @@ -128,7 +128,7 @@ WAIT: ; SS_SECT EQU #3E MACRO PAUSE_DJNZ num - IF num<255 + IF num<256 LD B,num .loop: DJNZ .loop ELSE @@ -304,7 +304,7 @@ AUTODETECTING: CALL DETECTORS.CheckChanel ; .IDE_ABSENT: LD A,IDE.Device.NONE LD (IDEDEV),A - LD A,IDE.ATA.Nop + LD A,IDE.CMD.ATA.Nop LD BC,IDE.Write.Command OUT (C),A DEC B @@ -415,7 +415,7 @@ IDESPEC: IN A,(SLOT3) LD BC,IDE.Write.Counter ENDIF OUT (C),A - LD A,IDE.ATA.InitializeDeviceParameters + LD A,IDE.CMD.ATA.InitializeDeviceParameters CALL IDE_CMD LD C,(IY+IDE.HDD_INIT_TABLE.SectorsPerTrack) ; Sector per track LD B,0 @@ -456,19 +456,11 @@ IDESPEC: IN A,(SLOT3) CP BIOS.Error.ATAPI.UnitAttention JR Z,IDESPEC.END ; - ;CP BIOS.Error.ATAPI.NotReady - ;SCF - ;JR NZ,.set_sector ; любая непонятная ошибка - нет носителя HALT DJNZ .get_error_loop ; - ; LD HL,ATAPI_CMD_PACKET.REQUEST_SENSE - ; LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер - ; CALL EXEC_PACKET_COMMAND.start ; [ ] sector size ATAPI -.s_size: ;LD HL,ATAPI_CMD_PACKET.READ_CAPACITY_DATA - LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер - ;CALL EXEC_PACKET_COMMAND.start_sys_page +.s_size: LD DE,IDENTIFY_DEVICE_BUFFER.ReservedWord224 ; просто нужен был буфер CALL ATAPI_READ_CAPACITY_DATA ; .set_sector: LD HL,#FFFF @@ -485,7 +477,6 @@ 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 /////////////////////////////////////////////////////////////////////[^] @@ -681,7 +672,7 @@ RESET_Slave_ATAPI: OUT (C),A PAUSE_DJNZ 16 LD BC,IDE.Write.Command - LD A,IDE.ATAPI.Reset + LD A,IDE.CMD.ATAPI.Reset OUT (C),A PAUSE_DJNZ 16 LD A,IDE.Drive.Master @@ -750,7 +741,7 @@ DETECTORS: ;-------; ; CHECK BY EXECUTING NOP COMMAND AND WAIT. ; Exit: CF - No device -.NOP_Check: LD E,IDE.ATA.Nop +.NOP_Check: LD E,IDE.CMD.ATA.Nop LD BC,IDE.Write.Command OUT (C),E @@ -786,7 +777,7 @@ DETECTORS: ; Exit: CF - No device ; NC and ZF - ATA ; NC and NZ - ATAPI -.IdentDevCheck: LD E,IDE.ATA.IdentifyDevice +.IdentDevCheck: LD E,IDE.CMD.ATA.IdentifyDevice LD BC,IDE.Write.Command OUT (C),E ; @@ -820,7 +811,7 @@ DETECTORS: ; ATAPI or Absent ; Exit: CF - No device ; NC - ATAPI -.IdentPDevChk: LD E,IDE.ATAPI.IdentifyPacketDevice +.IdentPDevChk: LD E,IDE.CMD.ATAPI.IdentifyPacketDevice LD BC,IDE.Write.Command OUT (C),E ; @@ -871,7 +862,7 @@ SetUP_CHANELS: .CMD: CALL SELECT_IDE PAUSE_DJNZ 32 LD BC,IDE.Write.Command - LD H,IDE.ATA.Nop + LD H,IDE.CMD.ATA.Nop OUT (C),H PAUSE_DJNZ 32 ; Disable INTRQ @@ -889,9 +880,9 @@ SetUP_CHANELS: /////////////////////////////////////////////////////////////////////[v] ; DisableWriteCache: ; LD BC,IDE.Write.Features -; LD A,IDE.ATA.SetFeatures.DisableWriteCache +; LD A,IDE.CMD.ATA.SetFeatures.DisableWriteCache ; OUT (C),A -; LD A,IDE.ATA.SetFeatures +; LD A,IDE.CMD.ATA.SetFeatures ; JP IDE_CMD /////////////////////////////////////////////////////////////////////[^] @@ -902,7 +893,7 @@ SetUP_CHANELS: ; LD BC,IDE.Write.Counter ; XOR A ; OUT (C),A -; LD A,IDE.ATA.Idle +; LD A,IDE.CMD.ATA.Idle ; JP IDE_CMD /////////////////////////////////////////////////////////////////////[^] @@ -910,9 +901,9 @@ SetUP_CHANELS: /////////////////////////////////////////////////////////////////////[v] ; DISABLE_8bit: ; LD BC,IDE.Write.Features -; LD A,IDE.ATA.SetFeatures.Disable8bit +; LD A,IDE.CMD.ATA.SetFeatures.Disable8bit ; OUT (C),A -; LD A,IDE.ATA.SetFeatures +; LD A,IDE.CMD.ATA.SetFeatures ; JP IDE_CMD /////////////////////////////////////////////////////////////////////[^] diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index a08628e4086202576591003a99bfb35a595b7cd8..28b92a060d671c456fb5203d21457148ce9f8cba 100755 GIT binary patch delta 17934 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 delta 15848 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