From d3c7979b19d4df2bbea15ca76d18a391000aead0 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Mon, 29 Jan 2024 00:22:48 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/ZX_ROMS/new/SP_TRDOS.bin | Bin 16384 -> 16384 bytes src/bios/exp/FUNC_4x.ASM | 173 ++++++++++++++++++++++------------- 3 files changed, 109 insertions(+), 66 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 84d47b2..713bcf1 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 84d47b2818758fdceda21ecf2953324c1f339858 +Subproject commit 713bcf1538ff822231da15aed4d8fb7611ebe205 diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index e074c44769c2dac4e908fb84130534e369285658..0ccdab050862fa497a514b031579d29a7330ef64 100644 GIT binary patch delta 596 zcmX|;T}TvR6o&WA{-nF>XXX!^3hsoFl#q#i^UcTZtc4g+A!HUUBVKr6AO=EWhUwmg zba^gXp~4h|h;nOg68eE=rB?e=Tb9s>$g&%;A2vfOrbdx&-t)fCdvOk&SPWt@NEEu@ zj#1~Kb~I7*gHv;uBYt@~&-~;RQM~To4N>EnzZLT0#M#);aF{wzo@h9R z)kNLaN2Eh%y9oA>>e|vmD_Hf*%Bymhm6?--)Qk1V;*^*F)Q?OMVXj9qwk5MRoo5F= z*T4Kj@FuPGZ}piCjw59K!S*j67&g9^baN+UE0j9qHNDPUq4+`x z?!2e)zj`R$w%5^02DzoD^R1C-otc*q*e;-0$(l+oE5*}kMNpOz@i1T0MY}d{4&o3i zcWtc1+pNOV$yUb#Sxm4%`w&|l4P-S)KTc_~E#iKiRbP{Dxn9qzVkRsyY|gZuJ>JO< zM?u7)S+XMuZV>%cyx%N0331sV`*tZuv(ihvIB9)bOsO(W7GzXBs+LPB)#y;28?Wx< zO?JXZyd19J0uM@ex$&EO02AaCLTK1C9{RX8(}K4`75FsN3*D%Mo1xdZ8t#$)0g)^B A>i_@% delta 624 zcmX|}-&KKHD4;C|+dgO->t25rSh!iEf_v{XNgc^Ip8M7>dQv zu$x0~H4ityq7m(b^$kKZ&{jBvQs5}6LeDg*$b(F{V7qGuqqf$94VeZBcTh4|;r?KT? zb0`8ee1r25&z`#4!CS*;E}aX7o??jdHQ;irf#A6F-nnW;S#53iO&e<0u80PYlG^3k zP7bX=sy=OM|A}@K1s5hBzL9PQ=aM$Ep*9WiRNoAm&CU3jbJleDFJ_pQYnK~+H88=~ z!2^7)Y(-AwWcrF^!@pHBt&S&`Xo&d&+tW+HqyG1QF1=$jap^=Wt~9YDR1l3H+DDx0X1X|Fs>Uj)dyN^dA>JtO7k<1LDj zi4$MXWRtISm96vjEVG@N_@AlmOQ2P*u#U;u0dF2u+1tG!XZyW*1!X>tE21fMq~2(( zbr{@CC83i6THTP+&CMJOBEz_XjADpP0u>;d!u0q~xa07gY2@b@3(f9DQkF1&&6N`o zCtTIU%Iz}*!Q%FAjtZ_yw=>seU~#L*S7_A5*>a+}8!X$Ou!ppm1h>e3G!Ku7z@n4d kAh9Aq{+GK3{omIgE_2Z5uYgbf4wM8b5Jr>QlfZrUFNDqjsQ>@~ diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index 68a7e59..b048127 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -44,7 +44,7 @@ ; POP AF ; RET HD_BPB_PREP: - ; [ ] 27/01/2023 + ; [x] 27/01/2024 теперь режим спектрума работает с любым разделом HDD ;LD D,A ;IN A,(SLOT3) ;EX AF,AF' @@ -238,7 +238,7 @@ FN_HDD_READ_BPB: CALL HD_WAIT RET C CALL HD_BPB_PREP - JR NC,HD_RD_L1 + JR NC,FN_HDD_READ.L1 RET @@ -254,7 +254,7 @@ FN_HDD_READ_NEXT: CALL HD_WAIT RET C CALL NEXT_ADD_SEC - JR HD_RD_L1 + JR FN_HDD_READ.L1 ; HL - BUFER, A - PAGE @@ -266,44 +266,25 @@ FN_HDD_READ: CALL HD_WAIT CALL NC,HD_PREPARE RET C -HD_RD_L1: - EXX +.L1: EXX LD C,SLOT3 IN B,(C) EXX OUT (SLOT3),A EX AF,AF' - + ; SAFE_PORTY - + ; LD BC,IDE.Write.Command LD A,IDE.ATA.ReadSectorsWithRetry OUT (C),A -HD_RD_L2: - WAIT_HDD - +.L2: WAIT_HDD ;BIT IDE.ControlBit.DataRequest,A AND IDE.ControlByte.DataRequest - JR NZ,HD_READ_CONT - - ZERO_PORTY -HD_RET: - EXX - OUT (C),B - EXX - LD BC,IDE.Read.Error - IN A,(C) - AND A - SCF - RET NZ - - EX AF,AF' - AND A - RET - -HD_READ_CONT: + JR Z,HD_RET_PortY + ; + ;HD_READ_CONT LD BC,IDE.Read.Data - .loop_read1: DUP 16 INI ; всего 16 раз INI - оптимально. @@ -314,21 +295,38 @@ HD_READ_CONT: INI ; всего 16 раз INI - оптимально. EDUP JR NZ,.loop_read2 - + ; LD A,H OR L - JR NZ,HD_RD_L2 - + JR NZ,.L2 + ; LD A,SYS_PAGE OUT (SLOT3),A EX AF,AF' - LD HL,SYS_PAGE.RAMD_FAT + LD H,high SYS_PAGE.RAMD_FAT LD L,A LD A,(HL) OUT (SLOT3),A EX AF,AF' LD HL,#C000 ; !!!!! - JR HD_RD_L2 + JR .L2 + + +HD_RET_PortY: + ZERO_PORTY +HD_RET: EXX + OUT (C),B + EXX + LD BC,IDE.Read.Error + IN A,(C) + AND A + SCF + RET NZ + ; + EX AF,AF' + AND A + RET + ; HL - BUFER, A - PAGE FN_HDD_WRITE: @@ -357,7 +355,7 @@ HD_WR_L2: WAIT_HDD BIT IDE.ControlBit.DataRequest,A - JP Z,HD_RET + JR Z,HD_RET LD BC,IDE.Write.Data LD D,32 ;!HARDCODE зависит от счётчика DUP в HD_WR_LOOP @@ -376,7 +374,7 @@ HD_WR_LOOP: LD A,SYS_PAGE OUT (SLOT3),A EX AF,AF' - LD HL,SYS_PAGE.RAMD_FAT + LD H,high SYS_PAGE.RAMD_FAT LD L,A LD A,(HL) OUT (SLOT3),A @@ -384,6 +382,7 @@ HD_WR_LOOP: LD HL,#C000 ;!!!!! JR HD_WR_L2 +; [ ] пока работает только с одним каналом (по-старому) FN_HDD_RECAL: LD A,IDE.Drive.Master LD BC,IDE.Write.DeviceHead @@ -407,34 +406,82 @@ FN_HDD_RECAL: ; CALL HD_CMD_EXE ; RET - +; [x] 28/01/2024 работает со всеми каналами FN_HDD_TEST_IDE: LD E,#00 - LD BC,IDE.Write.DeviceHead - LD A,IDE.Drive.Master - OUT (C),A - - CALL TEST_HDD_DRV - - JR NZ,NO_HDD1 - SET 0,E -NO_HDD1: - LD BC,IDE.Write.DeviceHead - LD A,IDE.Drive.Slave - OUT (C),A - - CALL TEST_HDD_DRV - - JR NZ,NO_HDD2 - SET 1,E -NO_HDD2: - LD A,E + ; TEST Secondary Chanel + LD A,IDE.Chanel.Secondary + OUT (IDE.Chanel.Set),A + CALL .TEST_CHANEL + SLA E + SLA E + ; TEST Primary Chanel + LD A,IDE.Chanel.Primary + OUT (IDE.Chanel.Set),A + CALL .TEST_CHANEL +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; LD BC,IDE.Write.DeviceHead +; LD A,IDE.Drive.Master +; OUT (C),A +; ; +; CALL TEST_HDD_DRV +; ; +; JR NZ,.NO_HDD1 +; SET 0,E +; .NO_HDD1: +; LD BC,IDE.Write.DeviceHead +; LD A,IDE.Drive.Slave +; OUT (C),A +; ; +; CALL TEST_HDD_DRV +; ; +; JR NZ,.NO_HDD2 +; SET 1,E +; .NO_HDD2: +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD A,(SYS_PAGE.CURRENT_HDD) + OUT (C),B + CP #FF + JR Z,.exit + AND 1 + JR Z,.exit + LD A,IDE.Chanel.Secondary + OUT (IDE.Chanel.Set),A +; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +.exit: LD A,E AND A SCF RET Z ; HDD absent ! AND A RET +.TEST_CHANEL: + LD BC,IDE.Write.DeviceHead + LD A,IDE.Drive.Master + OUT (C),A + ; + CALL TEST_HDD_DRV + ; + JR NZ,.NO_HDD1 + SET 0,E +.NO_HDD1: + LD BC,IDE.Write.DeviceHead + LD A,IDE.Drive.Slave + OUT (C),A + ; + CALL TEST_HDD_DRV + ; + RET NZ + SET 1,E + RET + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;-----------------------------------[DIFFERENT] ; Не должна портить регистр E!!! @@ -446,7 +493,7 @@ TEST_HDD_DRV: IF IDE_Optimization INC C OUT (C),H ; IDE.Write.Sector - + ; DEC C INC B IN A,(C) ; ????? IDE.Write.Counter+#100 @@ -497,7 +544,7 @@ TEST_HDD_DRV: ; RET -; [ ] 07/01/2024 bit1: Primary/Secondary, bit0 - master/slave, bit2..3: использующийся раздел в MBR +; [x] 07/01/2024 bit1: Primary/Secondary, bit0 - master/slave, bit2..3: использующийся раздел в MBR ; !TODO сделать работу с переменными биоса SYS_PAGE.IDE_0..3 FN_HDD_PART: DI @@ -554,7 +601,7 @@ FN_HDD_PART: SCF JR .exit -; [ ] 27/01/2024 адаптирована для корректной работы с FN_HDD_PART +; [x] 27/01/2024 адаптирована для корректной работы с FN_HDD_PART FN_HDD_INIT: LD C,SLOT3 IN B,(C) @@ -645,10 +692,6 @@ FN_HDD_INIT: OUT (SLOT3),A LD A,IDE.ATA.InitializeDeviceParameters ; SET HDD PARAMETERS CALL HD_CMD_EXE - ; - ; - ; - ; RET HD_CMD_EXE: CALL HD_WAIT @@ -782,7 +825,7 @@ HD_CALC_SECS: AND A RET -; [ ] 27/01/2024 теперь режим спектрума работает с любым разделом HDD +; [x] 27/01/2024 теперь режим спектрума работает с любым разделом HDD SET_BPB_OFFSET: LD A,SYS_PAGE LD HL,SYS_PAGE.MS_BPB @@ -804,7 +847,7 @@ SET_BPB_OFFSET: LD B,A ; LD HL,SYS_PAGE.MS_BPB-16 + #01BE ;!HARDCODE смещение от начала сектора для таблицы разделов c первым сектором LBA для первого раздела - LD DE,16 ;!HARDCODE размер поля описателя раздела + LD DE,16 ;!HARDCODE размер поля описателя раздела .loop: ADD HL,DE DJNZ .loop ;