From 3c0d7205c7cdcc9c075986867ad1b6f58642981b Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Sun, 1 Dec 2024 19:50:19 +1000 Subject: [PATCH] =?UTF-8?q?fix=20bug=20in=20EMM.MergeMemBlocks=20(=D0=BD?= =?UTF-8?q?=D0=B0=D1=88=D0=B5=D0=BB=20=D0=9A=D0=BE=D0=BD=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D0=BD=D1=82=D0=B8=D0=BD=20=D0=9A=D0=BE=D1=81=D0=B0=D1=80=D0=B5?= =?UTF-8?q?=D0=B2)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bios/exp/BIOS_FUNC.asm | 2 +- src/bios/exp/EXP.asm | 14 ++++++------- src/bios/exp/FUNC_RAM_ROM_DRV.ASM | 35 ++++++++++++------------------- src/bios/exp/FUNC_SERVICE.asm | 33 +++++++---------------------- src/bios/exp/FUNC_SYS.ASM | 1 - src/bios/rom/ZX/ZX_FUNC.ASM | 2 +- src/bios/shared/DEFINES.INC | 2 +- 7 files changed, 31 insertions(+), 58 deletions(-) diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 0e3ecd5..a7ddd37 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -238,7 +238,7 @@ TAB_FNS: DB low READ_PORTS ; #F9 [x] 26/01/2024 DB low FN_RESERVED ; #FA [x] 26/01/2024 не работала и не нужна, дублирует SET_PORTS DB low GOTO_SPEC ; #FB Goto Spectrum! - DB low ZX_MEMORY_MANAGER ; #FC ; [ ] free zx pages! + DB low ZX_MEMORY_MANAGER ; #FC API для динамического выделения страниц Спектрума DB low REINIT ; #FD DB low FN_RESERVED ; #FE SAVE_AUTOSTART. Есть в ZX_EXP.ASM DB low FN_VERSION ; #FF diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 0ed2209..e7e7b4d 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -707,11 +707,11 @@ POST_5_ERROR: OUT (RGADR),A OUT (RGMOD),A OUT (SLOT0),A - ; [ ] 20/08/2024 ; [x] free zx pages! - ; LD A,5 - ; OUT (SLOT1),A - ; LD A,2 - ; OUT (SLOT2),A + ;free zx pages! + ;LD A,ZX_PAGE.SLOT1 + ;OUT (SLOT1),A + ;LD A,ZX_PAGE.SLOT2 + ;OUT (SLOT2),A OUT (SLOT2),A ; ZERO_PAGE DEC A ; SHARED_PAGE OUT (SLOT1),A @@ -777,7 +777,7 @@ Check_EE_Port: LD A,ACEX.RET_PORT ;CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE CALL SET_PORTS ; - ; [ ] 20/10/2024 игнор перехватчика по клавише 0 + ; [x] 20/10/2024 игнор перехватчика по клавише 0 LD A,high ZXKeys.Line_4 IN A,(ZXKeys) RRCA @@ -1196,7 +1196,7 @@ DOS_ON: NOP ;!TODO раб ; IF FREE_ZX_PAGES -; [ ] free zx pages! ---------------------------------------------------; +;-----------------------------------------------------------------------; GOTO_SPEC: PUSH HL LD HL,RET_TO_BIOS EX (SP),HL diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index f2ab4db..e3d519f 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -102,30 +102,26 @@ EMM.InitMem: PUSH BC POP BC RET ;---------------------------------------------------------------------[] -RESERVED_PAGES: - ; [x] Block #1 - можно освободить по ID 1 - ;DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; [ ] free zx pages! for Spectrum - ;!FIXIT страницы 16..31 не зарезервированы, но используются в Pentagon 512 - ; - ; эмулятор ПЗУ ;!FIXIT ROM-Emulator сделать динамические страницы - ;DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; [ ] free zx pages! For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION - ;DB #FF ; End of the block - ; +RESERVED_PAGES: ;[x] free zx pages! + ; Block #1 - можно освободить по ID 1 + ;DB 1,3,4,6,7,8,9,10,11,12,13,14,15 ; for Spectrum + ; эмулятор ПЗУ + ;DB #42,#43,#44,#45,#46,#47;,#48,#49,#4A,#4B ; For (BASIC128, BASIC48, TRDOS, SCORP_ROM)*2, vBIOS, vEXTENSION + ;DB #FF ; End of the block ; - ;; Block #2 - нельзя освобождать - DB ZX_PAGE.SLOT0,ZX_PAGE.SLOT2,ZX_PAGE.SLOT1 ; [ ] free zx pages! ; for Spectrum and BIOS starting + ; Block #2 - нельзя освобождать + DB ZX_PAGE.SLOT0,ZX_PAGE.SLOT2,ZX_PAGE.SLOT1 ; for Spectrum and BIOS starting DB DCP_PAGE ; Ports map DB Spec_Page ; Page for Spectrum mode ; Screen pages DB #50,#51,#52,#53,#54,#55,#56,#57 DB #58,#59,#5A,#5B,#5C,#5D,#5E,#5F ; - ;DB MODE_PAGE ; ????? + ;DB MODE_PAGE ; ????? DB CBL.BUFFER_PAGE ; Page for CBL audio DB SYS_PAGE ; Page for system (BIOS) variables DB #FF ; End of the block ; -;.Blocks EQU 2 ;----------------------------------------------------------------------; ; @@ -278,20 +274,15 @@ EMM.FreeMemRMD: CALL GET_RAMD_ST ; Вход: A - НАЧАЛО ЦЕПОЧКИ ; НЕ ПОРТИТЬ DE!!! ;EMM_FN3M: -EMM.FreeMem: ; [x] free zx pages! теперь нельзя освободить страницу #FF +EMM.FreeMem: ; [x] теперь нельзя освободить страницу #FF SCF INC A RET Z DEC A - ;AND A - ;SCF ; RET Z ; LD C,A - ;CP ZX_RAM_ID ;!FIXIT ; [ ] free zx pages! - ;CALL Z,RES_FLAG_ZXvROM - ; IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE @@ -307,7 +298,7 @@ EMM.FreeMem: ; [x] free zx pages! теп CP #FF ; Если не конец JR NZ,.loop ; продолжать - ; !TEST 23/08/2024 восстановление цепочки если освобождали не с начала + ; [x] 23/08/2024 восстановление цепочки если освобождали не с начала LD A,C LD L,0 LD BC,256 @@ -542,6 +533,7 @@ EMM.MergeMemBlocks: LD A,SYS_PAGE OUT (SLOT3),A LD H,high SYS_PAGE.RAM_TABLE + LD L,E LD C,B LD B,0 .ADD_L: LD A,(HL) @@ -558,8 +550,7 @@ EMM.MergeMemBlocks: SCF RET -.ADD_NEXT: - LD A,C +.ADD_NEXT: LD A,C AND A JR Z,.ADD_ERR LD (HL),A diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index f075028..4116d74 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -50,14 +50,14 @@ RST_CONF: OUT (SYS_PORT.ON),A LD A,C ; - CP #80 ;!FIXIT тут теперь может любое число быть у старых прог ; [ ] free zx pages + CP #80 ; тут теперь может любое число быть у старых прог JR NC,.CHOOSE_CNF ; only for old FLEX10K soft compatible .crutch: LD C,SLOT3 IN B,(C) - OUT (C),A ; PAGE с прошивкой - LD DE,(#C090) ; PLD-ID - OUT (C),B ; RET page + OUT (C),A ; PAGE с прошивкой + LD DE,(#C090) ; PLD-ID + OUT (C),B ; RET page ;--[] ;JR INT_PLD .INT_PLD: ; only for old FLEX10K soft compatible LD C,SLOT3 @@ -76,8 +76,8 @@ RST_CONF: OUT (C),A ; LD A,E ; config-byte - OR #FE ;!HARDCODE - LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter + OR #FE ;!HARDCODE + LD BC,Port_All_Mode ; SYSTEM Spectrum/Sprinter OUT (C),A ; LD A,#3C @@ -94,9 +94,9 @@ RST_CONF: RET ; ;[x] -.CHOOSE_CNF: ; [ ] bug with "free zx pages" +.CHOOSE_CNF: ; [x] bug with "free zx pages" LD A,high ZX_MEM_PORT.Scorpion - IN A,(ZX_MEM_PORT) ;!HARDCODE + IN A,(ZX_MEM_PORT) RRCA LD A,C JR C,.not_vRAM_page @@ -218,13 +218,6 @@ RST_CONF: ; LD (HL),"T" ; ; ; ; .. ... ... .. -; ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. -; ; *. Вход в подфункцию только через RST 08 или #18 -; ; *. Сохранить все страницы пользователя в SYS_PAGE для перехвата ресета -; ; *. Достать со стека адрес возврата и сохранить в SYS_PAGE для перехвата ресета -; ; *. Сохранить куда-нибудь значение стека -; ; * -; ; .. ... ... .. ; ;LD BC,BIOS.REINIT.HARD_RESET ; .reinit: JP REINIT ; @@ -413,16 +406,6 @@ RST_CONF: .kill_flag: LD (HL),"S" INC HL LD (HL),"T" - ; - ; .. ... ... .. - ; [ ] - ;!TODO сделать функцию по заливке своей конфы, перехвату ресета. - ; *. Вход в подфункцию только через RST 08 или #18 - ; *. Сохранить все страницы пользователя в SYS_PAGE для перехвата ресета - ; *. Достать со стека адрес возврата и сохранить в SYS_PAGE для перехвата ресета - ; *. Сохранить куда-нибудь значение стека - ; * - ; .. ... ... .. RET ; diff --git a/src/bios/exp/FUNC_SYS.ASM b/src/bios/exp/FUNC_SYS.ASM index c6a11e6..916e09c 100644 --- a/src/bios/exp/FUNC_SYS.ASM +++ b/src/bios/exp/FUNC_SYS.ASM @@ -252,7 +252,6 @@ INIT_SYS_ALL: XOR A LD (SYS_PAGE.CURRENT_RAM_DRV - #4000),A ; - ; [ ] free zx pages! ;;; init task's ; LD DE,ZG_ADDRESS ; адрес знакогенератора diff --git a/src/bios/rom/ZX/ZX_FUNC.ASM b/src/bios/rom/ZX/ZX_FUNC.ASM index 6be5b9c..5238c9d 100644 --- a/src/bios/rom/ZX/ZX_FUNC.ASM +++ b/src/bios/rom/ZX/ZX_FUNC.ASM @@ -277,7 +277,7 @@ INIT_vROM: LD A,(HL) ;-----------------------------------------------------------------------; ;!FIXIT -;----------------[Выделение/освобождение страниц спектрума]-------------; +;-------------[Выделение/освобождение/инит страниц спектрума]-----------; ;вход: рег B: ; FN 0x ; 0 - зарезервировано diff --git a/src/bios/shared/DEFINES.INC b/src/bios/shared/DEFINES.INC index ca3610c..edfd03e 100644 --- a/src/bios/shared/DEFINES.INC +++ b/src/bios/shared/DEFINES.INC @@ -1,5 +1,5 @@ ;=======================[All shared EQUs]=======================; -BETA_BUILD EQU 9 ; добавляет строку и сообщение о тестовой сборке на стартовом экране +BETA_BUILD EQU 17 ; добавляет строку и сообщение о тестовой сборке на стартовом экране ;======================[All shared defines]=====================; DEFINE PACKED_MAIN 0 ; паковать MAIN или влезает без этого? DEFINE SP2000_Loader_Flag #0107 ;