From dd4991f31879bc8c239f7922bc039fde70335c2e Mon Sep 17 00:00:00 2001 From: AJR Date: Sat, 23 May 2026 12:14:31 -0400 Subject: [PATCH] New working software items (a2600.xml) -------------------------------------- Tarzan (prototype) [Hidden Palace, AJR] --- hash/a2600.xml | 12 ++++++++++++ src/devices/bus/vcs/rom.cpp | 29 +++++++++++++++++++++++++++++ src/devices/bus/vcs/rom.h | 12 ++++++++++++ src/devices/bus/vcs/vcs_slot.cpp | 2 ++ src/mame/atari/a2600.cpp | 1 + 5 files changed, 56 insertions(+) diff --git a/hash/a2600.xml b/hash/a2600.xml index 76f4e546e..21f55dcb9 100644 --- a/hash/a2600.xml +++ b/hash/a2600.xml @@ -17034,6 +17034,18 @@ MOS Atari-made game NTSC ROMs had a CO16xxx number and PAL ROMs had CO17xxx numb + + Tarzan (prototype) + 1984 + Coleco + + + + + + + + Task Force 1987 diff --git a/src/devices/bus/vcs/rom.cpp b/src/devices/bus/vcs/rom.cpp index f40591e11..3de513f0e 100644 --- a/src/devices/bus/vcs/rom.cpp +++ b/src/devices/bus/vcs/rom.cpp @@ -41,6 +41,7 @@ DEFINE_DEVICE_TYPE(A26_ROM_4IN1, a26_rom_4in1_device, "vcs_4in1", "Atari VCS DEFINE_DEVICE_TYPE(A26_ROM_8IN1, a26_rom_8in1_device, "vcs_8in1", "Atari VCS 2600 ROM Cart 8 in 1") DEFINE_DEVICE_TYPE(A26_ROM_32IN1, a26_rom_32in1_device, "vcs_32in1", "Atari VCS 2600 ROM Cart 32 in 1") DEFINE_DEVICE_TYPE(A26_ROM_X07, a26_rom_x07_device, "vcs_x07", "Atari VCS 2600 ROM Carts w/X07 bankswitch") +DEFINE_DEVICE_TYPE(A26_ROM_F0, a26_rom_f0_device, "vcs_f0", "Atari VCS 2600 ROM Carts w/F0 bankswitch") @@ -883,3 +884,31 @@ void a26_rom_x07_device::change_bank2(offs_t address) { m_bank->set_entry((address >> 4) & 0x0f); } + + +/*------------------------------------------------- + "F0 Bankswitch" Carts: + read/write access to 0x1ff0-0x1ff1 & 0x1ff8-0x1ff9 + determines the 4K ROM bank to be read + + GAMES: Atari Tarzan (prototype) + + -------------------------------------------------*/ + +a26_rom_f0_device::a26_rom_f0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) + : a26_rom_f6_device(mconfig, A26_ROM_F0, tag, owner, clock) +{ +} + +void a26_rom_f0_device::install_memory_handlers(address_space *space) +{ + m_bank->configure_entries(0, 4, get_rom_base(), 0x1000); + space->install_read_bank(0x1000, 0x1fff, m_bank); + space->install_write_handler(0x1ff0, 0x1ff1, write8sm_delegate(*this, FUNC(a26_rom_f0_device::switch_bank))); + space->install_write_handler(0x1ff8, 0x1ff9, write8sm_delegate(*this, [this] (offs_t offset, u8) { switch_bank(offset + 2, 0); }, "bank")); + install_super_chip_handlers(space); + space->install_read_tap(0x1ff0, 0x1ff1, "bank", + [this] (offs_t address, u8 &, u8) { if (!machine().side_effects_disabled()) switch_bank(address - 0x1ff0, 0); }); + space->install_read_tap(0x1ff8, 0x1ff9, "bank", + [this] (offs_t address, u8 &, u8) { if (!machine().side_effects_disabled()) switch_bank(address - 0x1ff8 + 2, 0); }); +} diff --git a/src/devices/bus/vcs/rom.h b/src/devices/bus/vcs/rom.h index 3bd20c686..70de5f9c6 100644 --- a/src/devices/bus/vcs/rom.h +++ b/src/devices/bus/vcs/rom.h @@ -360,6 +360,17 @@ private: }; +// ======================> a26_rom_f0_device + +class a26_rom_f0_device : public a26_rom_f6_device +{ +public: + a26_rom_f0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual void install_memory_handlers(address_space *space) override; +}; + + // device type definition DECLARE_DEVICE_TYPE(A26_ROM_2K_4K, a26_rom_2k_4k_device) @@ -382,6 +393,7 @@ DECLARE_DEVICE_TYPE(A26_ROM_4IN1, a26_rom_4in1_device) DECLARE_DEVICE_TYPE(A26_ROM_8IN1, a26_rom_8in1_device) DECLARE_DEVICE_TYPE(A26_ROM_32IN1, a26_rom_32in1_device) DECLARE_DEVICE_TYPE(A26_ROM_X07, a26_rom_x07_device) +DECLARE_DEVICE_TYPE(A26_ROM_F0, a26_rom_f0_device) #endif // MAME_BUS_VCS_ROM_H diff --git a/src/devices/bus/vcs/vcs_slot.cpp b/src/devices/bus/vcs/vcs_slot.cpp index 344071724..8a7a9cef6 100644 --- a/src/devices/bus/vcs/vcs_slot.cpp +++ b/src/devices/bus/vcs/vcs_slot.cpp @@ -50,6 +50,7 @@ enum A26_CM, A26_X07, A26_HARMONY, + A26_F0, }; //------------------------------------------------- @@ -175,6 +176,7 @@ static const vcs_slot slot_list[] = { A26_32IN1, "a26_32in1" }, { A26_X07, "a26_x07" }, { A26_HARMONY, "a26_harmony" }, + { A26_F0, "a26_f0" }, }; static int vcs_get_pcb_id(const char *slot) diff --git a/src/mame/atari/a2600.cpp b/src/mame/atari/a2600.cpp index 21b408f5d..12f616c32 100644 --- a/src/mame/atari/a2600.cpp +++ b/src/mame/atari/a2600.cpp @@ -587,6 +587,7 @@ static void a2600_cart(device_slot_interface &device) device.option_add("a26_32in1", A26_ROM_32IN1); device.option_add("a26_x07", A26_ROM_X07); device.option_add("a26_harmony", A26_ROM_HARMONY); + device.option_add("a26_f0", A26_ROM_F0); } void a2600_cons_state::a2600_cartslot(machine_config &config)