ti99: Adding cartridge types to softlist

This commit is contained in:
Michael Zapf 2016-04-30 00:34:00 +02:00
parent a5095efde7
commit a105ecb624
3 changed files with 73 additions and 16 deletions

View File

@ -4405,4 +4405,40 @@
</dataarea> </dataarea>
</part> </part>
</software> </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> </softwarelist>

View File

@ -218,12 +218,6 @@ void gromport_device::device_reset()
m_reset_on_insert = (ioport("CARTRESET")->read()==0x01); 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? Shall we reset the console when a cartridge has been inserted?
This is triggered by the cartridge by pulling down /RESET via a capacitor. 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_STANDARD, "standard" },
{ PCB_PAGED, "paged" }, { PCB_PAGED, "paged" },
{ PCB_MINIMEM, "minimem" },
{ PCB_SUPER, "super" },
{ PCB_MBX, "mbx" },
{ PCB_GROMEMU, "gromemu" }, { PCB_GROMEMU, "gromemu" },
{ 0, nullptr} { 0, nullptr}
}; };
@ -1235,8 +1232,27 @@ void ti99_cartridge_device::prepare_cartridge()
memcpy(regr->base() + 0x2000, rom_ptr, rom2_length); 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) // (NV)RAM cartridges
if (!m_softlist) 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"); m_pcb->m_ram_size = m_rpk->get_resource_length("ram_socket");
if (m_pcb->m_ram_size > 0) if (m_pcb->m_ram_size > 0)
@ -1364,6 +1380,16 @@ void ti99_cartridge_device::call_unload()
m_rpk->close(); // will write NVRAM contents m_rpk->close(); // will write NVRAM contents
delete m_rpk; 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; delete m_pcb;
m_pcb = nullptr; m_pcb = nullptr;

View File

@ -1,11 +1,9 @@
// license:LGPL-2.1+ // license:LGPL-2.1+
// copyright-holders:Michael Zapf // copyright-holders:Michael Zapf
/*************************************************************************** /***************************************************************************
Gromport of the TI-99 consoles Gromport (Cartridge port) of the TI-99 consoles
For details see gromport.c For details see gromport.c
Michael Zapf, July 2012
***************************************************************************/ ***************************************************************************/
#ifndef __GROMPORT__ #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); } 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 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: protected:
virtual void device_start() override; virtual void device_start() override;
@ -59,8 +54,6 @@ private:
devcb_write_line m_console_reset; devcb_write_line m_console_reset;
int m_mask; int m_mask;
int m_romgq; int m_romgq;
// UINT16 m_grombase;
// UINT16 m_grommask;
}; };
SLOT_INTERFACE_EXTERN(gromport4); SLOT_INTERFACE_EXTERN(gromport4);
@ -338,6 +331,8 @@ protected:
int m_grom_address; // for gromemu int m_grom_address; // for gromemu
int m_ram_page; // for super int m_ram_page; // for super
const char* m_tag; const char* m_tag;
dynamic_buffer m_nvram; // for MiniMemory
dynamic_buffer m_ram; // for MBX
}; };
/******************** Standard cartridge ******************************/ /******************** Standard cartridge ******************************/