From e7c6ad1dca6336c62921ca6304a6d47350bb9bfb Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Wed, 18 Sep 2024 03:46:44 +1000 Subject: [PATCH] ... --- src/bios/exp/FUNC_ZX.ASM | 141 ++++++++++++++++++-------------- src/bios/rom/SETUP/messages.z80 | 10 ++- 2 files changed, 84 insertions(+), 67 deletions(-) diff --git a/src/bios/exp/FUNC_ZX.ASM b/src/bios/exp/FUNC_ZX.ASM index 34c6481..c5d2ed4 100644 --- a/src/bios/exp/FUNC_ZX.ASM +++ b/src/bios/exp/FUNC_ZX.ASM @@ -46,7 +46,7 @@ ; 128 - инициализировать свой набор страниц vROM ; ; рег HL: при рег B[7]=1 адрес страниц (11 шт): -; byte1 - RAM block ID, byte2..11 - страницы для vROM +; byte1 - RAM block ID, byte2..11 - страницы для vROM - ZXSlot: 1,2,3(=0),расширенная ; рег A: номер ZX TASK пока что всегда ноль!!! ;выход: CF = 0: HL - номера рамблоков для режимов 0..16. H=vRAM, L=vROM ; CF = 1: A - номер ошибки @@ -98,6 +98,7 @@ FN_ENTRANCE: ;!TODO A - TASK NUMBER ;-----------------------------------------------------------------------; +; Не портить DE ;Вход: A - TASK NUMBER GET_ZX_TASK_DATA: GET_ZX_TASK_DATA_OFFSET @@ -327,6 +328,7 @@ GET_SCORP_RAM: CALL FREE_vRAM ; 3 - EXPANSION. C закрытыми 128-ми портами: ; 4 - TR-DOS, 5 - BASIC 48 ; A = TASK +; CF = 1 - не переустанавливать палитру GOTO_SPEC: DI PUSH AF ; set shared pages @@ -341,9 +343,17 @@ GOTO_SPEC: DI LD A,B LD (SYS_PAGE.CONFIG_DE.ZX_START),A ; - POP AF + POP DE LD SP,#C000 + LD A,D CALL GET_ZX_TASK_DATA + LD A,(IX + _#ZX_TASK_DATA.STATE) + RR E + JR NC,.save_state + OR %0000'0100 +.save_state: LD (IX + _#ZX_TASK_DATA.STATE),A + ; + ; [ ] free zx pages! ;!TODO если задача пустая, то первый инит ; ;!TODO сделать активацию винта для параметра из Setup ;!TODO установить где-нибудь ниже стэк из TASK @@ -365,7 +375,9 @@ GOTO_SPEC: DI RLCA CALL FN_SYNC ; - CALL SET_TXT_PALETTE.ZX ; [ ] free zx pages! пропускать это, чтоб задавать пользовательскую палитру + LD A,(IX + _#ZX_TASK_DATA.STATE) + AND %0000'0100 ;!TODO запомнить/восстановить кастомную палитру? + CALL Z,SET_TXT_PALETTE.ZX ; LD E,0 CALL LP_SET_32 @@ -373,27 +385,18 @@ GOTO_SPEC: DI LD E,0 LD HL,#5104 CALL LP_SET_32.X + ; .SHARED_BUFFER_256b + LD A,(IX + _#ZX_TASK_DATA.vRAM_ID) + LD HL,SYS_PAGE.SHARED_BUFFER_256b + CALL EMM.GetMemBlkPages + ;!FIXIT + ;RET C + ; !FIXIT проверка размера блока, сделать, чтоб выбирался объём памяти + ;LD A,B + ;CP 16 + ; - ;можно использовать когда-нибудь как-нибудь - ; 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 килобайт +;.TASK_0: XOR A ; задача 0, режим 256 килобайт .START_TASK: LD IY,.BASIC_128 JP INIT_PAGES ; инициализация номеров страниц режима спектрума ; @@ -423,53 +426,65 @@ GOTO_SPEC: DI ;***************************************** ;!TODO стек установлен во второй странице, не использовать или устанавливать в другую! ; инициализация страниц zx spectrum +; HL - адрес блока страниц в SLOT3 +; B - количество этих страниц INIT_PAGES: - AND A - LD E,A - EX AF,AF' - LD A,E + LD A,SYS_PAGE + OUT (SLOT1),A + ; + RES 7,H -; BIT 7,A -; JR Z,SCORPION_256_MODE -; BIT 6,A -; JR Z,PENTAGON_128_MODE -; + + ; 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 -; -; + ; 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-х спектрумов +; SCORPION_256_MODE: +; LD D,16 +; AND #30 ; до 4-х спектрумов -ALL_MODE: - OUT (SLOT0),A - XOR 5 ; [ ] free zx pages! - OUT (SLOT1),A - XOR 7 ; [ ] free zx pages! - OUT (SLOT2),A - OR #0F ; [ ] free zx pages! - LD E,A +;ALL_MODE: + LD A,(HL) ; страница для SLOT1 + EX AF,AF' + ; + INC HL + DEC B + LD A,(HL) + OUT (SLOT2),A + INC HL + OUT (SLOT3),A + OUT (SLOT0),A + .loop: DEC D @@ -493,7 +508,7 @@ ALL_MODE: INC D JR NZ,.loop -INIT_VIDEO_REG: +.INIT_VIDEO_REG: XOR A OUT (RGADR),A ; регистр видео адреса OUT (RGMOD),A ; регистр моды @@ -528,7 +543,7 @@ INIT_VIDEO_REG: ; EX AF,AF' -NO_SCREEN_ALT: +.NO_SCREEN_ALT: AND A JP (IY) ;-----------------------------------------------------------------------; diff --git a/src/bios/rom/SETUP/messages.z80 b/src/bios/rom/SETUP/messages.z80 index abe76e7..34bda04 100644 --- a/src/bios/rom/SETUP/messages.z80 +++ b/src/bios/rom/SETUP/messages.z80 @@ -202,8 +202,8 @@ SettingsItemsTabs: DB paramName DW CMOS_CELL.BootUpParams.Mask.StartDelay : DB %0001'0000 DB msgStrings.valDisabled - DB msgStrings.valNormal - DB msgStrings.valEnabled + DB msgStrings.valShort + DB msgStrings.valLong IF UnusedSettingsFeatures ; !TODO _mSETitemParams TypRate @@ -583,7 +583,8 @@ msgStrings: _mSetStr parSaveRAMdrvs, tmp_Counter : DZ 'Save RAM-disks : ' _mSetStr parUpdBios, tmp_Counter : DZ 'Update BIOS : ' _mSetStr parStartDelay, tmp_Counter : DZ 'Start delay : ' - _mSetStr valNormal, tmp_Counter : DZ 'Average ' + _mSetStr valShort, tmp_Counter : DZ 'Short ' + _mSetStr valLong, tmp_Counter : DZ 'Long ' _mSetStr parTypRate, tmp_Counter : DZ 'Typematic rate (chars/sec) : ' _mSetStr val_6, tmp_Counter : DZ '6 ' _mSetStr val_8, tmp_Counter : DZ '8 ' @@ -741,7 +742,8 @@ msgRusStrings: _mSetStrRus parSaveRAMdrvs, tmp_Counter : DZ 'Сохранение RAM-дисков : ' _mSetStrRus parUpdBios, tmp_Counter : DZ 'Обновление BIOS : ' _mSetStrRus parStartDelay, tmp_Counter : DZ 'Начальное ожидание : ' - _mSetStrRus valNormal, tmp_Counter : DZ 'Среднее ' + _mSetStrRus valShort, tmp_Counter : DZ 'Короткое ' + _mSetStrRus valLong, tmp_Counter : DZ 'Длинное ' _mSetStrRus parTypRate, tmp_Counter : DZ 'Скорость автоповтора : ' _mSetStrRus val_6, tmp_Counter : DZ '6 ' _mSetStrRus val_8, tmp_Counter : DZ '8 '