From 4e20113d78c88270b0a92f76b10e638e8ef30f73 Mon Sep 17 00:00:00 2001 From: Tolik <85737314+Tolik-Trek@users.noreply.github.com> Date: Mon, 19 Aug 2024 05:14:31 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/bios/exp/BIOS_FUNC.asm | 4 +- src/bios/exp/EXP.asm | 6 +- src/bios/exp/EXTENDED/IDE/CD_DRV.ASM | 10 +-- src/bios/exp/FUNC_RAM_ROM_DRV.ASM | 4 +- src/bios/exp/FUNC_SERVICE.asm | 6 +- src/bios/exp/FUNC_ZX.ASM | 92 ++++++++++++++++------------ 7 files changed, 69 insertions(+), 55 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index b541d42..aca9ce3 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit b541d4221846090878c1de0138977e28139f7d14 +Subproject commit aca9ce3f859bf53c76b0d710e108543226697f91 diff --git a/src/bios/exp/BIOS_FUNC.asm b/src/bios/exp/BIOS_FUNC.asm index 2a26a5a..e323649 100644 --- a/src/bios/exp/BIOS_FUNC.asm +++ b/src/bios/exp/BIOS_FUNC.asm @@ -754,12 +754,12 @@ EXP_FNS:; ;! ! ! ! ! ! ! ! FN_RESERVED_5x: - LD A,1 ;!HARDCODE error code + LD A,BIOS.Error.InvalidSubFunction FN_RESERVED: SCF RET FN_ABSENT_5x: - LD A,#AA ;!HARDCODE error code + LD A,BIOS.Error.NotSupported SCF RET ;! ! ! ! ! ! ! ! diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index dc6ac65..48e1a19 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -768,10 +768,10 @@ set_config: OUT (RGADR),A OUT (RGMOD),A OUT (SLOT3),A - OUT (SLOT0),A - LD A,5 ; !HARDCODE page 5 + OUT (SLOT0),A ;!HARDCODE zx page number + LD A,5 ;!HARDCODE zx page number OUT (SLOT1),A - LD A,2 ; !HARDCODE page 2 + LD A,2 ;!HARDCODE zx page number OUT (SLOT2),A ;********************************* diff --git a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM index 172205a..6966092 100644 --- a/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM +++ b/src/bios/exp/EXTENDED/IDE/CD_DRV.ASM @@ -129,7 +129,8 @@ CD_5x_Extended: JR C,TRAY_FN ; ... ; ... - LD A,#AA ;!HARDCODE error code + ;LD A,#AA + LD A,BIOS.Error.InvalidSubFunction SCF RET ;[]================================================================[#5E] @@ -263,9 +264,10 @@ AP_COM: EXX SCF RET .NO_ERR: - BIT IDE.ControlBit.DataRequest,A - LD A,BIOS.Error.NoErrors - RET Z ;NO DATA REQUEST + ;BIT IDE.ControlBit.DataRequest,A + AND IDE.ControlByte.DataRequest + ;LD A,BIOS.Error.NoErrors + RET Z ;NO DATA REQUEST A = 0: BIOS.Error.NoErrors EX DE,HL LD BC,IDE.Read.CylinderLow IN E,(C) diff --git a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM index 69c96ad..0db604f 100644 --- a/src/bios/exp/FUNC_RAM_ROM_DRV.ASM +++ b/src/bios/exp/FUNC_RAM_ROM_DRV.ASM @@ -178,7 +178,7 @@ EMM.GetMem: PUSH BC POP BC RET ; -.noRAM: LD L,1 ; !HARDCODE bios errors НЕТ ПАМЯТИ +.noRAM: LD L,BIOS.Error.EMM.NoMemory EX AF,AF' OUT (SLOT3),A LD A,L @@ -207,7 +207,7 @@ EMM.GetMemRMD: CALL BLK_TO_RAMD RET NC .error2: - LD L,2 ; RAM-Disk занят ;!HARDCODE error number ;!TODO перечислить все варианты ошибок и их номера как для ДСС + LD L,BIOS.Error.BadNumber ; RAM-Disk занят LD A,L RET .error1: diff --git a/src/bios/exp/FUNC_SERVICE.asm b/src/bios/exp/FUNC_SERVICE.asm index 4f02b82..a213789 100644 --- a/src/bios/exp/FUNC_SERVICE.asm +++ b/src/bios/exp/FUNC_SERVICE.asm @@ -399,10 +399,10 @@ REINIT: DEC B OUT (C),A OUT (RGADR),A OUT (RGMOD),A - OUT (SLOT0),A - LD A,5 + OUT (SLOT0),A ;!HARDCODE zx page number + LD A,5 ;!HARDCODE zx page number OUT (SLOT1),A - LD A,2 + LD A,2 ;!HARDCODE zx page number OUT (SLOT2),A LD A,DCP_PAGE OUT (SLOT3),A diff --git a/src/bios/exp/FUNC_ZX.ASM b/src/bios/exp/FUNC_ZX.ASM index 95c92fd..6e2651e 100644 --- a/src/bios/exp/FUNC_ZX.ASM +++ b/src/bios/exp/FUNC_ZX.ASM @@ -3,63 +3,75 @@ ; [ ] free zx pages! +; ????? SYS_PAGE.SHARED_BUFFER_256b IF FREE_ZX_PAGES ;----------------[Выделение/освобождение страниц спектрума]-------------; -;вход: рег B b3..0: -; 0 - инит памяти Pentagon 128 -; 1 - инит памяти Pentagon 512 -; 2 - инит памяти Scorpion 256 -; рег B b7: -; выделить/вернуть рамблок для страниц ZX-ROM размером A стр. -;выход: CF = 0: A - номер рамблока если требовался +;вход: рег B: 0 - инит памяти Spectrum 48k +; 1 - инит памяти Pentagon 128k +; 2 - инит памяти Pentagon 512k +; 3 - инит памяти Scorpion 256k +; рег A: требуемое кол-во страниц для vROM +; +;выход: CF = 0: A - номер рамблока ; CF = 1: A - номер ошибки MANAGE_ZX_PAGES: .GET_SCORP: IN A,(SLOT3) - PUSH AF + LD E,A LD A,SYS_PAGE OUT (SLOT3),A - ; - LD HL,SYS_PAGE.RAMD_FAT; - #4000 - #4000 - LD DE,SYS_PAGE.SHARED_BUFFER_256b - LD BC,SYS_PAGE.RAMD_FAT.Size - LDIR - DEC H + ; проверить наличие свободных страниц скорпа + ; B = количество страниц + LD B,8 XOR A - ; Заполнить RAMD_FAT - ; A = 0 -.loop2: DEC L +.check_loop: DEC L + JR Z,.error_no_mem CP (HL) - JR NZ,.loop2 + JR NZ,.check_loop ; -.check_barred_pages: - ; проверка на неразрешённые страницы - EX AF,AF' - LD A,L - CP RESET_PAGE - JR C,.good_page - JR NZ,.check_isa_page - DEC L - JR .good_page -.check_isa_page: ; - AND #F0 - XOR #D0 ; страницы ISA #D0..#DF - JR NZ,.good_page - LD L,#D0 - 1 -.good_page: EX AF,AF' + CALL .check_barred_pages + LD A,0 + JR Z,.check_loop + DJNZ .check_loop + ; A = 0 + ; выделить страницы скорпа + LD B,8 +.allocate_loop: DEC L + CP (HL) + JR NZ,.allocate_loop + ; + CALL .check_barred_pages + LD A,0 + JR Z,.allocate_loop ; LD (HL),C LD C,L - DJNZ .loop2 - ; L = указатель цепочки. - ; - POP AF - OUT (SLOT3),A - ; - LD A,L + DJNZ .allocate_loop + ; L = указатель цепочки. AND A +.exit: LD A,E + OUT (SLOT3),A + LD A,L RET + ; фильтр для страниц скорпа + ;выход: ZF=1 - страница не подходит +.check_barred_pages: + ; check reset page + LD A,L + CP RESET_PAGE + RET C + RET Z + ; check isa page + AND #F0 + XOR #D0 ; страницы ISA #D0..#DF + RET NZ + LD L,#D0 + RET + ; +.error_no_mem: LD L,BIOS.Error.EMM.NoMemory + SCF + JR .exit ;-----------------------------------------------------------------------; ENDIF