diff options
-rw-r--r-- | hash/ti99_cart.xml | 36 | ||||
-rw-r--r-- | src/devices/bus/ti99x/gromport.cpp | 42 | ||||
-rw-r--r-- | src/devices/bus/ti99x/gromport.h | 11 |
3 files changed, 73 insertions, 16 deletions
diff --git a/hash/ti99_cart.xml b/hash/ti99_cart.xml index d53599d2e3e..d49cdd7d7ee 100644 --- a/hash/ti99_cart.xml +++ b/hash/ti99_cart.xml @@ -4405,4 +4405,40 @@ </dataarea> </part> </software> + +<!-- Softlist entry for MiniMemory --> + <software name="minimem"> + <description>Mini Memory</description> + <year>1981</year> + <publisher>Texas Instruments</publisher> + <info name="serial" value="PHM 3058"/> + <part name="cart" interface="ti99_cart"> + <feature name="pcb" value="minimem" /> + <dataarea name="grom_socket" size="0x1800"> + <rom name="phm3058g3.bin" size="0x1800" crc="e2fc7485" sha1="ab62d115b0a9357bc9c988020a8d75f1642981e8" offset="0x0000" /> + </dataarea> + <dataarea name="rom_socket" size="0x1000"> + <rom name="phm3058c.bin" size="0x1000" crc="c705118e" sha1="5c037b5ff34320921da142fc2038de35807b51e9" offset="0x0000" /> + </dataarea> + <dataarea name="nvram" size="4096"> + </dataarea> + </part> + </software> + +<!-- Softlist entry for SuperSpace2 cartridge --> + <software name="supersp2"> + <description>SuperSpace II</description> + <year>1986</year> + <publisher>DataBioTics</publisher> + <info name="serial" value="DBC2SS"/> + <part name="cart" interface="ti99_cart"> + <feature name="pcb" value="super" /> + <dataarea name="grom_socket" size="0x1800"> + <rom name="phm3055g3.bin" size="0x1800" crc="2abf46b5" sha1="9686225c4aa04dcb42d7029ad3d7a31344eae361" offset="0x0000" /> + </dataarea> + <dataarea name="nvram" size="32768"> + </dataarea> + </part> + </software> + </softwarelist> diff --git a/src/devices/bus/ti99x/gromport.cpp b/src/devices/bus/ti99x/gromport.cpp index 3bbb9528cd5..50ad69e0dcd 100644 --- a/src/devices/bus/ti99x/gromport.cpp +++ b/src/devices/bus/ti99x/gromport.cpp @@ -218,12 +218,6 @@ void gromport_device::device_reset() m_reset_on_insert = (ioport("CARTRESET")->read()==0x01); } -// void gromport_device::set_grom_base(UINT16 grombase, UINT16 grommask) -// { - // m_grombase = grombase; - // m_grommask = grommask; -// } - /* Shall we reset the console when a cartridge has been inserted? This is triggered by the cartridge by pulling down /RESET via a capacitor. @@ -1160,6 +1154,9 @@ static const pcb_type sw_pcbdefs[] = { { PCB_STANDARD, "standard" }, { PCB_PAGED, "paged" }, + { PCB_MINIMEM, "minimem" }, + { PCB_SUPER, "super" }, + { PCB_MBX, "mbx" }, { PCB_GROMEMU, "gromemu" }, { 0, nullptr} }; @@ -1235,8 +1232,27 @@ void ti99_cartridge_device::prepare_cartridge() memcpy(regr->base() + 0x2000, rom_ptr, rom2_length); } - // NVRAM cartridges are not supported by softlists (we need to find a way to load the nvram contents first) - if (!m_softlist) + // (NV)RAM cartridges + if (m_softlist) + { + // Do we have NVRAM? + if (get_software_region("nvram")!=nullptr) + { + m_pcb->m_ram_size = get_software_region_length("nvram"); + m_pcb->m_nvram.resize(m_pcb->m_ram_size); + m_pcb->m_ram_ptr = &m_pcb->m_nvram[0]; + battery_load(m_pcb->m_ram_ptr, m_pcb->m_ram_size, 0xff); + } + + // Do we have RAM? + if (get_software_region("ram")!=nullptr) + { + m_pcb->m_ram_size = get_software_region_length("ram"); + m_pcb->m_ram.resize(m_pcb->m_ram_size); + m_pcb->m_ram_ptr = &m_pcb->m_ram[0]; + } + } + else { m_pcb->m_ram_size = m_rpk->get_resource_length("ram_socket"); if (m_pcb->m_ram_size > 0) @@ -1364,6 +1380,16 @@ void ti99_cartridge_device::call_unload() m_rpk->close(); // will write NVRAM contents delete m_rpk; } + else + { + // Softlist + bool has_nvram = (get_software_region("nvram")!=nullptr); + if (has_nvram) + { + int nvsize = get_software_region_length("nvram"); + battery_save(m_pcb->m_ram_ptr, nvsize); + } + } delete m_pcb; m_pcb = nullptr; diff --git a/src/devices/bus/ti99x/gromport.h b/src/devices/bus/ti99x/gromport.h index dd6842300b3..4a71f05f99b 100644 --- a/src/devices/bus/ti99x/gromport.h +++ b/src/devices/bus/ti99x/gromport.h @@ -1,11 +1,9 @@ // license:LGPL-2.1+ // copyright-holders:Michael Zapf /*************************************************************************** - Gromport of the TI-99 consoles + Gromport (Cartridge port) of the TI-99 consoles For details see gromport.c - - Michael Zapf, July 2012 ***************************************************************************/ #ifndef __GROMPORT__ @@ -42,9 +40,6 @@ public: template<class _Object> static devcb_base &static_set_reset_callback(device_t &device, _Object object) { return downcast<gromport_device &>(device).m_console_reset.set_callback(object); } void cartridge_inserted(); - // void set_grom_base(UINT16 grombase, UINT16 grommask); - // UINT16 get_grom_base() { return m_grombase; } - // UINT16 get_grom_mask() { return m_grommask; } protected: virtual void device_start() override; @@ -59,8 +54,6 @@ private: devcb_write_line m_console_reset; int m_mask; int m_romgq; - // UINT16 m_grombase; - // UINT16 m_grommask; }; SLOT_INTERFACE_EXTERN(gromport4); @@ -338,6 +331,8 @@ protected: int m_grom_address; // for gromemu int m_ram_page; // for super const char* m_tag; + dynamic_buffer m_nvram; // for MiniMemory + dynamic_buffer m_ram; // for MBX }; /******************** Standard cartridge ******************************/ |