From 607a458f0f877c7984eb9bd66b3bdbb2430071f9 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 03:29:31 +1000 Subject: [PATCH] + new key "RMD-Keep", Support for new BIOS function "SWAP_RAM_DRIVES" --- Shared_Includes | 2 +- spectrum.asm | 75 ++++++++++++++++++++++++++++++++++++++----------- trdscl.a80 | 4 +-- 3 files changed, 62 insertions(+), 19 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index b534dc7..809ea1f 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b534dc7d5df20ff238a64d900fb1559105eb8ef6 +Subproject commit 809ea1f0b204f2d56555497c1c808806833d6315 diff --git a/spectrum.asm b/spectrum.asm index 07bed3b..d70f916 100644 --- a/spectrum.asm +++ b/spectrum.asm @@ -209,9 +209,12 @@ EXIT_ALL: ;LD C,Dss.PChars ;RST ToDSS ;--------------------------------------- - 1: LD BC,Dss.Exit RST ToDSS + JR 1B + ; + + COMAND_LINE: LD HL,(LINE_X) LD A,(HL) AND A @@ -349,7 +352,7 @@ MSG_ZX_EXIT: DB 13,10,"EXIT from Spectrum configuration",0 MSG_ZX_EXIT2: DB 13,10,"EXIT from ZX mode",0 PROGRES_IND: DB '░',0 ; 176 -MEM_BLK: BYTE 0 +;MEM_BLK: BYTE 0 LINE_X: WORD 0 X_FILE: WORD 0 CNF_NAME: WORD 0 @@ -715,7 +718,7 @@ Get_RAM_Disk_E: LD A,D ADC HL,HL LD A,D - AND 3Fh + AND #3F OR E JR Z,.skip_inc INC HL @@ -730,18 +733,23 @@ Get_RAM_Disk_E: LD A,D ;*************************************** ;!FIXIT безопасно занимать рамдиски, чтоб пользователь не страдал ; освободить ram-disk e: +; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS .free_disk: DI - XOR A ; RAM-Drive E: - LD C,BIOS.FreeMemRMD - RST ToBIOS ; освободить e: - - POP AF - LD B,A ; запросить память у bios-а - XOR A ; RAM-Drive E: - LD C,BIOS.GetMemRMD ; и подсоединить к e: + ;!TEST + ;XOR A ; RAM-Drive E: + ;LD C,BIOS.FreeMemRMD + ;RST ToBIOS ; освободить e: + ; + POP BC + ;!TEST + ;LD B,A ; запросить память у bios-а + ;XOR A ; RAM-Drive E: + ;LD C,BIOS.GetMemRMD ; и подсоединить к e: + LD C,BIOS.GetMem + ; RST ToBIOS JR C,ERROR_NO_MEM - LD (MEM_BLK),A + LD (Load_IMAGE_File.MEM_BLK),A RET ;--------------------------------------- @@ -757,7 +765,7 @@ Load_IMAGE_File: LD C,Dss.PChars RST ToDSS - LD A,(MEM_BLK) +.MEM_BLK+1: LD A,0 .load_loop: PUSH AF OUT (SLOT3),A @@ -863,7 +871,24 @@ EXIT_TO_DSS: DI LD A,Dss.SetVMod.txt80x32 ; OPEN_TXT LD BC,0*256+Dss.SetVMod RST ToDSS - + ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе + LD A,(RMD_Keep_+2) + AND A + JR NZ,.next + ; очистка рамдисков + LD BC,SYS_PAGE.RAMD_KEYS.NUM*256 + BIOS.FreeMemRMD +.loop: PUSH BC + LD A,B + DEC A + RST ToBIOS + POP BC + DJNZ .loop + ; +.next: + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.Sp2000 + RST ToBIOS + ; LD A,#20 LD DE,0 LD HL,#2050 @@ -873,9 +898,20 @@ EXIT_TO_DSS: DI LD HL,MSG_ZX_EXIT JP EXIT_ALL +;!FIXIT переделать на функцию биоса SET_RELOAD_PROG: - DI + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; + LD A,(Load_IMAGE_File.MEM_BLK) + LD B,A + XOR A ; set disk e: + LD C,BIOS.BLK_TO_RAMD + RST ToBIOS + ; + DI LD A,Spec_Page OUT (SLOT3),A @@ -910,7 +946,7 @@ RESET_TO_ZX: DI IN A,(ZXKeys) AND #1F CP #1E - JR Z,EXIT_TO_DSS + JP Z,EXIT_TO_DSS ; фикс неполной дешифрации порта #FFFD (пишут в #C0FD) LD A,#FF @@ -919,12 +955,17 @@ RESET_TO_ZX: DI LD BC,ACEX.AY_FFFD_WRITE*256 + BIOS.DCP_CONFIG RST ToBIOS ; + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + LD BC,BIOS.SWAP_RAM_DRIVES.ZX + RST ToBIOS + ; LD A,(Ret_zx_+2) LD B,A LD A,(Ret_fn_+2) XOR B LD B,A LD A,ACEX.RET_PORT + ;!FIXIT переделать под функцию биоса CALL SET_ROM ; включить возврат LD A,CNF_PORT.CNF_3 @@ -1176,6 +1217,7 @@ Int_or_: DW Int_or, #0300 ; Ret_zx_: DW Ret_zx, #4100 ; включить возврат в ZX страница (#41) должна совпадать с ret_fn_ Ret_fn_: DW Ret_fn, #4100 ; включить возврат в FN страница (#41) должна совпадать с ret_zx_ LD_Pal_: DW LD_Pal, #FF00 +RMD_Keep_: DW RMD_Keep, #FF00 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе DW 0,0 ; end marker Turbo_: DB "turbo", 255,0 @@ -1191,6 +1233,7 @@ Int_or: DB "origin", 255,0 Ret_zx: DB "ret-zx", 255,0 Ret_fn: DB "ret-fn", 255,0 LD_Pal: DB "load-pal", 255,0 +RMD_Keep: DB "RMD-Keep", 255,0 ;!TEST; [ ] 05/11/2023 очищать рамдиски при выходе ;ZX_PROG_LEN EQU $-RELOAD_PROG diff --git a/trdscl.a80 b/trdscl.a80 index 82c83a1..f5a66aa 100644 --- a/trdscl.a80 +++ b/trdscl.a80 @@ -205,7 +205,7 @@ Load_SCL: LD HL,ONE_FILE RET C ;!FIXIT обработчик ошибки!!!!! Convert_SCLtoTRD: - LD A,(MEM_BLK) + LD A,(Load_IMAGE_File.MEM_BLK) OUT (SLOT3),A ; вставляем первую страницу RAM-диска LD HL,SCL_Buffer @@ -306,7 +306,7 @@ Convert_SCLtoTRD: RST ToDSS DI - LD A,(MEM_BLK) + LD A,(Load_IMAGE_File.MEM_BLK) JP Load_IMAGE_File.scl_read_next ;-----------[]