summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--hash/ti99_cart.xml36
-rw-r--r--src/devices/bus/ti99x/gromport.cpp42
-rw-r--r--src/devices/bus/ti99x/gromport.h11
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 ******************************/