From e7b8753a9edcf298d7351affa6bd43a40c7f9146 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Wed, 25 Oct 2023 03:10:44 +1000 Subject: [PATCH] ... --- Shared_Includes | 2 +- src/bios/exp/DCP.ASM | 725 ++++++++++++++++---------------- src/bios/exp/EXP.asm | 19 +- src/bios/exp/FUNC_LOW_PRINT.ASM | 14 +- src/bios/shared/RECOVERY.IMG | Bin 98304 -> 98304 bytes 5 files changed, 380 insertions(+), 380 deletions(-) diff --git a/Shared_Includes b/Shared_Includes index 899a6c3..3744776 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 899a6c3af85b80ef2e629f108999747104680ba5 +Subproject commit 374477690571809e7318bd4279bc7da120b6c492 diff --git a/src/bios/exp/DCP.ASM b/src/bios/exp/DCP.ASM index e0c636b..b8d0ba2 100644 --- a/src/bios/exp/DCP.ASM +++ b/src/bios/exp/DCP.ASM @@ -19,435 +19,434 @@ ; BYTE ACEX.Border_FE ; - порт ; DCP END MARKER -; DW 0,0,0 +; DW 0,0,0 ;-----------------------------------------------------------------------; ; - ; ;-----------------------------------------------------------------------; - DW %00'000'0'0000'0111 - DW %00'010'0'0110'1111 - DB ACEX.VG93_1F - DW %11'010'0'0000'0111 - DW %11'010'0'0110'1111 - DB ACEX.VG93_1F + DW %00'000'0'0000'0111 + DW %00'010'0'0110'1111 + DB ACEX.VG93_1F + DW %11'010'0'0000'0111 + DW %11'010'0'0110'1111 + DB ACEX.VG93_1F - DW %00'000'0'0010'0111 - DW %00'010'0'0110'1111 - DB ACEX.VG93_3F - DW %11'010'0'0010'0111 - DW %11'010'0'0110'1111 - DB ACEX.VG93_3F + DW %00'000'0'0010'0111 + DW %00'010'0'0110'1111 + DB ACEX.VG93_3F + DW %11'010'0'0010'0111 + DW %11'010'0'0110'1111 + DB ACEX.VG93_3F - DW %00'000'0'0100'0111 - DW %00'010'0'0110'1111 - DB ACEX.VG93_5F - DW %11'010'0'0100'0111 - DW %11'010'0'0110'1111 - DB ACEX.VG93_5F + DW %00'000'0'0100'0111 + DW %00'010'0'0110'1111 + DB ACEX.VG93_5F + DW %11'010'0'0100'0111 + DW %11'010'0'0110'1111 + DB ACEX.VG93_5F - DW %00'000'0'0110'0111 - DW %00'010'0'0110'1111 - DB ACEX.VG93_7F - DW %11'010'0'0110'0111 - DW %11'010'0'0110'1111 - DB ACEX.VG93_7F + DW %00'000'0'0110'0111 + DW %00'010'0'0110'1111 + DB ACEX.VG93_7F + DW %11'010'0'0110'0111 + DW %11'010'0'0110'1111 + DB ACEX.VG93_7F - DW %00'000'0'0110'1111 - DW %00'011'0'0110'1111 - DB ACEX.VG93_State - DW %11'010'0'0110'1111 - DW %11'011'0'0110'1111 - DB ACEX.VG93_State + DW %00'000'0'0110'1111 + DW %00'011'0'0110'1111 + DB ACEX.VG93_State + DW %11'010'0'0110'1111 + DW %11'011'0'0110'1111 + DB ACEX.VG93_State ; For joystick - DW %00'011'0'0000'0111 - DW %10'011'0'0110'1111 - DB ACEX.JOY_VG93 - DW %10'011'0'0000'0111 - DW %11'011'0'0110'1111 - DB ACEX.JOY_VG93 + DW %00'011'0'0000'0111 + DW %10'011'0'0110'1111 + DB ACEX.JOY_VG93 + DW %10'011'0'0000'0111 + DW %11'011'0'0110'1111 + DB ACEX.JOY_VG93 ; For VG93 with dos on - DW %00'001'0'0110'1111 - DW %00'011'0'0110'1111 - DB ACEX.JOY_VG93 + DW %00'001'0'0110'1111 + DW %00'011'0'0110'1111 + DB ACEX.JOY_VG93 ; For VG93 with dos off - DW %11'011'0'0110'1111 - DW %11'011'0'0110'1111 - DB ACEX.JOY_VG93 + DW %11'011'0'0110'1111 + DW %11'011'0'0110'1111 + DB ACEX.JOY_VG93 - DW %00'000'0'0010'1101 - DW %11'011'1'1111'1111 - DB ACEX.FDD720 - DW %11'000'0'0010'1101 - DW %11'001'1'1111'1111 - DB ACEX.FDD720 + DW %00'000'0'0010'1101 + DW %11'011'1'1111'1111 + DB ACEX.FDD720 + DW %11'000'0'0010'1101 + DW %11'001'1'1111'1111 + DB ACEX.FDD720 - DW %00'000'0'0011'1101 - DW %11'011'1'1111'1111 - DB ACEX.FDD144 - DW %11'000'0'0011'1101 - DW %11'001'1'1111'1111 - DB ACEX.FDD144 + DW %00'000'0'0011'1101 + DW %11'011'1'1111'1111 + DB ACEX.FDD144 + DW %11'000'0'0011'1101 + DW %11'001'1'1111'1111 + DB ACEX.FDD144 ;!FIXIT UNKNOWN PORTS--------------------------------------------------; dos on, только через BC, чтение/запись - DW %10'000'1'0010'1101 - DW %11'010'1'1111'1111 - DB #18 + DW %10'000'1'0010'1101 + DW %11'010'1'1111'1111 + DB #18 - DW %10'000'1'0011'1101 - DW %11'010'1'1111'1111 - DB #19 + DW %10'000'1'0011'1101 + DW %11'010'1'1111'1111 + DB #19 - DW %10'000'1'1010'1101 - DW %11'010'1'1111'1111 - DB #1A + DW %10'000'1'1010'1101 + DW %11'010'1'1111'1111 + DB #1A ;----------------------------------------------------------------------; - DW %00'000'1'0010'1101 - DW %11'001'1'1111'1111 - DB ACEX.ISA_CTRL - DW %10'000'1'1011'1101 - DW %11'010'1'1111'1111 - DB ACEX.ISA_CTRL - DW %11'000'1'0010'1101 - DW %11'001'1'1111'1111 - DB ACEX.ISA_CTRL + DW %00'000'1'0010'1101 + DW %11'001'1'1111'1111 + DB ACEX.ISA_CTRL + DW %10'000'1'1011'1101 + DW %11'010'1'1111'1111 + DB ACEX.ISA_CTRL + DW %11'000'1'0010'1101 + DW %11'001'1'1111'1111 + DB ACEX.ISA_CTRL - DW %00'001'1'0011'1101 - DW %11'001'1'0111'1111 - DB ACEX.CMOS_DATA.READ - DW %11'001'1'0011'1101 - DW %11'001'1'0111'1111 - DB ACEX.CMOS_DATA.READ + DW %00'001'1'0011'1101 + DW %11'001'1'0111'1111 + DB ACEX.CMOS_DATA.READ + DW %11'001'1'0011'1101 + DW %11'001'1'0111'1111 + DB ACEX.CMOS_DATA.READ - DW %00'000'1'1010'1101 - DW %11'001'1'1111'1111 - DB ACEX.CMOS_ADDR.WRITE - DW %11'000'1'1010'1101 - DW %11'001'1'1111'1111 - DB ACEX.CMOS_ADDR.WRITE + DW %00'000'1'1010'1101 + DW %11'001'1'1111'1111 + DB ACEX.CMOS_ADDR.WRITE + DW %11'000'1'1010'1101 + DW %11'001'1'1111'1111 + DB ACEX.CMOS_ADDR.WRITE - DW %00'000'1'0011'1101 - DW %11'001'1'0111'1111 - DB ACEX.CMOS_DATA.WRITE - DW %11'000'1'0011'1101 - DW %11'001'1'0111'1111 - DB ACEX.CMOS_DATA.WRITE + DW %00'000'1'0011'1101 + DW %11'001'1'0111'1111 + DB ACEX.CMOS_DATA.WRITE + DW %11'000'1'0011'1101 + DW %11'001'1'0111'1111 + DB ACEX.CMOS_DATA.WRITE ; ;---------HDD[v] - DW %00'000'0'0100'0000 - DW %11'000'0'0110'1111 - DB #20 - DW %01'000'0'0100'0000 - DW %11'010'0'0110'1111 - DB #20 + DW %00'000'0'0100'0000 + DW %11'000'0'0110'1111 + DB #20 + DW %01'000'0'0100'0000 + DW %11'010'0'0110'1111 + DB #20 - DW %10'000'0'0100'0000 - DW %11'010'0'0110'1111 - DB #20 - DW %11'000'0'0100'0000 - DW %11'000'0'0110'1111 - DB #20 + DW %10'000'0'0100'0000 + DW %11'010'0'0110'1111 + DB #20 + DW %11'000'0'0100'0000 + DW %11'000'0'0110'1111 + DB #20 - DW %00'000'0'0100'0001 - DW %00'010'1'1110'1111 - DB #21 - DW %00'010'0'0100'0001 - DW %11'010'1'1110'1111 - DB #21 - DW %11'010'0'0100'0001 - DW %11'010'1'1110'1111 - DB #21 + DW %00'000'0'0100'0001 + DW %00'010'1'1110'1111 + DB #21 + DW %00'010'0'0100'0001 + DW %11'010'1'1110'1111 + DB #21 + DW %11'010'0'0100'0001 + DW %11'010'1'1110'1111 + DB #21 - DW %00'000'0'0100'0010 - DW %00'010'1'1110'1111 - DB #22 - DW %00'010'0'0100'0010 - DW %11'010'1'1110'1111 - DB #22 - DW %11'010'0'0100'0010 - DW %11'010'1'1110'1111 - DB #22 + DW %00'000'0'0100'0010 + DW %00'010'1'1110'1111 + DB #22 + DW %00'010'0'0100'0010 + DW %11'010'1'1110'1111 + DB #22 + DW %11'010'0'0100'0010 + DW %11'010'1'1110'1111 + DB #22 - DW %00'000'0'0100'0011 - DW %00'010'1'1110'1111 - DB #23 - DW %00'010'0'0100'0011 - DW %11'010'1'1110'1111 - DB #23 - DW %11'010'0'0100'0011 - DW %11'010'1'1110'1111 - DB #23 + DW %00'000'0'0100'0011 + DW %00'010'1'1110'1111 + DB #23 + DW %00'010'0'0100'0011 + DW %11'010'1'1110'1111 + DB #23 + DW %11'010'0'0100'0011 + DW %11'010'1'1110'1111 + DB #23 - DW %00'000'0'0100'0100 - DW %00'010'1'1110'1111 - DB #24 - DW %00'010'0'0100'0100 - DW %11'010'1'1110'1111 - DB #24 - DW %11'010'0'0100'0100 - DW %11'010'1'1110'1111 - DB #24 + DW %00'000'0'0100'0100 + DW %00'010'1'1110'1111 + DB #24 + DW %00'010'0'0100'0100 + DW %11'010'1'1110'1111 + DB #24 + DW %11'010'0'0100'0100 + DW %11'010'1'1110'1111 + DB #24 - DW %00'000'0'0100'0101 - DW %00'010'1'1110'1111 - DB #25 - DW %00'010'0'0100'0101 - DW %11'010'1'1110'1111 - DB #25 - DW %11'010'0'0100'0101 - DW %11'010'1'1110'1111 - DB #25 + DW %00'000'0'0100'0101 + DW %00'010'1'1110'1111 + DB #25 + DW %00'010'0'0100'0101 + DW %11'010'1'1110'1111 + DB #25 + DW %11'010'0'0100'0101 + DW %11'010'1'1110'1111 + DB #25 - DW %00'000'0'1100'0010 - DW %00'010'1'1110'1111 - DB #26 - DW %00'010'0'1100'0010 - DW %11'010'1'1110'1111 - DB #26 - DW %11'010'0'1100'0010 - DW %11'010'1'1110'1111 - DB #26 + DW %00'000'0'1100'0010 + DW %00'010'1'1110'1111 + DB #26 + DW %00'010'0'1100'0010 + DW %11'010'1'1110'1111 + DB #26 + DW %11'010'0'1100'0010 + DW %11'010'1'1110'1111 + DB #26 - DW %00'000'0'1100'0011 - DW %00'010'1'1110'1111 - DB #27 - DW %00'010'0'1100'0011 - DW %11'010'1'1110'1111 - DB #27 - DW %11'010'0'1100'0011 - DW %11'010'1'1110'1111 - DB #27 + DW %00'000'0'1100'0011 + DW %00'010'1'1110'1111 + DB #27 + DW %00'010'0'1100'0011 + DW %11'010'1'1110'1111 + DB #27 + DW %11'010'0'1100'0011 + DW %11'010'1'1110'1111 + DB #27 ;---------HDD[^] ; - DW %00'000'0'1100'0100 - DW %00'010'1'1110'1111 - DB ACEX.IDE_CONTROL_3F6 - DW %00'010'0'1100'0100 - DW %11'010'1'1110'1111 - DB ACEX.IDE_CONTROL_3F6 - DW %11'010'0'1100'0100 - DW %11'010'1'1110'1111 - DB ACEX.IDE_CONTROL_3F6 + DW %00'000'0'1100'0100 + DW %00'010'1'1110'1111 + DB ACEX.IDE_CONTROL_3F6 + DW %00'010'0'1100'0100 + DW %11'010'1'1110'1111 + DB ACEX.IDE_CONTROL_3F6 + DW %11'010'0'1100'0100 + DW %11'010'1'1110'1111 + DB ACEX.IDE_CONTROL_3F6 - DW %00'000'0'1100'0101 - DW %00'010'1'1110'1111 - DB ACEX.IDE_STATUS_3F7 - DW %00'010'0'1100'0101 - DW %11'010'1'1110'1111 - DB ACEX.IDE_STATUS_3F7 - DW %11'010'0'1100'0101 - DW %11'010'1'1110'1111 - DB ACEX.IDE_STATUS_3F7 + DW %00'000'0'1100'0101 + DW %00'010'1'1110'1111 + DB ACEX.IDE_STATUS_3F7 + DW %00'010'0'1100'0101 + DW %11'010'1'1110'1111 + DB ACEX.IDE_STATUS_3F7 + DW %11'010'0'1100'0101 + DW %11'010'1'1110'1111 + DB ACEX.IDE_STATUS_3F7 - DW %00'000'0'0010'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_1 - DW %11'000'0'0010'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_1 + DW %00'000'0'0010'1100 + DW %11'001'1'1111'1111 + DB ACEX.IDE_CHANEL_1 + DW %11'000'0'0010'1100 + DW %11'001'1'1111'1111 + DB ACEX.IDE_CHANEL_1 - DW %00'000'0'0011'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_2 - DW %11'000'0'0011'1100 - DW %11'001'1'1111'1111 - DB ACEX.IDE_CHANEL_2 + DW %00'000'0'0011'1100 + DW %11'001'1'1111'1111 + DB ACEX.IDE_CHANEL_2 + DW %11'000'0'0011'1100 + DW %11'001'1'1111'1111 + DB ACEX.IDE_CHANEL_2 - DW %00'000'0'1010'1101 - DW %11'001'1'1111'1111 - DB ACEX.VSYNC320 - DW %11'000'0'1010'1101 - DW %11'001'1'1111'1111 - DB ACEX.VSYNC320 + DW %00'000'0'1010'1101 + DW %11'001'1'1111'1111 + DB ACEX.VSYNC320 + DW %11'000'0'1010'1101 + DW %11'001'1'1111'1111 + DB ACEX.VSYNC320 - DW %00'000'0'1011'1101 - DW %11'001'1'1111'1111 - DB ACEX.VSYNC312 - DW %11'000'0'1011'1101 - DW %11'001'1'1111'1111 - DB ACEX.VSYNC312 + DW %00'000'0'1011'1101 + DW %11'001'1'1111'1111 + DB ACEX.VSYNC312 + DW %11'000'0'1011'1101 + DW %11'001'1'1111'1111 + DB ACEX.VSYNC312 - DW %00'000'0'1010'1100 - DW %11'001'1'1111'1111 - DB ACEX.RESET - DW %11'000'0'1010'1100 - DW %11'001'1'1111'1111 - DB ACEX.RESET + DW %00'000'0'1010'1100 + DW %11'001'1'1111'1111 + DB ACEX.RESET + DW %11'000'0'1010'1100 + DW %11'001'1'1111'1111 + DB ACEX.RESET - DW %00'000'0'1011'1100 - DW %11'001'1'1111'1111 - DB ACEX.UNKNOWN ;!FIXIT можно пока убрать - DW %11'000'0'1011'1100 - DW %11'001'1'1111'1111 - DB ACEX.UNKNOWN ;!FIXIT можно пока убрать + DW %00'000'0'1011'1100 + DW %11'001'1'1111'1111 + DB ACEX.UNKNOWN ;!FIXIT можно пока убрать + DW %11'000'0'1011'1100 + DW %11'001'1'1111'1111 + DB ACEX.UNKNOWN ;!FIXIT можно пока убрать - DW %00'010'0'0010'1011 - DW %11'010'0'0110'1011 - DB ACEX.ISA_Control ;!FIXIT можно пока убрать ??? + DW %00'010'0'0010'1011 + DW %11'010'0'0110'1011 + DB ACEX.ISA_Control ;!FIXIT можно пока убрать ??? - DW %00'011'0'0110'1110 - DW %10'011'0'0110'1111 - DB ACEX.ZX_Keyboard - DW %10'011'0'0110'1110 - DW %11'011'0'0110'1111 - DB ACEX.ZX_Keyboard + DW %00'011'0'0110'1110 + DW %10'011'0'0110'1111 + DB ACEX.ZX_Keyboard + DW %10'011'0'0110'1110 + DW %11'011'0'0110'1111 + DB ACEX.ZX_Keyboard - DW %00'001'1'1111'1101 - DW %00'001'1'1111'1111 - DB ACEX.AY_FFFD_READ + DW %00'001'1'1111'1101 + DW %00'001'1'1111'1111 + DB ACEX.AY_FFFD_READ - DW %00'001'1'1101'1111 - DW %11'001'1'1111'1111 - DB ACEX.Kempston_Mouse - DW %11'001'1'1101'1111 - DW %11'001'1'1111'1111 - DB ACEX.Kempston_Mouse + DW %00'001'1'1101'1111 + DW %11'001'1'1111'1111 + DB ACEX.Kempston_Mouse + DW %11'001'1'1101'1111 + DW %11'001'1'1111'1111 + DB ACEX.Kempston_Mouse - DW %00'011'0'0110'0011 - DW %11'011'0'0110'1111 - DB ACEX.CBL_OUT - DW %01'010'0'0110'0011 - DW %11'010'0'0110'1111 - DB ACEX.CBL_OUT - DW %10'010'0'0110'0011 - DW %11'010'0'0110'1111 - DB ACEX.CBL_OUT - DW %00'010'0'0000'0111 - DW %11'011'0'0000'1111 - DB ACEX.CBL_OUT - DW %00'011'0'0000'1000 - DW %11'011'0'0110'1111 - DB ACEX.CBL_OUT - DW %00'010'0'0110'1011 - DW %10'010'0'0110'1111 - DB ACEX.CBL_OUT - DW %10'010'0'0110'1011 - DW %11'010'0'0110'1111 - DB ACEX.CBL_OUT + DW %00'011'0'0110'0011 + DW %11'011'0'0110'1111 + DB ACEX.CBL_OUT + DW %01'010'0'0110'0011 + DW %11'010'0'0110'1111 + DB ACEX.CBL_OUT + DW %10'010'0'0110'0011 + DW %11'010'0'0110'1111 + DB ACEX.CBL_OUT + DW %00'010'0'0000'0111 + DW %11'011'0'0000'1111 + DB ACEX.CBL_OUT + DW %00'011'0'0000'1000 + DW %11'011'0'0110'1111 + DB ACEX.CBL_OUT + DW %00'010'0'0110'1011 + DW %10'010'0'0110'1111 + DB ACEX.CBL_OUT + DW %10'010'0'0110'1011 + DW %11'010'0'0110'1111 + DB ACEX.CBL_OUT - DW %00'000'0'0100'0110 - DW %11'001'1'1111'1111 - DB ACEX.CBL_SYS_PORT - DW %11'000'0'0100'0110 - DW %11'001'1'1111'1111 - DB ACEX.CBL_SYS_PORT + DW %00'000'0'0100'0110 + DW %11'001'1'1111'1111 + DB ACEX.CBL_SYS_PORT + DW %11'000'0'0100'0110 + DW %11'001'1'1111'1111 + DB ACEX.CBL_SYS_PORT - DW %00'000'1'1111'1101 - DW %00'001'1'1111'1111 - DB ACEX.AY_FFFD_WRITE + DW %00'000'1'1111'1101 + DW %00'001'1'1111'1111 + DB ACEX.AY_FFFD_WRITE - DW %00'000'1'0111'1101 - DW %00'001'1'1111'1111 - DB ACEX.AY_BFFD + DW %00'000'1'0111'1101 + DW %00'001'1'1111'1111 + DB ACEX.AY_BFFD - DW %00'000'0'0110'1101 - DW %10'000'1'1111'1111 - DB ACEX.Scorp_1FFD - DW %11'000'0'0110'1101 - DW %11'000'1'1111'1111 - DB ACEX.Scorp_1FFD + DW %00'000'0'0110'1101 + DW %10'000'1'1111'1111 + DB ACEX.Scorp_1FFD + DW %11'000'0'0110'1101 + DW %11'000'1'1111'1111 + DB ACEX.Scorp_1FFD - DW %00'000'0'1110'1101 - DW %00'100'1'1110'1111 - DB ACEX.Pent_7FFD - DW %00'100'0'1110'1101 - DW %11'110'1'1110'1111 - DB ACEX.Pent_7FFD - DW %11'100'0'1110'1101 - DW %11'100'1'1110'1111 - DB ACEX.Pent_7FFD - DW %10'000'0'0110'1101 - DW %11'100'1'1110'1111 - DB ACEX.Pent_7FFD + DW %00'000'0'1110'1101 + DW %00'100'1'1110'1111 + DB ACEX.Pent_7FFD + DW %00'100'0'1110'1101 + DW %11'110'1'1110'1111 + DB ACEX.Pent_7FFD + DW %11'100'0'1110'1101 + DW %11'100'1'1110'1111 + DB ACEX.Pent_7FFD + DW %10'000'0'0110'1101 + DW %11'100'1'1110'1111 + DB ACEX.Pent_7FFD - DW %00'000'0'0110'1110 - DW %00'001'0'0110'1111 - DB ACEX.Border_FE + DW %00'000'0'0110'1110 + DW %00'001'0'0110'1111 + DB ACEX.Border_FE - DW %00'000'0'0101'0110 - DW %11'001'1'1111'1111 - DB ACEX.ALL_MODE - DW %11'000'0'0101'0110 - DW %11'001'1'1111'1111 - DB ACEX.ALL_MODE + DW %00'000'0'0101'0110 + DW %11'001'1'1111'1111 + DB ACEX.ALL_MODE + DW %11'000'0'0101'0110 + DW %11'001'1'1111'1111 + DB ACEX.ALL_MODE - DW %00'000'0'0000'1001 - DW %00'010'0'0110'1111 - DB ACEX.PORT_Y - DW %00'010'0'0000'1001 - DW %11'010'0'0110'1111 - DB ACEX.PORT_Y - DW %11'010'0'0000'1001 - DW %11'010'0'0110'1111 - DB ACEX.PORT_Y + DW %00'000'0'0000'1001 + DW %00'010'0'0110'1111 + DB ACEX.PORT_Y + DW %00'010'0'0000'1001 + DW %11'010'0'0110'1111 + DB ACEX.PORT_Y + DW %11'010'0'0000'1001 + DW %11'010'0'0110'1111 + DB ACEX.PORT_Y - DW %00'000'0'0100'1001 - DW %00'010'0'0110'1111 - DB ACEX.RGMOD - DW %00'010'0'0100'1001 - DW %11'010'0'0110'1111 - DB ACEX.RGMOD - DW %11'010'0'0100'1001 - DW %11'010'0'0110'1111 - DB ACEX.RGMOD + DW %00'000'0'0100'1001 + DW %00'010'0'0110'1111 + DB ACEX.RGMOD + DW %00'010'0'0100'1001 + DW %11'010'0'0110'1111 + DB ACEX.RGMOD + DW %11'010'0'0100'1001 + DW %11'010'0'0110'1111 + DB ACEX.RGMOD - DW %00'000'0'0010'0100 - DW %00'000'0'0010'1111 - DB ACEX.CNF_PORT + DW %00'000'0'0010'0100 + DW %00'000'0'0010'1111 + DB ACEX.CNF_PORT ;!FIXIT можно убрать - DW %00'000'0'0110'1100 - DW %11'001'0'0110'1111 - DB ACEX.SCALE - DW %11'000'0'0110'1100 - DW %11'001'0'0110'1111 - DB ACEX.SCALE + DW %00'000'0'0110'1100 + DW %11'001'0'0110'1111 + DB ACEX.SCALE + DW %11'000'0'0110'1100 + DW %11'001'0'0110'1111 + DB ACEX.SCALE - DW %00'000'0'0000'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT0 - DW %00'010'0'0000'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT0 - DW %11'010'0'0000'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT0 + DW %00'000'0'0000'1010 + DW %00'010'0'0110'1111 + DB ACEX.SLOT0 + DW %00'010'0'0000'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT0 + DW %11'010'0'0000'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT0 - DW %00'000'0'0010'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT1 - DW %00'010'0'0010'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT1 - DW %11'010'0'0010'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT1 + DW %00'000'0'0010'1010 + DW %00'010'0'0110'1111 + DB ACEX.SLOT1 + DW %00'010'0'0010'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT1 + DW %11'010'0'0010'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT1 - DW %00'000'0'0100'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT2 - DW %00'010'0'0100'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT2 - DW %11'010'0'0100'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT2 + DW %00'000'0'0100'1010 + DW %00'010'0'0110'1111 + DB ACEX.SLOT2 + DW %00'010'0'0100'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT2 + DW %11'010'0'0100'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT2 - DW %00'000'0'0110'1010 - DW %00'010'0'0110'1111 - DB ACEX.SLOT3 - DW %00'010'0'0110'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT3 - DW %11'010'0'0110'1010 - DW %11'010'0'0110'1111 - DB ACEX.SLOT3 + DW %00'000'0'0110'1010 + DW %00'010'0'0110'1111 + DB ACEX.SLOT3 + DW %00'010'0'0110'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT3 + DW %11'010'0'0110'1010 + DW %11'010'0'0110'1111 + DB ACEX.SLOT3 ; DCP END MARKER - DW 0,0,0 + DW 0,0,0 ;-----------------------------------------------------------------------; ; diff --git a/src/bios/exp/EXP.asm b/src/bios/exp/EXP.asm index 08042d6..c008f93 100644 --- a/src/bios/exp/EXP.asm +++ b/src/bios/exp/EXP.asm @@ -1197,16 +1197,19 @@ ZX_SPECTRUM_MODE: CALL FN_SYNC.INT_PENT CALL SET_PAL_ZX - LD HL,#4104 LD E,0 - LD B,4 - CALL LP_OPEN_S - + ;!TEST + ; LD HL,#4104 + ; LD B,4 + ; CALL LP_OPEN_S + CALL LP_SET_32 + ; + LD E,0 LD HL,#5104 - LD E,0 - LD B,4 - CALL LP_OPEN_S - + ;!TEST + ; LD B,4 + ;CALL LP_OPEN_S + CALL LP_SET_32.X ; LD D,#35 ; CALL CMOS_RD diff --git a/src/bios/exp/FUNC_LOW_PRINT.ASM b/src/bios/exp/FUNC_LOW_PRINT.ASM index f369bb3..050d95a 100644 --- a/src/bios/exp/FUNC_LOW_PRINT.ASM +++ b/src/bios/exp/FUNC_LOW_PRINT.ASM @@ -1040,7 +1040,7 @@ LP_MODE_LINE: LD A,#50 OUT (SLOT3),A LD A,L ; вертикальное положение - CP 80H + CP #80 JR NC,LP_EXIT_MODE LP_MODE_RECURSE: @@ -1099,10 +1099,8 @@ LP_EXIT_MODE: RET ; Установка режима на линии -LP_MODE_LINE2: - ; Spectrum mode - +LP_MODE_LINE2: LD A,(IX+Window_Variables.WORK_2) LD B,(IX+Window_Variables.WORK_1) @@ -1112,12 +1110,12 @@ LP_MODE_LINE2: LD A,#50 OUT (SLOT3),A LD A,L ; вертикальное положение - CP 80H + CP #80 JR NC,LP_EXIT_MODE2 LP_MODE_RECURSE2: LD A,D ; горизонтальное положение - AND 7FH + AND #7F SUB 80 JR C,LP_MODE_LL2 SUB 48 @@ -1129,7 +1127,7 @@ LP_MODE_RECURSE2: LD A,E ; восстановить RRA - AND 3FH + AND #3F SUB C JR NC,LP_EXIT_MODE2 NEG @@ -1139,7 +1137,7 @@ LP_MODE_RECURSE2: LP_MODE_LL2: NEG RRA - AND 3FH + AND #3F CP C JR NC,LP_MODE_LR2 LD C,A diff --git a/src/bios/shared/RECOVERY.IMG b/src/bios/shared/RECOVERY.IMG index 5c60d3c735130f890be67e45172ca9a0fa27687b..7e91f242511551e2cacd0e7272367617b50e12e6 100755 GIT binary patch delta 6883 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 delta 6287 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 W(K+7b+dHXEFD(mRf=~XB>;D1r=0=GC