From 6d2385871e3b1ed590c841be836e2fabc5265b16 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sun, 5 Nov 2023 04:52:10 +1000 Subject: [PATCH] -bug with zx_screen in func_ram_rom_drv.asm --- src/bios/exp/BIOS_FUNC.asm | 27 ++++---- src/bios/exp/FUNC_RAM_ROM_DRV.ASM | 107 ++++++++++++++++-------------- src/bios/rom/ZX/ZX_MENU.ASM | 3 +- src/bios/rom/ZX_MODE.ASM | 1 + src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 5 files changed, 75 insertions(+), 63 deletions(-) diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 6fdf73b..1589ce1 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -711,23 +711,24 @@ FN_5x_Parser: ; Вход в функции БИОС из TR-DOS EXP_FNS:; отключаем запись в экран спектрума - EX (SP),HL - IN A,(RGADR) - LD L,A - LD A,#C0 - OUT (PORT_Y),A - LD A,H - EX (SP),HL ; (SP) = port_y + ;EX (SP),HL + ;IN A,(RGADR) + ;LD L,A + ;LD A,#C0 + ;OUT (PORT_Y),A + ;LD A,H + ;EX (SP),HL ; (SP) = port_y + POP AF ; CALL EXP_FNS_RST18 CALL DOS_ON ; возвращаем запись в экран спектрума - EX (SP),HL - PUSH AF - LD A,L - OUT (RGADR),A - POP AF - POP HL + ;EX (SP),HL + ;PUSH AF + ;LD A,L + ;OUT (RGADR),A + ;POP AF + ;POP HL ; возврат JP EXP_FNS_RET diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index 5e3d5ac..417eb98 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -30,18 +30,18 @@ EMM.GetMemSize: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; Инициализация распределения памяти. EMM.InitMem: PUSH BC PUSH HL PUSH DE - IN A,(SLOT1) + IN A,(SLOT3) LD C,A LD A,SYS_PAGE - OUT (SLOT1),A - LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 ; Адрес FAT ОЗУ. + OUT (SLOT3),A + LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 ; Адрес FAT ОЗУ. ; обнуляем таблицу XOR A .loopFree: @@ -68,20 +68,20 @@ EMM.InitMem: LD (HL),A ; Инициализация ключей RAM-Disks XOR A - LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000 + LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 LD B,SYS_PAGE.RAMD_KEYS.NUM .loop2: LD (HL),A INC L DJNZ .loop2 ; [x] 4/11/23 - LD HL,SYS_PAGE.Sp_RAMD_KEYS - #4000 - #4000 + LD HL,SYS_PAGE.Sp_RAMD_KEYS; - #4000 - #4000 LD B,SYS_PAGE.Sp_RAMD_KEYS.NUM .loop3: LD (HL),A INC L DJNZ .loop3 ; LD A,C - OUT (SLOT1),A + OUT (SLOT3),A POP DE POP HL POP BC @@ -115,7 +115,7 @@ RESERVED_PAGES: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; Получить блок памяти N bytes, ; Вход: B - число необходимых блоков ; Выход: L,A - КЛЮЧ RAM-Disk/код ошибки @@ -124,12 +124,12 @@ RESERVED_PAGES: EMM.GetMem: ;PUSH DE PUSH BC - IN A,(SLOT1) + IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A LD C,B ; сохранить число нужных блоков - LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 + LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 ; Цикл проверки наличия нужных блоков. .loop: DEC L JR Z,.noRAM @@ -141,7 +141,7 @@ EMM.GetMem: ; Место есть ! LD B,C ; Восстановить нужный объем диска LD C,#FF ; МЕТКА КОНЦА RAM-Disk - LD HL,SYS_PAGE.RAMD_FAT - #4000 - #4000 + LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 ; Заполнить RAMD_FAT .loop2: DEC L @@ -154,7 +154,7 @@ EMM.GetMem: ; L - указатель цепочки. EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A LD A,L AND A POP BC @@ -163,7 +163,7 @@ EMM.GetMem: .noRAM: LD L,1 ; НЕТ ПАМЯТИ EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A LD A,L SCF POP BC @@ -212,13 +212,14 @@ EMM.FreeMemRMD: SCF RET Z LD C,A - IN A,(SLOT1) + IN A,(SLOT3) LD B,A LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A + LD H,high SYS_PAGE.RAMD_FAT; - #4000 - #4000 LD (HL),0 LD A,B - OUT (SLOT1),A + OUT (SLOT3),A LD A,C ;JR EMM.FreeMem ;------[ @@ -231,12 +232,12 @@ EMM.FreeMem: RET Z LD L,A - IN A,(SLOT1) + IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) ; !FIXIT SAFE_RGADR + LD H,high (SYS_PAGE.RAMD_FAT); - #4000 - #4000) ; !FIXIT SAFE_RGADR + LD A,L EMM_F3M_L1: LD L,A @@ -248,14 +249,14 @@ EMM_F3M_L1: JR NZ,EMM_F3M_L1 ; продолжать EX AF,AF' - OUT (SLOT1),A - LD A,0 ;!FIXIT недокументировано - AND A + OUT (SLOT3),A + XOR A ;!FIXIT недокументировано + ;AND A RET EMM_FN3M_ERR: EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A LD A,2 ;!FIXIT недокументировано SCF RET @@ -446,11 +447,20 @@ BLK_RD_WR: LD C,A LD A,R PUSH AF + ; сохраняем PORT_Y + IN A,(PORT_Y) + PUSH AF + LD A,#C0 + OUT (PORT_Y),A + ; LD A,C DI CALL .start - ; восстанавливаем состояние прерываний EX AF,AF' + ; восстанавливаем PORT_Y + POP AF + OUT (PORT_Y),A + ; восстанавливаем состояние прерываний POP AF JP PO,.noInterrupts EI @@ -931,7 +941,7 @@ GET_RAMD_ST: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; RAM-Disk A, BLK - B BLK_TO_RAMD: CP SYS_PAGE.RAMD_KEYS.NUM @@ -941,12 +951,12 @@ BLK_TO_RAMD: PUSH HL LD L,A - IN A,(SLOT1) + IN A,(SLOT3) LD C,A LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A LD A,L - LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000 + LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ADD A,L LD L,A LD A,(HL) ; ключ блока @@ -955,17 +965,16 @@ BLK_TO_RAMD: LD (HL),B LD A,C - OUT (SLOT1),A + OUT (SLOT3),A LD A,B AND A POP HL RET - + ; BLK_BUSY: LD A,C - OUT (SLOT1),A - + OUT (SLOT3),A SCF POP HL RET @@ -975,7 +984,7 @@ BLK_BUSY: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; RAM-Disk A RAMD_CLEAR: CP SYS_PAGE.RAMD_KEYS.NUM @@ -985,12 +994,12 @@ RAMD_CLEAR: PUSH HL LD L,A - IN A,(SLOT1) + IN A,(SLOT3) LD C,A LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A LD A,L - LD HL,SYS_PAGE.RAMD_KEYS - #4000 - #4000 ; RAM-Disk свободен + LD HL,SYS_PAGE.RAMD_KEYS; - #4000 - #4000 ; RAM-Disk свободен ADD A,L LD L,A LD B,A ; запомнить удаляемый рамдиск @@ -999,7 +1008,7 @@ RAMD_CLEAR: JR Z,BLK_BUSY ; возврат с ошибкой LD (HL),0 LD A,C - OUT (SLOT1),A + OUT (SLOT3),A AND A POP HL @@ -1010,7 +1019,7 @@ RAMD_CLEAR: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; разделить блок памяти на два блока ; A - блок, B - длина первого блока после разделения ; выход: A - блок 1, B - блок 2 @@ -1025,19 +1034,19 @@ EMM.DivMemBlocks: RET C LD D,A - IN A,(SLOT1) + IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT1),A + OUT (SLOT3),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) + LD H,high (SYS_PAGE.RAMD_FAT); - #4000 - #4000) LD L,D LD A,(HL) LD (HL),#FF LD B,A EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A LD A,E AND A @@ -1048,17 +1057,17 @@ EMM.DivMemBlocks: ; -;----------------------------------------------------------------------; !FIXIT SAFE_RGADR +;----------------------------------------------------------------------; !FIXIT SAFE_RGADR + ; слить два блока памяти в один ; А - блок 1, B - блок 2 ; выход: А - блок EMM.MergeMemBlocks: LD E,A - IN A,(SLOT1) + IN A,(SLOT3) EX AF,AF' LD A,SYS_PAGE - OUT (SLOT1),A - LD H,high (SYS_PAGE.RAMD_FAT - #4000 - #4000) + OUT (SLOT3),A + LD H,high (SYS_PAGE.RAMD_FAT); - #4000 - #4000) LD L,E LD C,B LD B,0 @@ -1073,7 +1082,7 @@ EMM.MergeMemBlocks: .EMM_ADD_ERR: EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A SCF RET @@ -1083,7 +1092,7 @@ EMM.MergeMemBlocks: JR Z,.EMM_ADD_ERR LD (HL),A EX AF,AF' - OUT (SLOT1),A + OUT (SLOT3),A AND A LD A,E RET diff --git a/src/bios/rom/ZX/ZX_MENU.ASM b/src/bios/rom/ZX/ZX_MENU.ASM index 28da5d5..518f7ac 100644 --- a/src/bios/rom/ZX/ZX_MENU.ASM +++ b/src/bios/rom/ZX/ZX_MENU.ASM @@ -421,8 +421,9 @@ TURBO_ON: CLEAR_RAM: DI - LD C,BIOS.FullInit + LD C,BIOS.FullInit RST_to_BIOS + ;CALL ToBIOS_3D13 ; при очистке памяти из меню спектрума возврат в DSS по CAD ; будет опасным (RAM Blocks освободились), ; поэтому отключаем перехват ресета. diff --git a/src/bios/rom/ZX_MODE.ASM b/src/bios/rom/ZX_MODE.ASM index 6c0bbe4..5857205 100644 --- a/src/bios/rom/ZX_MODE.ASM +++ b/src/bios/rom/ZX_MODE.ASM @@ -63,6 +63,7 @@ CLEAR_RAM: DI LD C,BIOS.FullInit RST_to_BIOS + ;CALL ToBIOS_3D13 ; при очистке памяти из меню спектрума возврат в DSS по CAD ; будет опасным (RAM Blocks освободились), ; поэтому отключаем перехват ресета. diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 3b3e561fa72b16f07bfa9999c35158d0added5fd..168e32a3330ac8cb8525fd8f19a84166ab324f0b 100755 GIT binary patch delta 63 zcmZo@U~6b#+aSir{7^b|vLv4@h~8|;7j4AE#*ia&ViN4ka*XF0I~g~B RPwnxa+??IGnPuCblK^A>6`244 delta 62 zcmV-E0Kxx&fChko2Cx