From 72e8008dd09c93f1e761cc162688ed18c9c3b4af Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Fri, 26 Jan 2024 00:46:35 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/bios/exp/EXP.asm | 80 ++++++------ src/bios/exp/FLEX.asm | 11 -- src/bios/exp/FUNC_4x.ASM | 2 +- src/bios/exp/FUNC_SERVICE.asm | 179 ++++++++++++++------------- src/bios/exp/FUNC_SYS.ASM | 34 +++-- src/bios/loader/bitstream_header.inc | 4 +- src/bios/rom/SETUP/MAIN.asm | 2 +- src/bios/rom/ZX/ZX_FUNC.ASM | 8 +- src/bios/rom/ZX/ZX_MENU.ASM | 4 +- src/bios/shared/DEFINES.INC | 2 +- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 12 files changed, 172 insertions(+), 156 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index a6dee8e..e7e58e7 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit a6dee8e17ae12b251f306290793a56a6b0dd5ae3 +Subproject commit e7e58e7b816a25137a0a253321164e863bbe782e diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 7780629..bf44da9 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -212,17 +212,20 @@ NMI_Point: ; BLOCK MEM_MAP.ID_Version-$,0 ;#C0-$,0 ID_Version: dw bitstream_ver_hex ; Version of bitstream hex - ID_SPRINTER_length: - DB ID_SPRINTER.LENGTH - -ID_SPRINTER: - DB 'Hardware v' -.bitstream_ver: - DB bitstream_ver_string,0 - DB 'Sprinter',0 - DB 0 -.LENGTH EQU $-ID_SPRINTER + DB ID_SPRINTER.LENGTH +ID_SPRINTER: ; запись 1 + DB 'Hardware v' +.bitstream_ver: DB bitstream_ver_string,0 + ; запись 2 + DB 'Sprinter',0 + ; запись 3 - два байта для версии чипа Altera + ;DW #FFFF - подставляется в функции FN_VERSION + ; конец + DB 0 + ; +.Records_Num EQU 3 +.LENGTH EQU $-ID_SPRINTER ; Check for max length of string ASSERT ID_SPRINTER.LENGTH < #20, 'ERROR! ID String is to long!' @@ -350,11 +353,11 @@ EXTINT: OR A ADD HL,SP PUSH HL - LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! - ADD HL,SP ; stack - PUSH HL ; адрес программы .readProcedure + LD HL,-.stackDepth - .switchProcedure.size ; memory stack use! + ADD HL,SP ; stack + PUSH HL ; адрес программы .readProcedure - LD DE,.switchProcedure ; перенести программу на стек + LD DE,.switchProcedure ; перенести программу на стек EX DE,HL LD BC,.switchProcedure.size LDIR @@ -814,13 +817,10 @@ Check_EE_Port: OUT (SLOT1),A LD A,(Spec_Page.page_2) ; PAGE2 OUT (SLOT2),A - LD A,(Spec_Page.page_3) ; PAGE3 - OUT (SLOT3),A LD A,(Spec_Page.Reload_Version) CP #FF - JR NZ,.ver_2 - JP (HL) - ; + JR Z,.JPHL ; olg logic + ; new logic .ver_2: EXX LD HL,(Spec_Page.Stack_Point) LD SP,HL @@ -828,11 +828,12 @@ Check_EE_Port: AND A LD A,#FF LD (Spec_Page.Reload_Version),A - JR NZ,ver_2_sys_port_on + LD A,(Spec_Page.page_3) ; PAGE3 + OUT (SLOT3),A + JR Z,.JPHL PUSH HL JP EXP_FNS_2_RET -ver_2_sys_port_on: - JP (HL) +.JPHL: JP (HL) ; ;--[перехват soft/hard reset #41 page]-- Check_Spec_Page: @@ -1277,7 +1278,7 @@ ZX_SPECTRUM_MODE: ; LD D,#35 ; CALL CMOS_RD - ; BIT 0,A ; !!!!! + ; BIT 0,A ; !!!!! ; PUSH AF ; CALL Z,SPRINTER_1 @@ -1335,17 +1336,19 @@ RES128_PROG: INC D DEC D - JP Z,0 ; 0 ВХОД В BASIC-128 + ; 0 ВХОД В BASIC-128 + JP Z,0 + ; 1 ВХОД В BASIC-48 LD A,#10 OUT (C),A DEC D - JP Z,0 ; 1 ВХОД В BASIC-48 - + JP Z,0 + ; 2 ВХОД В TR-DOS LD HL,0 PUSH HL DEC D - JP Z,#3D29 ; 2 ВХОД В TR-DOS - + JP Z,#3D29 + ; 3 ВХОД В EXPANSION ;!TODO пока не работает XOR A OUT (C),A @@ -1353,17 +1356,22 @@ RES128_PROG: LD B,#1F OUT (C),A DEC D - JP Z,0 ; 3 ВХОД В EXPANSION ??? + 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 - JP Z,#3D29 ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами - JP 0 ; 5 ВХОД В BASIC-48 с закрытыми 128-ми портами + ; 4 ВХОД В TR-DOS с закрытыми 128-ми портами + JP Z,#3D29 + ; 5 ВХОД В BASIC-48 с закрытыми 128-ми портами + JP 0 ENT LEN_RES128 EQU $-RES128_PROG ;-----------------------------------------------------------------------; @@ -1602,11 +1610,11 @@ DOS_OFF: DI PUSH AF PUSH BC - LD BC,(#5BFF) ; !HARDCODE + LD BC,(#5BFF) ; !HARDCODE LD A,#C9 ; Opcode RET - LD (#5BFF),A ; !HARDCODE - CALL #5BFF ; !HARDCODE - LD (#5BFF),BC ; !HARDCODE + LD (#5BFF),A ; !HARDCODE + CALL #5BFF ; !HARDCODE + LD (#5BFF),BC ; !HARDCODE POP BC POP AF JP PO,.no_EI diff --git a/src/bios/exp/FLEX.asm b/src/bios/exp/FLEX.asm index fe193b2..43eeed8 100644 --- a/src/bios/exp/FLEX.asm +++ b/src/bios/exp/FLEX.asm @@ -778,16 +778,5 @@ SCREEN_TABLES: DB 1 : DW .SCR DB 1 : DW .RES DB 0 ; end - -; ;!TEST -;.L_ORIGINAL: DB 32 : DW L_SCR -; DB 4 : DW L_SNC -; DB 1 : DW L_INT -; DB 1 : DW L_SNC -; DB 1 : DW L_BLN -; DB 1 : DW L_SCR -; DB 2 : DW L_RES -; DB 0 ; end - ;--------------------------------------- FLEX_END: diff --git a/src/bios/exp/FUNC_4x.ASM b/src/bios/exp/FUNC_4x.ASM index 5292651..5ff86af 100644 --- a/src/bios/exp/FUNC_4x.ASM +++ b/src/bios/exp/FUNC_4x.ASM @@ -441,7 +441,7 @@ FN_HDD_INIT: LD BC,IDE.Write.DeviceHead LD A,IDE.Drive.Master OUT (C),A - CALL TEST_HDD_DRV + CALL TEST_HDD_DRV JR NZ,.ABSENT ; .L3: WAIT_HDD diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index 03d72f0..afe091e 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -59,6 +59,7 @@ RST_CONF: ;--[] +;[x] .SP2000: LD BC,Port_All_Mode IN A,(C) @@ -135,17 +136,42 @@ RST_CONF: ; устанавливаем нулевую карту портов LD A,CNF_PORT.CNF_0 OUT (SYS_PORT.ON),A + ; и так понятно что делает + IN A,(SLOT3) ; сохраняем номер воткнутой страницы + PUSH AF + LD A,Spec_Page + OUT (SLOT3),A + ; проверяем размер блока с конфой и получаем страницы конфы + LD HL,Spec_Page.bitstream_pages + LD A,B + AND A + JR Z,.INIT_ACEX.ReloadConfFromROM + ; + CALL EMM.GetMemBlkPages + LD A,B + JR C,.INIT_ACEX.ERROR + CP BitStream_SizeInPages+1 ; количество страниц в кэш для бистрима плюс одна + JR NC,.INIT_ACEX.ERROR + LD A,(Spec_Page.bitstream_pages) + INC A + JR Z,.INIT_ACEX.ERROR + ; +.INIT_ACEX.ReloadConfFromROM: + ; закидываем в Spec_Page прогу для заливки конфы + LD HL,.INIT_ACEX.PROGRAM + LD DE,Spec_Page.init_acex + LD BC,.INIT_ACEX.PROGRAM.Size + LDIR + ; если ZF=0, то процедура сделает ресет с перезаливкой из BIOS, иначе из КЭШ + CALL Spec_Page.init_acex ; сохраняем воткнутые страницы в Spec_Page IN A,(SLOT0) LD E,A IN A,(SLOT1) LD D,A IN A,(SLOT2) + POP HL ; восстанавливаем номер воткнутой страницы LD L,A - IN A,(SLOT3) - LD H,A - LD A,Spec_Page - OUT (SLOT3),A LD (Spec_Page.page_0),DE LD (Spec_Page.page_2),HL ; достаём адрес возврата в вызывающую функцию и сохраняем в Spec_Page @@ -163,107 +189,53 @@ RST_CONF: LD HL,0 ADD HL,SP LD (Spec_Page.Stack_Point),HL - ; проверяем размер блока с конфой и получаем страницы конфы - ;PUSH BC - LD HL,Spec_Page.bitstream_pages - LD A,B - CALL EMM.GetMemBlkPages - LD A,B - ;POP BC - ;LD B,A - JR C,.INIT_ACEX.ERROR - CP 4+1 ;!HARDCODE количество страниц в кэш для бистрима плюс одна - JR NC,.INIT_ACEX.ERROR - ;PUSH BC - ; закидываем в Spec_Page прогу для заливки конфы - LD HL,.INIT_ACEX.PROGRAM - LD DE,Spec_Page.init_acex - LD BC,.INIT_ACEX.PROGRAM.Size - LDIR + ; Устанавливаем ключи + LD HL,Spec_Page.flag_R + LD (HL),"R" + INC HL + LD (HL),"S" + INC HL + LD (HL),"T" ; - ;POP BC - ; B = size of ram block in pages - CALL Spec_Page.init_acex - ; - ; .. ... ... .. - ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. + ; .. ... ... .. + ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. ; *. Вход в подфункцию только через RST 08 или #18 ; *. Сохранить все страницы пользователя в SYS_PAGE для перехвата ресета ; *. Достать со стека адрес возврата и сохранить в SYS_PAGE для перехвата ресета ; *. Сохранить куда-нибудь значение стека ; * - ; .. ... ... .. - LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT - JP_to_BIOS - + ; .. ... ... .. + LD BC,256*BIOS.REINIT.HARD_RESET + BIOS.REINIT + JP_to_BIOS + ; .INIT_ACEX.ERROR: - POP BC - LD A,(Spec_Page.page_2) - OUT (SLOT2),A - LD A,(Spec_Page.page_3) + POP AF OUT (SLOT3),A SCF RET ; .INIT_ACEX.PROGRAM: - DISPLAY " !!! !!! .INIT_ACEX.PROGRAM !!! !!!" - DISP Spec_Page.init_acex + DISPLAY " !!! !!! .INIT_ACEX.PROGRAM !!! !!!" + DISP Spec_Page.init_acex + ; + SAFE_PORTY IN A,(FastRAM.ON) - EXX + IN A,(SLOT1) + LD (.slot1_page),A ; - LD A,(Spec_Page.bitstream_pages) - OUT (SLOT1),A ; страница с данными файла - ; - XOR A - OUT (FastRAM.SLOT0),A ; Страница КЭШ = 0 - ; - LD HL,#5000 ; перекидывание данных в страницу КЭШ = 0 - LD DE,#1000 - LD BC,#3000 - LDIR - ; - LD A,(Spec_Page.bitstream_pages+1) - CP #FF - JR Z,.INIT_ACEX.PROGRAM.SET_KEYS - OUT (SLOT1),A ; следующая страница с данными файла - LD A,1 - OUT (FastRAM.SLOT0),A ; Страница КЭШ = 1 - ; - LD H,D ; LD HL,#4000 - LD D,E ; LD DE,#0000 - LD B,H ; LD BC,#4000 - LDIR - ; - LD A,(Spec_Page.bitstream_pages+2) - CP #FF - JR Z,.INIT_ACEX.PROGRAM.SET_KEYS - OUT (SLOT1),A ; следующая страница с данными файла - LD A,2 - OUT (FastRAM.SLOT0),A ; Страница КЭШ = 2 ; следующая страница с данными файла - ; - EX DE,HL ; LD HL,#4000 - LD D,E ; LD DE,#0000 - LD B,H ; LD BC,#4000 - LDIR - ; - LD A,(Spec_Page.bitstream_pages+3) - CP #FF - JR Z,.INIT_ACEX.PROGRAM.SET_KEYS - OUT (SLOT1),A ; следующая страница с данными файла - LD A,3 - OUT (FastRAM.SLOT0),A ; Страница КЭШ = 1 - ; - LD H,D ; LD HL,#4000 - LD D,E ; LD DE,#0000 - LD BC,#3EDF ; !HARDCODE оставшийся размер битстрима - LDIR + LD A,#FE ; чтоб проверить, что вызывать после CALL NZ,.INIT_ACEX.PROGRAM.LOAD + ; тут ZF должен быть из вызывающей процедуры + CALL NZ,.INIT_ACEX.PROGRAM.LOAD ; если RAM_BLOCK ID не равен 0, то выполняется + INC A ; флаг ZF=0 грузим из ROM ; .INIT_ACEX.PROGRAM.SET_KEYS: LD A,3 OUT (FastRAM.SLOT0),A ; Страница КЭШ = 3 ; LD HL,.INIT_ACEX.Reload_String ; флаг перезагрузки из КЭШ-а - LD DE,ACEX.LOADER.String_Address-#C000 + JR Z,1F ; устанавливаем флаг перезагрузки из КЭШ-а + INC L ; затираем флаг перезагрузки из КЭШ-а +1: LD DE,ACEX.LOADER.String_Address-#C000 LD BC,#10 LDIR @@ -275,8 +247,43 @@ RST_CONF: XOR A OUT (FastRAM.SLOT0),A IN A,(FastRAM.OFF) +.slot1_page+1: LD A,0 + OUT (SLOT1),A RET - ; + ; + ; +.INIT_ACEX.PROGRAM.LOAD: + XOR A ; страница КЭШ + LD HL,Spec_Page.bitstream_pages + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 0 + INC A +.INIT_ACEX.PROGRAM.load_loop: + EX AF,AF' + LD A,(HL) + INC HL + CP #FF + RET Z + OUT (SLOT1),A ; страница с данными файла + EX AF,AF' + ; + ; перекидывание #3000 байтов в КЭШ(0) = #1000 + EXX + LD HL,#4000 + LD DE,#1000 + LD BC,#3000 + LDIR + ; докидывание #1000 байтов в КЭШ(1) = #0000 + ; HL = #7000 + OUT (FastRAM.SLOT0),A ; Страница КЭШ = 1 + INC A + ; + LD D,C ; LD DE,0 + LD B,#10 ; LD BC,#1000 + LDIR + EXX + JR .INIT_ACEX.PROGRAM.load_loop + + .INIT_ACEX.Reload_String: DB ACEX.RELOAD_STRING ; diff --git a/src/bios/exp/FUNC_SYS.ASM b/src/bios/exp/FUNC_SYS.ASM index c40bdad..9542004 100644 --- a/src/bios/exp/FUNC_SYS.ASM +++ b/src/bios/exp/FUNC_SYS.ASM @@ -53,15 +53,15 @@ FN_VERSION: PUSH HL EX DE,HL LD HL,ID_SPRINTER_length - + ; + LD B,0 LD C,(HL) INC HL - LD B,0 LDIR - + ; POP HL LD DE,(ID_Version) ;rdlow-ok - + ; IN A,(SLOT2) EX AF,AF' LD A,SYS_PAGE @@ -69,21 +69,30 @@ FN_VERSION: LD BC,(SYS_PAGE.CONFIG_BYTE-#4000) ; Version PLD ; !TODO через структуру для переменных биоса EX AF,AF' OUT (SLOT2),A - LD A,2 ; Число полей + LD A,ID_SPRINTER.Records_Num ; Число полей AND A RET ;----------------------------------------------------------------------; ;----------------------------------------------------------------------; FN_CRIPT: - DEC B + DEC B + JR Z,.board_id + DEC B SCF - RET NZ - LD HL,(ROM_NUMBER.part1) ;rdlow-ok - LD A,(ROM_NUMBER.part2) ;rdlow-ok - LD BC,(BoardID.start) ;rdlow-ok - LD DE,(BoardID.end) ;rdlow-ok - AND A + RET NZ + ; [ ] 25/01/24 +.Acex_ver: + ;!TODO + AND A + RET + ; +.board_id: + LD HL,(ROM_NUMBER.part1) ;rdlow-ok + LD A,(ROM_NUMBER.part2) ;rdlow-ok + LD BC,(BoardID.start) ;rdlow-ok + LD DE,(BoardID.end) ;rdlow-ok + AND A RET ; BoardID_start old address #312A ; BoardID_end old address #312D @@ -100,6 +109,7 @@ EMM.CheckColdInit: LD HL,SYS_PAGE.ID_FLAG - #4000 LD DE,ID_SPRINTER_length LD A,(DE) + DEC A INC DE LD B,A .loop: LD A,(DE) diff --git a/src/bios/loader/bitstream_header.inc b/src/bios/loader/bitstream_header.inc index 418357b..8259c16 100644 --- a/src/bios/loader/bitstream_header.inc +++ b/src/bios/loader/bitstream_header.inc @@ -1,3 +1,5 @@ ; Header of bitstream which non packed - DB #FF,#FF,#62,#7B,#39,#00,#FF,#FF + 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/src/bios/rom/SETUP/MAIN.asm b/src/bios/rom/SETUP/MAIN.asm index c2ae331..92ee8f7 100644 --- a/src/bios/rom/SETUP/MAIN.asm +++ b/src/bios/rom/SETUP/MAIN.asm @@ -280,7 +280,7 @@ CLEARM: IN A,(SLOT3) CALL NZ,CCHAIN POP AF OUT (SLOT3),A - ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. BLK_TO_RAMD + ;!TEST; [ ] 04/11/2023 Отдельные рамдиски для режима спектрума и DSS. LD B,high BIOS.SWAP_RAM_DRIVES.Sp2000 JP SWAP_RAM_DRIVES ; diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/src/bios/rom/ZX/ZX_FUNC.ASM index 45917e5..36d4c70 100644 --- a/src/bios/rom/ZX/ZX_FUNC.ASM +++ b/src/bios/rom/ZX/ZX_FUNC.ASM @@ -49,13 +49,13 @@ COMAND_LOOP: INC HL CP ":" JR Z,COMAND_L1 - CP #0D + CP ZX_Char.carriage_return JR NZ,COMAND_LOOP RET COMAND_L1: LD A,(HL) - CP #EA ;!HARDCODE + CP ZX_Token.rem RET NZ INC HL COMAND_OK: ; ОБНАРУЖЕНА КОМАНДА ДЛЯ 'expansion' @@ -63,7 +63,7 @@ COMAND_OK: ; INC HL CP ':' JP Z,MENU_S1 - CP #0D + CP ZX_Char.carriage_return JP Z,MENU_S1 CP 'I' JR Z,COMAND_ISD @@ -123,7 +123,7 @@ TASK_SWITCH: RLCA RLCA RLCA - AND 30H ; новая задача 0..3 + AND #30 ; новая задача 0..3 LD C,A IN A,(SLOT3) diff --git a/src/bios/rom/ZX/ZX_MENU.ASM b/src/bios/rom/ZX/ZX_MENU.ASM index 54cb079..ad37b55 100644 --- a/src/bios/rom/ZX/ZX_MENU.ASM +++ b/src/bios/rom/ZX/ZX_MENU.ASM @@ -233,8 +233,8 @@ BASIC_MENU: LD DE,(ZX_VARS.CH_ADR) PUSH DE LD (ZX_VARS.CH_ADR),HL - CALL_48X 1C8Ch ; SYMBOL VAR - CALL_48X 2BF1h ; input txt !!! + CALL_48X #1C8C ; SYMBOL VAR + CALL_48X #2BF1 ; input txt !!! ; DE - adr ; BC - len PUSH DE diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index 22001cf..3e79b28 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -8,7 +8,7 @@ DEFINE Pashalki 0 ; DEFINE PICTURE_FILE './src/bios/logo/psfathers.bmp' DEFINE StandartCGApallete 1 ; Подключать палитру из standart_colors.inc - + DEFINE BitStream_SizeInPages 4 ; Задержка в кадрах после отрисовки логотипа (0 = 256) DEFINE LOGO_DELAY_MIN 25 diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 38a5535997610048996524dfbc2221d6611ef8a5..8557d3c446eca127af81ae2f469883bbd52e8d92 100755 GIT binary patch delta 82 zcmZo@U~6b#+aSirT*78CS&~l{L~pj_t1@78+`PpuhlNpev!ZjPh@{Th22JymTJ}12 lj7A2+XO~OgINKw0<7|x9n5ox`%4VvaBwd{55 k7>x{s&n}m~akfY1#@QGxJLbug!;PAchi^X~&S