From 5791d4e591f0110590d09c6cede8fdfd449dbbb1 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 18 Aug 2024 07:03:58 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/bios/exp/EXP.asm | 290 +---------- src/bios/exp/FLEX.asm | 787 ------------------------------ src/bios/exp/FUNC_LOW_PRINT.ASM | 110 ++--- src/bios/exp/FUNC_RAM_ROM_DRV.ASM | 192 ++++---- src/bios/exp/FUNC_SCREEN.ASM | 674 ++++++++++++++++++++++++- src/bios/exp/FUNC_ZX.ASM | 380 +++++++++++++++ src/bios/logo/Set_Pictures.asm | 3 +- src/bios/rom/ZX/ZX_FUNC.ASM | 2 +- src/bios/shared/DEFINES.INC | 8 +- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes src/bios/shared/includes.inc | 3 - 12 files changed, 1222 insertions(+), 1229 deletions(-) delete mode 100644 src/bios/exp/FLEX.asm create mode 100644 src/bios/exp/FUNC_ZX.ASM diff --git a/Shared_Includes b/Shared_Includes index e73e9f8..b541d42 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e73e9f8d4f4e72de4f6b54abaec159684fdcebe1 +Subproject commit b541d4221846090878c1de0138977e28139f7d14 diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 055e371..dc6ac65 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -912,7 +912,6 @@ init_rom_address EQU #8200 ;!HARDCODE ;************************************** ; MODULE Prepare_For_Setup - Set_ALL_Mode: LD A,#FF LD BC,Port_All_Mode OUT (C),A @@ -929,6 +928,9 @@ Setup_to_RAM: LD HL,Setup_Starter.Start LDIR ; на стек кладётся адрес возврата и дальше тащится всякими костылями, чтоб вернуться назад CALL Setup_Starter.Exec ; #C000 + ;JP PrepareToZX + ENDMODULE + ; PrepareToZX: ;CALL init_zx_roms ; Setup HDD drives for ZX Spectrum mode DI @@ -960,8 +962,7 @@ PrepareToZX: ;CALL init_zx_roms CP #10 JR C,.loop ; выход в режим zx spectrum -.start_zx: JP ZX_SPECTRUM_MODE - ENDMODULE +.start_zx: JP GOTO_SPEC.ZX_MODE ;*********************************** ; Инициализация портов PORTS_INIT: @@ -1118,15 +1119,14 @@ PORTS_INIT: INCLUDE 'FUNC_CMOS.ASM' INCLUDE 'BIOS_FUNC.ASM' INCLUDE 'FUNC_SERVICE.asm' - - INCLUDE 'FLEX.asm' - ; INCLUDE 'EXP_SCR.ASZ' - INCLUDE 'FUNC_PIC.ASM' + ; INCLUDE 'EXP_SCR.ASZ' LP_SCR_MNU + INCLUDE 'FUNC_SCREEN.ASM' INCLUDE 'FUNC_RAM_ROM_DRV.ASM' INCLUDE 'FUNC_SYS.ASM' INCLUDE 'FUNC_FOR_TRDOS.ASM' INCLUDE 'FUNC_5x.asm' INCLUDE 'FUNC_LOW_PRINT.ASM' + INCLUDE 'FUNC_ZX.ASM' ;-----------------------------------------------------------------------; @@ -1152,225 +1152,9 @@ ZG_ADDRESS: INCLUDE 'FONT.ASM' ;-----------------------------------------------------------------------; -; -; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; - -/* -; -;------------------------[copy zx-roms to zx-pages]---------------------; -; SLOT0 - ROM 8, sys_port - on. -; RAM SLOT0 - page 0 -; для режима zx spectrum -; ВЫПОЛНЯЕТСЯ ИЗ ОЗУ -; !HARDCODE номера страниц для эмулятора ПЗУ -init_zx_roms: - DISP Reset_Handler.init_rom_address - - IN A,(SLOT3) - EX AF,AF' - - DI - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A - INC A ;!HARDCODE LD A,2 - LD B,3 ; 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 - 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.BIOS ; ROM-ID - BIOS - ;LD B,#45 ;!HARDCODE page - LD B,#41 - CALL SET_PORTS - ; - LD A,ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 - ;LD B,#46 ;!HARDCODE page - LD B,#41 - CALL SET_PORTS - ; - LD A,ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 - ;LD B,#47 ;!HARDCODE page - LD B,#41 - JP SET_PORTS - ; можно задействовать ещё 4 страницы на порты #E4..#E7 - - ENT -.length EQU $-init_zx_roms -;-----------------------------------------------------------------------; -;*/ - -;-----------------------------------------------------------------------; -;!TODO задействовать -GOTO_SPEC: - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD A,B - LD (SYS_PAGE.CONFIG_DE+1),A - EX AF,AF' - OUT (SLOT3),A - -;NO_SETUP_2: -; CP #FC -; JR Z,SPECTRUM_0 ; Конфигурация AY - -;NO_SETUP_1: -;!TODO сделать активацию винта для параметра из Setup -ZX_SPECTRUM_MODE: - LD A,#FE ; !HARDCODE сделать через метку ACC-off Spectrum-MODE - LD BC,Port_All_Mode - OUT (C),A - -;SND_TEST_RET: - LD SP,#BFFF - - CALL FN_SYNC.INT_PENT - CALL SET_PAL_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 - -SPECTRUM_0: - XOR A ; задача 0, режим 256 килобайт -SPECTRUM_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,LEN_RES128 - LDIR - DI - JP ZX_VARS.PRINTER_BUFFER -;-----------------------------------------------------------------------; -; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; -; - - - - ; ;>$< >$< >$< >$< >$< >$< [ ПЕРЕМЕЩАЕМЫЕ В ОЗУ ] >$< >$< >$< >$< >$< >$< ; -;--------[ Программа, размещаемая с #5B00 для запуска Spectrum ]--------; -RES128_PROG: - DISP ZX_VARS.PRINTER_BUFFER ;#5B00 - LD A,ROM.BIOS - 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) - XOR A - LD (SYS_PAGE.CONFIG_DE+1),A - OUT (C),B - - 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 -LEN_RES128 EQU $-RES128_PROG -;-----------------------------------------------------------------------; - ;-------------------------------[ #FFE0 ]-------------------------------; ; программа, которая будучи размещенной в #40 странице, ; с адреса RESTARTS, перехватывает RESET @@ -1435,66 +1219,6 @@ Exec: Length EQU $-Setup_Starter.Start ENDMODULE ;-----------------------------------------------------------------------; - -;---------------------[ ЗАГЛУШКИ ДЛЯ #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,#FF - 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 -;-------------------[] ;-----------------------------------------------------------------------; ;>$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$< >$<; ; diff --git a/src/bios/exp/FLEX.asm b/src/bios/exp/FLEX.asm deleted file mode 100644 index 850177d..0000000 --- a/src/bios/exp/FLEX.asm +++ /dev/null @@ -1,787 +0,0 @@ - -SYCLES EQU 0 -;START EQU 1 -ST1 EQU 2 -DPAL1 EQU 3 -ST2 EQU 4 -DPAL2 EQU 5 - - MACRO NEXT_LIN_H - EX AF,AF' - INC A - OUT (RGADR),A - EX AF,AF' - ENDM - - MACRO NEXT_LIN_HP - EX AF,AF' - INC A - OUT (RGADR),A - JR NZ,.MD_NO_INC_H - inc l -.MD_NO_INC_H: - EX AF,AF' - ENDM - - -;***************************************** -; -; Инициализация страниц для -; спектрумовского режима и -; восстановление спектрумовского -; экрана -; -; Возврат по 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 03CH -; OUT (SLOT0),A -; INC A -; OUT (SLOT1),A -; INC A -; OUT (SLOT2),A -; INC A -; LD D,A -; LD BC,1FFDH -; XOR A -; OUT (C),A -; LD B,7FH -; 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 - OUT (SLOT1),A - XOR 7 - OUT (SLOT2),A - OR #0F - 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 (RGSCR),A ; регистр экрана - OUT (RGMOD),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) - -;**************************************** -; Загрузка режима экрана. -;**************************************** - -; CALL SINC_DEF -; CALL SET_PAL_ZX -; RET - -;**************************************** - -;!TODO тут функция -CL0 EQU 200 -CL1 EQU 240 - -SET_PAL_IBM: - LD DE,#8000 - JR SET_PAL_TXT -SET_PAL_ZX: - LD DE,0 -SET_PAL_TXT: - PUSH IX - IN A,(RGADR) - PUSH AF - IN A,(SLOT3) - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - - LD IX,#C3F0 ; !HARDCODE адрес палитры? -.generate_loop: - CALL GENERATE_PAL1 - LD A,E - OUT (RGADR),A - LD (IX),L ; R - LD (IX+1),B ; G - LD (IX+2),C ; B - LD (IX+3),H ; i ? - INC E - JR NZ,.generate_loop - ; - LD BC,4 - ADD IX,BC - INC D - LD A,D - AND 3 - JR NZ,.generate_loop - - EX AF,AF' - OUT (SLOT3),A - POP AF - OUT (RGADR),A - POP IX - RET - -; генерация спектрумовской палитры. -; Вход: E - атрибут, D - номер палитры -; ВЫХОД: L - red, B - green, C - blue, H - intensity -GENERATE_PAL1: XOR A - LD C,A - LD B,A - LD L,A - BIT 7,D - JR NZ,GENERATE_IBM - BIT 1,D - JR NZ,.FLH -.NOF: BIT 0,D - JR Z,.PAPER -.INK: LD A,CL0 - BIT 6,E - JR Z,.NOI1 - LD A,CL1 -.NOI1: BIT 0,E ; BLUE - JR Z,.NO1 - LD C,A -.NO1: BIT 1,E ; RED - JR Z,.PP_NO2 - LD L,A -.PP_NO2: BIT 2,E ; GREEN - JR Z,.PP_NO3 - LD B,A -.PP_NO3: JR .PP_NO6 -; -.FLH: BIT 7,E - JR Z,.NOF - BIT 0,D - JR Z,.INK -.PAPER: LD A,CL0 - BIT 6,E - JR Z,.NOI2 - LD A,CL1 -.NOI2: BIT 3,E ; BLUE - JR Z,.PP_NO4 - LD C,A -.PP_NO4: BIT 4,E ; RED - JR Z,.PP_NO5 - LD L,A -.PP_NO5: BIT 5,E ; GREEN - JR Z,.PP_NO6 - LD B,A -.PP_NO6: LD A,C - AND A - RRA - ADD A,L - RRA - ADD A,B - RRA - LD H,A ; B/W mode - RET -;**************************************** - -GENERATE_IBM: - BIT 7,E - JR Z,.NO_FLH - BIT 1,D - JR Z,.PAPER -.NO_FLH: - BIT 0,D - JR Z,.PAPER -.INK: -.NO_INTENS: - LD A,#A8 -.INTENS: - BIT 0,E ; BLUE - JR Z,.PPI_NO4 - LD C,A -.PPI_NO4: - BIT 2,E ; RED - JR Z,.PPI_NO5 - LD L,A -.PPI_NO5: - BIT 1,E ; GREEN - JR Z,.PPI_NO6 - LD B,A -.PPI_NO6: - LD A,E - AND #0F - CP 6 - JR NZ,.no_correct - LD B,#54 -.no_correct: - BIT 3,E - JR Z,GENERATE_PAL1.PP_NO6 - - LD A,#54 - ADD A,C - LD C,A - LD A,#54 - ADD A,B - LD B,A - LD A,#54 - ADD A,L - LD L,A - JR GENERATE_PAL1.PP_NO6 -.PAPER: - LD A,#A8 - BIT 4,E ; BLUE - JR Z,.PPI_NO4X - LD C,A -.PPI_NO4X: - BIT 6,E ; RED - JR Z,.PPI_NO5X - LD L,A -.PPI_NO5X: - BIT 5,E ; GREEN - JR Z,.PPI_NO6X - LD B,A -.PPI_NO6X: - LD A,E - AND #70 - CP #60 - JR NZ,GENERATE_PAL1.PP_NO6 - LD B,#54 - JR GENERATE_PAL1.PP_NO6 -;**************************************** - -;**************************************** -;**************************************** - -; D - номер графической палитры -SET_PAL_GRAF: - PUSH IX - IN A,(RGADR) - PUSH AF - - IN A,(SLOT3) - EX AF,AF' - LD A,#50 - OUT (SLOT3),A - - - LD IX,#C3E0 - LD A,D - AND 3 - ADD A,A - ADD A,A - LD E,A - LD D,0 - ADD IX,DE - - LD E,0 - - XOR A - LD B,A - LD C,A - LD L,A - LD H,A - -SET_PAL_GR1: - LD A,E - OUT (RGADR),A - - LD (IX),L - LD (IX+1),B - LD (IX+2),C - LD (IX+3),H - - CALL GENERATE_PAL3 - - INC E - LD A,E - CP 40 - JR NZ,SET_PAL_GR1 - - XOR A - LD B,A - LD C,A - LD L,A - LD H,A - -SET_PAL_GR2: - LD A,E - OUT (RGADR),A - - LD (IX),L - LD (IX+1),B - LD (IX+2),C - LD (IX+3),H - - CALL GENERATE_PAL2 - - INC E - JR NZ,SET_PAL_GR2 - - EX AF,AF' - OUT (SLOT3),A - POP AF - OUT (RGADR),A - POP IX - RET -; -;;********************************* -; - -GENERATE_PAL3: ; gray-scale - LD A,B - ADD A,6 - LD B,A - LD C,A - LD L,A - - LD A,C - AND A - RRA - ADD A,L - RRA - ADD A,B - RRA - LD H,A - - RET - -GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY - LD A,C - ADD A,50 - LD C,A - JR NC,GEN_PAL2_L1 - LD C,0 - LD A,L - ADD A,50 - LD L,A - JR NC,GEN_PAL2_L1 - LD L,0 - LD A,B - ADD A,50 - LD B,A - JR NC,GEN_PAL2_L1 - LD B,0 - -GEN_PAL2_L1: - LD A,C - AND A - RR A - ADD A,L - RR A - ADD A,B - RR A - LD H,A - - RET -; -;;***************************************** - -FN_SYNC: - BIT 7,a - JR Z,.old_mode - - ld h,a - and #60 ; check reserved bits - jr nz,.error - - bit 2,h ; Set V-Sinc? - jr nz,.set_v_sinc - - bit 4,h ; Set Waits? - jr z,.error ; Error - no parameters - -.set_waits: - ld a,h - and 8 ; check waits. Z - no waits, NZ - waits - ld h,#FF - jr z,1F - ld h,#FB -1: - ld bc,(Port_All_Mode) - in a,(C) - and h - out (C),a - RET - -.set_v_sinc: - ld a,h - and 3 - jr z,.SetDefLines - dec a - jr z,.SetCmosLines - dec a - jr z,.Set320Lines -; jr Set312Lines - -.set312lines: - ld a,Port_VSYNC.SET_312L - out (Port_VSYNC),a - - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - ld a,(SYS_PAGE.VSyncAndWaits) - and 2 - ld (SYS_PAGE.VSyncAndWaits),a - OUT (C),B - -.end_set_v_sinc: - bit 4,h - ret z - jr .set_waits - - -.Set320Lines: - ld a,Port_VSYNC.SET_320L - out (Port_VSYNC),a - - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - ld a,(SYS_PAGE.VSyncAndWaits) - or 1 - ld (SYS_PAGE.VSyncAndWaits),a - OUT (C),B - - jr .end_set_v_sinc - -.SetCmosLines: - LD D,CMOS_CELL.ScreenSET - CALL CMOS_RD - - AND high CMOS_CELL.ScreenSET.Mask.Sinc ; в регистре A значение ScreenSET - jr z,.SetDefLines - - bit 6,a - jr z,.set312lines - - jr .Set320Lines - -.old_mode: - AND A - JR Z,.INT_DEF - DEC A - JR Z,.INT_SCORP - DEC A - JR Z,.INT_PENT - DEC A - JR Z,.INT_ORIG - DEC A - JR Z,.INT_CMOS_SINC - ; [x] кастомный экран по таблице пользователя - DEC A - JR Z,.PROG_SCR - ; -.error: SCF - RET - -.SetDefLines: - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - ld a,(SYS_PAGE.VSyncAndWaits) - OUT (C),B - and 1 - jr z,.set312lines - jr .Set320Lines - -.INT_DEF: - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD DE,(SYS_PAGE.CONFIG_ALL) - OUT (C),B - - CALL Test_CONFIG_ALL - jr nz,.INT_CMOS_SINC - jp (IX) - -.INT_CMOS_SINC: - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - LD DE,(SYS_PAGE.CONFIG_ALL) - OUT (C),B - - LD D,CMOS_CELL.ScreenSET - CALL CMOS_RD - - AND high CMOS_CELL.ScreenSET.Mask.Int ; в регистре A значение ScreenSET - JR NZ,.skiptest - - CALL Test_CONFIG_ALL - JP (IX) ; default int (non CMOS) - -.skiptest: - cp #10 - jr z,.INT_SCORP ; scorpion int - - cp #20 - jr z,.INT_PENT ; pentagon int - -; jr ORIG_SINC ; original int - -.INT_ORIG: - LD IX,SCREEN_TABLES.ORIGINAL - JR .PROG_SCR -.INT_SCORP: - LD IX,SCREEN_TABLES.SCORPION - JR .PROG_SCR -.INT_PENT: - LD IX,SCREEN_TABLES.PENTAGON -; JR PROG_SCR -.PROG_SCR: - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - EX AF,AF' - LD (SYS_PAGE.COPY_SLOT3),A - IN A,(PORT_Y) - LD (SYS_PAGE.COPY_RGADR),A - - LD (SYS_PAGE.CONFIG_ALL),IX - XOR A - -;----[START]-----------------------[? 1] -.loop_1: - OUT (PORT_Y),A - EX AF,AF' - - LD A,#50 - OUT (SLOT3),A - - LD HL,#C300 - -;----[START]------------------[v 2]----- -.loop_2: - LD C,(IX) -;----[START]-------------[v 3]---------- -.loop_3: -; взять адрес данных для записи в служебную область экрана - LD E,(IX+1) ; take adress of line X - LD D,(IX+2) -;----[START]--------[v 4]--------------- -.loop_4: - LD A,(DE) ; take counter in table 1, line X, column Y - INC DE - AND A - JR Z,.loop_4_exit ; exit if zero-counter - LD B,A - LD A,(DE) - INC DE -;----[START]---[v 5]-------------------- -.loop_5: - LD (HL),A - INC L - LD (HL),0 - INC L - LD (HL),0 - - EX AF,AF' - INC A - OUT (PORT_Y),A - EX AF,AF' - - LD (HL),0 - DEC L - LD (HL),0 - DEC L - LD (HL),A - - EX AF,AF' - INC A - OUT (PORT_Y),A - EX AF,AF' - - DJNZ .loop_5 -;--------------[^ 5]-------------------- - JR .loop_4 -;-------------------[^ 4]--------------- -.loop_4_exit: - INC HL ; next line - INC HL - INC HL - INC HL - IN A,(PORT_Y) - AND #80 - OUT (PORT_Y),A - DEC C - JR NZ,.loop_3 -;------------------------[^ 3]---------- - INC IX ; next counter - INC IX - INC IX - LD A,(IX) - AND A - JR NZ,.loop_2 -;-----------------------------[^ 2]----- - LD A,SYS_PAGE - OUT (SLOT3),A - LD IX,(SYS_PAGE.CONFIG_ALL) - - EX AF,AF' - ADD A,#80 - JR NC,.loop_1 -;----------------------------------[^ 1] - - ; Exit - LD A,(SYS_PAGE.COPY_RGADR) - OUT (PORT_Y),A - LD A,(SYS_PAGE.COPY_SLOT3) - OUT (SLOT3),A -.exit: OR A - RET - -;DE - содержимое CONFIG_ALL -Test_CONFIG_ALL: - LD HL,SCREEN_TABLES.SCORPION - AND A - SBC HL,DE - ld IX,FN_SYNC.INT_SCORP - RET Z - - LD HL,SCREEN_TABLES.ORIGINAL - AND A - SBC HL,DE - ld IX,FN_SYNC.INT_ORIG - RET Z - - LD HL,SCREEN_TABLES.PENTAGON - AND A - SBC HL,DE - ld IX,FN_SYNC.INT_PENT - RET Z - and a - RET - - -;--- Screen data table 1: counter1, data1 .. counterX, dataX -SCREEN_TABLES: -; -; | число | значения | -; | строк | в | -; | /2 | строках | -.SCR: DB 41 , #F8 - DB 3 , #FC - DB 4 , #FC - DB 7 , #FC - DB 9 , #F8 - DB 0 - -;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0 -.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0 -.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0 -.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 -.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 -.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0 -;--------------------------------------- - -;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX -; -; | кол-во | значения | -; | строк | в | -; | | строке | -.PENTAGON: DB 33 : DW .SCR - DB 1 : DW .INT ; DW .BLN - DB 3 : DW .SNC - DB 1 : DW .BLN - DB 1 : DW .SCR - DB 1 : DW .RES - DB 0 ; end -.SCORPION: DB 31 : DW .SCR - DB 1 : DW .INT_SC - DB 1 : DW .SCR - DB 1 : DW .SNC - DB 3 : DW .SNC - DB 1 : DW .BLN - DB 2 : DW .RES - DB 0 ; end -.ORIGINAL: DB 33 : DW .SCR - DB 1 : DW .SNC - DB 1 : DW .INT - DB 2 : DW .SNC - DB 1 : DW .BLN - DB 1 : DW .SCR - DB 1 : DW .RES - DB 0 ; end -;--------------------------------------- -FLEX_END: diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index c3d54ea..d58795e 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -819,76 +819,75 @@ LP_INI_40: ;******************************************************** - ; ;------------------------------------------------------------------[#80] -LP_OPEN_S: - LD A,B - ADD A,A - CP LP_SC_TAB.SIZE - CCF - RET C - PUSH HL - LD HL,LP_SC_TAB +LP_OPEN_S: LD A,B + ADD A,A + CP LP_SC_TAB.SIZE + CCF + RET C + PUSH HL + LD HL,LP_SC_TAB + ; + ADD A,L + LD L,A + JR NC,.no_inc + INC H + ; LD A,H + ; ADC A,0 + ; LD H,A +.no_inc: LD A,(HL) + INC HL + LD H,(HL) + LD L,A + EX (SP),HL + RET + ; +LP_SC_TAB: DW LP_SET_32 ; 0 - спектрумовское окно 32x24 + DW LP_SET_64 ; 1 - текстовое окно 64x24 + DW LP_SET_40 ; 2 - текстовое окно 40x32 + DW LP_SET_80 ; 3 - текстовое окно 80x32 + DW LP_SET_32.X ; 4 - спектрумовское окно, HL - положение окна + DW LP_SET_64.X ; 5 - текстовое окно 64x24, HL - положение окна + DW LP_SET_40.X ; 6 - текстовое окно 40x32, HL - положение окна + DW LP_SET_80.X ; 7 - текстовое окно 80x32, HL - положение окна + DW PIC_SET_S1 ; 8 - графическое окно 0, HL - положение окна + DW PIC_SET_S2 ; 9 - графическое окно 1, HL - положение окна + ;DW LP_SET_MNU ; !TODO +.SIZE EQU $-LP_SC_TAB - ADD A,L - LD L,A - LD A,H - ADC A,0 - LD H,A - LD A,(HL) - INC HL - LD H,(HL) - LD L,A - EX (SP),HL - RET -LP_SC_TAB: - DW LP_SET_32 - DW LP_SET_64 - DW LP_SET_40 - DW LP_SET_80 - DW LP_SET_32.X - DW LP_SET_64.X - DW LP_SET_40.X - DW LP_SET_80.X - DW PIC_SET_S1 - DW PIC_SET_S2 - ; DW LP_SET_MNU -.SIZE EQU $-LP_SC_TAB - -;LP_SET_MNU: ; ????? -; SCF -; RET -; LD IX,LP_SCR_MNU -; JP LP_SET_MODE +; !TODO +; LP_SET_MNU: +; LD IX,LP_SCR_MNU +; JP LP_SET_MODE LP_SET_32: - LD HL,#4104 -.X: LD IX,LP_SCR_32 - JP LP_SET_MODE + LD HL,#4104 +.X: LD IX,LP_SCR_32 + JP LP_SET_MODE LP_SET_64: - LD HL,#4104 -.X: LD IX,LP_SCR_64 - JP LP_SET_MODE + LD HL,#4104 +.X: LD IX,LP_SCR_64 + JP LP_SET_MODE LP_SET_40: - LD HL,#4000 -.X: LD IX,LP_SCR_40 - JP LP_SET_MODE + LD HL,#4000 +.X: LD IX,LP_SCR_40 + JP LP_SET_MODE LP_SET_80: - LD HL,#4000 -.X: LD IX,LP_SCR_80 - JP LP_SET_MODE + LD HL,#4000 +.X: LD IX,LP_SCR_80 + JP LP_SET_MODE PIC_SET_S1: - LD IX,PIC_320X256_1 - JP LP_SET_MODE + LD IX,PIC_320X256_1 + JP LP_SET_MODE PIC_SET_S2: - LD IX,PIC_320X256_2 - JP LP_SET_MODE + LD IX,PIC_320X256_2 + JP LP_SET_MODE ;------------------------------------------------------------------[#80] ; @@ -1032,7 +1031,6 @@ LP_SET_LOOP: CALL LP_SIZE XOR A RET - WIN_CLOSE: SCF RET diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index e21e467..69c96ad 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -5,25 +5,41 @@ ;----------------------------------------------------------------------; ; Определение объема памяти. ; Выход: BC - FREE MEM в блоках по 16k, HL - FULL MEM -EMM.GetMemSize: - IN A,(SLOT1) - LD B,A - LD A,SYS_PAGE - OUT (SLOT1),A - LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 - LD C,0 -.loop: LD A,(HL) - INC L - JR Z,.exit - AND A - JR NZ,.loop - INC C - JR .loop -.exit: LD HL,#100 ;!HARDCODE max mem pages - LD A,B - LD B,0 - OUT (SLOT1),A - RET +EMM.GetMemSize: IN A,(SLOT1) + LD B,A + LD A,SYS_PAGE + OUT (SLOT1),A + XOR A + LD C,A + LD HL,SYS_PAGE.RAMD_FAT-#4000-#4000 + ; +.loop: DEC L + JR Z,.exit + CP (HL) + JR NZ,.loop + INC C + JP .loop + ; +.exit: LD HL,#100 ;!HARDCODE max mem pages + LD A,B + LD B,0 + OUT (SLOT1),A + RET + +/* +.loop: LD A,(HL) + INC L + JR Z,.exit + AND A + JR NZ,.loop + INC C + JR .loop +.exit: LD HL,#100 ;!HARDCODE max mem pages + LD A,B + LD B,0 + OUT (SLOT1),A + RET +*/ ;----------------------------------------------------------------------; ; @@ -124,54 +140,51 @@ RESERVED_PAGES: ; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки ; CF - признак ошибки ;EMM_FN2M: -EMM.GetMem: - ;PUSH DE - PUSH BC - IN A,(SLOT3) - EX AF,AF' - LD A,SYS_PAGE - OUT (SLOT3),A - LD C,B ; сохранить число нужных блоков - LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 -; Цикл проверки наличия нужных блоков. -.loop: DEC L - JR Z,.noRAM - LD A,(HL) - AND A - JR NZ,.loop - DJNZ .loop - - ; Место есть ! - LD B,C ; Восстановить нужный объем диска - LD C,#FF ; МЕТКА КОНЦА RAM-Disk - LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 - -; Заполнить RAMD_FAT -.loop2: DEC L - LD A,(HL) - AND A - JR NZ,.loop2 - LD (HL),C - LD C,L - DJNZ .loop2 - - ; L - указатель цепочки. - EX AF,AF' - OUT (SLOT3),A - LD A,L - AND A - POP BC - ;POP DE - RET - -.noRAM: LD L,1 ; НЕТ ПАМЯТИ - EX AF,AF' - OUT (SLOT3),A - LD A,L - SCF - POP BC - ;POP DE - RET +EMM.GetMem: PUSH BC + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD C,B ; сохранить число нужных блоков + LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 + ; Цикл проверки наличия нужных блоков. + XOR A +.loop: DEC L + JR Z,.noRAM + ; LD A,(HL) + ; AND A + CP (HL) + JR NZ,.loop + DJNZ .loop + ; Место есть ! + LD B,C ; Восстановить нужный объем диска + LD C,#FF ; МЕТКА КОНЦА RAM-Disk + LD L,A ;low SYS_PAGE.RAMD_FAT; - #4000 - #4000 + ; Заполнить RAMD_FAT + ; A = 0 +.loop2: DEC L + ; LD A,(HL) + ; AND A + CP (HL) + JR NZ,.loop2 + LD (HL),C + LD C,L + DJNZ .loop2 + ; L = указатель цепочки. + EX AF,AF' + OUT (SLOT3),A + LD A,L + AND A + POP BC + RET + ; +.noRAM: LD L,1 ; !HARDCODE bios errors НЕТ ПАМЯТИ + EX AF,AF' + OUT (SLOT3),A + LD A,L + SCF + POP BC + RET ;----------------------------------------------------------------------; ; @@ -335,10 +348,12 @@ EMM.GetMemPageNext: AND A SCF RET Z + IN A,(SLOT1) LD H,A LD A,SYS_PAGE OUT (SLOT1),A + LD A,H LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) LD L,(HL) @@ -347,6 +362,7 @@ EMM.GetMemPageNext: AND A SCF RET Z + AND A RET ;----------------------------------------------------------------------; @@ -432,17 +448,17 @@ EMM.GetMemBlkPages: ; ;----------------------------------------------------------------------; !FIXIT SAFE_RGADR ;RAMD_R_W: -; ╔════════════════════════════════════════════════╗ -; ║ RD/WR SECTOR ║\ -; ║ HL - BUFER ║\ -; ║ DE - ABS sector в 256b блоках ║\ -; ║ B - число данных в 256b блоках ║\ -; ║ A - block RAM ║\ -; ║ A' - команда чтение/запись/чтение ROM Disk ║\ -; ║ 0 - read, 255 - write, 70 - read ROM DISK ║\ -; ║ ** NOT USED TR-DOS VARS ** ║\ -; ╚════════════════════════════════════════════════╝\ -; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ +; ╔════════════════════════════════════════════════╗ +; ║ RD/WR SECTOR ║\ +; ║ HL - BUFER ║\ +; ║ DE - ABS sector в 256b блоках ║\ +; ║ B - число данных в 256b блоках ║\ +; ║ A - block RAM ║\ +; ║ A' - команда чтение/запись/чтение ROM Disk ║\ +; ║ 0 - read, 255 - write, 70 - read ROM DISK║\ +; ║ ** NOT USED TR-DOS VARS ** ║\ +; ╚════════════════════════════════════════════════╝\ +; \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ BLK_RD_WR: AND A SCF @@ -454,9 +470,9 @@ BLK_RD_WR: RET Z ; ; сохраняем состояние прерываний - LD C,A - LD A,R - PUSH AF + LD C,A + LD A,R + PUSH AF ; сохраняем PORT_Y IN A,(PORT_Y) PUSH AF @@ -523,14 +539,14 @@ BLK_RD_WR: LD L,(HL) LD L,(HL) LD L,(HL) - JR .RAMD_LOOP_D + JP .RAMD_LOOP_D .NOT_FOUR_BLK: LD A,E .loop: SUB #40 JR C,.NOT_ONE_BLK LD L,(HL) - JR .loop + JP .loop .NOT_ONE_BLK: AND #3F @@ -552,7 +568,7 @@ BLK_RD_WR: OUT (SLOT3),A SET 7,D SET 6,D - JR .BLK_CONT1 + JP .BLK_CONT1 .BLK_PAGE1: LD C,SLOT1 @@ -581,9 +597,11 @@ BLK_RD_WR: JR Z,.NO_EX_RW2 ; WRITE EX DE,HL ; for READ .NO_EX_RW2: - EX AF,AF' ; DEC C прокрутился 256 раз и вернулся - INC B ; B уже уменьшился на 1, - DEC B + EX AF,AF' ; DEC C прокрутился 256 раз и вернулся + ; A = 0 + ;INC B ; B уже уменьшился на 1, + ;DEC B + CP B JP Z,.BLK_EXIT_1 BIT 6,D diff --git a/src/bios/exp/FUNC_SCREEN.ASM b/src/bios/exp/FUNC_SCREEN.ASM index c080c58..a397405 100644 --- a/src/bios/exp/FUNC_SCREEN.ASM +++ b/src/bios/exp/FUNC_SCREEN.ASM @@ -133,9 +133,9 @@ PIC_FN3: OUT (SLOT1),A BIT 0,B - LD BC,40H+04000H + LD BC,#40 + #4000 JR Z,PIC_FN3_NO_2ND - LD BC,40H+320+04000H + LD BC,#40 + 320 + #4000 PIC_FN3_NO_2ND: ADD HL,BC @@ -296,11 +296,11 @@ PIC_FN5: ; SET_PAL_INIT: LD D,A DEC B - JP Z,SET_PAL_GRAF + JP Z,SET_GRAPH_PALETTE DEC B - JP Z,SET_PAL_ZX + JP Z,SET_TXT_PALETTE.ZX DEC B - JP Z,SET_PAL_IBM + JP Z,SET_TXT_PALETTE.IBM ; LD IX,PAL_DAT1 ; JR Z,PIC_FN6_L1 @@ -471,6 +471,670 @@ PIC_FN14: PIC_FN15: SCF RET +;************************************ + + +;************************************ +; SYCLES EQU 0 +; ;START EQU 1 +; ST1 EQU 2 +; DPAL1 EQU 3 +; ST2 EQU 4 +; DPAL2 EQU 5 + +; MACRO NEXT_LIN_H +; EX AF,AF' +; INC A +; OUT (RGADR),A +; EX AF,AF' +; ENDM + +; MACRO NEXT_LIN_HP +; EX AF,AF' +; INC A +; OUT (RGADR),A +; JR NZ,.MD_NO_INC_H +; INC L +; .MD_NO_INC_H: +; EX AF,AF' +; ENDM + +;**************************************** +; Загрузка режима экрана. +;**************************************** + +; CALL SINC_DEF +; CALL SET_TXT_PALETTE.ZX +; RET + +;**************************************** + +;!TODO тут функция +CL0 EQU 200 +CL1 EQU 240 + + +SET_TXT_PALETTE: +.IBM: LD DE,#8000 + JR .TXT + ; +.ZX: LD DE,0 +.TXT: PUSH IX + IN A,(RGADR) + PUSH AF + IN A,(SLOT3) + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + ; + LD IX,#C3F0 ; !HARDCODE адрес палитры? +.generate_loop: + CALL GENERATE_PAL1 + LD A,E + OUT (RGADR),A + LD (IX),L ; R + LD (IX+1),B ; G + LD (IX+2),C ; B + LD (IX+3),H ; i ? + INC E + JR NZ,.generate_loop + ; + LD BC,4 + ADD IX,BC + INC D + LD A,D + AND 3 + JR NZ,.generate_loop + ; + EX AF,AF' + OUT (SLOT3),A + POP AF + OUT (RGADR),A + POP IX + RET + +; генерация спектрумовской палитры. +; Вход: E - атрибут, D - номер палитры +; ВЫХОД: L - red, B - green, C - blue, H - intensity +GENERATE_PAL1: XOR A + LD C,A + LD B,A + LD L,A + BIT 7,D + JR NZ,GENERATE_IBM + BIT 1,D + JR NZ,.FLH +.NOF: BIT 0,D + JR Z,.PAPER +.INK: LD A,CL0 + BIT 6,E + JR Z,.NOI1 + LD A,CL1 +.NOI1: BIT 0,E ; BLUE + JR Z,.NO1 + LD C,A +.NO1: BIT 1,E ; RED + JR Z,.PP_NO2 + LD L,A +.PP_NO2: BIT 2,E ; GREEN + JR Z,.PP_NO3 + LD B,A +.PP_NO3: JR .PP_NO6 +; +.FLH: BIT 7,E + JR Z,.NOF + BIT 0,D + JR Z,.INK +.PAPER: LD A,CL0 + BIT 6,E + JR Z,.NOI2 + LD A,CL1 +.NOI2: BIT 3,E ; BLUE + JR Z,.PP_NO4 + LD C,A +.PP_NO4: BIT 4,E ; RED + JR Z,.PP_NO5 + LD L,A +.PP_NO5: BIT 5,E ; GREEN + JR Z,.PP_NO6 + LD B,A +.PP_NO6: LD A,C + AND A + RRA + ADD A,L + RRA + ADD A,B + RRA + LD H,A ; B/W mode + RET +;**************************************** + +GENERATE_IBM: + BIT 7,E + JR Z,.NO_FLH + BIT 1,D + JR Z,.PAPER +.NO_FLH: + BIT 0,D + JR Z,.PAPER +.INK: +.NO_INTENS: + LD A,#A8 +.INTENS: + BIT 0,E ; BLUE + JR Z,.PPI_NO4 + LD C,A +.PPI_NO4: + BIT 2,E ; RED + JR Z,.PPI_NO5 + LD L,A +.PPI_NO5: + BIT 1,E ; GREEN + JR Z,.PPI_NO6 + LD B,A +.PPI_NO6: + LD A,E + AND #0F + CP 6 + JR NZ,.no_correct + LD B,#54 +.no_correct: + BIT 3,E + JR Z,GENERATE_PAL1.PP_NO6 + + LD A,#54 + ADD A,C + LD C,A + LD A,#54 + ADD A,B + LD B,A + LD A,#54 + ADD A,L + LD L,A + JR GENERATE_PAL1.PP_NO6 +.PAPER: + LD A,#A8 + BIT 4,E ; BLUE + JR Z,.PPI_NO4X + LD C,A +.PPI_NO4X: + BIT 6,E ; RED + JR Z,.PPI_NO5X + LD L,A +.PPI_NO5X: + BIT 5,E ; GREEN + JR Z,.PPI_NO6X + LD B,A +.PPI_NO6X: + LD A,E + AND #70 + CP #60 + JR NZ,GENERATE_PAL1.PP_NO6 + LD B,#54 + JR GENERATE_PAL1.PP_NO6 +;**************************************** + +;**************************************** +;**************************************** + +; D - номер графической палитры +SET_GRAPH_PALETTE: + PUSH IX + IN A,(RGADR) + PUSH AF + + IN A,(SLOT3) + EX AF,AF' + LD A,#50 + OUT (SLOT3),A + + + LD IX,#C3E0 + LD A,D + AND 3 + ADD A,A + ADD A,A + LD E,A + LD D,0 + ADD IX,DE + + LD E,0 + + XOR A + LD B,A + LD C,A + LD L,A + LD H,A + +SET_PAL_GR1: + LD A,E + OUT (RGADR),A + + LD (IX),L + LD (IX+1),B + LD (IX+2),C + LD (IX+3),H + + CALL GENERATE_PAL3 + + INC E + LD A,E + CP 40 + JR NZ,SET_PAL_GR1 + + XOR A + LD B,A + LD C,A + LD L,A + LD H,A + +SET_PAL_GR2: + LD A,E + OUT (RGADR),A + + LD (IX),L + LD (IX+1),B + LD (IX+2),C + LD (IX+3),H + + CALL GENERATE_PAL2 + + INC E + JR NZ,SET_PAL_GR2 + + EX AF,AF' + OUT (SLOT3),A + POP AF + OUT (RGADR),A + POP IX + RET +; +;;********************************* +; + +GENERATE_PAL3: ; gray-scale + LD A,B + ADD A,6 + LD B,A + LD C,A + LD L,A + + LD A,C + AND A + RRA + ADD A,L + RRA + ADD A,B + RRA + LD H,A + + RET + +GENERATE_PAL2: ; C - BLUE; L - RED; B - GREEN; H - INTENSITY + LD A,C + ADD A,50 + LD C,A + JR NC,GEN_PAL2_L1 + LD C,0 + LD A,L + ADD A,50 + LD L,A + JR NC,GEN_PAL2_L1 + LD L,0 + LD A,B + ADD A,50 + LD B,A + JR NC,GEN_PAL2_L1 + LD B,0 + +GEN_PAL2_L1: + LD A,C + AND A + RR A + ADD A,L + RR A + ADD A,B + RR A + LD H,A + + RET +; +;************************************ + +FN_SYNC: + BIT 7,a + JR Z,.old_mode + + ld h,a + and #60 ; check reserved bits + jr nz,.error + + bit 2,h ; Set V-Sinc? + jr nz,.set_v_sinc + + bit 4,h ; Set Waits? + jr z,.error ; Error - no parameters + +.set_waits: + ld a,h + and 8 ; check waits. Z - no waits, NZ - waits + ld h,#FF + jr z,1F + ld h,#FB +1: + ld bc,(Port_All_Mode) + in a,(C) + and h + out (C),a + RET + +.set_v_sinc: + ld a,h + and 3 + jr z,.SetDefLines + dec a + jr z,.SetCmosLines + dec a + jr z,.Set320Lines +; jr Set312Lines + +.set312lines: + ld a,Port_VSYNC.SET_312L + out (Port_VSYNC),a + + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + ld a,(SYS_PAGE.VSyncAndWaits) + and 2 + ld (SYS_PAGE.VSyncAndWaits),a + OUT (C),B + +.end_set_v_sinc: + bit 4,h + ret z + jr .set_waits + + +.Set320Lines: + ld a,Port_VSYNC.SET_320L + out (Port_VSYNC),a + + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + ld a,(SYS_PAGE.VSyncAndWaits) + or 1 + ld (SYS_PAGE.VSyncAndWaits),a + OUT (C),B + + jr .end_set_v_sinc + +.SetCmosLines: + LD D,CMOS_CELL.ScreenSET + CALL CMOS_RD + + AND high CMOS_CELL.ScreenSET.Mask.Sinc ; в регистре A значение ScreenSET + jr z,.SetDefLines + + bit 6,a + jr z,.set312lines + + jr .Set320Lines + +.old_mode: + AND A + JR Z,.INT_DEF + DEC A + JR Z,.INT_SCORP + DEC A + JR Z,.INT_PENT + DEC A + JR Z,.INT_ORIG + DEC A + JR Z,.INT_CMOS_SINC + ; [x] кастомный экран по таблице пользователя + DEC A + JR Z,.PROG_SCR + ; +.error: SCF + RET + +.SetDefLines: + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + ld a,(SYS_PAGE.VSyncAndWaits) + OUT (C),B + and 1 + jr z,.set312lines + jr .Set320Lines + +.INT_DEF: + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD DE,(SYS_PAGE.CONFIG_ALL) + OUT (C),B + + CALL Test_CONFIG_ALL + jr nz,.INT_CMOS_SINC + jp (IX) + +.INT_CMOS_SINC: + LD C,SLOT3 + IN B,(C) + LD A,SYS_PAGE + OUT (C),A + LD DE,(SYS_PAGE.CONFIG_ALL) + OUT (C),B + + LD D,CMOS_CELL.ScreenSET + CALL CMOS_RD + + AND high CMOS_CELL.ScreenSET.Mask.Int ; в регистре A значение ScreenSET + JR NZ,.skiptest + + CALL Test_CONFIG_ALL + JP (IX) ; default int (non CMOS) + +.skiptest: + cp #10 + jr z,.INT_SCORP ; scorpion int + + cp #20 + jr z,.INT_PENT ; pentagon int + +; jr ORIG_SINC ; original int + +.INT_ORIG: + LD IX,SCREEN_TABLES.ORIGINAL + JR .PROG_SCR +.INT_SCORP: + LD IX,SCREEN_TABLES.SCORPION + JR .PROG_SCR +.INT_PENT: + LD IX,SCREEN_TABLES.PENTAGON +; JR PROG_SCR +.PROG_SCR: + IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + EX AF,AF' + LD (SYS_PAGE.COPY_SLOT3),A + IN A,(PORT_Y) + LD (SYS_PAGE.COPY_RGADR),A + + LD (SYS_PAGE.CONFIG_ALL),IX + XOR A + +;----[START]-----------------------[? 1] +.loop_1: + OUT (PORT_Y),A + EX AF,AF' + + LD A,#50 + OUT (SLOT3),A + + LD HL,#C300 + +;----[START]------------------[v 2]----- +.loop_2: + LD C,(IX) +;----[START]-------------[v 3]---------- +.loop_3: +; взять адрес данных для записи в служебную область экрана + LD E,(IX+1) ; take adress of line X + LD D,(IX+2) +;----[START]--------[v 4]--------------- +.loop_4: + LD A,(DE) ; take counter in table 1, line X, column Y + INC DE + AND A + JR Z,.loop_4_exit ; exit if zero-counter + LD B,A + LD A,(DE) + INC DE +;----[START]---[v 5]-------------------- +.loop_5: + LD (HL),A + INC L + LD (HL),0 + INC L + LD (HL),0 + + EX AF,AF' + INC A + OUT (PORT_Y),A + EX AF,AF' + + LD (HL),0 + DEC L + LD (HL),0 + DEC L + LD (HL),A + + EX AF,AF' + INC A + OUT (PORT_Y),A + EX AF,AF' + + DJNZ .loop_5 +;--------------[^ 5]-------------------- + JR .loop_4 +;-------------------[^ 4]--------------- +.loop_4_exit: + INC HL ; next line + INC HL + INC HL + INC HL + IN A,(PORT_Y) + AND #80 + OUT (PORT_Y),A + DEC C + JR NZ,.loop_3 +;------------------------[^ 3]---------- + INC IX ; next counter + INC IX + INC IX + LD A,(IX) + AND A + JR NZ,.loop_2 +;-----------------------------[^ 2]----- + LD A,SYS_PAGE + OUT (SLOT3),A + LD IX,(SYS_PAGE.CONFIG_ALL) + + EX AF,AF' + ADD A,#80 + JR NC,.loop_1 +;----------------------------------[^ 1] + + ; Exit + LD A,(SYS_PAGE.COPY_RGADR) + OUT (PORT_Y),A + LD A,(SYS_PAGE.COPY_SLOT3) + OUT (SLOT3),A +.exit: OR A + RET + +;DE - содержимое CONFIG_ALL +Test_CONFIG_ALL: + LD HL,SCREEN_TABLES.SCORPION + AND A + SBC HL,DE + ld IX,FN_SYNC.INT_SCORP + RET Z + + LD HL,SCREEN_TABLES.ORIGINAL + AND A + SBC HL,DE + ld IX,FN_SYNC.INT_ORIG + RET Z + + LD HL,SCREEN_TABLES.PENTAGON + AND A + SBC HL,DE + ld IX,FN_SYNC.INT_PENT + RET Z + and a + RET + + +;--- Screen data table 1: counter1, data1 .. counterX, dataX +SCREEN_TABLES: +; | число | значения | +; | строк | в | +; | /2 | строках | +.SCR: DB 41 , #F8 + DB 3 , #FC + DB 4 , #FC + DB 7 , #FC + DB 9 , #F8 + DB 0 + +;.SCR: DB 41,#F8, 3,#FC, 4,#FC, 7,#FC, 9,#F8, 0 +.INT: DB 40,#FC, 2,#FD, 6,#FC, 7,#FC, 9,#FC, 0 +.INT_SC: DB 41,#F8, 1,#FD, 6,#FC, 7,#FC, 9,#F8, 0 +.BLN: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 +.SNC: DB 41,#FC, 3,#FC, 4,#FC, 7,#FC, 9,#FC, 0 +.RES: DB 41,#F8, 3,#FE, 4,#FE, 7,#FE, 9,#F8, 0 +;--------------------------------------- + +;--- Screen data tables 2: counter1, data address1 .. counterX, data addressX +; +; | кол-во | значения | +; | строк | в | +; | | строке | +.PENTAGON: DB 33 : DW .SCR + DB 1 : DW .INT ; DW .BLN + DB 3 : DW .SNC + DB 1 : DW .BLN + DB 1 : DW .SCR + DB 1 : DW .RES + DB 0 ; end +.SCORPION: DB 31 : DW .SCR + DB 1 : DW .INT_SC + DB 1 : DW .SCR + DB 1 : DW .SNC + DB 3 : DW .SNC + DB 1 : DW .BLN + DB 2 : DW .RES + DB 0 ; end +.ORIGINAL: DB 33 : DW .SCR + DB 1 : DW .SNC + DB 1 : DW .INT + DB 2 : DW .SNC + DB 1 : DW .BLN + DB 1 : DW .SCR + DB 1 : DW .RES + DB 0 ; end +;--------------------------------------- ;************************************ ; diff --git a/src/bios/exp/FUNC_ZX.ASM b/src/bios/exp/FUNC_ZX.ASM new file mode 100644 index 0000000..95c92fd --- /dev/null +++ b/src/bios/exp/FUNC_ZX.ASM @@ -0,0 +1,380 @@ +; +; _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ [___FOR ZX-MODE___] _ZX_ _ZX_ _ZX_ _ZX_ _ZX_ ; + + +; [ ] free zx pages! + IF FREE_ZX_PAGES +;----------------[Выделение/освобождение страниц спектрума]-------------; +;вход: рег B b3..0: +; 0 - инит памяти Pentagon 128 +; 1 - инит памяти Pentagon 512 +; 2 - инит памяти Scorpion 256 +; рег B b7: +; выделить/вернуть рамблок для страниц ZX-ROM размером A стр. +;выход: CF = 0: A - номер рамблока если требовался +; CF = 1: A - номер ошибки +MANAGE_ZX_PAGES: + + +.GET_SCORP: IN A,(SLOT3) + PUSH AF + LD A,SYS_PAGE + OUT (SLOT3),A + ; + LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 + LD DE,SYS_PAGE.SHARED_BUFFER_256b + LD BC,SYS_PAGE.RAMD_FAT.Size + LDIR + DEC H + XOR A + ; Заполнить RAMD_FAT + ; A = 0 +.loop2: DEC L + CP (HL) + JR NZ,.loop2 + ; +.check_barred_pages: + ; проверка на неразрешённые страницы + EX AF,AF' + LD A,L + CP RESET_PAGE + JR C,.good_page + JR NZ,.check_isa_page + DEC L + JR .good_page +.check_isa_page: ; + AND #F0 + XOR #D0 ; страницы ISA #D0..#DF + JR NZ,.good_page + LD L,#D0 - 1 +.good_page: EX AF,AF' + ; + LD (HL),C + LD C,L + DJNZ .loop2 + ; L = указатель цепочки. + ; + POP AF + OUT (SLOT3),A + ; + LD A,L + AND A + RET +;-----------------------------------------------------------------------; + ENDIF + + +;-----------------------------------------------------------------------; +;!TODO задействовать +GOTO_SPEC: IN A,(SLOT3) + EX AF,AF' + LD A,SYS_PAGE + OUT (SLOT3),A + LD A,B + LD (SYS_PAGE.CONFIG_DE+1),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 +;-----------------------------------------------------------------------; + +; +;>$< >$< >$< >$< >$< >$< [ ПЕРЕМЕЩАЕМАЯ В ОЗУ ] >$< >$< >$< >$< >$< >$< ; + +;--------[ Программа, размещаемая с #5B00 для запуска Spectrum ]--------; +RES128_PROG: + DISP ZX_VARS.PRINTER_BUFFER ;#5B00 + LD A,ROM.BIOS + 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) + XOR A + LD (SYS_PAGE.CONFIG_DE+1),A + OUT (C),B + + 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 +;-----------------------------------------------------------------------; + + +;-----------------------------------------------------------------------; +;***************************************** +; +; Инициализация страниц для +; спектрумовского режима и +; восстановление спектрумовского +; экрана +; +; Возврат по 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 + OUT (SLOT1),A + XOR 7 + OUT (SLOT2),A + OR #0F + 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 (RGSCR),A ; регистр экрана + OUT (RGMOD),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) +;-----------------------------------------------------------------------; + + +;---------------------[ ЗАГЛУШКИ ДЛЯ #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,#FF + 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_ ; +; \ No newline at end of file diff --git a/src/bios/logo/Set_Pictures.asm b/src/bios/logo/Set_Pictures.asm index da95671..d7f9aff 100644 --- a/src/bios/logo/Set_Pictures.asm +++ b/src/bios/logo/Set_Pictures.asm @@ -52,8 +52,8 @@ Raster: INCBIN 'Build/Bin/LOGO_DAT.BIN' .length EQU $-Raster +/* IF Pashalki -; !TODO сделать тут табличку-ссылки на нужную таблицу спрайтов и завязать это на даты MACRO _PASHALKI_CODE @@ -106,7 +106,6 @@ NewYear: INCLUDE './src/bios/logo/use/New_Year.inc' ENDIF -/* and a ld b,0 diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/src/bios/rom/ZX/ZX_FUNC.ASM index cb049bd..54d429d 100644 --- a/src/bios/rom/ZX/ZX_FUNC.ASM +++ b/src/bios/rom/ZX/ZX_FUNC.ASM @@ -177,7 +177,7 @@ TASK_SWITCH: LD A,C ; задача LD (IX),A ; установить новую задачу текущей - JP SPECTRUM_TASK ; запустить новую задачу! + JP GOTO_SPEC.START_TASK ; запустить новую задачу! ; ; и пока пофиг распределение памяти! TASK_SET: diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 3836ab1..f6c8f66 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,15 +1,17 @@ ;=======================[All shared EQUs]=======================; -BETA_BUILD EQU 6 ; добавляет строку и сообщение о тестовой сборке на стартовом экране +BETA_BUILD EQU 7 ; добавляет строку и сообщение о тестовой сборке на стартовом экране ;======================[All shared defines]=====================; DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 ; DEFINE IDE_Optimization 1 ; слегка оптимизирует некоторые процедуры работы с HDD DEFINE NeedSafePort_Y 1 ; если 0, то в режиме без акселя некоторые процедуры могут засрать экран - DEFINE Pashalki 0 ; DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' ; DEFINE StandartCGApallete 1 ; Подключать палитру из standart_colors.inc DEFINE BitStream_SizeInPages 4 ; DEFINE USE_E1_SCANCODE 0 ; + DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" + DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY грузится в диск 15, 2 - ищется свободный рамдиск, если нет, то в 15-ый + DEFINE FREE_ZX_PAGES 0 ; 1 - освободить страницы спектрума ;!TODO ;----[ Задержка в кадрах после отрисовки логотипа (0 = 256) ]---; DEFINE LOGO_DELAY_MIN 25 ; DEFINE LOGO_DELAY_NORM 100 ; @@ -18,8 +20,6 @@ BETA_BUILD EQU 6 ; DEFINE TEST_INT 1 ; Тестовый обработчик пользовательского INT DEFINE NEW_FEATURE 0 ; !TODO пункты в сетап DEFINE HDDwriteProtect 0 ; старая фишка для функций 5x - DEFINE RECOVERYmountTYPE 1 ; 1 - быстрый немного захардкоженый вариант. 2 - более "правильный" - DEFINE RECOVERYrdChooseTYPE 1 ; 1 - RECOVERY грузится в диск 15, 2 - ищется свободный рамдиск, если нет, то в 15-ый DEFINE FDD_NormalCount 0 ; !TODO DEFINE UnusedSettingsFeatures 0 ; ;===============================================================; \ No newline at end of file diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 47869141e65f7b55af3d21f30b5e364aeedfa9cd..06a94c77fe6a1e013be05fd1df7de65c0ae64ac5 100755 GIT binary patch delta 8336 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 delta 8226 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 Hvf=*#6nw6_ diff --git a/src/bios/shared/includes.inc b/src/bios/shared/includes.inc index 3773dee..7d3f3a6 100644 --- a/src/bios/shared/includes.inc +++ b/src/bios/shared/includes.inc @@ -1,9 +1,6 @@ ; ;---------[All shared includes]--------- INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines - IF Pashalki - INCLUDE 'Shared_Includes/structures/EasterSprites.inc' - ENDIF INCLUDE 'Shared_Includes/structures/FileSystem.inc' INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros INCLUDE 'src/bios/shared/CompMacro.asm' ; макросы