From df0a7937f67efe6767f14a0bccff893f101f9658 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 29 Sep 2024 01:44:27 +1000 Subject: [PATCH] =?UTF-8?q?free=20zx=20pages!=20=D0=BF=D0=BE=D1=87=D1=82?= =?UTF-8?q?=D0=B8=20=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Shared_Includes | 2 +- src/bios/exp/EXP.asm | 155 +++++++------- src/bios/exp/FUNC_RAM_ROM_DRV.ASM | 27 ++- src/bios/exp/FUNC_SERVICE.asm | 77 ++++--- src/bios/exp/FUNC_ZX.ASM | 324 ----------------------------- src/bios/rom/SETUP/MAIN.asm | 325 +++++++++++++++--------------- src/bios/rom/ZX/ZX_FUNC.ASM | 105 +++++----- src/bios/shared/DEFINES.INC | 3 +- 8 files changed, 343 insertions(+), 675 deletions(-) delete mode 100644 src/bios/exp/FUNC_ZX.ASM diff --git a/Shared_Includes b/Shared_Includes index 403d6e2..39d0997 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 403d6e2b52dadc50e99a1eac442cedd98e19d0a5 +Subproject commit 39d099768ae06d08777c63c9d5036fa4ab9c9a01 diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 5ccdc6e..ed39583 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -892,22 +892,22 @@ PrepareToZX: ; Setup HDD drives for ZX Spectrum mode ; JR C,.loop ; выход в режим zx spectrum .start_zx: - IF FREE_ZX_PAGES + ; IF FREE_ZX_PAGES ; не должно сюда попасть LD B,BIOS.REINIT.HARD_RESET JP REINIT - ELSE ; [x] free zx pages! - XOR A - OUT (SLOT2),A ; ZERO_PAGE - DEC A - OUT (SLOT1),A ; SHARED_PAGE - ;LD A,5 - ;OUT (SLOT1),A - ;LD A,2 - ;OUT (SLOT2),A - ; - JP GOTO_SPEC.ZX_MODE - ENDIF + ; ELSE ; [x] free zx pages! + ; XOR A + ; OUT (SLOT2),A ; ZERO_PAGE + ; DEC A + ; OUT (SLOT1),A ; SHARED_PAGE + ; ;LD A,5 + ; ;OUT (SLOT1),A + ; ;LD A,2 + ; ;OUT (SLOT2),A + ; ; + ; JP GOTO_SPEC.ZX_MODE + ; ENDIF ;*********************************** ; Инициализация портов PORTS_INIT: @@ -1071,9 +1071,6 @@ PORTS_INIT: INCLUDE 'FUNC_FOR_TRDOS.ASM' INCLUDE 'FUNC_5x.asm' INCLUDE 'FUNC_LOW_PRINT.ASM' - IFN FREE_ZX_PAGES - INCLUDE 'FUNC_ZX.ASM' - ENDIF ;-----------------------------------------------------------------------; @@ -1196,7 +1193,7 @@ DOS_ON: NOP ;!TODO раб - IF FREE_ZX_PAGES + ; IF FREE_ZX_PAGES ; [ ] free zx pages! ---------------------------------------------------; GOTO_SPEC: PUSH HL LD HL,RET_TO_BIOS @@ -1222,78 +1219,77 @@ ZX_MEMORY_MANAGER: ;---------------------[ ЗАГЛУШКИ ДЛЯ #41 СТРАНИЦЫ]----------------------; ;-------------[RST 08] RAM_BIOS_PROG: ; for CALL BIOS in #41 page - DISP Spec_Page.to_bios - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.ROM),A - POP AF - RET - ENT + DISP Spec_Page.to_bios + PUSH AF + LD A,ROM.BIOS + OUT (SYS_PORT.ROM),A + POP AF + RET + ENT .Length EQU $-RAM_BIOS_PROG ;-------------------[] ; ;-------------[RST 38] PROG_NO_ROM: - DISP Spec_Page.no_zx_rom - DI - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - OUT (SLOT2),A - OUT (SLOT1),A - ; - LD SP,#BF00 - ; - LD E,0 - LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default - RST ToBIOS - ; - LD DE,0 - LD HL,#2050 - LD C,BIOS.LP_CLS_WIN - RST ToBIOS - ; set scr-2 - LD A,1 - OUT (SCREEN_SWITCH),A - ; - LD HL,MESSAGE_NR - LD DE,#A000 - LD BC,MESSAGE_NR.size - LD A,C - LDIR - ; - LD HL,#A000 - LD D,0 ; delimiter - LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED - LD B,A - LD C,BIOS.LP_PRINT_LINE3 - RST ToBIOS - ; -.loop: DI - HALT - JR .loop - ; + DISP Spec_Page.no_zx_rom + DI + ; + LD A,SHARED_PAGE + OUT (SLOT3),A + OUT (SLOT2),A + OUT (SLOT1),A + ; + LD SP,#BF00 + ; + LD E,0 + LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default + RST ToBIOS + ; + LD DE,0 + LD HL,#2050 + LD C,BIOS.LP_CLS_WIN + RST ToBIOS + ; set scr-2 + LD A,1 + OUT (SCREEN_SWITCH),A + ; + LD HL,MESSAGE_NR + LD DE,#A000 + LD BC,MESSAGE_NR.size + LD A,C + LDIR + ; + LD HL,#A000 + LD D,0 ; delimiter + LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED + LD B,A + LD C,BIOS.LP_PRINT_LINE3 + RST ToBIOS + ; +.loop: DI + HALT + JR .loop + ; MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET" .size EQU $-MESSAGE_NR - ENT + ENT PROG_NO_ROM.size EQU $-PROG_NO_ROM ;-------------------[] ;-----------------------------------------------------------------------; ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; - ENDIF +; ENDIF ;-------------------------------[ #FFE0 ]-------------------------------; ; программа, которая будучи размещенной в #40 странице, ; с адреса RESTARTS, перехватывает RESET -RESTARTS_PROG: ; !TODO LDConf перехват ресета на любой конфе после hardreset - LD HL,RESTARTS - LD B,16 -.loop: - LD (HL),0 - INC HL - DJNZ .loop - NOP - NOP -.Size EQU $-RESTARTS_PROG +RESTARTS_PROG: ; !TODO LDConf перехват ресета на любой конфе после hardreset + LD HL,RESTARTS + LD B,16 +.loop: LD (HL),0 + INC HL + DJNZ .loop + NOP + NOP +.Size EQU $-RESTARTS_PROG ; LD A,1 ; OUT (SLOT3),A ;-----------------------------------------------------------------------; @@ -1304,8 +1300,7 @@ RESTARTS_PROG: ; !TODO LDConf ; для запуска Setup Start: DISP COMPILE_ADDR.SETUP_STARTER -Exec: - LD A,CNF_PORT.CNF_0 + ROM.EXTENSION +Exec: LD A,CNF_PORT.CNF_0 + ROM.EXTENSION OUT (SYS_PORT.ROM),A LD HL,ROM_MAP.SETUP @@ -1329,10 +1324,8 @@ Exec: ; и если нажата, то происходит игнор параметра ; "Быстрый старт ПЗУ" во время перезагрузки EX AF,AF' - - LD A,#FF ; !HARDCODE - OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05) - + LD A,#FF ; !HARDCODE + OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05) EX AF,AF' ;----------------------[] DI diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index 85c39ee..9956d25 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -60,26 +60,25 @@ EMM.InitMem: PUSH BC LD HL,SYS_PAGE.RAM_TABLE ; Адрес RAM FAT в ОЗУ. ; обнуляем таблицу XOR A -.loopFree: - LD (HL),A +.loopFree: LD (HL),A INC L JR NZ,.loopFree ; резервируем спец.страницы и страницы ZX - LD B,RESERVED_PAGES.Blocks + ;LD B,RESERVED_PAGES.Blocks LD DE,RESERVED_PAGES ; таблица занятых системных страниц .loop: LD A,(DE) CP #FF JR Z,.exitLoop -.loopBlk: - INC DE + ; +.loopBlk: INC DE LD L,A LD A,(DE) LD (HL),A CP #FF JR NZ,.loopBlk -.exitLoop: - INC DE - DJNZ .loop + ; +.exitLoop: ;INC DE + ;DJNZ .loop LD L,A LD (HL),A ; Инициализация ключей RAM-Disks @@ -105,16 +104,16 @@ EMM.InitMem: PUSH BC ;---------------------------------------------------------------------[] RESERVED_PAGES: ; [x] Block #1 - можно освободить по ID 1 - DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; [ ] free zx pages! for Spectrum + ;DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; [ ] free zx pages! for Spectrum ;!FIXIT страницы 16..31 не зарезервированы, но используются в Pentagon 512 ; ; эмулятор ПЗУ ;!FIXIT ROM-Emulator сделать динамические страницы - DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; [ ] free zx pages! For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION - DB #FF ; End of the block + ;DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; [ ] free zx pages! For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION + ;DB #FF ; End of the block ; ; ;; Block #2 - нельзя освобождать - DB 0,2,5 ; [ ] free zx pages! ; for Spectrum and BIOS starting + DB 0;,2,5 ; [ ] free zx pages! ; for Spectrum and BIOS starting DB DCP_PAGE ; Ports map DB Spec_Page ; Page for Spectrum mode ; Screen pages @@ -126,7 +125,7 @@ RESERVED_PAGES: DB SYS_PAGE ; Page for system (BIOS) variables DB #FF ; End of the block ; -.Blocks EQU 2 +;.Blocks EQU 2 ;----------------------------------------------------------------------; ; @@ -304,7 +303,7 @@ EMM.FreeMem: ; [x] free zx pages! теп LD A,(HL) ; следующий блок AND A JR Z,.error - LD (HL),0 ; Освободить + LD (HL),0 ; Освободить CP #FF ; Если не конец JR NZ,.loop ; продолжать diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index 081e7c8..e09ec5f 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -327,57 +327,56 @@ RST_CONF: ; B = 1 - RESTART. ; B = 2 - Soft reset ; B = 3 - Hard reset -; B = 4 - Reinit spectrum pages REINIT: DEC B JR Z,.Restart ;1 DEC B JR Z,.SoftReset ;2 DEC B - JR Z,.HardReset ;3 - DEC B SCF - RET NZ -.ReinitZXpages: ;4 - LD DE,RESERVED_PAGES ; таблица занятых системных страниц - LD HL,SYS_PAGE.RAM_TABLE ; Адрес FAT ОЗУ. + RET NZ +; JR Z,.HardReset ;3 +; DEC B +; .ReinitZXpages: ;4 +; LD DE,RESERVED_PAGES ; таблица занятых системных страниц +; LD HL,SYS_PAGE.RAM_TABLE ; Адрес FAT ОЗУ. - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (SLOT3),A +; LD C,SLOT3 +; IN B,(C) +; LD A,SYS_PAGE +; OUT (SLOT3),A - LD A,(DE) -.zxloop: - CP #FF - JR Z,.endzxloop - INC DE - LD L,A +; LD A,(DE) +; .zxloop: +; CP #FF +; JR Z,.endzxloop +; INC DE +; LD L,A - LD A,(HL) - AND A - JR NZ,.errorzxloop +; LD A,(HL) +; AND A +; JR NZ,.errorzxloop - LD A,(DE) - LD (HL),A - JR .zxloop +; LD A,(DE) +; LD (HL),A +; JR .zxloop -.errorzxloop: - DEC DE - LD HL,-RESERVED_PAGES-1 - ADD HL,DE - JR NC,.errorzxloop_noChanges +; .errorzxloop: +; DEC DE +; LD HL,-RESERVED_PAGES-1 +; ADD HL,DE +; JR NC,.errorzxloop_noChanges - DEC DE - LD H,high SYS_PAGE.RAM_TABLE - LD A,(DE) - LD L,A - LD A,#FF - LD (HL),A -.errorzxloop_noChanges: - SCF -.endzxloop: - OUT (C),B - RET +; DEC DE +; LD H,high SYS_PAGE.RAM_TABLE +; LD A,(DE) +; LD L,A +; LD A,#FF +; LD (HL),A +; .errorzxloop_noChanges: +; SCF +; .endzxloop: +; OUT (C),B +; RET ; ;[x] diff --git a/src/bios/exp/FUNC_ZX.ASM b/src/bios/exp/FUNC_ZX.ASM deleted file mode 100644 index 04642fa..0000000 --- a/src/bios/exp/FUNC_ZX.ASM +++ /dev/null @@ -1,324 +0,0 @@ - - - - IFN FREE_ZX_PAGES -;-----------------------------------------------------------------------; -;!TODO задействовать -GOTO_SPEC: IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - LD (SYS_PAGE.CONFIG_DE.ZX_START),A - EX AF,AF' - OUT (SLOT3),A - -;NO_SETUP_2: CP #FC -; JR Z,SPECTRUM_0 ; Конфигурация AY - -;NO_SETUP_1: -;!TODO сделать активацию винта для параметра из Setup -.ZX_MODE: LD A,#FE ; !HARDCODE сделать через метку ACC-off Spectrum-MODE - LD BC,Port_All_Mode - OUT (C),A - LD SP,#C000 - ; - CALL FN_SYNC.INT_PENT - CALL SET_TXT_PALETTE.ZX - ; - LD E,0 - CALL LP_SET_32 - ; - LD E,0 - LD HL,#5104 - CALL LP_SET_32.X - - ; ????? можно использовать когда-нибудь как-нибудь - ; LD D,#35 - ; CALL CMOS_RD - ; BIT 0,A - ; PUSH AF - ; CALL Z,SPRINTER_1 - ; POP AF - ; PUSH AF - ; CALL NZ,AY8910 - ; POP AF - -.TASK_0: XOR A ; задача 0, режим 256 килобайт -.START_TASK: LD IX,.BASIC_128 - JP INIT_PAGES ; инициализация номеров страниц режима спектрума - ; -;start_basic: -.BASIC_128: LD SP,#C000 - LD HL,RES128_PROG - LD DE,ZX_VARS.PRINTER_BUFFER ; запуск программы на BASIC-е. - LD BC,RES128_PROG.Size - LDIR - DI - JP ZX_VARS.PRINTER_BUFFER -;-----------------------------------------------------------------------; - - -;-----------------------------------------------------------------------; -;***************************************** -; -; Инициализация страниц для -; спектрумовского режима и -; восстановление спектрумовского -; экрана -; -; Возврат по IX -; -; !!! NO USE STACK !!! -; -;***************************************** -;!TODO стек установлен в третьей странице, не использовать или устанавливать в другую! -; инициализация страниц zx spectrum -INIT_PAGES: - AND A - LD E,A - EX AF,AF' - LD A,E - -; BIT 7,A -; JR Z,SCORPION_256_MODE -; BIT 6,A -; JR Z,PENTAGON_128_MODE -; -;PENTAGON_48_MODE: -; AND #3C -; OUT (SLOT0),A -; INC A -; OUT (SLOT1),A -; INC A -; OUT (SLOT2),A -; INC A -; LD D,A -; LD BC,#1FFD -; XOR A -; OUT (C),A -; LD B,#7F -; OUT (C),A -; LD A,D -; OUT (SLOT3),A -; JR INIT_VIDEO_REG -; -; -; PENTAGON_128_MODE: -; LD D,8 -; AND #38 -; JR ALL_MODE - -SCORPION_256_MODE: - LD D,16 - AND #30 ; до 4-х спектрумов - -ALL_MODE: - OUT (SLOT0),A - XOR 5 ; [ ] free zx pages! - OUT (SLOT1),A - XOR 7 ; [ ] free zx pages! - OUT (SLOT2),A - OR #0F ; [ ] free zx pages! - LD E,A - -.loop: DEC D - - LD A,D - RLCA - AND #10 - LD BC,#1FFD - OUT (C),A - - LD A,D - AND 7 - OR #40 - LD B,#7F - OUT (C),A - - LD A,E - OUT (SLOT3),A - DEC E - - DEC D - INC D - JR NZ,.loop - -INIT_VIDEO_REG: - XOR A - OUT (RGADR),A ; регистр видео адреса - OUT (RGMOD),A ; регистр моды -; OUT (RGSCR),A ; регистр экрана - - ;!TEST - ; Restore old Spectrum Screen - ;; LD HL,#4000 - ;; LD DE,#4000 - ;; LD BC,#1B00 - ;; LDIR - - ; EX AF,AF' - ; BIT 6,A - ; JR NZ,NO_SCREEN_ALT - - ; EX AF,AF' - - ; LD A,7 ; седьмая экранная страница - ; LD BC,#7FFD - ; OUT (C),A - - ; Restore old Spectrum Screen 2 - ;; LD HL,#C000 - ;; LD DE,#C000 - ;; LD BC,#1B00 - ;; LDIR - - ; XOR A - ; LD BC,#7FFD - ; OUT (C),A - ; - - EX AF,AF' -NO_SCREEN_ALT: - AND A - JP (IX) -;-----------------------------------------------------------------------; - -; -;>$< >$< >$< >$< >$< >$< [ ПЕРЕМЕЩАЕМАЯ В ОЗУ ] >$< >$< >$< >$< >$< >$< ; - -;--------[ Программа, размещаемая с #5B00 для запуска Spectrum ]--------; -RES128_PROG: - DISP ZX_VARS.PRINTER_BUFFER ;#5B00 - XOR A - OUT (SYS_PORT.RAM),A ; Возврат в 128k ROM - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (SLOT3),A - LD DE,(SYS_PAGE.CONFIG_DE) - OUT (C),B - ; - EXX - LD A,B - EXX - LD BC,Port_All_Mode - OUT (C),A - ; - 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 - ; - INC D - DEC D - ; 0 ВХОД В BASIC-128 - JP Z,0 - ; 1 ВХОД В BASIC-48 - LD A,#10 - OUT (C),A - DEC D - JP Z,0 - ; 2 ВХОД В TR-DOS - LD HL,0 - PUSH HL - DEC D - JP Z,#3D29 - ; 3 ВХОД В EXPANSION - ;!TODO пока не работает. Page #45, BIOS (ZX_EXP) #E0 - XOR A - OUT (C),A - LD A,#02 - LD B,#1F - OUT (C),A - DEC D - JP Z,0 - ; - XOR A - OUT (C),A - LD A,#30 - LD B,#7F - OUT (C),A - ;!TEST - LD A,CNF_PORT.PENT_RESET + CNF_PORT.SCORP_RESET - OUT (CNF_PORT.OFF),A - ; - DEC D - ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами - JP Z,#3D29 - ; 5 ВХОД В BASIC-48 с закрытыми 128-ми портами - JP 0 - ENT -.Size EQU $-RES128_PROG -;-----------------------------------------------------------------------; - - -;---------------------[ ЗАГЛУШКИ ДЛЯ #41 СТРАНИЦЫ]----------------------; -;-------------[RST 08] -RAM_BIOS_PROG: ; for CALL BIOS in #41 page - DISP Spec_Page.to_bios - PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.ROM),A - POP AF - RET - ENT -.Length EQU $-RAM_BIOS_PROG -;-------------------[] -; -;-------------[RST 38] -PROG_NO_ROM: - DISP Spec_Page.no_zx_rom - DI - ; - LD A,SHARED_PAGE - OUT (SLOT3),A - OUT (SLOT2),A - OUT (SLOT1),A - ; - LD SP,#BF00 - ; - LD E,0 - LD BC,BIOS.LP_OPEN_S.TXT_80x32_Default - RST ToBIOS - ; - LD DE,0 - LD HL,#2050 - LD C,BIOS.LP_CLS_WIN - RST ToBIOS - ; set scr-2 - LD A,1 - OUT (SCREEN_SWITCH),A - ; - LD HL,MESSAGE_NR - LD DE,#A000 - LD BC,MESSAGE_NR.size - LD A,C - LDIR - ; - LD HL,#A000 - LD D,0 ; delimiter - LD E,COLORS.CGA.FLASH + COLORS.CGA.INK.RED - LD B,A - LD C,BIOS.LP_PRINT_LINE3 - RST ToBIOS - ; -.loop: DI - HALT - JR .loop - ; -MESSAGE_NR: DZ " Spectrum ROM not installed. Use spectrum.exe Press Ctrl+Alt+Del or RESET" -.size EQU $-MESSAGE_NR - ENT -PROG_NO_ROM.size EQU $-PROG_NO_ROM -;-------------------[] -;-----------------------------------------------------------------------; -;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; -; -; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; -; - ENDIF ;--------------------------------------------------------------------[^] \ No newline at end of file diff --git a/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index 3cd7c22..6dfef03 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -73,11 +73,11 @@ ;FDD EQU #03 - +;!FIXIT нормально прописать TEMP EQU #7E00 ; !HARDCODE MEMMAP2 EQU TEMP ; должно быть выровнено по ALIGN 256 -TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 - +TPOINTD EQU TEMP - SYS_PAGE.RAMD_KEYS.NUM; - SYS_PAGE.Sp_RAMD_KEYS.NUM ; [x] 4/11/2023 + ASSERT (low TEMP = 0) or (low MEMMAP2 = 0), "ERROR Align 256!!!" ;██████████████████████████████████████████████████████████████████████████████████████████████████████████████; ;SETUP_MAIN: @@ -247,52 +247,77 @@ CLEAR_MEM: IN A,(SLOT3) PUSH AF LD A,SYS_PAGE OUT (SLOT3),A + ; очищаем буфер RAM Table + LD HL,MEMMAP2 + LD DE,MEMMAP2+1 + LD BC,255 + LD (HL),0 + LDIR + ; копируем ZX vROM + LD IX,SYS_PAGE.Block_ID.vROM + LD H,high SYS_PAGE.RAM_TABLE + LD D,high MEMMAP2 + LD BC,#01FF ;!HARDCODE 1 vROM RAM BLOCK ID + CALL .SAVE_RMD + ; [x] 28/09/2024 Отдельные рамдиски для режима спектрума и DSS. + LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 + CALL SWAP_RAM_DRIVES + ; нужно ли сохранять рамдиски при перезапуске? + LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E + CALL GET_CMOS_VALUE + OR A + PUSH AF + JR Z,.skip_save_rmd + ; ; save RAM disks on reboot when memory is cleared LD HL,SYS_PAGE.RAMD_KEYS LD DE,TPOINTD LD BC,SYS_PAGE.RAMD_KEYS.NUM LDIR ; [x] 4/11/2023 - LD HL,SYS_PAGE.Sp_RAMD_KEYS - LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM - LDIR + ; LD HL,SYS_PAGE.Sp_RAMD_KEYS + ; LD BC,SYS_PAGE.Sp_RAMD_KEYS.NUM + ; LDIR ; - ; очищаем RAM Table - LD HL,MEMMAP2 - LD DE,MEMMAP2+1 - LD BC,255 - LD (HL),0 - LDIR - ; восстанавливаем RAM диски + ; копируем RAM диски Sprinter mode LD IX,SYS_PAGE.RAMD_KEYS ;RAM DISKS LD H,high SYS_PAGE.RAM_TABLE LD D,high MEMMAP2 LD BC,SYS_PAGE.RAMD_KEYS.NUM*256+#FF - CALL .MEMLOOP + CALL .SAVE_RMD ; [x] 4/11/2023 - LD IX,SYS_PAGE.Sp_RAMD_KEYS - LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM - CALL .MEMLOOP + ; LD IX,SYS_PAGE.Sp_RAMD_KEYS + ; LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM + ; CALL .SAVE_RMD ; - CALL EMM.InitMem - LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E - CALL GET_CMOS_VALUE - OR A - CALL NZ,CCHAIN +.skip_save_rmd: CALL EMM.InitMem + CALL RESTORE_CHAINS + POP AF + JR Z,.skip_restore_rmd + ; LD BC,CMOS_CELL.BootUpParams.Mask.SaveRAMdisks ;#400E + ; CALL GET_CMOS_VALUE + ; OR A + ; JR Z,.skip_restore + ; + LD HL,TPOINTD + LD DE,SYS_PAGE.RAMD_KEYS + LD BC,SYS_PAGE.RAMD_KEYS.NUM + LDIR + ; +.skip_restore_rmd: POP AF OUT (SLOT3),A ; [x] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. - LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 - JP SWAP_RAM_DRIVES + ; LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 + ; JP SWAP_RAM_DRIVES + RET ; - ; -.MEMLOOP: - LD A,(IX) +.SAVE_RMD: LD A,(IX) INC IX OR A LD L,A - CALL NZ,RCHAIN - DJNZ .MEMLOOP + CALL NZ,COPY_CHAIN + DJNZ .SAVE_RMD RET ; @@ -365,7 +390,7 @@ EXIT_SETUP: CALL INT_OFF CALL TRD_MOUNT ; !TEST 24/09/2024 перенос в EXIT_SETUP (перед запуском ZX) CALL SetUp_ZX_HDD - IF FREE_ZX_PAGES +; IF FREE_ZX_PAGES LD A,Spec_Page OUT (SLOT3),A ; @@ -411,25 +436,24 @@ EXIT_SETUP: CALL INT_OFF XOR A JP GOTO_SPECTRUM.FN - ELSE - ;LD BC,#020E - ;CALL GET_CMOS_VALUE - ;OR A - ;LD A,#EC ;SPRINTER - ;JR Z,XFLEX - ;LD A,#EA ;SPECTRUM +; ELSE + ;LD BC,#020E + ;CALL GET_CMOS_VALUE + ;OR A + ;LD A,#EC ;SPRINTER + ;JR Z,XFLEX + ;LD A,#EA ;SPECTRUM ;XFLEX: - XOR A ;LD A,ROM.BIOS - OUT (SYS_PORT.ROM),A - POP HL ; пихается в EXP.ASM в процедуре - JP (HL) - ;LD (JMPHL),HL - - ;LD C,#F3 - ;RST_to_BIOS -;JMPHL EQU $+1 - ;JP #0000 - ENDIF + ; XOR A ;LD A,ROM.BIOS + ; OUT (SYS_PORT.ROM),A + ; POP HL ; пихается в EXP.ASM в процедуре + ; JP (HL) + ;LD (JMPHL),HL + ;LD C,#F3 + ;RST_to_BIOS +;JMPHL EQU $+1 + ;JP #0000 + ; ENDIF SetUp_ZX_HDD: LD D,CMOS_CELL.TRDOSmount CALL CMOS_RD @@ -608,8 +632,8 @@ START: ;CALL TRD_MOUNT ; !TEST 24/09/2024 перенос в EXIT_SETUP (перед запуском ZX) CALL FDD_INSTAL - CALL ZXMODE_SETUP CALL CLEAR_MEM + CALL ZXMODE_SETUP CALL XY_SCREEN ;R06 @@ -1432,34 +1456,26 @@ GET_ID: LD HL,memBUFFER.ID ;R01 RET -RCHAIN: - LD E,L - LDI - DEC L - LD L,(HL) - INC L - RET Z - DEC L - JR RCHAIN +COPY_CHAIN: LD E,L + LDI + DEC L + LD L,(HL) + INC L + RET Z + DEC L + JR COPY_CHAIN -CCHAIN: - LD HL,MEMMAP2 - LD DE,SYS_PAGE.RAM_TABLE - XOR A -CCHAINC: - CP (HL) - JR Z,NOCOPYC - LD E,L - LDI - DEC L -NOCOPYC: - INC L - JR NZ,CCHAINC - LD HL,TPOINTD - LD DE,SYS_PAGE.RAMD_KEYS - LD BC,SYS_PAGE.RAMD_KEYS.NUM - LDIR - RET +RESTORE_CHAINS: LD HL,MEMMAP2 + LD DE,SYS_PAGE.RAM_TABLE + XOR A +.loop: CP (HL) + JR Z,.NoCopy + LD E,L + LDI + DEC L +.NoCopy: INC L + JR NZ,.loop + RET ;---------------------------------------------------------------[] ;REGISTER #1E @@ -1707,26 +1723,19 @@ ZXMODE_SETUP: IN A,(SLOT3) JR Z,.No_Need_To_Load_ZXROMS .Load_ZXROMS: XOR A LD R,A - ; ; Load ZX ROM's - ;LD A,ROM.EXTENSION - ;OUT (SYS_PORT.ROM),A - ; CALL MANAGE_ZX_PAGES.FREE_vMEMORY ;!FIXIT не та страница в SLOT3 ; [ ] free zx pages! - ;XOR A ;LD A,ROM.BIOS - ;OUT (SYS_PORT.ROM),A - XOR A - LD BC,64*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! HARDCODE + LD BC,64*256 + BIOS.ZX_MEMORY_MANAGER ; [ ] free zx pages! MANAGE_ZX_PAGES.FREE_vMEMORY RST ToBIOS_18 ; LD B,3 ; !HARDCODE zx-rom number of pages CALL EMM.GetMem JR C,.init_41h ;!FIXIT печатать ошибку ; [ ] free zx pages! CALL init_zx_roms - IFN FREE_ZX_PAGES - ; ставим метку если прогрузили ПЗУ спектрума - LD HL,'XZ' - LD (Spec_Page.flag_Z),HL - ENDIF ; + ; IFN FREE_ZX_PAGES + ; ; ставим метку если прогрузили ПЗУ спектрума + ; LD HL,'XZ' + ; LD (Spec_Page.flag_Z),HL + ; ENDIF ; .No_Need_To_Load_ZXROMS: POP AF OUT (SLOT3),A @@ -1763,9 +1772,9 @@ ZXMODE_SETUP: IN A,(SLOT3) ; для режима zx spectrum ; !HARDCODE номера страниц для эмулятора ПЗУ init_zx_roms: DI - ;;;;;;;; - IF FREE_ZX_PAGES - ;;;;;;;; + ; ;;;;;;;; + ; IF FREE_ZX_PAGES + ; ;;;;;;;; ; НА ВХООДЕ A = SYS_PAGE.Block_ID.vROM ; добиваем буфер до 11 байтов пустыми страницами ; в буфер упадут 1 RAM BLOCK ID, 3 страницы для vROM и #FF @@ -1807,72 +1816,72 @@ init_zx_roms: DI OUT (SYS_PORT.ROM),A LD A,Spec_Page OUT (SLOT3),A - ;;;;;;;; - ELSE - ;;;;;;;; - IN A,(SLOT3) - EX AF,AF' - ; - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A - INC A ; !HARDCODE LD A,2 - LD B,3 ; !HARDCODE zx-rom number of pages - ; -.loop: EXX - ; - OUT (ROM.SLOT0),A - OR %0100'0000 ; !HARDCODE номера страниц для эмулятора ПЗУ - OUT (SLOT3),A - AND %1011'1111 ; !HARDCODE номера страниц для эмулятора ПЗУ - ; - LD HL,0 - LD DE,#C000 - LD BC,#4000 - LDIR - ; - INC A - EXX - DJNZ .loop - ; - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ROM),A - EX AF,AF' - OUT (SLOT3),A - ; - ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 - ;!FIXIT ; [ ] free zx pages! переделать на вызов FREE_ZX_PAGES.INIT_vROM - LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 - LD B,#42 ;!HARDCODE page - CALL SET_PORTS - ; - LD A,ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 - LD B,#43 ;!HARDCODE page - CALL SET_PORTS - ; - LD A,ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS - LD B,#44 ;!HARDCODE page - CALL SET_PORTS - ; - ; эти страницы пока не используются - LD A,ACEX.vROM.EXPANSION ; ROM-ID - BIOS - ;LD B,#45 ;!HARDCODE page - LD B,#41 - CALL SET_PORTS - ; - LD A,ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1 - ;LD B,#46 ;!HARDCODE page - LD B,#41 - CALL SET_PORTS - ; - LD A,ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2 - ;LD B,#47 ;!HARDCODE page - LD B,#41 - CALL SET_PORTS - ; можно задействовать ещё 4 страницы на порты #E4..#E7 - ;;;;;;;; - ENDIF - ;;;;;;;; +; ;;;;;;;; +; ELSE +; ;;;;;;;; +; IN A,(SLOT3) +; EX AF,AF' +; ; +; LD A,SYS_PORT.EXTENSION +; OUT (SYS_PORT.ROM),A +; INC A ; !HARDCODE LD A,2 +; LD B,3 ; !HARDCODE zx-rom number of pages +; ; +; .loop: EXX +; ; +; OUT (ROM.SLOT0),A +; OR %0100'0000 ; !HARDCODE номера страниц для эмулятора ПЗУ +; OUT (SLOT3),A +; AND %1011'1111 ; !HARDCODE номера страниц для эмулятора ПЗУ +; ; +; LD HL,0 +; LD DE,#C000 +; LD BC,#4000 +; LDIR +; ; +; INC A +; EXX +; DJNZ .loop +; ; +; XOR A +; OUT (ROM.SLOT0),A +; OUT (SYS_PORT.ROM),A +; EX AF,AF' +; OUT (SLOT3),A +; ; +; ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 +; ;!FIXIT ; [ ] free zx pages! переделать на вызов FREE_ZX_PAGES.INIT_vROM +; LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 +; LD B,#42 ;!HARDCODE page +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 +; LD B,#43 ;!HARDCODE page +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS +; LD B,#44 ;!HARDCODE page +; CALL SET_PORTS +; ; +; ; эти страницы пока не используются +; LD A,ACEX.vROM.EXPANSION ; ROM-ID - BIOS +; ;LD B,#45 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BIOS_1 ; ROM-ID - BIOS-1 +; ;LD B,#46 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; +; LD A,ACEX.vROM.BIOS_2 ; ROM-ID - BIOS-2 +; ;LD B,#47 ;!HARDCODE page +; LD B,#41 +; CALL SET_PORTS +; ; можно задействовать ещё 4 страницы на порты #E4..#E7 +; ;;;;;;;; +; ENDIF +; ;;;;;;;; .init_41h: ; забить FF-ами LD HL,#C000 diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/src/bios/rom/ZX/ZX_FUNC.ASM index 9524ce7..79cf33e 100644 --- a/src/bios/rom/ZX/ZX_FUNC.ASM +++ b/src/bios/rom/ZX/ZX_FUNC.ASM @@ -286,7 +286,6 @@ ZX_MEMORY: ; ????? SYS_PAGE.SHARED_BUFFER_256b ; ; [ ] Страница ОЗУ для скорпа в SLOT0 должна совпадать с нулевой страницей порта #7FFD - IF FREE_ZX_PAGES MODULE MANAGE_ZX_PAGES ;-----------------------------------------------------------------------; @@ -316,11 +315,11 @@ INIT_vRAM: XOR A ; XOR A OUT (C),A - BIT 3,E ; 128/512 + BIT 0,E ; 128/512 RET Z ; set 128 + 384 - ;LD A,SYS_PORT.CNF_512 - ;OUT (SYS_PORT.ROM),A + LD A,SYS_PORT.CNF_512 + SYS_PORT.CNF_0 + SYS_PORT.TURBO.ON + OUT (SYS_PORT.ROM),A ; LD D,%0100'0000 CALL SET_7FFD @@ -385,7 +384,7 @@ INIT_vROM: LD A,(HL) PUSH DE PUSH HL LD C,BIOS.SET_PORTS - RST_to_BIOS + CALL ToBIOS_FromEXT ;CALL SET_PORTS POP HL POP DE @@ -434,7 +433,7 @@ INIT_vROM: LD A,(HL) ; FN 1x ; 16 - получить рамблоки инициализированных vROM и VRAM ; 17..31 - зарезервированы -; FN 2x +; FN 2x ;!TODO ; 32 - зарезервировано ; 33 - выделение памяти Spectrum 48k и инит 2-х страниц vROM ; 34 - выделение памяти Pentagon 128k и инит 3-х страниц vROM @@ -524,15 +523,15 @@ FREE_vRAM: LD A,(SYS_PAGE.Block_ID.vRAM) RET ;--------------; FREE_vMEMORY: CALL FREE_vRAM - ;JR FREE_vROM ;--------------; FREE_vROM: LD A,(SYS_PAGE.Block_ID.vROM) OR A RET Z + LD C,BIOS.FreeMem + CALL ToBIOS_FromEXT + RET C XOR A LD (SYS_PAGE.Block_ID.vROM),A - LD C,BIOS.FreeMem - RST_to_BIOS ;--------------; RES_FLAG_ZXvROM: ; не должно портить DE EX AF,AF' @@ -561,7 +560,7 @@ GET_128k_MEM: LD D,ZX_MEMORY.MODE_128k GET_XXX_MEM: CALL FREE_vRAM .init: LD B,D LD C,BIOS.GetMem - RST_to_BIOS + CALL ToBIOS_FromEXT ;CALL EMM.GetMem RET C LD (SYS_PAGE.Block_ID.vRAM),A @@ -598,12 +597,12 @@ GET_SCORP_RAM: CALL FREE_vRAM ; Get Pent128 mem LD B,ZX_MEMORY.MODE_128k LD C,BIOS.GetMem - RST_to_BIOS + CALL ToBIOS_FromEXT ;CALL EMM.GetMem ; A - Pent128 mem block id LD B,D ; Scorp128 mem block id LD C,BIOS.MergeMemBlocks - RST_to_BIOS + CALL ToBIOS_FromEXT ;CALL EMM.MergeMemBlocks LD (SYS_PAGE.Block_ID.vRAM),A RET @@ -625,7 +624,7 @@ GET_SCORP_RAM: CALL FREE_vRAM ; .error_no_mem: LD A,C LD C,BIOS.FreeMem - RST_to_BIOS + CALL ToBIOS_FromEXT ;CALL EMM.FreeMem LD A,BIOS.Error.EMM.NoMemory SCF @@ -675,56 +674,54 @@ GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported LD SP,#C000 ;!TODO сделать активацию винта для параметра из Setup ; установка инта - EXX - LD C,BIOS.FN_SYNC - RST_to_BIOS - ;CALL FN_SYNC + EXX + LD C,BIOS.FN_SYNC + CALL ToBIOS_FromEXT + EXX ; установка развёртки - EXX LD A,C - EXX - RLCA - AND %0000'0001 - OR %1000'0110 - LD C,BIOS.FN_SYNC - RST_to_BIOS - ;CALL FN_SYNC - EXX - LD A,C - EXX + EXX + RLCA + AND %0000'0001 + OR %1000'0110 + LD C,BIOS.FN_SYNC + CALL ToBIOS_FromEXT + EXX ; + LD A,C + EXX AND %0000'0100 ;!TODO запомнить/восстановить кастомную палитру? LD BC,BIOS.SET_PAL_INIT.ZX CALL Z,ToBIOS_FromEXT ; LD E,0 LD BC,BIOS.LP_OPEN_S.ZX_32x24_Default - RST_to_BIOS - ;CALL LP_SET_32 + CALL ToBIOS_FromEXT ; LD E,0 LD HL,#5104 LD BC,BIOS.LP_OPEN_S.ZX_32x24 - RST_to_BIOS - ;CALL LP_SET_32.X - ; .SHARED_BUFFER_256b + CALL ToBIOS_FromEXT + ; LD A,(SYS_PAGE.Block_ID.vRAM) LD HL,SYS_PAGE.SHARED_BUFFER_256b LD C,BIOS.GetMemBlkPages - RST_to_BIOS - ;CALL EMM.GetMemBlkPages + CALL ToBIOS_FromEXT ;!FIXIT - ;RET C + ;RET C ; !FIXIT проверка размера блока, сделать, чтоб выбирался объём памяти ;LD A,B ;CP 16 ; LD D,B -;.TASK_0: XOR A ; задача 0, режим 256 килобайт -.START_TASK: LD IY,.BASIC_128 - JP INIT_PAGES ; инициализация номеров страниц режима спектрума + ;.TASK_0: задача 0, режим 256 килобайт +.START_TASK: XOR A + OUT (RGADR),A ; регистр видео адреса + OUT (RGMOD),A ; регистр моды ; -;start_basic: + LD IY,.BASIC_128 + JP INIT_PAGES ; инициализация номеров страниц режима спектрума + ;start_basic: .BASIC_128: LD SP,#C000 LD HL,RES128_PROG LD DE,ZX_VARS.PRINTER_BUFFER ; запуск программы на BASIC-е. @@ -754,8 +751,8 @@ GOTO_SPECTRUM: LD A,BIOS.Error.NotSupported ; D - количество этих страниц INIT_PAGES: LD A,SYS_PAGE OUT (SLOT1),A - ==== - LD A,SYS_PORT.TURBO.ON + SYS_PORT.CNF_0 + SYS_PORT.CNF_512 ;!FIXIT переделать инит. если 512, то нет 1ffd и наоборот + ; [ ] free zx pages! переделать инит. если 512, то нет 1ffd и наоборот + LD A,SYS_PORT.TURBO.ON + SYS_PORT.CNF_0; + SYS_PORT.CNF_512 OUT (SYS_PORT.ROM),A ; RES 7,H @@ -777,28 +774,28 @@ INIT_PAGES: LD A,SYS_PAGE DI HALT ; +.set_48k: LD A,(HL) ; SLOT0, SLOT3 page + INC HL + LD E,(HL) ; SLOT1 page + INC HL + LD D,(HL) ; SLOT2 page + JR .set_slots + ; .set_scorp: CALL MANAGE_ZX_PAGES.INIT_vRAM LD A,#10 CALL MANAGE_ZX_PAGES.INIT_vRAM.set_1ffd ; A = 0, BC = #7FFD LD B,#1F OUT (C),A - JR .set_table + INC A ; reset ZF ; -.set_pent: CALL MANAGE_ZX_PAGES.INIT_vRAM +.set_pent: CALL Z,MANAGE_ZX_PAGES.INIT_vRAM ; меняем порядок для процедуры set_48k .set_table: LD A,(SYS_PAGE.SHARED_BUFFER_256b+2 - #8000) ; SLOT2 page LD D,A LD A,(SYS_PAGE.SHARED_BUFFER_256b+5 - #8000) ; SLOT1 page LD E,A LD A,(SYS_PAGE.SHARED_BUFFER_256b+0 - #8000) ; SLOT0, SLOT3 page - JR .set_slots - ; -.set_48k: LD A,(HL) ; SLOT0, SLOT3 page - INC HL - LD E,(HL) ; SLOT1 page - INC HL - LD D,(HL) ; SLOT2 page ; .set_slots: OUT (SLOT0),A OUT (SLOT3),A @@ -807,10 +804,7 @@ INIT_PAGES: LD A,SYS_PAGE LD A,D OUT (SLOT2),A ; - XOR A - OUT (RGADR),A ; регистр видео адреса - OUT (RGMOD),A ; регистр моды - JP (IY) + JP (IY) ;-----------------------------------------------------------------------; ; @@ -886,4 +880,3 @@ RES128_PROG: ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; ; ; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; - ENDIF diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index db4e431..98f210a 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,5 +1,5 @@ ;=======================[All shared EQUs]=======================; -BETA_BUILD EQU 7 ; добавляет строку и сообщение о тестовой сборке на стартовом экране +BETA_BUILD EQU 8 ; добавляет строку и сообщение о тестовой сборке на стартовом экране ;======================[All shared defines]=====================; DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 ; @@ -11,7 +11,6 @@ BETA_BUILD EQU 7 ; DEFINE USE_E1_SCANCODE 0 ; DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY грузится в диск 15, 2 - ищется свободный рамдиск, если нет, то в 15-ый - DEFINE FREE_ZX_PAGES 1 ; 1 - освободить страницы спектрума ;!TODO ;----[ Задержка в кадрах после отрисовки логотипа (0 = 256) ]---; DEFINE LOGO_DELAY_MIN 25 ; DEFINE LOGO_DELAY_NORM 100 ;