From ade97a9a70bc4193e61f677d1871ea64f03f44ec Mon Sep 17 00:00:00 2001 From: Raimon Zamora Date: Tue, 5 Aug 2025 08:24:45 +0200 Subject: [PATCH] - [NEW] Mode +2A/+3 funcionant, a falta de la unitat de disc --- main.cpp | 7 +++++ plus3.rom | Bin 0 -> 65536 bytes zx_mem.cpp | 85 ++++++++++++++++++++++++++++++++++++++++++++++++-- zx_system.cpp | 20 ++++++++++++ zx_system.h | 2 +- 5 files changed, 110 insertions(+), 4 deletions(-) create mode 100644 plus3.rom diff --git a/main.cpp b/main.cpp index d755dbb..47e9678 100644 --- a/main.cpp +++ b/main.cpp @@ -88,6 +88,12 @@ namespace actions return 0; } + int modePlus3(int value) + { + zx_system::reset(ZX_PLUS3); + return 0; + } + int reset(int value) { z80::reset(); @@ -118,6 +124,7 @@ void init_menu() menu = ui::menu::addsubmenu("SYSTEM"); ui::menu::addoption(menu, "ZX 48K", actions::mode48K); ui::menu::addoption(menu, "ZX 128K/+2", actions::mode128K); + ui::menu::addoption(menu, "ZX +2A/+3", actions::modePlus3); ui::menu::addseparator(menu); ui::menu::addoption(menu, "RESET", actions::reset); diff --git a/plus3.rom b/plus3.rom new file mode 100644 index 0000000000000000000000000000000000000000..ba17cabc3c390575e88cb9b60aca222629146575 GIT binary patch literal 65536 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 literal 0 HcmV?d00001 diff --git a/zx_mem.cpp b/zx_mem.cpp index 3cfea3d..fcd584d 100644 --- a/zx_mem.cpp +++ b/zx_mem.cpp @@ -8,6 +8,10 @@ #define ZX_128MEM_ROM 0x10 #define ZX_128MEM_DISPAG 0x20 +#define ZX_2A_3_PAGING_MODE 0x01 +#define ZX_2A_3_HROM 0x04 +#define ZX_2A_3_SPECIAL 0x06 + namespace mem { uint8_t mode = ZX_48K; @@ -18,9 +22,11 @@ namespace mem uint8_t *slot[8]; bool writable[8]; - uint8_t config_128K; + uint8_t config_128K = 0; + uint8_t config_2A_3 = 0; void zx_128_port_out(int port, int val); + void zx_2A_3_port_out(int port, int val); void init(uint8_t mode) { @@ -77,6 +83,28 @@ namespace mem z80::connect_port(0x7ffd, 0x8002, nullptr, mem::zx_128_port_out); break; + case ZX_PLUS3: + ram_size = 128*1024; + ram = (uint8_t*)malloc(ram_size); + for (int i=0x0000; i>1) + { + case 0: + slot[0] = &ram[0*8192]; slot[1] = &ram[1*8192]; + slot[2] = &ram[2*8192]; slot[3] = &ram[3*8192]; + slot[4] = &ram[4*8192]; slot[5] = &ram[5*8192]; + slot[6] = &ram[6*8192]; slot[7] = &ram[7*8192]; + break; + case 1: + slot[0] = &ram[8*8192]; slot[1] = &ram[9*8192]; + slot[2] = &ram[10*8192]; slot[3] = &ram[11*8192]; + slot[4] = &ram[12*8192]; slot[5] = &ram[13*8192]; + slot[6] = &ram[14*8192]; slot[7] = &ram[15*8192]; + break; + case 2: + slot[0] = &ram[8*8192]; slot[1] = &ram[9*8192]; + slot[2] = &ram[10*8192]; slot[3] = &ram[11*8192]; + slot[4] = &ram[12*8192]; slot[5] = &ram[13*8192]; + slot[6] = &ram[6*8192]; slot[7] = &ram[7*8192]; + break; + case 3: + slot[0] = &ram[8*8192]; slot[1] = &ram[9*8192]; + slot[2] = &ram[14*8192]; slot[3] = &ram[15*8192]; + slot[4] = &ram[12*8192]; slot[5] = &ram[13*8192]; + slot[6] = &ram[6*8192]; slot[7] = &ram[7*8192]; + break; + } + } else { + writable[0] = writable[1] = false; + for (int i=2;i<8;++i) writable[i] = true; + uint8_t hrom = (config_2A_3 & ZX_2A_3_HROM) ? 4 : 0; + if (config_128K & ZX_128MEM_ROM) { + slot[0] = &rom[(hrom+2)*8192]; slot[1] = &rom[(hrom+3)*8192]; + } else { + slot[0] = &rom[(hrom+0)*8192]; slot[1] = &rom[(hrom+1)*8192]; + } + } + } } diff --git a/zx_system.cpp b/zx_system.cpp index b880171..d20fe51 100644 --- a/zx_system.cpp +++ b/zx_system.cpp @@ -63,6 +63,26 @@ namespace zx_system registerUpdatable(speaker::update); //registerUpdatable(zxscreen::refresh); + return clock / 10; + break; + } + case ZX_PLUS3: + { + const uint32_t clock = 3546900; + z80::init(clock); + z80::connect_port(0xfe, 0x0001, zx_ula::port_in, zx_ula::port_out); + mem::init(ZX_PLUS3); + zxscreen::init(SCREEN_MODE_128K); + audio::init(); + speaker::init(); + speaker::register_source(zx_ula::get_sample); + speaker::register_source(audio::get_sample); + + registerUpdatable(zx_tape::update); + registerUpdatable(audio::update); + registerUpdatable(speaker::update); + //registerUpdatable(zxscreen::refresh); + return clock / 10; break; } diff --git a/zx_system.h b/zx_system.h index 18455e8..638c6f7 100644 --- a/zx_system.h +++ b/zx_system.h @@ -4,7 +4,7 @@ #define ZX_NOCHANGE 0x00 #define ZX_48K 0x01 #define ZX_128K 0x02 -#define ZX_2A_3 0x03 +#define ZX_PLUS3 0x03 #define ZX_NEXT 0x04 namespace zx_system