From 3e9482509262e6c8e2bf493dce546c81edfa509e Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Thu, 11 Sep 2025 18:56:53 +1000 Subject: [PATCH] =?UTF-8?q?=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D1=8C=20=D0=BE=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B4=D0=BE=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/rom/SETUP/MAIN.asm | 2 +- src/bios/rom/ZX/ZX_FUNC.ASM | 86 +++++++++++++++++++++++-------------- src/bios/rom/ZX/ZX_MENU.ASM | 32 ++++++++------ 4 files changed, 73 insertions(+), 49 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index a0e68ce..a9892c6 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit a0e68ce3a19bd47537585e49bfbf5e45fab197a1 +Subproject commit a9892c6a6766ef6df26b45a82b1991ac836f2e4a diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 43e4856..5fde7e7 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -1695,7 +1695,7 @@ POSTMSG: CALL FindStringAddr ;----------------------------------------------------------------------[] -;!TODO сделать выбор в Setup, что грузить в vПЗУ при старте. Варианты: +;Что грузить в vПЗУ при старте. Варианты: ;[x] 0 - Не грузить ПЗУ спектрума, инитить страницу #41 как в 3.04 ;[x] 1 - Грузит ПЗУ спектрума из ROM при старте если нет флага ZX ;[x] 2 - Грузит ПЗУ спектрума из ROM при каждом перезапуске diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/src/bios/rom/ZX/ZX_FUNC.ASM index eb57b64..aa6ff08 100644 --- a/src/bios/rom/ZX/ZX_FUNC.ASM +++ b/src/bios/rom/ZX/ZX_FUNC.ASM @@ -511,8 +511,8 @@ GET_SCORP_RAM: CALL FREE_vRAM ; H: Block_ID.vRAM ; B: Port All Mode ;A [1..0]: 1 - int scorp, 2 - int pent, 3 - int ZX -; A'[2]: 0 - set default palette, 1 - don't change palette -; A'[7]: 0 - 320, 1 - 312 строк +; [2]: 0 - set default palette, 1 - don't change palette +; [7]: 0 - 320, 1 - 312 строк GOTO_SPECTRUM: DI LD C,A @@ -587,7 +587,7 @@ GOTO_SPECTRUM: DI ; LD D,B EXX - POP BC + POP BC ; сохраняем входное в GOTO_SPECTRUM значение BC EXX ; XOR A @@ -664,13 +664,6 @@ INIT_PAGES: LD A,SYS_PAGE ; .set_48k: LD A,5 ; !HARDCODE CONFIG_DE.ZX_START ВХОД В BASIC 48 с закрытыми 128-ми портами LD (SYS_PAGE.CONFIG_DE.ZX_START - #8000),A - ;LD A,(HL) ; SLOT0, SLOT3 page - ;INC HL - ;LD E,(HL) ; SLOT1 page - ;INC HL - ;LD D,(HL) ; SLOT2 page - ;JR .set_slots - ; JR .set_table ; .set_scorp: CALL MANAGE_ZX_PAGES.INIT_vRAM @@ -689,7 +682,7 @@ INIT_PAGES: LD A,SYS_PAGE LD E,A LD A,(SYS_PAGE.SHARED_BUFFER_256b+0 - #8000) ; SLOT0, SLOT3 page ; -.set_slots: OUT (SLOT0),A + OUT (SLOT0),A OUT (SLOT3),A LD A,E OUT (SLOT1),A @@ -740,8 +733,11 @@ RES128_PROG: LD DE,(SYS_PAGE.CONFIG_DE) OUT (C),B ; + LD A,4 ; CNF_0 + OUT (SYS_PORT.RAM),A ; CONFIG_SET + ; EXX - LD A,B + LD A,B ; достаём входное в GOTO_SPECTRUM значение B EXX LD BC,Port_All_Mode OUT (C),A @@ -749,50 +745,74 @@ RES128_PROG: XOR A LD BC,#1FFD OUT (C),A ; Scorp порт - LD B,#7F - OUT (C),A ; 128 порт - ; - LD A,E ; установка конфигурации и режима TURBO - OUT (SYS_PORT.RAM),A ; CONFIG_SET + ;LD B,#7F + ;OUT (C),A ; 128 порт ; INC D DEC D ; 0 ВХОД В BASIC-128 - JP Z,0 + JR Z,.GoTo_ZX ; 1 ВХОД В BASIC-48 LD A,#10 - OUT (C),A + ;OUT (C),A DEC D - JP Z,0 + JR Z,.GoTo_ZX ; 2 ВХОД В TR-DOS LD HL,0 PUSH HL DEC D - JP Z,#3D29 + SCF ; признак 3D29 + JR Z,.GoTo_ZX ; 3 ВХОД В EXPANSION ;!TODO пока не работает. Page #45, BIOS (ZX_EXP) #E0 - XOR A - OUT (C),A ; 7FFD + ;XOR A + ;OUT (C),A ; 7FFD LD A,#02 LD B,#1F OUT (C),A - DEC D - JP Z,0 - ; XOR A + DEC D + JR Z,.GoTo_ZX + ; OUT (C),A - LD A,#30 - LD B,#7F - OUT (C),A - ;!TEST - LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET + ; врубаем защёлку 48к + EXX + SET 6,C + EXX + LD A,CNF_PORT.SCORP_RESET + OR E OUT (CNF_PORT.OFF),A + LD A,#10 ; DEC D - ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами - JP Z,#3D29 ; 5 ВХОД В BASIC-48 с закрытыми 128-ми портами + JR NZ,.GoTo_ZX + ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами + SCF + ; + ; Вход: CF - прыгаем в TR-DOS, иначе в 0; A - значение для 7FFD, если +.GoTo_ZX: EXX + BIT 6,C + EXX + JR Z,.noLock48 + ; + SET 5,A +.noLock48: LD B,#7F + OUT (C),A + LD A,E ; установка конфигурации и режима TURBO + OUT (SYS_PORT.RAM),A ; CONFIG_SET + JP C,#3D29 JP 0 + ; +; .GoTo_0: LD A,E ; установка конфигурации и режима TURBO +; OUT (SYS_PORT.RAM),A ; CONFIG_SET +; EXX +; BIT 6,C +; EXX +; JR Z,.noLock48 +; ; +; LD A,#30 +; JP 0 ENT .Size EQU $-RES128_PROG ;-----------------------------------------------------------------------; diff --git a/src/bios/rom/ZX/ZX_MENU.ASM b/src/bios/rom/ZX/ZX_MENU.ASM index 32a8234..d786c5d 100644 --- a/src/bios/rom/ZX/ZX_MENU.ASM +++ b/src/bios/rom/ZX/ZX_MENU.ASM @@ -478,24 +478,26 @@ Hardware_Menu_STR: DC " " ; маркер конца .Size EQU $ - Hardware_Menu_STR - -;[ ] free zx pages! +;!TODO отключать 7FFD и 1FFD одновременно через отключение 1FFD в cnf_port +; и защелку в 7FFD иначе vROM подсунет страницу BASIC128. +; В зависимости от устанавливаемой карты портов выбирать карту для прописывания порта AY +; ;************************************************** SPRINTER_ZX: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.SP97_1 - LD BC,#FE*256 + %0000'0010 ; !HARDCODE Port All Mode data. int pent, set default palette, 320 строк + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_0 ; !HARDCODE 4 - выделение памяти Scorpion 256k. 2+6+8 страницы JR PREPARE_TO_START_ZX ; ZX_SPECTRUM_128: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FA*256 + %1000'0011 + LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A JR PENTAGON_128.zx ; SCORPION_256: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %1000'0001 + LD BC,#FE*256 + %1000'0001 ; = GOTO_SPEC reg B, reg A LD DE,4*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_1 ; !HARDCODE 4 - выделение памяти Scorpion 256k. 2+6+8 страницы PREPARE_TO_START_ZX: DI @@ -522,9 +524,11 @@ PREPARE_TO_START_ZX: POP HL ; LD D,L ; !HARDCODE точка входа в ПЗУ спектрума + ; LD H,A + ; LD A,(SYS_PAGE.Block_ID.vROM) + ; LD L,A + LD HL,(SYS_PAGE.Block_ID.vROM) LD H,A - LD A,(SYS_PAGE.Block_ID.vROM) - LD L,A LD A,C JP GOTO_SPECTRUM ; @@ -534,25 +538,25 @@ PREPARE_TO_START_ZX: ; PENTAGON_128: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 -.zx: LD DE,2*256 + CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - выделение памяти Pentagon 128 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A +.zx: LD DE,2*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.SCORP_RESET ; !HARDCODE 2 - выделение памяти Pentagon 128 JR PREPARE_TO_START_ZX ; PENTAGON_512: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 - LD DE,3*256 + CNF_PORT.CNF_1 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 + CNF_PORT.SCORP_RESET ; !HARDCODE 3 - выделение памяти Pentagon 512 + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A + LD DE,3*256 + CNF_PORT.CNF_2 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_512 + CNF_PORT.SCORP_RESET ; !HARDCODE 3 - выделение памяти Pentagon 512 JR PREPARE_TO_START_ZX ; Pentagon_48: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FE*256 + %0000'0010 -.zx: LD DE,1*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_1 ; !HARDCODE 1 - выделение памяти 48 кб + LD BC,#FE*256 + %0000'0010 ; = GOTO_SPEC reg B, reg A +.zx: LD DE,1*256 + CNF_PORT.TURBO.ON + CNF_PORT.CNF_2 ; !HARDCODE 1 - выделение памяти 48 кб JR PREPARE_TO_START_ZX ; ZX_Spectrum_48: LD L,0 ; точка входа в ПЗУ .custom_ROM: LD H,BIOS.RST_CONF.AY8910 - LD BC,#FA*256 + %1000'0011 + LD BC,#FA*256 + %1000'0011 ; = GOTO_SPEC reg B, reg A JR Pentagon_48.zx SPRINTER_reset: