From 9b9bb846d8b553653a2ed1e681c00796f4849127 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 31 Jul 2024 03:29:05 +1000 Subject: [PATCH] starting vBIOS --- Crazy BIOS/BIOS.asm | 80 +-- Crazy BIOS/BUILD.a80 | 116 +---- Crazy BIOS/Info.txt | 36 +- Crazy BIOS/exp/DCP.ASM | 4 +- Crazy BIOS/exp/EXP.asm | 467 ++---------------- Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm | 4 +- Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM | 2 +- Crazy BIOS/exp/FUNC_SERVICE.asm | 11 +- Crazy BIOS/exp/FUNC_SYS.ASM | 72 +-- Crazy BIOS/loader/bitstream_header.inc | 5 - Crazy BIOS/loader/loader.asm | 169 ------- Crazy BIOS/logo/Projects/MAIN.xcf | Bin 15873 -> 0 bytes Crazy BIOS/logo/Projects/NY_Kokoshnik.PAK | Bin 1933 -> 0 bytes Crazy BIOS/logo/Projects/NY_Kokoshnik.bmp | Bin 3096 -> 0 bytes Crazy BIOS/logo/Projects/NY_mustache.PAK | Bin 1084 -> 0 bytes Crazy BIOS/logo/Projects/NY_mustache.bmp | Bin 1320 -> 0 bytes Crazy BIOS/logo/Projects/test.png | Bin 9161 -> 0 bytes Crazy BIOS/logo/Set_Pictures.asm | 145 ------ Crazy BIOS/logo/psfathers.bmp | Bin 10294 -> 0 bytes Crazy BIOS/logo/use/NY_Kokoshnik.bmp | Bin 3096 -> 0 bytes Crazy BIOS/logo/use/NY_Kokoshnik_DAT.BIN | 1 - Crazy BIOS/logo/use/NY_mustache.bmp | Bin 1320 -> 0 bytes Crazy BIOS/logo/use/NY_mustache_DAT.BIN | 1 - Crazy BIOS/logo/use/New_Year.inc | 16 - Crazy BIOS/logo/use/brick.bmp | Bin 0 -> 10294 bytes Crazy BIOS/logo/use/pfathers.bmp | Bin 0 -> 10296 bytes Crazy BIOS/rom/MEM_MAP.inc | 28 -- Crazy BIOS/rom/ROM.asm | 263 +--------- Crazy BIOS/rom/SETUP/DEHRUST.asm | 242 --------- Crazy BIOS/rom/SETUP/MAIN.asm | 154 +----- Crazy BIOS/rom/SETUP/SETTINGS.asm | 218 -------- Crazy BIOS/rom/SETUP/VIDEO_IO.asm | 80 +-- Crazy BIOS/rom/SETUP/messages.z80 | 75 +-- Crazy BIOS/rom/ZX/ZX_MENU.ASM | 21 +- .../shared/{RECOVERY.IMG => CB_SYS.IMG} | Bin 98304 -> 98304 bytes Crazy BIOS/shared/CompMacro.asm | 2 +- Crazy BIOS/shared/DEFINES.INC | 6 +- Crazy BIOS/shared/VERSION.inc | 10 +- Crazy BIOS/shared/includes.inc | 14 +- Crazy Updater/UPDATER.ASM | 2 +- Crazy Updater/constants/BIOS_EXP.inc | 17 +- Crazy/ACEX_RAM.ASM | 171 +++++-- Crazy/BUILD_BIOS.a80 | 25 + CrazyBlaster.asm | 14 +- Shared_Includes | 2 +- 45 files changed, 327 insertions(+), 2146 deletions(-) delete mode 100644 Crazy BIOS/loader/bitstream_header.inc delete mode 100644 Crazy BIOS/loader/loader.asm delete mode 100644 Crazy BIOS/logo/Projects/MAIN.xcf delete mode 100644 Crazy BIOS/logo/Projects/NY_Kokoshnik.PAK delete mode 100644 Crazy BIOS/logo/Projects/NY_Kokoshnik.bmp delete mode 100644 Crazy BIOS/logo/Projects/NY_mustache.PAK delete mode 100644 Crazy BIOS/logo/Projects/NY_mustache.bmp delete mode 100644 Crazy BIOS/logo/Projects/test.png delete mode 100644 Crazy BIOS/logo/psfathers.bmp delete mode 100644 Crazy BIOS/logo/use/NY_Kokoshnik.bmp delete mode 100644 Crazy BIOS/logo/use/NY_Kokoshnik_DAT.BIN delete mode 100644 Crazy BIOS/logo/use/NY_mustache.bmp delete mode 100644 Crazy BIOS/logo/use/NY_mustache_DAT.BIN delete mode 100644 Crazy BIOS/logo/use/New_Year.inc create mode 100644 Crazy BIOS/logo/use/brick.bmp create mode 100644 Crazy BIOS/logo/use/pfathers.bmp delete mode 100644 Crazy BIOS/rom/SETUP/DEHRUST.asm rename Crazy BIOS/shared/{RECOVERY.IMG => CB_SYS.IMG} (98%) create mode 100644 Crazy/BUILD_BIOS.a80 diff --git a/Crazy BIOS/BIOS.asm b/Crazy BIOS/BIOS.asm index 47a6533..4e3a86f 100644 --- a/Crazy BIOS/BIOS.asm +++ b/Crazy BIOS/BIOS.asm @@ -16,7 +16,7 @@ ;---------------------------------------; ;-----------[Shared Includes]----------- - INCLUDE 'src/bios/shared/includes.inc' ; Includes + INCLUDE 'crazy bios/shared/includes.inc' ; Includes ;--------------------------------------- @@ -30,50 +30,6 @@ ENDLUA - IF PACKED_MAIN -;------------[MAIN prebuild]------------; - LUA PASS1 - -- настраиваем путь до упаковщика - detected_os = Detect_os() - print ("OS detected:", detected_os) - print () - - if detected_os == "Windows" then - pack_prog = "src\\bin\\hrust.exe Build\\Bin\\temp\\MAIN.PAK Build\\Bin\\temp\\MAIN.BIN" - elseif detected_os == "MacOS" then - pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK" - elseif detected_os == "Linux" then - pack_prog = "src/bin/mhmt -hst -zxh Build/Bin/temp/MAIN.BIN Build/Bin/temp/MAIN.PAK" - end - - - -- компиляция для получения сжатого файла MAIN и холостой проход Set_Pictures.asm - if (os.execute("sjasmplus -DPREBUILD=1 -Wall --msg=war --nologo --syntax=w --fullpath --lst=Build/Prebuilds.LST SRC/BIOS/ROM/SETUP/MAIN.ASM")) then - print("--[ MAIN.ASM Prebuild DONE ]--") - if (os.execute(pack_prog)) then - print("--[ Hrusting MAIN.BIN DONE ]--") - print(" ") - else - print("--[ Hrusting MAIN.BIN ERROR!!! ]--") - os.exit(1) - end - else - print("--[ MAIN.ASM Prebuild ERROR!!! ]--") - os.exit(1) - end - ENDLUA -;---------------------------------------; - ENDIF - - IF PACKED_MAIN -;----------[MAIN's referenses]----------; Компиляция для получения адресов меток и процедур - MMU 2 e, 18 ; страница 18 в банку 2 и проверка на границы. - ORG COMPILE_ADDR.MAIN - INCLUDE 'src/bios/ROM/SETUP/MAIN.asm' -;--------------------------------------- - ENDIF - - ; Building page 8 of Sprinter ROM ;-----------------[EXP]----------------- MMU 0 e, 8 ; страница 8 в банку 0 и проверка на границы @@ -81,7 +37,7 @@ DEFINE+ IsInBIOS 1 OUTPUT 'Build/Bin/EXP.BIN' ShowInfo 'EXP block Start', 0 ; !!!!! test - INCLUDE 'src/bios/EXP/EXP.asm' + INCLUDE 'crazy bios/EXP/EXP.asm' ShowInfo 'EXP block End', 0 ; !!!!! test OUTEND ;--------------------------------------- @@ -95,7 +51,7 @@ DEFINE+ IsInBIOS 0 OUTPUT 'Build/Bin/ROM.BIN' ShowInfo 'ROM block Start', 0 ; !!!!! test - INCLUDE 'src/bios/ROM/ROM.asm' + INCLUDE 'crazy bios/ROM/ROM.asm' ShowInfo 'ROM block End', 0 ; !!!!! test OUTEND UNDEFINE IsInBIOS @@ -106,25 +62,25 @@ ; Building page 12 of Sprinter ROM ;------[Loader with bitstream K30]------ - MMU 0 3, 12 ; страницы 12-15 в банки 0-3. - ORG ROM_MAP.LOADER - OUTPUT 'Build/Bin/LOADER_K30.BIN' - Conf_loader K30 - BLOCK #10000-$,#FF - OUTEND + ; MMU 0 3, 12 ; страницы 12-15 в банки 0-3. + ; ORG ROM_MAP.LOADER + ; OUTPUT 'Build/Bin/LOADER_K30.BIN' + ; Conf_loader K30 + ; BLOCK #10000-$,#FF + ; OUTEND ;--------------------------------------- ; Building page 22 of Sprinter ROM ;------[Loader with bitstream K50]------ - MMU 0 3, 22 ; страницы 22-25 в банки 0-3. - ORG ROM_MAP.LOADER - OUTPUT 'Build/Bin/LOADER_K50.BIN' -;!TODO сделать упаковщик битстрима тут на LUA - Conf_loader K50 - BLOCK #10000-$,#FF - OUTEND +; MMU 0 3, 22 ; страницы 22-25 в банки 0-3. +; ORG ROM_MAP.LOADER +; OUTPUT 'Build/Bin/LOADER_K50.BIN' +; ;!TODO сделать упаковщик битстрима тут на LUA +; Conf_loader K50 +; BLOCK #10000-$,#FF +; OUTEND ;--------------------------------------- ; @@ -133,7 +89,7 @@ MMU 1 e, 1 ; страница 1 в банку 1 и проверка на границы. ORG ROM_MAP.LOGO OUTPUT 'Build/Bin/LOGO.BIN' - INCLUDE 'src/bios/logo/Set_Pictures.asm' + INCLUDE 'crazy bios/logo/Set_Pictures.asm' OUTEND ;--------------------------------------- ; @@ -142,7 +98,7 @@ EXPORT BOARD_INFO.type EXPORT BoardID.start EXPORT BoardID.end - EXPORT FN_CRIPT.cnf + ;EXPORT FN_CRIPT.cnf EXPORT ID_SPRINTER.bitstream_ver EXPORT bitstream_ver_hex ;EXPORT ID_Version diff --git a/Crazy BIOS/BUILD.a80 b/Crazy BIOS/BUILD.a80 index 8b12e51..0917a1d 100644 --- a/Crazy BIOS/BUILD.a80 +++ b/Crazy BIOS/BUILD.a80 @@ -1,28 +1,6 @@ -/* -;------------[LUA functions]------------; - includelua 'Shared_Includes/LUA/Functions.lua' -;---------------------------------------; - DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' - - - LUA PASS1 - -- Проверяем BMP, достаём из него параметры, режем на куски - bmp_width, bmp_height, bmp_image_size, bmp_image_offset, bmp_colors = Get_bmp8bit_values (sj.get_define("PICTURE_FILE")) - - if bmp_width ~= 128 then sj.error("Invalid BMP width", bmp_width) end - if bmp_height ~= 72 then sj.error("Invalid BMP height", bmp_height) end - if bmp_colors ~= 256 then sj.error("Invalid BMP number of colors", bmp_colors) end - - if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_PAL.BIN", bmp_image_offset-1024, 1024) then sj.error("Palete save error!") end - if not File_save(sj.get_define("PICTURE_FILE"), "./Build/Bin/LOGO_DAT.BIN", bmp_image_offset, bmp_image_size) then sj.error("Image data save error!") end - - ENDLUA -*/ - INCLUDE 'shared/defines.inc' - - DEFINE IMG_RECOVERY 'src/bios/shared/recovery.img' - ;DEFINE IMG_RECOVERY 'src/bios/shared/recovery_tst.img' + INCLUDE 'shared/defines.inc' + DEFINE IMG_RECOVERY 'crazy bios/shared/cb_sys.img' ; ;[--------------------------------------------------------------------------] MACRO Set_Block text, blk_addr @@ -31,81 +9,29 @@ DISPLAY text, /H, $-.tmp ENDM ;[--------------------------------------------------------------------------] - - DEFINE SP_128_BIN INCBIN 'src/ZX_ROMS/NEW/SP_128.BIN' - DEFINE SP__48_BIN INCBIN 'src/ZX_ROMS/NEW/SP__48.BIN' - DEFINE SP_TRDOS_BIN INCBIN 'src/ZX_ROMS/NEW/SP_TRDOS.BIN' + ORG 0 + DISPLAY '[ Building CB_IMG file ]' + OUTPUT 'Build/CB_BIOS.RAW' ;[--------------------------------------------------------------------------] - MACRO ROM_BUILD bitstream - -;PAGE 0 - INCBIN 'Build/Bin/ROM.BIN' - Set_Block 'ROM free space: ', #4000 -; -;PAGE 1 -; INCBIN 'Build/Bin/LOGO_PAL.BIN' -; INCBIN 'Build/Bin/LOGO_DAT.BIN' - INCBIN 'Build/Bin/LOGO.BIN' - Set_Block 'LOGO free space: ', #8000 ; +;PAGE #46 BIOS + INCBIN 'Build/Bin/EXP.BIN' + Set_Block 'EXP free space: ', #4000 -; -;PAGE 2 ZX Page - #42 - SP_128_BIN - Set_Block 'SP_128 free space: ', #C000 -; -;PAGE 3 ZX Page - #43 - SP__48_BIN - Set_Block 'SP_48 free space: ', #10000 -; -;PAGE 4 ZX Page - #44 - SP_TRDOS_BIN - Set_Block 'SP_TRD free space: ', #14000 -; -;PAGE 5 Recovery image part 1 - INCBIN IMG_RECOVERY,0,#C000 - DISPLAY "ROM Disk recovery part1, pages 5..7: 1x4000..2x0000" -; +;PAGE #47 EXTENSION + INCBIN 'Build/Bin/ROM.BIN' + Set_Block 'ROM free space: ', #8000 +;PAGE #48..#49 Recovery image + INCBIN IMG_RECOVERY,0,#8000 -; -;PAGE 8 - INCBIN 'Build/Bin/EXP.BIN' - ;INCBIN 'Build/CrazyBlaster.raw' - Set_Block 'EXP free space: ', #24000 -; -;PAGE 9-11 (#09, #0A, #0B) Recovery image part 2 - INCBIN IMG_RECOVERY,#C000,#C000 - DISPLAY "ROM Disk recovery part2, pages 9..11: 2x4000..3x0000" + DISPLAY "vROM Disk with Crazy Blaster DSS: 1x4000..2x0000" + Set_Block 'Empty space: ', #10000 - Set_Block 'Empty space: ', #30000 -; -;PAGE 12-15 (#0C, #0D, #0E, #0F) - INCBIN bitstream - Set_Block 'Loader & Bitstream free space: ', #40000 -; - ENDM +;PAGE #4B LOGO + INCBIN 'Build/Bin/LOGO.BIN' + Set_Block 'LOGO free space: ', #14000 ;[--------------------------------------------------------------------------] - - - - -;[--------------------------------------------------------------------------] - ORG 0 - DISPLAY '[ Building ROM for 1K30 ]' - OUTPUT 'Build/_SPRIN.BIN' - ROM_BUILD 'Build/Bin/LOADER_K30.BIN' - OUTEND - DISPLAY '[ Building ROM for 1K30 done ]' - DISPLAY ' ' - - - DISP 0 - DISPLAY '[ Building ROM for 1K50 ]' - OUTPUT 'Build/_SPRIN50.BIN' - ROM_BUILD 'Build/Bin/LOADER_K50.BIN' - OUTEND - DISPLAY '[ Building ROM for 1K50 done ]' - ENT -;[--------------------------------------------------------------------------] -; \ No newline at end of file + OUTEND + DISPLAY '[_____________Building CB_IMG file done!_____________]' +;[--------------------------------------------------------------------------] \ No newline at end of file diff --git a/Crazy BIOS/Info.txt b/Crazy BIOS/Info.txt index 6210e73..ec0a4a5 100644 --- a/Crazy BIOS/Info.txt +++ b/Crazy BIOS/Info.txt @@ -1,10 +1,14 @@ ; замаплен через карту портов на #7C/#3C и #74/#24 CNF_PORT: -.ON EQU #74 +.ON EQU #74 .OFF EQU #24 -; Data: -.TURBO.ON EQU 3 ; данные для включения TURBO +.vBIOS EQU .ON +.vZX_ROM EQU .OFF +; Data: +.BIOS EQU 0 +.EXTENSION EQU 1 .TURBO.OFF EQU 2 ; данные для выключения TURBO +.TURBO.ON EQU 3 ; данные для включения TURBO .CNF_0 EQU #04 ; карта портов 0 .CNF_1 EQU #0C ; карта портов 1 (для режима почти чистого zx spectrum) .CNF_2 EQU #14 ; карта портов 2 @@ -34,7 +38,7 @@ SYS_PORT: .PENT_RESET EQU CNF_PORT.PENT_RESET .SCORP_RESET EQU CNF_PORT.SCORP_RESET .CNF_512 EQU CNF_PORT.CNF_512 -/* + --------------------------------------------------- CNF_PORT висит на 4 внешних портах (#7C/#3C и #74/#24) через карту портов. SYS_PORT гвоздями в конфе на #7C/#C @@ -65,23 +69,23 @@ ____________________________________________________ |_____________|____________|_________|______|______| |E0 | 00 | | 1 | ... | |E1 (+dos_on) | 00 | | 0 | ... | -|E2 | 00 | | 0 | 0 | +|E2 | 00 | | 0 | 0 | |E3 | 00 | | 0 | 1 | -|E4 | 01 | | 1 | ... | +|E4 | 01 | | 1 | ... | LOGO #4B |E5 (+dos_on) | 01 | | 0 | ... | -|E6 | 01 | | 0 | 0 | -|E7 | 01 | | 0 | 1 | -|EB | | 00 | ... | ... | BIOS -|EF | | 01 | ... | ... | EXTENSION +|E6 | 01 | | 0 | 0 | Recovery_1 #48 +|E7 | 01 | | 0 | 1 | Recovery_2 #49 +|EB | | 00 | ... | ... | BIOS #46 +|EF | | 01 | ... | ... | EXTENSION #47 |_____________|____________|_________|______|______| ... - значение роли не играет Стандартные страницы ОЗУ для образов ПЗУ спектрума: Page Name Int.Port Page Name Int.Port - #42 BASIC 128 #E2 | ??? ??? ??? ??? #E6 - #43 BASIC 48 #E3 | ??? ??? ??? ??? #E7 - #44 TR-DOS #E1 | ??? ??? ??? ??? #E5 - #45 BIOS (ZX_EXP) #E0 | ??? ??? ??? ??? #E4 + #42 BASIC 128 #E2 | #48 ??? ??? ??? #E6 + #43 BASIC 48 #E3 | #49 ??? ??? ??? #E7 + #44 TR-DOS #E1 | #4A ??? ??? ??? #E5 + #45 BIOS (ZX_EXP) #E0 | #4B ??? ??? ??? #E4 #46 BIOS (ZX_EXP) #EB #47 BIOS (ZX_EXP2) #EF @@ -111,5 +115,5 @@ bit7..bit3 Так же этот порт даёт прямую нумерацию страниц при установленном bit4. ---------------------------------------------------- - -ROM.SLOT0 \ No newline at end of file +;!TODO +апдейтер должен сам вставлять номер платы и тип битстрима \ No newline at end of file diff --git a/Crazy BIOS/exp/DCP.ASM b/Crazy BIOS/exp/DCP.ASM index ae1c7cd..84675cb 100644 --- a/Crazy BIOS/exp/DCP.ASM +++ b/Crazy BIOS/exp/DCP.ASM @@ -625,7 +625,7 @@ SET_PORTS: OUT (C),A LD A,(SYS_PAGE.CONFIG_DE-#4000) OUT (C),D ; вернуть страницу - OUT (CNF_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A ; CALL DOS_OFF ; @@ -648,7 +648,7 @@ SET_PORTS: CALL DOS_ON ; LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (CNF_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A ; LD C,SLOT2 ; получить страницу IN D,(C) diff --git a/Crazy BIOS/exp/EXP.asm b/Crazy BIOS/exp/EXP.asm index 050ad99..ee840cd 100644 --- a/Crazy BIOS/exp/EXP.asm +++ b/Crazy BIOS/exp/EXP.asm @@ -34,8 +34,8 @@ BOARD_INFO: ;программа для вызова BIOS через RST8 из RAM0 EXP_FNS_2_RET: PUSH AF - LD A,ROM.BIOS - OUT (CNF_PORT.ON),A + LD A,vROM.BIOS + OUT (CNF_PORT.vBIOS),A POP AF JR RST_18_1 ;======================================= @@ -74,44 +74,9 @@ RST_30: ;======================================= BLOCK #38-$,0 ; INTERUPT Point -RST38: IF TEST_INT - ;INT: - PUSH BC - PUSH AF +RST38: EI + RETI - LD C,SLOT3 - IN B,(C) - LD A,SYS_PAGE - OUT (C),A - - LD A,(SYS_PAGE.INT_ID) - CP #AA - JR Z,YESINT - OUT (C),B - JP NOINT -YESINT: PUSH HL - LD HL,(SYS_PAGE.INT_ADRESS) - LD A,H - OR L - LD A,(SYS_PAGE.INT_PAGE) - OUT (C),B - PUSH DE - CALL NZ,EXTINT - POP DE - POP HL -NOINT: POP AF - POP BC - EI - RETI - ELSE - -; PUSH AF -; 1: DEC A -; JR NZ,1B -; POP AF - EI - RETI - ENDIF ;RST10: ; CALL_48 10h ; RET @@ -119,7 +84,6 @@ NOINT: POP AF ;======================================= - IFN TEST_INT _mInfoALIGN #10,0 ; any adress < #C0 with mask %xxxx0000 ; таблица для Sprinter POST-Tester-a @@ -140,13 +104,11 @@ TABLE_X: .vD: DB 10110000b ; "D" .vE: DB 01100010b ; "E" .vF: DB 01100011b ; "F" - ENDIF ;======================================= ; ; ;======================================= - IFN TEST_INT RESTARTS EQU #FFE0 GLOBAL_RESET: DI @@ -162,7 +124,6 @@ GLOBAL_RESET: INC DE DJNZ .compare JP RESTARTS - ENDIF ;======================================= _mInfoBLOCK #66-$,0 NMI_Point: @@ -244,59 +205,7 @@ BoardID: .start: WORD BoardID_start ; BoardID_start .end: WORD BoardID_end ; BoardID_end -; ;======================================= -; BLOCK #100-$,0 - - ;======================================= - IF TEST_INT - _mInfoALIGN #10,0 -; any adress < #C0 with mask %xxxx0000 -; таблица для Sprinter POST-Tester-a -TABLE_X: ; таблица для Sprinter POST-Tester-a -.v0: DB %00101000 ; "0" a -.v1: DB %10111101 ; "1" ___ -.v2: DB %00110010 ; "2" f | g | b -.v3: DB %00110100 ; "3" |___| -.v4: DB %10100101 ; "4" e | | c -.v5: DB %01100100 ; "5" |___| -.v6: DB %01100000 ; "6" d -.v7: DB %00111101 ; "7" -.v8: DB %00100000 ; "8" a - 7 -.v9: DB %00100100 ; "9" b - 6 -.vA: DB %00100001 ; "A" f - 4 -.vB: DB %11100000 ; "B" g - 3 -.vC: DB %01101010 ; "C" e - 2 -.vD: DB %10110000 ; "D" c - 1 -.vE: DB %01100010 ; "E" d - 0 -.vF: DB %01100011 ; "F" - ENDIF -;======================================= -; - -; -;======================================= - IF TEST_INT -RESTARTS EQU #FFE0 -; полный перехват ресета сразу после проливки конфы и CAD. -; закидывается в карту портов, поэтому использовать надо хитро. -GLOBAL_RESET: - DI - IM 1 - LD HL,RESTARTS - LD DE,RESTARTS_PROG - LD B,RESTARTS_PROG.Size -.compare: - LD A,(DE) - CP (HL) - JR NZ,NO_RESTART - INC HL - INC DE - DJNZ .compare - JP RESTARTS - ENDIF -;======================================= -; ; ;-----[перехват RESET не состоялся]----- @@ -331,81 +240,6 @@ NO_RESTART: OUT (C),A ; Z84.SYS.Data JP POST_TEST.START ;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== - IF TEST_INT -;----------------[int]------------------ -EXTINT: OR A - RET Z - - BIT 7,H - JR Z,.L2 - LD C,SLOT2 - BIT 6,H - JR Z,.L1 - LD C,SLOT3 - -.L1: IN B,(C) - PUSH BC - OUT (C),A - CALL .JPHL - POP BC - OUT (C),B - RET - ; проверка на нулевой слот -.L2: BIT 6,H - LD C,SLOT1 - JR NZ,.L1 ; продолжаем если ненулевой слот - - PUSH HL - - LD HL,-.stackDepth - .switchProcedure.size + .patch-2 - ADD HL,SP - PUSH HL - - LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! - ADD HL,SP ; stack - PUSH HL ; адрес программы .readProcedure - - LD DE,.switchProcedure ; перенести программу на стек - EX DE,HL - LD BC,.switchProcedure.size - LDIR - RET - -; процедура, переносимая на стек для вызова прерывания пользователя из SLOT0 -; осторожнее с PUSH, если надо много, то увеличивай .stackDepth -.switchProcedure: - DEC DE - POP HL - LD (HL),E - INC HL - LD (HL),D - - LD C,SLOT0 - IN B,(C) - POP HL - PUSH BC - OUT (C),A - - XOR A - OUT (SYS_PORT.RAM),A - -.patch EQU $+1-.switchProcedure - CALL .JPHL - - DI - - XOR A - OUT (SYS_PORT.ROM),A - - POP BC - OUT (C),B - - RET -.JPHL: JP (HL) -.stackDepth EQU 64 ; расстояние от конца процедуры до вершины стека. -.switchProcedure.size EQU $-.switchProcedure - ENDIF -;--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--==--== ; ==== POST PROCs ================= @@ -784,143 +618,8 @@ set_config: OUT (BorderColor),A CALL EMM.CheckColdInit ; инициализация памяти POP HL ; конфигурация - JR Reset_Handler.start -; ************************************* -; Считаем, что вход в SETUP всегда !!! -; ************************************* - -; LD A,H -; CP #FF -; JR NZ,NO_SETUP_1 -; LD A,L - - -; JR NZ,NO_SETUP_2 - + ;JR Reset_Handler.start ;[---------------------------------------------------------------------] - - MODULE Reset_Handler -start: DI - IN A,(SLOT3) - PUSH AF -;----[перехват soft reset #EE port]----- -Check_EE_Port: LD A,ACEX.RET_PORT - LD B,0 - ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 - ;LD C,BIOS.SET_PORTS - ;CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE - CALL SET_PORTS - ; - LD A,B - AND A - JR Z,Check_Spec_Page - ; - OUT (SLOT3),A ; Set restart page -.After_Hard_Rst: - LD HL,(Spec_Page.RET_addr) ; prog address - LD A,(Spec_Page.page_0) ; PAGE0 - OUT (SLOT0),A - LD A,(Spec_Page.page_1) ; PAGE1 - OUT (SLOT1),A - LD A,(Spec_Page.page_2) ; PAGE2 - OUT (SLOT2),A - LD A,(Spec_Page.Reload_Version) - CP #FF - JR Z,.JPHL ; olg logic - ; new logic -.ver_2: EXX - LD HL,(Spec_Page.Stack_Point) - LD SP,HL - EXX - AND A - LD A,#FF - LD (Spec_Page.Reload_Version),A - LD A,(Spec_Page.page_3) ; PAGE3 - OUT (SLOT3),A - JR Z,.JPHL - PUSH HL - JP EXP_FNS_2_RET -.JPHL: JP (HL) -; -;--[перехват soft/hard reset #41 page]-- -Check_Spec_Page: - LD A,Spec_Page - OUT (SLOT3),A - ; Check for hardreset flag - LD A,(Spec_Page.flag_R) - CP 'R' - JR NZ,No_Reset_handlers - LD A,(Spec_Page.flag_S) - CP 'S' - JR NZ,No_Reset_handlers - LD A,(Spec_Page.flag_T) - CP 'T' - JR NZ,No_Reset_handlers - ; - XOR A - LD (Spec_Page.flag_R),A - JR Check_EE_Port.After_Hard_Rst - ; -;--------------------------------------- -No_Reset_handlers:/* - ; Check ZX ROMS Loaded - LD A,(Spec_Page.flag_Z) - CP 'Z' - JR NZ,.Load_ZXROMS - LD A,(Spec_Page.flag_X) - CP 'X' - JR NZ,.Load_ZXROMS - ; [x] 31/12/23 подстраховка от недоутечки памяти - LD A,R - AND #80 - JR Z,No_Need_To_Load_ZXROMS -.Load_ZXROMS: XOR A - LD R,A - ; - ; Load ZX ROM's -init_rom_address EQU #8200 ;!HARDCODE - ; - LD HL,init_zx_roms - LD DE,init_rom_address - LD BC,init_zx_roms.length - LDIR - ; - CALL init_rom_address - ; - LD HL,#C000 - LD DE,#C001 - LD BC,#3FFF - LD (HL),C - LDIR ; забить FF-ами - ; ставим метку если прогрузили ПЗУ спектрума - DEC DE ; Spec_Page.flag_X - LD A,'X' - LD (DE),A - DEC DE ; Spec_Page.flag_Z - LD A,'Z' - LD (DE),A - ; Заглушка для страницы #41 на всякий пожарный - LD HL,PROG_NO_ROM - LD DE,#C000+Spec_Page.no_zx_rom - LD BC,PROG_NO_ROM.size - LDIR - ; - LD HL,RAM_BIOS_PROG - LD DE,#C000+Spec_Page.to_bios - LD BC,RAM_BIOS_PROG.Length - LDIR - */ -;No_Need_To_Load_ZXROMS: - POP AF - OUT (SLOT3),A -;-------------------------------------------------------------------------------------------------------------------; -;!TODO сделать выбор в Setup, что грузить в vПЗУ при старте. Варианты: -;[ ] 0 - Не грузить ПЗУ спектрума, инитить страницу #41 как в 3.04 -;[ ] 1 - Грузит ПЗУ спектрума из ROM при старте если нет флага ZX -;[ ] 2 - Грузит ПЗУ спектрума из ROM при каждом перезапуске (может быть опасно) -;[ ] 3 - Не грузить ПЗУ спектрума, инитить страницу #41 так, чтоб код в ней подгружал ПЗУ спектрума при обращении -;-------------------------------------------------------------------------------------------------------------------; - ENDMODULE ; ;************************************** ; @@ -979,7 +678,7 @@ PrepareToZX: ; Setup HDD drives for ZX Spectrum mode PORTS_INIT: ; включить TURBO LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (CNF_PORT.ON),A + OUT (CNF_PORT.vBIOS),A ; ; RESET to ISA ; LD BC,PORT_ISA ; LD A,#FF @@ -1068,9 +767,10 @@ PORTS_INIT: LD A,#FF OUT (C),A ; глушим ковокс - XOR A - OUT (CBL.SYS_PORT),A - LD BC,CBL.OUT + ;XOR A + ;OUT (CBL.SYS_PORT),A + ;LD BC,CBL.OUT + LD BC,0 LD A,#80 .CBL_MUTE: OUT (C),A DJNZ .CBL_MUTE @@ -1081,7 +781,7 @@ PORTS_INIT: ; Сброс контроллера дисковода ; Включить доступ к контроллеру диска (третья конфа) LD A,CNF_PORT.CNF_3 + ROM.BIOS - OUT (CNF_PORT.ON),A + OUT (CNF_PORT.vBIOS),A OUT (FDC_93.DrvCTRL),A push hl pop hl @@ -1092,16 +792,16 @@ PORTS_INIT: XOR A OUT (FDC_93.Command),A ; Выключить доступ к контроллеру диска - LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (SYS_PORT.ROM),A + LD A,CNF_PORT.CNF_0 + vROM.BIOS + OUT (CNF_PORT.vBIOS),A ; set HDD1/not-HDD2 LD A,IDE.Chanel.Primary OUT (IDE.Chanel.Set),A LD BC,#7FFD - LD A,#10 + XOR A OUT (C),A ; BASIC_48 mode LD B,#1F - LD A,01 + LD A,2 OUT (C),A ; RAM-0 mode !!! ; очистка буферов клавиатуры и мыши в SIO CALL .clean_kbd_buf @@ -1132,7 +832,7 @@ PORTS_INIT: INCLUDE 'FUNC_SERVICE.asm' INCLUDE 'FLEX.asm' - ; INCLUDE 'EXP_SCR.ASZ' + ; INCLUDE 'EXP_SCR.ASZ' INCLUDE 'FUNC_PIC.ASM' INCLUDE 'FUNC_RAM_ROM_DRV.ASM' INCLUDE 'FUNC_SYS.ASM' @@ -1166,88 +866,6 @@ 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) @@ -1322,8 +940,8 @@ BASIC_128: ;--------[ Программа, размещаемая с #5B00 для запуска Spectrum ]--------; RES128_PROG: DISP ZX_VARS.PRINTER_BUFFER ;#5B00 - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A ; Возврат в 128k ROM + LD A,vROM.BIOS + OUT (CNF_PORT.vZX_ROM),A ; Возврат в 128k ROM LD C,SLOT3 IN B,(C) LD A,SYS_PAGE @@ -1339,7 +957,7 @@ RES128_PROG: OUT (C),A ; 128 порт LD A,E ; установка конфигурации и режима TURBO - OUT (SYS_PORT.RAM),A ; CONFIG_SET + OUT (CNF_PORT.vZX_ROM),A ; CONFIG_SET INC D DEC D @@ -1402,46 +1020,31 @@ RESTARTS_PROG: ; !TODO LDConf ;----------------------------[Setup Starter]----------------------------; MODULE Setup_Starter -; программа, размещаемая по адресу 0C000h +; программа, размещаемая по адресу #C000 ; для запуска Setup Start: DISP COMPILE_ADDR.SETUP_STARTER Exec: - LD A,CNF_PORT.CNF_0 + ROM.EXTENSION - OUT (SYS_PORT.ROM),A + LD A,CNF_PORT.CNF_0 + vROM.EXTENSION + OUT (CNF_PORT.vBIOS),A LD HL,ROM_MAP.SETUP LD DE,MEM_MAP.SETUP LD BC,BLOCK_Setup.Length LDIR - LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (SYS_PORT.ROM),A + LD A,CNF_PORT.CNF_0 + vROM.BIOS + OUT (CNF_PORT.vBIOS),A -;-----------[Check SPACE] - LD A,#FE ; !HARDCODE - LD BC,Port_All_Mode ; keyboard int & acc off - OUT (C),A - LD A,high ZXKeys.Line_7 - IN A,(ZXKeys) - CPL - AND 1 -; в регистре A передаётся нажата ли клавиша SPACE. -; потом проверяется в main.asm [space_check] -; и если нажата, то происходит игнор параметра -; "Быстрый старт ПЗУ" во время перезагрузки - EX AF,AF' LD A,#FF ; !HARDCODE + LD BC,Port_All_Mode OUT (C),A ; keyboard int & acc on, zx_screen & original waits off (for conf >= 3.05) - - EX AF,AF' ;----------------------[] DI POP HL ; адрес возврата в EXP из SETUP LD SP,#8000 ;!HARDCODE PUSH HL - PUSH AF JP SETUP_MAIN ENT Length EQU $-Setup_Starter.Start @@ -1453,8 +1056,8 @@ Length EQU $-Setup_Starter.Start 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 + LD A,vROM.BIOS + OUT (CNF_PORT.vBIOS),A POP AF RET ENT @@ -1565,8 +1168,8 @@ JP_HL_48: ;!FIXIT assert with ROM PUSH HL SW_ROM: ;!FIXIT assert with ROM PUSH AF - LD A,ROM.BIOS ;!FIXIT неправильное название константы - OUT (SYS_PORT.RAM),A + LD A,vROM.BIOS + OUT (CNF_PORT.vZX_ROM),A POP AF RET ;*************************************** @@ -1772,8 +1375,8 @@ ROM_DISK.Pages: ; ; Для вызова функций биоса из страницы 0 ПЗУ (Extension) RET_to_EXTENSION: PUSH AF - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A + LD A,vROM.EXTENSION + OUT (CNF_PORT.vBIOS),A POP AF RST ToBIOS_18 JP RET_to_EXTENSION @@ -1800,8 +1403,8 @@ RET_to_EXTENSION: _mInfoBLOCK #3FE8-$,#FF EXP_HDD: PUSH AF - LD A,ROM.EXTENSION - OUT (SYS_PORT.ROM),A + LD A,vROM.EXTENSION + OUT (CNF_PORT.vBIOS),A POP AF RET ;--------------------------------------- @@ -1822,8 +1425,8 @@ EXP_HDD: ; Точка входа/выхода для TR-DOS EXP_FNS_RET: PUSH AF - LD A,ROM.BIOS - OUT (SYS_PORT.RAM),A ; Точка входа/выхода из/в TR-DOS при вызове функций BIOS #80..#FF + LD A,vROM.BIOS + OUT (CNF_PORT.vZX_ROM),A ; Точка входа/выхода из/в TR-DOS при вызове функций BIOS #80..#FF JP EXP_FNS ;--------------------------------------- ; diff --git a/Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm b/Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm index 18d7f02..559ed97 100644 --- a/Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm +++ b/Crazy BIOS/exp/EXTENDED/FDD_DRIVER_2.asm @@ -594,14 +594,14 @@ WR_SEC: LD D,5 ;RETRY COUNT SET_DOS_ON: EX AF,AF' LD A,CNF_PORT.CNF_3 + ROM.BIOS - OUT (CNF_PORT.ROM),A ; - OPEN + OUT (CNF_PORT.vBIOS),A ; - OPEN EX AF,AF' RET ; Врубает нулевую карту портов SET_DOS_OFF: EX AF,AF' LD A,CNF_PORT.CNF_0 + ROM.BIOS - OUT (CNF_PORT.ROM),A ; - CLOSE + OUT (CNF_PORT.vBIOS),A ; - CLOSE EX AF,AF' RET diff --git a/Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM b/Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM index 3a1c3c7..efc2f48 100644 --- a/Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM +++ b/Crazy BIOS/exp/FUNC_RAM_ROM_DRV.ASM @@ -802,7 +802,7 @@ ROM_DISK: LD B,A XOR A OUT (ROM.SLOT0),A - OUT (CNF_PORT.ON),A + OUT (CNF_PORT.vBIOS),A LD A,B JP .readNext .stackDepth EQU 8 ; расстояние от конца процедуры до вершины стека. diff --git a/Crazy BIOS/exp/FUNC_SERVICE.asm b/Crazy BIOS/exp/FUNC_SERVICE.asm index f2e108e..15fe3c2 100644 --- a/Crazy BIOS/exp/FUNC_SERVICE.asm +++ b/Crazy BIOS/exp/FUNC_SERVICE.asm @@ -78,7 +78,7 @@ RST_CONF: LD C,SLOT3 IN B,(C) OUT (C),A ; PAGE с прошивкой - LD DE,(#C090) ; PLD-ID + LD DE,(#C090) ; PLD-ID OUT (C),B ; RET page ;--[] ;JR INT_PLD .INT_PLD: ; only for old FLEX10K soft compatible @@ -95,7 +95,8 @@ RST_CONF: JR Z,.YES_CBL XOR A .YES_CBL: - LD BC,CBL.SYS_PORT + ;LD BC,CBL.SYS_PORT + LD BC,0 OUT (C),A LD A,E ; config-byte @@ -141,7 +142,7 @@ RST_CONF: DI ; устанавливаем нулевую карту портов LD A,CNF_PORT.CNF_0 - OUT (CNF_PORT.ON),A + OUT (CNF_PORT.vBIOS),A ; и так понятно что делает IN A,(SLOT3) ; сохраняем номер воткнутой страницы PUSH AF @@ -223,7 +224,7 @@ RST_CONF: DI ; устанавливаем нулевую карту портов LD A,CNF_PORT.CNF_0 - OUT (CNF_PORT.ON),A + OUT (CNF_PORT.vBIOS),A ; и так понятно что делает IN A,(SLOT3) ; сохраняем номер воткнутой страницы PUSH AF @@ -418,7 +419,7 @@ REINIT: DEC B LD A,RESET_PAGE OUT (SLOT3),A LD A,CNF_PORT.TURBO.OFF - OUT (SYS_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A .loop2: LD (#C000),A ; Soft RESET !!! JR .loop2 ; diff --git a/Crazy BIOS/exp/FUNC_SYS.ASM b/Crazy BIOS/exp/FUNC_SYS.ASM index 0b27e9f..a733581 100644 --- a/Crazy BIOS/exp/FUNC_SYS.ASM +++ b/Crazy BIOS/exp/FUNC_SYS.ASM @@ -58,7 +58,7 @@ FN_VERSION: ;----------------------------------------------------------------------; ; [x] 28/01/24 добавлена подфункция выдачи инфы про Acex FN_CRIPT: - DJNZ .Acex_ver + DJNZ .error ; ; BoardID_start old address #312A ; BoardID_end old address #312D @@ -73,74 +73,6 @@ FN_CRIPT: .error: LD A,BIOS.Error.InvalidSubFunction SCF RET - ; -.Acex_ver: - DJNZ .error - PUSH HL - LD A,R - DI - PUSH AF - ; - LD HL,-.stackDepth - .readProcedure.size ; memory stack use! - ADD HL,SP - PUSH HL ; адрес программы .readProcedure - LD DE,.readProcedure ; перенести программу на стек - EX DE,HL - LD BC,.readProcedure.size - LDIR ; программа на стеке - LD A,+(12 xor %0000'1000) ; !HARDCODE bitstream page in rom - RET -.return:; - POP AF - JP PO,.no_EI - EI -.no_EI: CALL .choose_chip - POP DE - LD BC,.chip_ID_TXT.RecordSize - LDIR -.cnf+1: LD DE,bitstream_ver_hex - AND A - RET - ; -.choose_chip: - XOR A - LD HL, - ACEX.Chip_ID.K30 - ADC HL,DE - LD HL,.chip_ID_TXT.K30 - RET Z - OR A ; снять CF - INC A - LD HL, - ACEX.Chip_ID.K50 - ADC HL,DE - LD HL,.chip_ID_TXT.K50 - RET Z - POP HL ; баланс стека -.error_unknownChip: - SCF - POP HL - LD A,BIOS.Error.UnknownDevice - RET - ; -; процедура, переносимая на стек для чтения Acex ID -; осторожнее с PUSH, если надо много, то увеличивай .stackDepth -.readProcedure: - OUT (ROM.SLOT0),A ; ROM_PAGE - LD DE,(#100 + 3) ; !HARDCODE здесь читается Acex ID - XOR A - OUT (ROM.SLOT0),A - OUT (SYS_PORT.ROM),A - JP .return -.stackDepth EQU 2 ; расстояние от конца процедуры до вершины стека. -.readProcedure.size EQU $-.readProcedure - ; -.chip_ID_TXT: -.chip_ID_TXT.K30: DZ "K30" -.chip_ID_TXT.RecordSize EQU $-.chip_ID_TXT -.chip_ID_TXT.K50 DZ "K50" -;.chip_ID_TXT.K100 DZ "K100" -.chip_ID_TXT.Size EQU $-.chip_ID_TXT -;----------------------------------------------------------------------; - ;----------------------------------------------------------------------; ;EMM_FN7 EMM.CheckColdInit: @@ -349,7 +281,7 @@ FN_TURBO: LD (SYS_PAGE.CONFIG_DE),A AND 3 ; - OUT (CNF_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A LD A,B OUT (SLOT3),A AND A diff --git a/Crazy BIOS/loader/bitstream_header.inc b/Crazy BIOS/loader/bitstream_header.inc deleted file mode 100644 index 6093006..0000000 --- a/Crazy BIOS/loader/bitstream_header.inc +++ /dev/null @@ -1,5 +0,0 @@ -; Header of bitstream which non packed - DB #FF,#FF,#62,#7B,#39,#00;,#FF,#FF ; 1k30 -; Packed: - ;DB #FF,#FF,#62,#7B,#3C,#00;,#01,#FF ; 1k50 -; \ No newline at end of file diff --git a/Crazy BIOS/loader/loader.asm b/Crazy BIOS/loader/loader.asm deleted file mode 100644 index 21158c3..0000000 --- a/Crazy BIOS/loader/loader.asm +++ /dev/null @@ -1,169 +0,0 @@ -; -;**********************************; -; ACEX Loading program ; -;**********************************; - MACRO Conf_loader altera_chip -.START: DI - LD BC,#FF*256 + Z84.SYS.Control - XOR A ; Z84.REG.WaitState_Ctrl - register - waits - OUT (C),A ; Z84.SYS.Control - INC C ; LD BC,#FFEF - LD A,4 ; Memory waits set to 1 - OUT (C),A ; Z84.SYS.Data - - DEC C ; Z84.SYS.Control - DEC A ; LD A,3 - 3-nd register - boundaries - OUT (C),A ; Z84.REG.Misc_Ctrl - INC C ; cs0 enable, cs1 enable, 32-Bit CRC disable, reset output enable, Clock Divide-by-two - OUT (C),A ; Z84.SYS.Data - - DEC C ; Z84.SYS.Control - DEC A ; LD A,2 - Z84.REG..CS_Boundary 2-nd register - boundaries - OUT (C),A ; Z84.SYS.Data - INC C - LD A,#FE ; boundaries FFFF..F000 - CS1 - OUT (C),A ; EFFF..0000 - CS0 - - JR .LOOP_S1 -;************************************** - BLOCK #38-$,#FF - JP 0 -;************************************** - -.LOOP_S1: - LD HL,#FEF0 ; !HARDCODE - LD DE,.STRING -.LOOP_S: - LD A,(DE) - CP (HL) - JR NZ,.NO_CNF_RAM - INC E - INC L - JR NZ,.LOOP_S ; !!!!! привязка к адресу в HL - -; !TODO убрать вейты для кэша? - LD BC,#FF*256 + Z84.SYS.Control - LD A,Z84.REG.CS_Boundary - OUT (C),A ; 0 register - waits - INC C - LD A,#F0 - OUT (C),A ; boundaries FFFF..1000 - CS1 -; ; 0FFF..0000 - CS0 - LD HL,#1000 ; !!!!! Load bitstream from Fast-RAM - - JR .NEW_SHM - -;************************************** - BLOCK #66-$,#FF - JP 0 -;************************************** - -.NO_CNF_RAM: - LD HL,#0100 ; !!!!! Load bitstream from ROM -.NEW_SHM: -;--------------[conf check]------------- - LD A,H ; сохраняем старший адрес начала конфы, -; начало конфы должно быть с младшим адресом = 0 - EXX - LD L,0 - LD H,A - EX AF,AF' - - ; в HL адрес первого байта конфы - LD DE,.Conf_header - LD B,.Conf_header.length -.conf_header_loop: - LD A,(DE) - CP (HL) - JR NZ,.Conf_Packed - INC DE - INC L - DJNZ .conf_header_loop - - ;XOR A - JR .exit_conf_check -.Conf_Packed: - SCF -.exit_conf_check: - EX AF,AF' - EXX -;--------------------------------------- - - LD DE,#FE00 ;!HARDCODE ; !!!!! Check flag "don't erase fast-ram bitstream" - "IM" - LD A,(#FEE0) - CP "I" - JR NZ,.ONES_CONFIG - LD A,(#FEE1) - CP "M" - JR NZ,.ONES_CONFIG - - DEC D ; multiple config! - -.ONES_CONFIG: - LD IY,SP2000_Loader_Flag - ;LD IX,#FFFD - LD IX,ACEX.Config_ID.Sp2000 - -.LOOP1: - LD A,(HL) - - ex af,AF' - ld b,1 - jr nc,.no_packed_loop - ex af,AF' - - LD B,A ; save byte to B to check later if we worked with zero - OR A - JR NZ,.LOOP1A - INC HL - LD C,(HL) ; set counter - jr .LOOP1A -.no_packed_loop: - ex af,AF' -.LOOP1A: -;---[Sending bits to Altera]---[v] - DUP 7 - LD (DE),A - RRCA - EDUP - LD (DE),A -;------------------------------[^] - INC E - - LD A,B ; was it zero? - OR A - JR NZ,.LOOP1E -; it was zero so we need to decrement counter - DEC C - JR NZ,.LOOP1A -; end of the counter reached -.LOOP1E: - INC HL - JR .LOOP1 - -.STRING: DB ACEX.RELOAD_STRING - -.Conf_header: include 'src/bios/Loader/bitstream_header.inc' -.Conf_header.length EQU $-.Conf_header - -;----------------------; - BLOCK #FE-$,#FF -; Это, скорее всего, рудимент, тот самый байт описателя конфы, -; который ищет загрузчик для Sp97 по старому адресу #C090. -; Воткнул его в конце загрузчика, может потом пригодится. -.DEF_SYM: DW ACEX.Config_ID.Sp2000 -;------------------------------[Loader end] - - DEFINE Altera_Chip altera_chip - LUA - local file_path = 'Build/ACEX/' - local file_ext = '.BIN' - local altera_ver = sj.get_define("Altera_Chip") - sj.insert_define("Altera_File", '"' .. file_path .. altera_ver .. file_ext .. '"') - ENDLUA - UNDEFINE Altera_Chip - - INCBIN Altera_File - UNDEFINE Altera_File - ENDM -; diff --git a/Crazy BIOS/logo/Projects/MAIN.xcf b/Crazy BIOS/logo/Projects/MAIN.xcf deleted file mode 100644 index 853b628c4270595f1cce59084b4be023d5cad02c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15873 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 T!Mnh$Tqx2M*qovP+d}~0LZ<#N diff --git a/Crazy BIOS/logo/Projects/NY_Kokoshnik.bmp b/Crazy BIOS/logo/Projects/NY_Kokoshnik.bmp deleted file mode 100644 index 0c5589ec7c332073a9738927bf19fbbafc130159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 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 C#3}j! diff --git a/Crazy BIOS/logo/Projects/NY_mustache.bmp b/Crazy BIOS/logo/Projects/NY_mustache.bmp deleted file mode 100644 index e423e276e664301d5e3f730de074f3d258726331..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1320 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 MLnEWp___W60UJ4EQ~&?~ diff --git a/Crazy BIOS/logo/use/NY_Kokoshnik.bmp b/Crazy BIOS/logo/use/NY_Kokoshnik.bmp deleted file mode 100644 index 0c5589ec7c332073a9738927bf19fbbafc130159..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3096 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 diff --git a/Crazy BIOS/logo/use/NY_mustache_DAT.BIN b/Crazy BIOS/logo/use/NY_mustache_DAT.BIN deleted file mode 100644 index 35eb991..0000000 --- a/Crazy BIOS/logo/use/NY_mustache_DAT.BIN +++ /dev/null @@ -1 +0,0 @@ -            ■■■■■¤√■■■■■■■■■■∙ъ┘┼       ┘∙■      ■■■■■■■■■■■■■■■■■■■■√ъ┘    ъ■■■ўёъъъў■■■■■■■■■■■■■√ёёёЁў√ ■ў┼  ┘■ё┘┼■■■■■■┼┘ў■■√ъў■■√ъ┘■■■■■■■┘ъ■ё ┘ў┘■■■      ■■■┼┼■■■╖┼■■■       ■■┼∙┘ж┼■            ■■   ■■            ■┼┼ \ No newline at end of file diff --git a/Crazy BIOS/logo/use/New_Year.inc b/Crazy BIOS/logo/use/New_Year.inc deleted file mode 100644 index 5489409..0000000 --- a/Crazy BIOS/logo/use/New_Year.inc +++ /dev/null @@ -1,16 +0,0 @@ - MODULE _mNewYear - - LUA PASS1 - make_pic_files ("./src/bios/logo/use/NY_Kokoshnik", 0, 1) - make_pic_files ("./src/bios/logo/use/NY_mustache", 0, 1) - print() - ENDLUA - - BYTE 2 ; количество спрайтов - EasterTable 48, 42, 13, 2, sprite1 - EasterTable 37, 6, 69, 26, sprite2 -sprite1: INCBIN './src/bios/logo/use/NY_Kokoshnik_DAT.bin' -sprite2: INCBIN './src/bios/logo/use/NY_mustache_DAT.bin' - - ENDMODULE -; \ No newline at end of file diff --git a/Crazy BIOS/logo/use/brick.bmp b/Crazy BIOS/logo/use/brick.bmp new file mode 100644 index 0000000000000000000000000000000000000000..a923a179e35f829f2ff2d06c5a7d6ee624a5e807 GIT binary patch literal 10294 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 NEW_FEATURE - "HddWrPr", -- 7 DEFINES.INC --> HDDwriteProtect -- 8 -- 9 -- 10 @@ -71,14 +69,10 @@ -- 17 } } - DeleteValueByDEFINE(SettingsTabsOrder,"NEW_FEATURE","SetTime") - DeleteValueByDEFINE(SettingsTabsOrder,"HDDwriteProtect","HddWrPr") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","MemTest") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","UpdBios") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypRate") DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","TypDelay") - -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") - -- DeleteValueByDEFINE(SettingsTabsOrder,"UnusedSettingsFeatures","") ENDLUA ; @@ -130,26 +124,6 @@ ;----------------------------[Settings items table]----------------------------[v] ; - IF NEW_FEATURE -; New structure for procedure with IY reg - STRUCT MenusItem -Action WORD -Type BYTE -Column BYTE -Line BYTE -Name BYTE -CMOSreg BYTE -ValueMask BYTE -ValueMax BYTE -FirstString BYTE - ENDS - -paramLine EQU 0 -folderLine EQU 1 - - ENDIF -; - firstColumn EQU 03 ; смещение по X для первого столбца secondColumn EQU 43 ; смещение по X для второго столбца firstLine EQU 07 ; смещение по Y для первой строки @@ -158,7 +132,6 @@ SettingsItemsTabs: _mSETitemParams Lang DW OnChangeAction.setLang ; действие при изменении - IF NEW_FEATURE : DB paramLine : ENDIF ; тип параметра (строка со значением или каталог) DB columnNum,lineNum ; столбец, строка DB paramName ; Название параметра DW CMOS_CELL.BootUpParams.Mask.Language : DB %0000'0100 ; CMOS : MASK @@ -169,7 +142,6 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams MemTest DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.MemTest : DB %1000'0000 @@ -179,7 +151,6 @@ SettingsItemsTabs: _mSETitemParams SaveRAMdrvs DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.SaveRAMdisks : DB %0100'0000 @@ -189,7 +160,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams UpdBios DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.UpdBios : DB %0010'0000 @@ -199,7 +170,6 @@ SettingsItemsTabs: _mSETitemParams StartDelay DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000 @@ -210,7 +180,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams TypRate DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum DB paramName DW CMOS_CELL.Typematic.Mask.Rate : DB %0000'0111 @@ -227,7 +197,7 @@ SettingsItemsTabs: IF UnusedSettingsFeatures ; !TODO _mSETitemParams TypDelay DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum DB paramName DW CMOS_CELL.Typematic.Mask.Delay : DB %0110'0000 @@ -239,7 +209,6 @@ SettingsItemsTabs: _mSETitemParams RebootMsg DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Options.Mask.RebootMSG : DB %0000'0010 @@ -248,7 +217,6 @@ SettingsItemsTabs: _mSETitemParams SysDsk DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootDrives.Mask.SysDisk : DB %0000'0111 @@ -263,7 +231,6 @@ SettingsItemsTabs: _mSETitemParams AltSysDsk DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootDrives.Mask.AltSysDisk : DB %0111'0000 @@ -278,7 +245,6 @@ SettingsItemsTabs: _mSETitemParams FddFirst DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.FirstFDD : DB %0000'0000 @@ -289,7 +255,6 @@ SettingsItemsTabs: _mSETitemParams FddSecond DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.SecondFDD : DB %0000'0000 @@ -300,7 +265,6 @@ SettingsItemsTabs: _mSETitemParams PriIdeMA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEmaster : DB %0011'0000 @@ -311,7 +275,6 @@ SettingsItemsTabs: _mSETitemParams PriIdeSl DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_1.Mask.PriIDEslave : DB %1100'0000 @@ -322,7 +285,6 @@ SettingsItemsTabs: _mSETitemParams SecIdeMA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEmaster : DB %0011'0000 @@ -333,7 +295,6 @@ SettingsItemsTabs: _mSETitemParams SecIdeSl DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.DrivesSetup_2.Mask.SecIDEslave : DB %1100'0000 @@ -345,7 +306,7 @@ SettingsItemsTabs: IF HDDwriteProtect _mSETitemParams HddWrPr DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF + DB columnNum,lineNum DB paramName DW CMOS_CELL.Options.Mask.HDDwriteProtect : DB %0000'0001 @@ -355,7 +316,6 @@ SettingsItemsTabs: _mSETitemParams ScreenY DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenPosition.Mask.X : DB %1110'0000 @@ -377,7 +337,6 @@ SettingsItemsTabs: _mSETitemParams ScreenX DW OnChangeAction.setXYpos - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenPosition.Mask.Y : DB %0000'1110 @@ -399,7 +358,6 @@ SettingsItemsTabs: _mSETitemParams FrameInt DW OnChangeAction.setInt - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenSET.Mask.Int : DB %0011'0000 @@ -410,7 +368,6 @@ SettingsItemsTabs: _mSETitemParams VSync DW OnChangeAction.setVsinc - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.ScreenSET.Mask.Sinc : DB %1000'0000 @@ -420,7 +377,6 @@ SettingsItemsTabs: _mSETitemParams QuickStartROM DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.BootUpParams.Mask.QuickStartROM : DB %0000'0001 @@ -429,7 +385,6 @@ SettingsItemsTabs: _mSETitemParams TrDosA DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.A : DB %0000'0010 @@ -439,7 +394,6 @@ SettingsItemsTabs: _mSETitemParams TrDosB DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.B : DB %0000'1000 @@ -449,7 +403,6 @@ SettingsItemsTabs: _mSETitemParams TrDosC DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.C : DB %0010'0000 @@ -459,7 +412,6 @@ SettingsItemsTabs: _mSETitemParams TrDosD DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.TRDOSmount.Mask.D : DB %1000'0000 @@ -469,23 +421,12 @@ SettingsItemsTabs: _mSETitemParams LoadZXroms DW OnChangeAction.nothing - IF NEW_FEATURE : DB paramLine : ENDIF DB columnNum,lineNum DB paramName DW CMOS_CELL.Options.Mask.LoadZXroms : DB %0000'1000 DB msgStrings.valLoadZXromsManually DB msgStrings.valLoadZXromsFlag DB msgStrings.valLoadZXromsCAD - - IF NEW_FEATURE - _mSETitemParams SetTime - DW OnChangeAction.SetTime - DB folderLine - DB columnNum,lineNum - DB paramName - DB #00,%0000'0000,%0000'0000 - DB msgStrings.valFolder - ENDIF ;--------------------[Items Addresses table]--------------------[] SettingsItemsTabsAddrs: _mCreateSettingsItemsTabsAddrs @@ -666,10 +607,6 @@ msgStrings: _mSetStr valLoadZXromsFlag, tmp_Counter : DZ 'By ZX flag' _mSetStr valLoadZXromsCAD, tmp_Counter : DZ 'On restart' ; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'On call ' - IF NEW_FEATURE - _mSetStr parSetTime, tmp_Counter : DZ 'Date and time setup : ' - _mSetStr valFolder, tmp_Counter : DB 16,'ENTER',17,0 - ENDIF IF BETA_BUILD > 0 _mSetStr testBIOSmsg, tmp_Counter : DZ 'Test build! ',BUILD_DATE,', ',__TIME__ ENDIF @@ -824,10 +761,6 @@ msgRusStrings: _mSetStrRus valLoadZXromsFlag, tmp_Counter : DZ 'По флагу ZX ' _mSetStrRus valLoadZXromsCAD, tmp_Counter : DZ 'При рестарте' ; _mSetStrRus valLoadZXromsAuto, tmp_Counter : DZ 'При вызове ' - IF NEW_FEATURE - _mSetStrRus parSetTime, tmp_Counter : DZ 'Дата и время : ' - _mSetStrRus valFolder, tmp_Counter : DB 16,'ВВОД',17,0 - ENDIF IF BETA_BUILD > 0 _mSetStrRus testBIOSmsg, tmp_Counter : DZ 'Тестовая сборка! ',BUILD_DATE,', ',__TIME__ ENDIF diff --git a/Crazy BIOS/rom/ZX/ZX_MENU.ASM b/Crazy BIOS/rom/ZX/ZX_MENU.ASM index 1b781ec..c87ee1b 100644 --- a/Crazy BIOS/rom/ZX/ZX_MENU.ASM +++ b/Crazy BIOS/rom/ZX/ZX_MENU.ASM @@ -140,7 +140,7 @@ MN_128_S: ;************************************** MENU_128: XOR A - OUT (SYS_PORT.RAM),A + OUT (CNF_PORT.vZX_ROM),A CALL ZX_VARS.PROG.SWAP_ROM CALL NEW_SP @@ -166,8 +166,8 @@ SH_4: LD HL,MENU_DAT - MENU_128 EX AF,AF' ;LD A,0 ;OUT (CNF_PORT),A - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A ;!!!!! версия для ПЗУ + LD A,vROM.EXTENSION + OUT (CNF_PORT.vBIOS),A ;!!!!! версия для ПЗУ EX AF,AF' RET MENU_DAT: @@ -311,7 +311,7 @@ DOS_PROG: //DOS_PROG: .Exec: PUSH AF XOR A - OUT (SYS_PORT.RAM),A + OUT (CNF_PORT.vZX_ROM),A POP AF //DOS_PROG_A+1: .Patch+2: CALL #3D03 ;!HARDCODE @@ -319,8 +319,8 @@ DOS_PROG: ;!FIXIT сделать через условие компиляции ZX_ROM_BIOS //LD A,0 //OUT (CNF_PORT),A - LD A,SYS_PORT.EXTENSION - OUT (SYS_PORT.ROM),A ;!!!!! версия для ПЗУ + LD A,vROM.EXTENSION + OUT (CNF_PORT.vBIOS),A ;!!!!! версия для ПЗУ POP AF RET //DOS_PROG_LEN @@ -601,7 +601,7 @@ CONFIG_SET: POP DE LD A,E - OUT (SYS_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A IM 1 EI @@ -615,7 +615,7 @@ SPRINTER_reset: _SET_CNF: DI LD A,CNF_PORT.CNF_0 + CNF_PORT.TURBO.ON - OUT (SYS_PORT.ROM),A + OUT (CNF_PORT.vBIOS),A RET CNF_SC_312: @@ -628,11 +628,6 @@ CNF_PN_320: OUT (Port_VSYNC),A RET -; LD A,CNF_0 -; OUT (SYS_PORT.ROM),A -; CALL DOS_OFF -; JP 0 - ;***************************** ; *** MENU UTILITES *** ;***************************** diff --git a/Crazy BIOS/shared/RECOVERY.IMG b/Crazy BIOS/shared/CB_SYS.IMG similarity index 98% rename from Crazy BIOS/shared/RECOVERY.IMG rename to Crazy BIOS/shared/CB_SYS.IMG index 47869141e65f7b55af3d21f30b5e364aeedfa9cd..fde1ead441e80cde8fe4e2041a97e8f399ba4317 100755 GIT binary patch delta 248 zcmZo@U~6b#+rZ2*`6GugQv(~2s$=`l&j19Q=WwJjGCrNm$R$6yflG{=m+fCf3PUAO z=ILZdE_t9#B8c4F$h9A&%#jBy1ST87_@oqkj!5(_95w5&kF6aWT=mKu&0`8~+llwPmZeDaD GZan~68%}os delta 338 zcmX}mu}Z^07zgnCa(A&tQxFkRk)()-6)hqn4r0>QN-4!5iaI5sX`v`qD1w_;U%=s3 zhv?`aN*}=V2?`E^lko}68=Pkb|HF^(5C7p~Ol3@c!I>K&1ohAeL!%)Yi;$iOai>n0 zFqw!c52hK+gfJJud<+Isa*0^56wy(Zn6exyE0MAqD+PqtO}t^@O%HD|yd7dO#5*zG zMZ`8q$s&6m*=M90l3GOSF*!g~6sTj-Baa@>CgL=tVo1dgb&=|uYD0dIrhlIa0E!$m zBj;AiRi|c}Mf=c1|G8cKJPA- 0 - DEFINE BETA_str_ver "BETA ","0"+BETA_BUILD + DEFINE BETA_str_ver "Crazy Beta ","0"+BETA_BUILD ENDIF ;--------------------------------------- - DEFINE BoardID_start #5283 - DEFINE BoardID_end #47E8 + DEFINE BoardID_start 0 ;#5283 + DEFINE BoardID_end 0 ;#47E8 DEFINE MotherBoardID #0000 DEFINE MotherBoardType #00 ; !TODO 0 - Legacy, 1 - DX, 2 - Max ;======================================= @@ -29,8 +29,8 @@ Disk_subsystem_ver_hex EQU ROM_ID.VER*256+ROM_ID.MOD ;============[For CNF part]============= CNF_ID: -.VER EQU 3 ; Номер версии менять тут! -.MOD EQU 05 ; Номер версии менять тут! +.VER EQU 0 ;3 ; Номер версии менять тут! +.MOD EQU 00 ;05 ; Номер версии менять тут! bitstream_ver_hex EQU CNF_ID.VER*256+CNF_ID.MOD DEFINE bitstream_ver_string '0'+CNF_ID.VER, '.', '0'+CNF_ID.MOD/10, '0'+CNF_ID.MOD-(CNF_ID.MOD/10)*10 diff --git a/Crazy BIOS/shared/includes.inc b/Crazy BIOS/shared/includes.inc index 3773dee..17b83bf 100644 --- a/Crazy BIOS/shared/includes.inc +++ b/Crazy BIOS/shared/includes.inc @@ -1,19 +1,15 @@ ; ;---------[All shared includes]--------- - INCLUDE 'src/bios/shared/DEFINES.INC' ; Shared defines - IF Pashalki - INCLUDE 'Shared_Includes/structures/EasterSprites.inc' - ENDIF + INCLUDE 'crazy bios/shared/DEFINES.INC' ; Shared defines INCLUDE 'Shared_Includes/structures/FileSystem.inc' - INCLUDE 'src/bios/Loader/Loader.asm' ; Bitstream loader as macros - INCLUDE 'src/bios/shared/CompMacro.asm' ; макросы + INCLUDE 'crazy bios/shared/CompMacro.asm' ; макросы INCLUDE 'Shared_Includes/constants/SP2000.inc' ; константы INCLUDE 'Shared_Includes/constants/zx_char_codes.inc' ; константы INCLUDE 'Shared_Includes/constants/zx_vars.inc' ; INCLUDE 'Shared_Includes/macroses/macros.z80' - INCLUDE 'src/bios/ROM/MEM_MAP.inc' ; карта памяти - INCLUDE 'src/bios/shared/VERSION.inc' ; Версия EXP и ROM + INCLUDE 'crazy bios/ROM/MEM_MAP.inc' ; карта памяти + INCLUDE 'crazy bios/shared/VERSION.inc' ; Версия EXP и ROM INCLUDE 'Shared_Includes/constants/BIOS_EQU.inc' - INCLUDE 'src/bios/ROM/BIOS.inc' + INCLUDE 'crazy bios/ROM/BIOS.inc' ;--------------------------------------- ; diff --git a/Crazy Updater/UPDATER.ASM b/Crazy Updater/UPDATER.ASM index cef8c65..766174b 100644 --- a/Crazy Updater/UPDATER.ASM +++ b/Crazy Updater/UPDATER.ASM @@ -107,7 +107,7 @@ program_start EQU Flasher_Start MODULE expBIOS_Vars - INCLUDE 'constants/BIOS_EXP.INC' + INCLUDE '../Flasher/constants/BIOS_EXP.INC' ENDMODULE INCLUDE 'Versions.inc' diff --git a/Crazy Updater/constants/BIOS_EXP.inc b/Crazy Updater/constants/BIOS_EXP.inc index d0ff179..df5bc29 100644 --- a/Crazy Updater/constants/BIOS_EXP.inc +++ b/Crazy Updater/constants/BIOS_EXP.inc @@ -1,14 +1,13 @@ BOARD_INFO.number: EQU 0x00000003 BOARD_INFO.type: EQU 0x00000005 -BoardID.start: EQU 0x0000008F -BoardID.end: EQU 0x00000091 -FN_CRIPT.cnf: EQU 0x000019EA -ID_SPRINTER.bitstream_ver: EQU 0x00000089 -bitstream_ver_hex: EQU 0x00000305 +BoardID.start: EQU 0x00000095 +BoardID.end: EQU 0x00000097 +ID_SPRINTER.bitstream_ver: EQU 0x0000008F +bitstream_ver_hex: EQU 0x00000000 EXP_ID.VER: EQU 0x00000003 EXP_ID.MOD: EQU 0x00000006 -CNF_ID.VER: EQU 0x00000003 -CNF_ID.MOD: EQU 0x00000005 -msgStrings.str_ACEX_MODEL: EQU 0x000024DD -msgRusStrings.str_ACEX_MODEL: EQU 0x00002EED +CNF_ID.VER: EQU 0x00000000 +CNF_ID.MOD: EQU 0x00000000 +msgStrings.str_ACEX_MODEL: EQU 0x0000244B +msgRusStrings.str_ACEX_MODEL: EQU 0x00002E5B BETA_BUILD: EQU 0x00000006 diff --git a/Crazy/ACEX_RAM.ASM b/Crazy/ACEX_RAM.ASM index 97b5273..e81bf36 100644 --- a/Crazy/ACEX_RAM.ASM +++ b/Crazy/ACEX_RAM.ASM @@ -14,7 +14,7 @@ LD A,1 ; enable CS0, disable CS1 OUT (C),A ; Z84.SYS.Data ;███████ инициализация DCP ████████████████████████████████████; - LD HL,INIT_SLOTS + LD HL,ADD_PORTS.Code DCP_INIT: LD C,XL LD B,XH LD E,YL @@ -102,11 +102,30 @@ DCP_INIT: LD C,XL LD H,A ; добавить изменяемую часть JR .loop_parse .return: JP (IX) + ;███████ Добавление портов #4000..#4004 ███████████████████████; +ADD_PORTS: ; внутренние порты эмулятора ПЗУ мапятся на внешние +.Data: DB #EB ; внешний #4000 + DB #EF ; внешний #4001 + DB #E6 ; внешний #4002 + DB #E7 ; внешний #4003 + DB #E4 ; внешний #4004 +.Data.Size EQU $ - .Data + ; +.Code: LD HL,ADD_PORTS.Data + LD DE,#C480 + LD BC,ADD_PORTS.Data.Size + LDIR ;███████ Инициализация страниц ████████████████████████████████; -INIT_SLOTS: XOR A +INIT_SLOTS: LD BC,#1FFD + LD A,1 + OUT (C),A + LD B,#7F + OUT (C),A + ; + XOR A OUT (SLOT0),A OUT (SLOT1),A - DEC A + LD A,2 OUT (SLOT2),A LD A,SYS_PAGE OUT (SLOT3),A @@ -125,9 +144,20 @@ INIT_SLOTS: XOR A OUT (SYS_PORT.RAM),A INC A OUT (SLOT1),A + ; IN A,(FastRAM.OFF) ; ТУТ МЫ УЖЕ В ОЗУ В ТОМ ЖЕ КОДЕ И АДРЕСЕ ; страницы 0,1,2,#FE + ;███████ Инициализация страниц vROM ███████████████████████████; +vROM_MAP: LD BC,#4000 + LD HL,RESERVED_PAGES.BIOS + LD A,RESERVED_PAGES.Size +.loop: LD E,(HL) + OUT (C),E + INC C + INC HL + DEC A + JR NZ,.loop ;██████████████████████████████████████████████████████████████; ;███████ Рабочий код ██████████████████████████████████████████; ;██████████████████████████████████████████████████████████████; @@ -141,35 +171,44 @@ INIT_SLOTS: XOR A CALL Init_Mem ;██████ Загрузка ██████████████████████████████████████████████; ; дополнительные функции -LOAD_FNs: LD A,(RESERVED_PAGES.SYS_FN) ; страница буфера, если адрес в окне #C000 (BLOCK_ID) - LD B,sys_fn_in_sectors ; число читаемых секторов - LD HL,bufer_adr ; адрес буфера данных - LD IX,sec_high ; абсолютный номер сектора старшая часть - LD DE,sec_low ; абсолютный номер сектора младшая часть +CHECK_IMG: ;LD A,(RESERVED_PAGES.SYS_FN) ; страница буфера, если адрес в окне #C000 (BLOCK_ID) + LD B,1 ; число читаемых секторов + LD HL,#8000 ; адрес буфера данных + LD IX,0 ; абсолютный номер сектора старшая часть + LD DE,0 ; абсолютный номер сектора младшая часть PUSH HL CALL FN_HDD_READ - ; Образ BIOS -LOAD_DATA: LD B,4 - LD IY,RESERVED_PAGES.BIOS POP HL - CALL .LOADER - ; Картинка и Апдейтер - LD B,2 - CALL .LOADER - JP BEGIN_CB_IMG -.LOADER: ; загрузка по 128 секторов -.loop: PUSH HL - PUSH BC - LD A,(IY) - LD B,128 + ;██████ ██████████████████████████████████████████████; + LD DE,CHECKING_LABEL + LD B,CHECKING_LABEL.Size +.loop: LD A,(DE) + CP (HL) + RET NZ ; error + INC DE + INC HL + DJNZ .loop + ; Образ BIOS +LOAD_DATA: LD A,(RESERVED_PAGES.BIOS) + LD HL,#C000 + LD B,RESERVED_PAGES.Size * #4000 / 512 LD DE,1 CALL FN_HDD_READ_NEXT - LD BC,4 - ADD IY,BC - POP BC - POP HL - DJNZ .loop - RET + XOR A + OUT (SLOT1),A + JP .IN_RAM + #4000 + ; кусок в 1 слоте +.IN_RAM: LD BC,#1FFD + XOR A + OUT (C),A + ; + XOR A ;CNF_PORT.BIOS + OUT (CNF_PORT.vBIOS),A + LD A,#40 + OUT (SLOT3),A + ; + RST 0 + ;JP BEGIN_CB_IMG ;██████████████████████████████████████████████████████████████; @@ -469,6 +508,22 @@ ERROR: ; XOR 1 JR .big_loop ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; + + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; +RESERVED_PAGES: ; Образ БИОСа для рестарта + +.BIOS: DB #46 ; BIOS Acex port: #EB + DB #47 ; EXTENSION Acex port: #EF + DB #48 ; Recovery_1 Acex port: #E6 + DB #49 ; Recovery_2 Acex port: #E7 + DB #4B ; LOGO Acex port: #E4 +.Size EQU $-RESERVED_PAGES.BIOS + DB #FF ; End of the block +.Blocks EQU 1 + +CHECKING_LABEL: SET_IMG_LABEL +.Size EQU $ - CHECKING_LABEL + ;░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░; END_CB EQU $ ;██████████████████████████████████████████████████████████████████████; @@ -675,19 +730,51 @@ DCP_DATA: DW %00'000'0'0100'0000 ; DCP END MARKER DW 0,0,0 ;-----------------------------------------------------------------------; -RESERVED_PAGES:; [x] Block #1 - можно освободить по ID 1 - ; Дополнительные процедуры -.SYS_FN: DB SYS_FN_PAGE - ; Образ БИОСа для прошивки -.BIOS: DB #10,#11,#12,#13 - DB #14,#15,#16,#17 - DB #18,#19,#1A,#1B - DB #1C,#1D,#1E,#1F - ; Картинка -.PICTURE: DB 2,3,4,5,6 - ; Образ памяти с прошивальщиком -.FLASHER_RAM: DB 7,8 - DB #FF ; End of the block -.Blocks EQU 1 -.Size EQU $-RESERVED_PAGES +; RESERVED_PAGES:; [x] Block #1 - можно освободить по ID 1 +; ; Дополнительные процедуры +; .SYS_FN: DB SYS_FN_PAGE +; ; Образ БИОСа для прошивки +; .BIOS: DB #10,#11,#12,#13 +; DB #14,#15,#16,#17 +; DB #18,#19,#1A,#1B +; DB #1C,#1D,#1E,#1F +; ; Картинка +; .PICTURE: DB 2,3,4,5,6 +; ; Образ памяти с прошивальщиком +; .FLASHER_RAM: DB 7,8 +; DB #FF ; End of the block +; .Blocks EQU 1 +; .Size EQU $-RESERVED_PAGES +;-----------------------------------------------------------------------; +; ;██████ Загрузка ██████████████████████████████████████████████; +; ; дополнительные функции +; LOAD_FNs: LD A,(RESERVED_PAGES.SYS_FN) ; страница буфера, если адрес в окне #C000 (BLOCK_ID) +; LD B,sys_fn_in_sectors ; число читаемых секторов +; LD HL,bufer_adr ; адрес буфера данных +; LD IX,sec_high ; абсолютный номер сектора старшая часть +; LD DE,sec_low ; абсолютный номер сектора младшая часть +; PUSH HL +; CALL FN_HDD_READ +; ; Образ BIOS +; LOAD_DATA: LD B,4 +; LD IY,RESERVED_PAGES.BIOS +; POP HL +; CALL .LOADER +; ; Картинка и Апдейтер +; LD B,2 +; CALL .LOADER +; JP BEGIN_CB_IMG +; .LOADER: ; загрузка по 128 секторов +; .loop: PUSH HL +; PUSH BC +; LD A,(IY) +; LD B,128 +; LD DE,1 +; CALL FN_HDD_READ_NEXT +; LD BC,4 +; ADD IY,BC +; POP BC +; POP HL +; DJNZ .loop +; RET ;-----------------------------------------------------------------------; \ No newline at end of file diff --git a/Crazy/BUILD_BIOS.a80 b/Crazy/BUILD_BIOS.a80 new file mode 100644 index 0000000..4149097 --- /dev/null +++ b/Crazy/BUILD_BIOS.a80 @@ -0,0 +1,25 @@ + +;[--------------------------------------------------------------------------] + MACRO Set_Block text, blk_addr +.tmp equ $ + BLOCK blk_addr-.tmp,#FF + DISPLAY text, /H, $-.tmp + ENDM +;[--------------------------------------------------------------------------] + ORG 0 + DISPLAY '[ Building ROM for 1K30 ]' + OUTPUT 'Build/_SPRIN.BIN' +;PAGE 0 + Set_Block 'ROM free space: ', #20000 + +;PAGE 8 + INCBIN 'Build/CrazyBlaster.raw' + Set_Block 'EXP free space: ', #30000 + +;PAGE 12-15 (#0C, #0D, #0E, #0F) + INCBIN '../SP_Core/Build/Bin/LOADER_K30.BIN' + Set_Block 'Loader & Bitstream free space: ', #40000 +;[--------------------------------------------------------------------------] + DISPLAY '[ Building ROM for 1K30 done ]' +;[--------------------------------------------------------------------------] +;'Build/Bin/LOADER_K30.BIN' \ No newline at end of file diff --git a/CrazyBlaster.asm b/CrazyBlaster.asm index b6f42f3..110742c 100644 --- a/CrazyBlaster.asm +++ b/CrazyBlaster.asm @@ -17,6 +17,10 @@ DEFINE image_size_in_sectors flasher_size_in_sectors + bios_size_in_sectros DEFINE TYPE_OF_ACEX 3 ; 3 - 1K30, 5 - 1K50 + MACRO SET_IMG_LABEL +.Crazy_IMG_Label: DB "Crazy Blaster Image" + ENDM + ;██████████████████████████████████████████████████████████████████████; ;█████████████████████[ FIRST SECTION - CONF ROM ]█████████████████████; ;██████████████████████████████████████████████████████████████████████; @@ -35,10 +39,14 @@ END_FIRST_SECTION EQU $ ;██████████████████[ SECOND SECTION - IMAGE ON DRIVE ]█████████████████; ;██████████████████████████████████████████████████████████████████████; ;OUTPUT './Build/CrazyBlasterIMG.raw' - OUTPUT './Build/CB_BIOS_IMG.raw' - ORG #0000 + OUTPUT './Build/CB_BIOS_IMG.IMG' + ORG #0000 + SET_IMG_LABEL + BLOCK 512 - $,#FF +; ;BEGIN_CB_IMG: INCLUDE 'Crazy/IMG_PART.ASM' -BEGIN_CB_IMG: INCLUDE 'Crazy/IMG_PART.ASM' +BEGIN_CB_IMG: INCBIN 'Build/CB_BIOS.RAW' + END_SECOND_SECTION EQU $ ; DISPLAY "IMG size = ",/A,END_SECOND_SECTION - BEGIN_CB_IMG diff --git a/Shared_Includes b/Shared_Includes index 4662474..d357c4c 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 4662474034c70f4b2627ff8eca10ccdf4a7d3525 +Subproject commit d357c4cc2a8af41e47136c245161e11355612a96