diff --git a/Shared_Includes b/Shared_Includes index 54298bf..c135d9b 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 54298bfb52826572bda5ccd0609320a9418d08c9 +Subproject commit c135d9b6038fcabca6cef3234d876f93d5865dee diff --git a/src/bios/exp/DCP.ASM b/src/bios/exp/DCP.ASM index b8d0ba2..ad62c8c 100644 --- a/src/bios/exp/DCP.ASM +++ b/src/bios/exp/DCP.ASM @@ -584,40 +584,47 @@ DCP_CONFIG: ; ;-----------------------------------------------------------------------; -; CALL from 3D13h! Осторожнее с прерываниями, лучше гасить, чтоб не сбить сигнал DOS_ON +;[x] Теперь это не нужно: CALL from 3D13h! Осторожнее с прерываниями, лучше гасить, чтоб не сбить сигнал DOS_ON ; in: A - внутренний порт, B - значение для записи во внутренний порт -; out: B - старое значение внутреннего порта; Перед выходом восстанавливается конфа прописанная в CONFIG_DE +; out: B - старое значение внутреннего порта; Перед выходом восстанавливается конфа прописанная в CONFIG_DE. SET_PORTS: EX AF,AF' + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + AND A + LD A,R + PUSH AF + DI + CALL DOS_ON + ; LD A,CNF_PORT.CNF_0 + ROM.BIOS OUT (SYS_PORT.ROM),A - + ; LD C,SLOT2 ; получить страницу IN D,(C) - + ; LD A,DCP_PAGE ; установить новую OUT (C),A - + ; LD A,(#8000) ; сохранить то что было LD L,A LD A,(#8200) LD H,A EX AF,AF' ; страница - + ; LD (#8000),A ; установить внутренний порт LD (#8200),A - + ; EX AF,AF' LD A,B LD BC,0 EX AF,AF' - + ; IN A,(C) - + ; EX AF,AF' OUT (C),A ; установить новое значение порта EX AF,AF' - + ; LD B,A LD A,L LD (#8000),A ; вернуть порт @@ -630,8 +637,15 @@ SET_PORTS: LD A,(SYS_PAGE.CONFIG_DE-#4000) OUT (C),D ; вернуть страницу OUT (SYS_PORT.ROM),A - - AND A - RET + ; + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + POP AF + RET PO + EI + RET + ; + ;AND A + ;RET + ; ;-----------------------------------------------------------------------; ; \ No newline at end of file diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index a1c444e..abb2400 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -780,28 +780,31 @@ start: push af ;----[перехват soft reset #EE port]----- Check_EE_Port: - LD A,ACEX.RET_PORT - LD B,0 - LD C,BIOS.SET_PORTS - CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE - LD A,B - AND A - JR Z,Check_Spec_Page + LD A,ACEX.RET_PORT + LD B,0 + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;LD C,BIOS.SET_PORTS + ;CALL @ToBIOS_3D13 ; переустановить внутр. порт #EE + CALL SET_PORTS + ; + LD A,B + AND A + JR Z,Check_Spec_Page DI - OUT (SLOT3),A ; Set restart page + OUT (SLOT3),A ; Set restart page .After_Hard_Rst: - LD HL,(Spec_Page.RET_addr) ; prog address - ld A,(Spec_Page.page_0) ; PAGE0 - OUT (SLOT0),A - LD A,(Spec_Page.page_1) ; PAGE1 - OUT (SLOT1),A - LD A,(Spec_Page.page_2) ; PAGE2 - OUT (SLOT2),A - LD A,(Spec_Page.page_3) ; PAGE3 - OUT (SLOT3),A - JP (HL) + LD HL,(Spec_Page.RET_addr) ; prog address + LD A,(Spec_Page.page_0) ; PAGE0 + OUT (SLOT0),A + LD A,(Spec_Page.page_1) ; PAGE1 + OUT (SLOT1),A + LD A,(Spec_Page.page_2) ; PAGE2 + OUT (SLOT2),A + LD A,(Spec_Page.page_3) ; PAGE3 + OUT (SLOT3),A + JP (HL) ; ;--[перехват soft/hard reset #41 page]-- Check_Spec_Page: @@ -1098,26 +1101,28 @@ ZG_ADDRESS: INCLUDE 'FONT.ASM' ; RAM SLOT0 - page 0 ; для режима zx spectrum ; ВЫПОЛНЯЕТСЯ ИЗ ОЗУ +; !HARDCODE номера страниц для эмулятора ПЗУ init_zx_roms: DISP Reset_Handler.init_rom_address IN A,(SLOT3) - PUSH AF + ;PUSH AF + EX AF,AF' DI - LD A,1 ;!HARDCODE + LD A,SYS_PORT.EXTENSION OUT (SYS_PORT.ROM),A - ;LD A,2 - INC A ;!HARDCODE - LD B,3 ; zx-rom number of pages + INC A ;!HARDCODE LD A,2 + LD B,3 ; zx-rom number of pages ;!FIXIT переделать на функцию биоса для чтения ROM-DISK и перенести в него ПЗУ спектрума -.loop: push bc - +.loop: ;push bc + EXX + ; out (ROM.SLOT0),a - or %0100'0000 + or %0100'0000 ; !HARDCODE номера страниц для эмулятора ПЗУ out (SLOT3),a - and %1011'1111 + and %1011'1111 ; !HARDCODE номера страниц для эмулятора ПЗУ LD HL,0 LD DE,#C000 @@ -1125,47 +1130,67 @@ init_zx_roms: LDIR inc a - pop bc + ;pop bc + EXX DJNZ .loop xor a out (ROM.SLOT0),a OUT (SYS_PORT.ROM),A - POP AF + ;POP AF + EX AF,AF' out (SLOT3),a - LD A,#E2 ;!HARDCODE ROM-ID - BASIC 128 - LD B,#42 ; page - CALL .SET_ROM + LD A,ACEX.vROM.BASIC_128 ; ROM-ID - BASIC 128 + LD B,#42 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; - LD A,#E3 ;!HARDCODE ROM-ID - BASIC 48 - LD B,#43 ; page - CALL .SET_ROM + LD A,ACEX.vROM.BASIC_48 ; ROM-ID - BASIC 48 + LD B,#43 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; - LD A,#E1 ;!HARDCODE ROM-ID - TR-DOS - LD B,#44 ; page - CALL .SET_ROM + LD A,ACEX.vROM.TR_DOS ; ROM-ID - TR-DOS + LD B,#44 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; - ; LD A,#E0 ;!HARDCODE ROM-ID - BIOS - ; LD B,#45 ; page - ; CALL .SET_ROM + ; LD A,ACEX.vROM.BIOS ; ROM-ID - BIOS + ; LD B,#45 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; - ; LD A,#EB ;!HARDCODE ROM-ID - BIOS-1 - ; LD B,#45 ; page - ; CALL .SET_ROM - - ; LD A,#EF ;!HARDCODE ROM-ID - BIOS-2 - ; LD B,#47 ; page - ; CALL .SET_ROM + ; LD A,ACEX.vROM.BIOS_3 ; ROM-ID - BIOS-1 + ; LD B,#45 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; + ; LD A,ACEX.vROM.BIOS_4 ; ROM-ID - BIOS-2 + ; LD B,#47 ;!HARDCODE page + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL .SET_ROM + CALL SET_PORTS + ; RET + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 .SET_ROM: - LD C,BIOS.SET_PORTS - JP ToBIOS_3D13 - + ;LD C,BIOS.SET_PORTS + ;JP ToBIOS_3D13 + ; ENT .length EQU $-init_zx_roms ;-----------------------------------------------------------------------; @@ -1536,15 +1561,15 @@ DOS_ON: NOP _mInfoBLOCK #3E00-$,#FF DOS_OFF: DI - PUSH AF - PUSH BC - LD BC,(#5BFF) ; !HARDCODE - LD A,#C9 - LD (#5BFF),A ; !HARDCODE - CALL #5BFF ; !HARDCODE - LD (#5BFF),BC ; !HARDCODE - POP BC - POP AF + PUSH AF + PUSH BC + LD BC,(#5BFF) ; !HARDCODE + LD A,#C9 ; Opcode RET + LD (#5BFF),A ; !HARDCODE + CALL #5BFF ; !HARDCODE + LD (#5BFF),BC ; !HARDCODE + POP BC + POP AF RET ;*************************************** diff --git a/src/bios/rom/ZX/ZX_MENU.ASM b/src/bios/rom/ZX/ZX_MENU.ASM index a7e543d..54cb079 100644 --- a/src/bios/rom/ZX/ZX_MENU.ASM +++ b/src/bios/rom/ZX/ZX_MENU.ASM @@ -428,7 +428,10 @@ CLEAR_RAM: ; поэтому отключаем перехват ресета. LD A,ACEX.RET_PORT LD BC,BIOS.SET_PORTS - CALL ToBIOS_3D13 + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL ToBIOS_3D13 + RST_to_BIOS + ; EI RET diff --git a/src/bios/rom/ZX_MODE.ASM b/src/bios/rom/ZX_MODE.ASM index 5857205..b610b83 100644 --- a/src/bios/rom/ZX_MODE.ASM +++ b/src/bios/rom/ZX_MODE.ASM @@ -70,7 +70,10 @@ CLEAR_RAM: ;!TODO придумать как отключать перехват только на возврат в DSS LD A,ACEX.RET_PORT LD BC,BIOS.SET_PORTS - CALL ToBIOS_3D13 + ;[x] SET_PORTS: no need to call from #3D13 and DI. 31/12/23 + ;CALL ToBIOS_3D13 + RST_to_BIOS + ; EI RET diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 1ecf119..d8a8bed 100755 Binary files a/src/bios/shared/RECOVERY.IMG and b/src/bios/shared/RECOVERY.IMG differ