summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/drivers/timex.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/drivers/timex.c')
-rw-r--r--src/mess/drivers/timex.c119
1 files changed, 66 insertions, 53 deletions
diff --git a/src/mess/drivers/timex.c b/src/mess/drivers/timex.c
index 29e1cc6d521..89f3d2ead66 100644
--- a/src/mess/drivers/timex.c
+++ b/src/mess/drivers/timex.c
@@ -547,7 +547,7 @@ MACHINE_RESET_MEMBER(spectrum_state,ts2068)
astring region_tag;
m_dock_crt = memregion(region_tag.cpy(m_dock->tag()).cat(GENERIC_ROM_REGION_TAG));
- m_dock_cart_type = (m_dock->exists()) ? TIMEX_CART_DOCK : TIMEX_CART_NONE;
+ m_dock_cart_type = m_dock_crt ? TIMEX_CART_DOCK : TIMEX_CART_NONE;
ts2068_update_memory();
MACHINE_RESET_CALL_MEMBER(spectrum);
@@ -592,62 +592,71 @@ MACHINE_RESET_MEMBER(spectrum_state,tc2048)
DEVICE_IMAGE_LOAD_MEMBER( spectrum_state, timex_cart )
{
UINT32 size = m_dock->common_get_size("rom");
- UINT8 *DOCK;
- int chunks_in_file = 0;
- dynamic_buffer header;
- header.resize(9);
- if (size % 0x2000 != 9)
+ if (image.software_entry() == NULL)
{
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
- return IMAGE_INIT_FAIL;
- }
- if (image.software_entry() != NULL)
- {
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "Loading from softlist is not supported yet");
- return IMAGE_INIT_FAIL;
- }
-
- m_dock->rom_alloc(0x10000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
- DOCK = m_dock->get_rom_base();
-
- // check header
- image.fread(header, 9);
-
- for (int i = 0; i < 8; i++)
- if (header[i + 1] & 0x02) chunks_in_file++;
-
- if (chunks_in_file * 0x2000 + 0x09 != size)
- {
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
- return IMAGE_INIT_FAIL;
- }
-
- switch (header[0])
- {
- case 0x00: logerror ("DOCK cart\n");
- m_ram_chunks = 0;
- for (int i = 0; i < 8; i++)
- {
- m_ram_chunks = m_ram_chunks | ((header[i + 1] & 0x01) << i);
- if (header[i + 1] & 0x02)
- image.fread(DOCK + i * 0x2000, 0x2000);
- else
+ UINT8 *DOCK;
+ int chunks_in_file = 0;
+ dynamic_buffer header;
+ header.resize(9);
+
+ if (size % 0x2000 != 9)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
+ return IMAGE_INIT_FAIL;
+ }
+ if (image.software_entry() != NULL)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Loading from softlist is not supported yet");
+ return IMAGE_INIT_FAIL;
+ }
+
+ m_dock->rom_alloc(0x10000, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ DOCK = m_dock->get_rom_base();
+
+ // check header
+ image.fread(header, 9);
+
+ for (int i = 0; i < 8; i++)
+ if (header[i + 1] & 0x02) chunks_in_file++;
+
+ if (chunks_in_file * 0x2000 + 0x09 != size)
+ {
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "File corrupted");
+ return IMAGE_INIT_FAIL;
+ }
+
+ switch (header[0])
+ {
+ case 0x00: logerror ("DOCK cart\n");
+ m_ram_chunks = 0;
+ for (int i = 0; i < 8; i++)
{
- if (header[i + 1] & 0x01)
- memset(DOCK + i * 0x2000, 0x00, 0x2000);
+ m_ram_chunks = m_ram_chunks | ((header[i + 1] & 0x01) << i);
+ if (header[i + 1] & 0x02)
+ image.fread(DOCK + i * 0x2000, 0x2000);
else
- memset(DOCK + i * 0x2000, 0xff, 0x2000);
+ {
+ if (header[i + 1] & 0x01)
+ memset(DOCK + i * 0x2000, 0x00, 0x2000);
+ else
+ memset(DOCK + i * 0x2000, 0xff, 0x2000);
+ }
}
- }
- break;
-
- default:
- image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cart type not supported");
- return IMAGE_INIT_FAIL;
+ break;
+
+ default:
+ image.seterror(IMAGE_ERROR_UNSPECIFIED, "Cart type not supported");
+ return IMAGE_INIT_FAIL;
+ }
+
+ logerror ("Cart loaded [Chunks %02x]\n", m_ram_chunks);
+ }
+ else
+ {
+ m_dock->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
+ memcpy(m_dock->get_rom_base(), image.get_software_region("rom"), size);
}
-
- logerror ("Cart loaded [Chunks %02x]\n", m_ram_chunks);
return IMAGE_INIT_PASS;
}
@@ -695,10 +704,14 @@ static MACHINE_CONFIG_DERIVED( ts2068, spectrum_128 )
/* cartridge */
MCFG_DEVICE_REMOVE("cartslot")
- MCFG_GENERIC_CARTSLOT_ADD("dockslot", generic_plain_slot, NULL)
- MCFG_GENERIC_EXTENSIONS("dck")
+ MCFG_GENERIC_CARTSLOT_ADD("dockslot", generic_plain_slot, "timex_cart")
+ MCFG_GENERIC_EXTENSIONS("dck,bin")
MCFG_GENERIC_LOAD(spectrum_state, timex_cart)
+ /* Software lists */
+ MCFG_DEVICE_REMOVE("cart_list")
+ MCFG_SOFTWARE_LIST_ADD("cart_list", "timex_dock")
+
/* internal ram */
MCFG_RAM_MODIFY(RAM_TAG)
MCFG_RAM_DEFAULT_SIZE("48K")