diff --git a/Shared_Includes b/Shared_Includes index e9d481a..a98a635 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit e9d481a5565338505710b08e50d22a8579c400be +Subproject commit a98a635f03359ec21cd8dd77917a384a8a37caef diff --git a/src/ZX_ROMS/new/SP_TRDOS.bin b/src/ZX_ROMS/new/SP_TRDOS.bin index 8267a4f..4aaa61c 100644 Binary files a/src/ZX_ROMS/new/SP_TRDOS.bin and b/src/ZX_ROMS/new/SP_TRDOS.bin differ diff --git a/src/bios/exp/FUNC_ZX.ASM b/src/bios/exp/FUNC_ZX.ASM index bcfb84a..ad2b3e9 100644 --- a/src/bios/exp/FUNC_ZX.ASM +++ b/src/bios/exp/FUNC_ZX.ASM @@ -16,63 +16,138 @@ ; [ ] Страница ОЗУ для скорпа в SLOT0 должна совпадать с нулевой страницей порта #7FFD IF FREE_ZX_PAGES MODULE MANAGE_ZX_PAGES + +;!FIXIT ;----------------[Выделение/освобождение страниц спектрума]-------------; -;вход: рег B: 0 - инит памяти Spectrum 48k -; 1 - инит памяти Pentagon 128k -; 2 - инит памяти Pentagon 512k -; 3 - инит памяти Scorpion 256k -; рег A: требуемое кол-во страниц для vROM -; -;выход: CF = 0: A - номер рамблока -; CF = 1: A - номер ошибки +;вход: рег B: 0 - инит памяти Spectrum 48k и 2-х страниц vROM +; 1 - инит памяти Pentagon 128k и 3-х страниц vROM +; 2 - инит памяти Pentagon 512k и 3-х страниц vROM +; 3 - инит памяти Scorpion 256k и 3-х страниц vROM +; 4..15 - зарезервированы +; 16 - получить рамблоки инициализированных vROM и VRAM +; 17..63 - зарезервированы +; 64 - освободить рамблоки vROM и vRAM +; 65..127 - зарезервированы +; 128 - инициализировать свой набор страниц vROM +; рег HL: при рег B[7]=1 адрес страниц (11 шт): +; byte1 - RAM block ID, byte2..11 - страницы для vROM +; рег A: номер ZX TASK пока что всегда ноль!!! +;выход: CF = 0: HL - номера рамблоков для режимов 0..16. H=vRAM, L=vROM +; CF = 1: A - номер ошибки FN_ENTRANCE: ;-----------------------------------------------------------------------; +;!FIXIT ;-----------------------------------------------------------------------; -;Выполняется всегда для инита трёх страниц ОЗУ -INIT_48k_MEM: - +;Вход: --- +;Выход: H - vRAM block ID +; L - vROM block ID +GET_RAMBLOCK_IDs: ;-----------------------------------------------------------------------; + +;!FIXIT ;-----------------------------------------------------------------------; -INIT_SCORP_RAM: - DI - LD A,5 - OUT (SLOT1),A - ; #1FFD - LD BC,#1FFD +;Вход: HL - блок страниц на которые маппим (всегда 10 шт.) +FREE_vROM: +;-----------------------------------------------------------------------; + + +;!FIXIT +;-----------------------------------------------------------------------; +;Вход: HL - блок страниц на которые маппим (всегда 10 шт.) +FREE_vRAM: +;-----------------------------------------------------------------------; + +;!FIXIT +;-----------------------------------------------------------------------; +;Вход: B - количество страниц +GET_vROM: +;-----------------------------------------------------------------------; + +;!FIXIT +;-----------------------------------------------------------------------; +;Вход: HL - блок страниц на которые маппим (всегда 10 шт.) +INIT_vROM: +;-----------------------------------------------------------------------; + + + + +;-----------------------------------------------------------------------; +;ВХОД: HL - список страниц +; E - 0 = 128kb, 1 = 512kb +INIT_PENT_vRAM: DI XOR A - OUT (SLOT0),A +.set_1ffd: LD BC,#1FFD OUT (C),A - ; #7FFD + ; set 128 LD B,#7F - LD A,8 -LOOP_P1: DEC A - OUT (C),A - OUT (SLOT3),A - JR NZ,LOOP_P1 - ; #1FFD - LD B,#1F - LD A,#10 - OUT (C),A - ; #7FFD - LD B,#7F - LD A,8 -LOOP_P2: OUT (C),A - OUT (SLOT3),A - INC A - CP 16 - JR NZ,LOOP_P2 + LD D,A + CALL SET_7FFD ; XOR A OUT (C),A - ; #1FFD - LD B,#1F + BIT 3,E ; 128/512 + RET Z + ; set 128 + 384 + LD A,SYS_PORT.CNF_512 + OUT (SYS_PORT.ROM),A + ; + LD D,%0100'0000 + CALL SET_7FFD + LD D,%1000'0000 + CALL SET_7FFD + LD D,%1100'0000 + CALL SET_7FFD + ; + XOR A OUT (C),A + RET ;-----------------------------------------------------------------------; +;-----------------------------------------------------------------------; +;ВХОД: HL - список страниц +; D - начальное значение для 7FFD +SET_7FFD: LD A,(HL) + OUT (C),D + OUT (SLOT3),A + INC HL + INC D + BIT 3,D ; количество страниц + JR Z,SET_7FFD + RET +;-----------------------------------------------------------------------; + + +;-----------------------------------------------------------------------; +;!FIXIT +;ВХОД: HL - список страниц. +INIT_SCORP_vRAM:; first 128 kb + LD E,0 + CALL INIT_PENT_vRAM + ; second 128 kb + LD A,#10 + CALL INIT_PENT_vRAM.set_1ffd + ; A = 0 + LD B,#1F + OUT (C),A + RET +;-----------------------------------------------------------------------; + +;-----------------------------------------------------------------------; +;Выполняется для инита трёх страниц ОЗУ 48k +GET_48k_MEM: LD B,3 + JP EMM.GetMem +;-----------------------------------------------------------------------; + +;-----------------------------------------------------------------------; +;Выполняется для инита 3 страниц ОЗУ 48k и 5 страниц ОЗУ 128k тачек +GET_128k_MEM: LD B,3+5 + JP EMM.GetMem +;-----------------------------------------------------------------------; ;-----------------------------------------------------------------------; ;Вход: ---