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>
</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>

View File

@ -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;

View File

@ -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 ******************************/