From a105ecb62481c3d7b1ab951b17e09e9b76b41e4b Mon Sep 17 00:00:00 2001 From: Michael Zapf Date: Sat, 30 Apr 2016 00:34:00 +0200 Subject: [PATCH] ti99: Adding cartridge types to softlist --- hash/ti99_cart.xml | 36 +++++++++++++++++++++++++ src/devices/bus/ti99x/gromport.cpp | 42 ++++++++++++++++++++++++------ 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 @@ + + + + Mini Memory + 1981 + Texas Instruments + + + + + + + + + + + + + + + + + SuperSpace II + 1986 + DataBioTics + + + + + + + + + + + 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 static devcb_base &static_set_reset_callback(device_t &device, _Object object) { return downcast(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 ******************************/