diff options
author | hap <happppp@users.noreply.github.com> | 2021-02-01 15:08:07 +0100 |
---|---|---|
committer | hap <happppp@users.noreply.github.com> | 2021-02-01 15:08:23 +0100 |
commit | 9868d8322f99f9a495cbbd39ddc5a7740f2d8e2e (patch) | |
tree | 77e4d0748580852a146bb3a82c8a037fbb899a02 | |
parent | f891a3c7578400839963cbc10b8d8b91cf728411 (diff) |
odyssey2/homecomp: make ram size configurable
-rw-r--r-- | src/devices/bus/odyssey2/homecomp.cpp | 38 | ||||
-rw-r--r-- | src/devices/bus/odyssey2/homecomp.h | 4 | ||||
-rw-r--r-- | src/devices/machine/ram.cpp | 7 | ||||
-rw-r--r-- | src/devices/machine/ram.h | 2 | ||||
-rw-r--r-- | src/mame/drivers/fidel_eag68k.cpp | 1 | ||||
-rw-r--r-- | src/mame/drivers/saitek_risc2500.cpp | 4 |
6 files changed, 52 insertions, 4 deletions
diff --git a/src/devices/bus/odyssey2/homecomp.cpp b/src/devices/bus/odyssey2/homecomp.cpp index fed8adf6b5f..3357bec193d 100644 --- a/src/devices/bus/odyssey2/homecomp.cpp +++ b/src/devices/bus/odyssey2/homecomp.cpp @@ -12,6 +12,9 @@ Hardware notes: - 2*8KB ROM, 16KB RAM(2*TMS4416, 2 unpopulated sockets) - optional data recorder +The RAM can be expanded to 32KB by simply adding two more TMS4416. To enable it, +enter command CLEAR 50,-2 + TODO: - lots of unacknowledged writes to latch 1, probably harmless - cassette data saved from MAME can be loaded fine, but other WAVs can't, even @@ -41,6 +44,23 @@ o2_homecomp_device::o2_homecomp_device(const machine_config &mconfig, const char void o2_homecomp_device::device_start() { save_item(NAME(m_control)); + save_item(NAME(m_installed)); + + // allocate maximum RAM beforehand + m_ram = std::make_unique<u8[]>(0x8000); + save_pointer(NAME(m_ram), 0x8000); +} + +void o2_homecomp_device::device_reset() +{ + if (!m_installed) + { + // install RAM + u32 ramsize = ioport("RAM")->read() ? 0x8000 : 0x4000; + m_maincpu->space(AS_PROGRAM).install_ram(0x8000, ramsize - 1 + 0x8000, m_ram.get()); + + m_installed = true; + } } void o2_homecomp_device::cart_init() @@ -51,6 +71,23 @@ void o2_homecomp_device::cart_init() //------------------------------------------------- +// input_ports - device-specific input ports +//------------------------------------------------- + +static INPUT_PORTS_START( homecomp ) + PORT_START("RAM") + PORT_CONFNAME( 0x01, 0x00, "RAM Size" ) + PORT_CONFSETTING( 0x00, "16KB" ) + PORT_CONFSETTING( 0x01, "32KB" ) // unofficial +INPUT_PORTS_END + +ioport_constructor o2_homecomp_device::device_input_ports() const +{ + return INPUT_PORTS_NAME(homecomp); +} + + +//------------------------------------------------- // internal i/o //------------------------------------------------- @@ -107,7 +144,6 @@ void o2_homecomp_device::internal_io_w(offs_t offset, u8 data) void o2_homecomp_device::homecomp_mem(address_map &map) { map(0x0000, 0x3fff).r(FUNC(o2_homecomp_device::internal_rom_r)); - map(0x8000, 0xbfff).ram(); } void o2_homecomp_device::homecomp_io(address_map &map) diff --git a/src/devices/bus/odyssey2/homecomp.h b/src/devices/bus/odyssey2/homecomp.h index 6ecc67f1184..7971afbff02 100644 --- a/src/devices/bus/odyssey2/homecomp.h +++ b/src/devices/bus/odyssey2/homecomp.h @@ -30,7 +30,9 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_reset() override; virtual void device_add_mconfig(machine_config &config) override; + virtual ioport_constructor device_input_ports() const override; virtual void cart_init() override; @@ -54,7 +56,9 @@ private: void homecomp_io(address_map &map); void homecomp_mem(address_map &map); + std::unique_ptr<u8[]> m_ram; u8 m_control = 0; + bool m_installed = false; }; // device type definition diff --git a/src/devices/machine/ram.cpp b/src/devices/machine/ram.cpp index 3f8cfd94d51..623cbea1af0 100644 --- a/src/devices/machine/ram.cpp +++ b/src/devices/machine/ram.cpp @@ -1,11 +1,16 @@ // license:BSD-3-Clause -// copyright-holders: Dirk Best +// copyright-holders:Nathan Woods, Dirk Best /************************************************************************* RAM device Provides a configurable amount of RAM to drivers + Limitations due to hardcoded RAM_TAG: + - *configurable* RAM device can only be added to root device + (that is the driver device) + - can only have one *configurable* RAM device per machine driver + **************************************************************************/ #include "emu.h" diff --git a/src/devices/machine/ram.h b/src/devices/machine/ram.h index 2af1f800ab4..34bf7949db3 100644 --- a/src/devices/machine/ram.h +++ b/src/devices/machine/ram.h @@ -1,5 +1,5 @@ // license:BSD-3-Clause -// copyright-holders: Dirk Best +// copyright-holders:Nathan Woods, Dirk Best /************************************************************************* RAM device diff --git a/src/mame/drivers/fidel_eag68k.cpp b/src/mame/drivers/fidel_eag68k.cpp index 016d1071ae4..dd16ef8b581 100644 --- a/src/mame/drivers/fidel_eag68k.cpp +++ b/src/mame/drivers/fidel_eag68k.cpp @@ -643,6 +643,7 @@ void eag_state::eagv2(machine_config &config) /* basic machine hardware */ RAM(config, m_ram).set_extra_options("128K, 512K, 1M"); m_ram->set_default_size("128K"); + m_ram->set_default_value(0); } void eag_state::eagv3(machine_config &config) diff --git a/src/mame/drivers/saitek_risc2500.cpp b/src/mame/drivers/saitek_risc2500.cpp index 681b84376a9..9de8adc73ed 100644 --- a/src/mame/drivers/saitek_risc2500.cpp +++ b/src/mame/drivers/saitek_risc2500.cpp @@ -305,7 +305,9 @@ void risc2500_state::risc2500(machine_config &config) m_board->set_delay(attotime::from_msec(100)); m_board->set_nvram_enable(true); - RAM(config, m_ram).set_default_size("2M").set_extra_options("128K, 256K, 512K, 1M, 2M"); + RAM(config, m_ram).set_extra_options("128K, 256K, 512K, 1M, 2M"); + m_ram->set_default_size("2M"); + m_ram->set_default_value(0); NVRAM(config, "nvram", nvram_device::DEFAULT_NONE); |