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 4786914..06a94c7 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ 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' ; макросы