summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-02-12 14:57:59 +0000
committer GitHub <noreply@github.com>2020-02-12 09:57:59 -0500
commit8de1502e81c325166bbb4a6ee819ce939772f94b (patch)
tree01d454d9fcd205abcc0028eb5522536480db77c7
parentb4746a94a4376168466b6c41b661008f438cf2e5 (diff)
Plug and Play work (#6295)
* new WORKING machines ---- Guitar Super Star (Fender Stratocaster style) [Sean Riddle, David Haywood] * better filename (nw) * new NOT WORKING ---- Excite Sports Tennis x Fitness (Japan) [Sean Riddle, Peter Wilhelmsen, ShouTime] * shuffle (nw) * new NOT WORKING ---- Wikid Joystick [TeamEurope, David Haywood] * new Software List entries (Mobigo.xml) [TeamEurope] Rapunzel - Neu Verfohnt (Germany) (80-251704) Cars 2 (Germany) (80-251904) Die Pinguine aus Madagascar - Operation Krone (Germany) (80-250304) Micky Maus - Wunderhaus (Germany) (80-250504) Ben 10 - UltimateAlien - Mine der Gedanken (Germany) (80-250604) Dora - Tag des Zwillings (Germany) (80-250804) Disney Princess (Germany) (80-251104) Cars Toon - Hooks unglaubliche Geschichten (Germany) (80-251204) * new Software List entries (telestory_cart.xml) [TeamEurope, David Haywood] Power Rangers - Mystic Force Dora the Explorer (Spanish) * new NOT WORKING --- TV Touch Games: Star Wars Original Trilogy [Sean Riddle, David Haywood] * srcclean some of my stuff (nw) * shuffle (nw) * shuffle (nw) * new NOT WORKING --- Big Buck Hunter Safari (JAKKS Pacific TV Game) [Sean Riddle, David Haywood] * (nw) * (nw) * (nw)
-rw-r--r--hash/buzztime_cart.xml10
-rw-r--r--hash/casio_rompack.xml4
-rw-r--r--hash/jakks_gamekey_nm.xml8
-rw-r--r--hash/mobigo_cart.xml102
-rw-r--r--hash/smarttv_cart.xml2
-rw-r--r--hash/telestory_cart.xml28
-rw-r--r--scripts/target/mame/mess.lua8
-rw-r--r--src/devices/machine/sunplus_gcm394.cpp16
-rw-r--r--src/mame/drivers/casio_rompack.cpp14
-rw-r--r--src/mame/drivers/elan_eu3a05.cpp6
-rw-r--r--src/mame/drivers/nes_sh6578.cpp14
-rw-r--r--src/mame/drivers/nes_vt.cpp6
-rw-r--r--src/mame/drivers/spg29x.cpp (renamed from src/mame/drivers/hyperscan.cpp)128
-rw-r--r--src/mame/drivers/spg29x_lexibook_jg7425.cpp (renamed from src/mame/drivers/lexibook_jg7425.cpp)0
-rw-r--r--src/mame/drivers/spg2xx.cpp32
-rw-r--r--src/mame/drivers/spg2xx_jakks.cpp172
-rw-r--r--src/mame/drivers/spg2xx_lexibook.cpp2
-rw-r--r--src/mame/drivers/spg2xx_mysprtch.cpp18
-rw-r--r--src/mame/drivers/spg2xx_zone.cpp8
-rw-r--r--src/mame/drivers/sunplus_unsp20soc.cpp (renamed from src/mame/drivers/sunplus_gcm394.cpp)300
-rw-r--r--src/mame/drivers/sunplus_unsp20soc_mobigo.cpp91
-rw-r--r--src/mame/drivers/vtech_mobigo.cpp78
-rw-r--r--src/mame/drivers/xavix.cpp27
-rw-r--r--src/mame/includes/sunplus_unsp20soc.h302
-rw-r--r--src/mame/machine/elan_eu3a05gpio.h2
-rw-r--r--src/mame/mame.lst25
-rw-r--r--src/mame/mess.flt8
-rw-r--r--src/mame/video/xavix.cpp38
28 files changed, 951 insertions, 498 deletions
diff --git a/hash/buzztime_cart.xml b/hash/buzztime_cart.xml
index 424420b4345..c1e0dcb5d6a 100644
--- a/hash/buzztime_cart.xml
+++ b/hash/buzztime_cart.xml
@@ -14,7 +14,7 @@
</dataarea>
</part>
</software>
-
+
<software name="history" supported="no">
<description>Series 1 - History Trivia</description>
<year>200?</year>
@@ -25,7 +25,7 @@
</dataarea>
</part>
</software>
-
+
<software name="everytng" supported="no">
<description>Series 1 - Everything Trivia</description>
<year>200?</year>
@@ -35,8 +35,8 @@
<rom name="buzztimeseries1everything.bin" size="0x200000" crc="84acabd9" sha1="cbbda9134bd899a3ec0b91664a3db0f986d5636b"/>
</dataarea>
</part>
- </software>
-
+ </software>
+
<software name="sports" supported="no">
<description>Series 1 - Sports Trivia</description>
<year>200?</year>
@@ -46,6 +46,6 @@
<rom name="buzztimeseries1sports.bin" size="0x200000" crc="b1f00f7a" sha1="4a99f06831fd265a5f7c11d20a212baab0c0a707"/>
</dataarea>
</part>
- </software>
+ </software>
</softwarelist>
diff --git a/hash/casio_rompack.xml b/hash/casio_rompack.xml
index a068ca1ee08..a6bea615b0f 100644
--- a/hash/casio_rompack.xml
+++ b/hash/casio_rompack.xml
@@ -112,7 +112,7 @@
</dataarea>
</part>
</software>
-
+
<software name="ro251" supported="no">
<description>How to Play your Casio ROM Keyboard (RO-251)</description>
<year>1984</year>
@@ -122,6 +122,6 @@
<rom name="ro251.bin" size="0x1800" crc="6bfd4921" sha1="6b57f18f2f170c01dc929f60b55a0535e041a09d"/>
</dataarea>
</part>
- </software>
+ </software>
</softwarelist>
diff --git a/hash/jakks_gamekey_nm.xml b/hash/jakks_gamekey_nm.xml
index 1fbf9266916..91f12c6d005 100644
--- a/hash/jakks_gamekey_nm.xml
+++ b/hash/jakks_gamekey_nm.xml
@@ -6,7 +6,7 @@
<!-- for test mode, hold UP, press A, press DOWN -->
<!-- This was sold as a standalone key, without any bundled units to use it with -->
-
+
<software name="pacbos"> <!-- has SEEPROM -->
<description>Pac-Man &amp; Bosconian (01 APR 2005 A SKU G)</description>
<year>2005</year>
@@ -17,10 +17,10 @@
<rom name="pacmanbosconiangk.bin" size="0x100000" crc="036a99ed" sha1="75dd2744636c1ab4825ba8c31d63658eefe62cc5" offset="0" />
</dataarea>
</part>
- </software>
-
+ </software>
+
<!-- These were both sold bundled with units -->
-
+
<software name="nrxdig"> <!-- has SEEPROM -->
<description>New Rally X &amp; Dig Dug (01 APR 2005 A SKU E)</description>
<year>2005</year>
diff --git a/hash/mobigo_cart.xml b/hash/mobigo_cart.xml
index 5e16eaf1a4c..63eb5e411c0 100644
--- a/hash/mobigo_cart.xml
+++ b/hash/mobigo_cart.xml
@@ -1,12 +1,12 @@
<?xml version="1.0"?>
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="mobigo_cart" description="VTech Mobigo Cartridges">
-
- <!-- 52-250704 - Mobigo 2 Game Cartridge (Internal Game) (GER) is a dummy cartridge to enable the game in the BIOS -->
+
+ <!-- 52-250704 - Mobigo 2 Game Cartridge (Internal Game) (ger) is a dummy cartridge to enable the game in the BIOS -->
<software name="kfpand2" supported="no">
<description>Kung Fu Panda 2 (Germany) (80-252004)</description>
- <year>200?</year>
+ <year>201?</year>
<publisher>VTech</publisher>
<part name="cart" interface="mobigo_cart">
<dataarea name="rom" size="0x1000000">
@@ -14,17 +14,105 @@
</dataarea>
</part>
</software>
-
+
+ <software name="penmad" supported="no">
+ <description>Die Pinguine aus Madagascar - Operation Krone (Germany) (80-250304)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-250304 - die pinguine aus madagascar - operation krone (ger).bin" size="0x1000000" crc="847620f3" sha1="0cc8449ba6fabb1b5dc6045171e978d25fcff1c8"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="mmwunder" supported="no">
+ <description>Micky Maus - Wunderhaus (Germany) (80-250504)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-250504 - micky maus - wunderhaus (ger).bin" size="0x1000000" crc="90467973" sha1="7abcf0064ad961b6a22f43cf78158a8e37905800"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="ben10" supported="no">
+ <description>Ben 10 - UltimateAlien - Mine der Gedanken (Germany) (80-250604)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-250604 - ben 10 - ultimatealien - mine der gedanken (ger).bin" size="0x1000000" crc="22dcb2b8" sha1="12628f4ae7cf6e059dd5e7db99e3080dc804cf27"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dora" supported="no">
+ <description>Dora - Tag des Zwillings (Germany) (80-250804)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-250804 - dora - tag des zwillings (ger).bin" size="0x1000000" crc="4d38d6be" sha1="fe6ec3c4febb91f7f5d2450ce1a8a78956e2c453"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dprinces" supported="no">
+ <description>Disney Princess (Germany) (80-251104)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-251104 - disney princess (ger).bin" size="0x1000000" crc="3919d5c1" sha1="1ee7bed2ed36dca4bcedfef382fdfb75f47f19fb"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="carstoon" supported="no">
+ <description>Cars Toon - Hooks unglaubliche Geschichten (Germany) (80-251204)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-251204 - cars toon - hooks unglaubliche geschichten (ger).bin" size="0x1000000" crc="d36ea48d" sha1="aaa90b3b44a77ea0dd013b38c7d789e23e4a6f55"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="rapunzel" supported="no">
+ <description>Rapunzel - Neu Verfohnt (Germany) (80-251704)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-251704 - rapunzel - neu verfohnt (ger).bin" size="0x1000000" crc="23cd9cd4" sha1="ef9ee2f21ff741668d65ea343f4b47e4472fada7"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="cars2" supported="no">
+ <description>Cars 2 (Germany) (80-251904)</description>
+ <year>201?</year>
+ <publisher>VTech</publisher>
+ <part name="cart" interface="mobigo_cart">
+ <dataarea name="rom" size="0x1000000">
+ <rom name="80-251904 - cars 2 (ger).bin" size="0x1000000" crc="9c3ae94a" sha1="ed7c52e7121a337a662c9196499d4ff8a1482f96"/>
+ </dataarea>
+ </part>
+ </software>
+
<!-- this is from a special large scale Kiosk unit, which should also have a unique BIOS. Maybe move into driver as a hardcodd cart once BIOS is dumped rather than having it here? -->
<software name="kiosk" supported="no">
<description>Mobigo Kiosk (Germany)</description>
- <year>200?</year>
+ <year>201?</year>
<publisher>VTech</publisher>
<part name="cart" interface="mobigo_cart">
<dataarea name="rom" size="0x2000000">
<rom name="mobigo kiosk cartridge (ger).bin" size="0x2000000" crc="8026b80d" sha1="ded9e5dcf89f30b6011e826da466f7cd6bbd5a2d"/>
</dataarea>
</part>
- </software>
-
+ </software>
+
</softwarelist>
diff --git a/hash/smarttv_cart.xml b/hash/smarttv_cart.xml
index 11c2b678c9c..70496ddea10 100644
--- a/hash/smarttv_cart.xml
+++ b/hash/smarttv_cart.xml
@@ -2,7 +2,7 @@
<!DOCTYPE softwarelist SYSTEM "softwarelist.dtd">
<softwarelist name="smarttv_cart" description="WinFun KidConnection SmarTV Adventures / Funtastic TV Adventures cartridges">
-
+
<software name="amuseprk" supported="no">
<description>Amusement Park</description>
<year>200?</year>
diff --git a/hash/telestory_cart.xml b/hash/telestory_cart.xml
index a9a4c773286..2529a81d9ed 100644
--- a/hash/telestory_cart.xml
+++ b/hash/telestory_cart.xml
@@ -54,7 +54,7 @@ Undumped carts:
<software name="cinders" supported="no">
<description>La Cenicienta - Bellezas en Flor / Cinderella - Beauties in Bloom (Spain)</description>
<year>2006</year>
- <publisher>JAKKS Pacific / Toymax</publisher>
+ <publisher>JAKKS Pacific / Toymax / Handheld Games</publisher>
<part name="cart" interface="telestory_cart">
<dataarea name="rom" size="0x400000">
<rom name="telestorycinderellasp.bin" size="0x400000" crc="e1b2fd69" sha1="0f3109f30672dacbf52668d485eeed51829993a9"/>
@@ -65,7 +65,7 @@ Undumped carts:
<software name="poohs" supported="no">
<description>Winnie the Pooh - Salta, Tigger, Salta / Winnie the Pooh - Bounce, Tigger, Bounce (Spain)</description>
<year>2006</year>
- <publisher>JAKKS Pacific / Toymax</publisher>
+ <publisher>JAKKS Pacific / Toymax / Handheld Games</publisher>
<part name="cart" interface="telestory_cart">
<dataarea name="rom" size="0x400000">
<rom name="telestorypoohsp.bin" size="0x400000" crc="f0ef00e8" sha1="bc407c127a64f6b5cfcf3239f1af3d7896d5a6c2"/>
@@ -76,7 +76,7 @@ Undumped carts:
<software name="lionkings" supported="no">
<description>El Rey León II - El orgullo de Simba / The Lion King II - Simba's Pride (Spain)</description>
<year>2006</year>
- <publisher>JAKKS Pacific / Toymax</publisher>
+ <publisher>JAKKS Pacific / Toymax / Handheld Games</publisher>
<part name="cart" interface="telestory_cart">
<dataarea name="rom" size="0x800000">
<rom name="telestorylionkingsp.bin" size="0x800000" crc="459ed493" sha1="8528d4fd5d4a7ff457935d618527621b8ec2a100"/>
@@ -84,4 +84,26 @@ Undumped carts:
</part>
</software>
+ <software name="prmystic" supported="no"> <!-- from a UK sourced cartridge, check if it differs to US -->
+ <description>Power Rangers - Mystic Force</description>
+ <year>2006</year>
+ <publisher>JAKKS Pacific / Toymax / HotGen</publisher>
+ <part name="cart" interface="telestory_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="telestory_powerrangers.bin" size="0x800000" crc="6da57a64" sha1="3f2d22188baefee07b11e7cd986188533a5faa4f"/>
+ </dataarea>
+ </part>
+ </software>
+
+ <software name="dora" supported="no"> <!-- from a UK sourced cartridge, but appears to be in Spanish, check if it differs to US -->
+ <description>Dora the Explorer (Spanish)</description>
+ <year>2006</year>
+ <publisher>JAKKS Pacific / Toymax / HotGen</publisher>
+ <part name="cart" interface="telestory_cart">
+ <dataarea name="rom" size="0x800000">
+ <rom name="telestory_dora.bin" size="0x400000" crc="79334d40" sha1="8e326e14f16fc93e494afdb2557ffdf751b7faf8"/>
+ </dataarea>
+ </part>
+ </software>
+
</softwarelist>
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index c84331d44e1..f235d30aa8c 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -2681,7 +2681,6 @@ files {
MAME_DIR .. "src/mame/includes/aquarius.h",
MAME_DIR .. "src/mame/video/aquarius.cpp",
MAME_DIR .. "src/mame/drivers/juicebox.cpp",
- MAME_DIR .. "src/mame/drivers/hyperscan.cpp",
MAME_DIR .. "src/mame/drivers/mattelchess.cpp",
}
@@ -3826,7 +3825,10 @@ files {
MAME_DIR .. "src/mame/drivers/spg2xx_lexibook.cpp",
MAME_DIR .. "src/mame/drivers/spg2xx_smarttv.cpp",
MAME_DIR .. "src/mame/includes/spg2xx.h",
- MAME_DIR .. "src/mame/drivers/sunplus_gcm394.cpp",
+ MAME_DIR .. "src/mame/drivers/spg29x.cpp",
+ MAME_DIR .. "src/mame/drivers/spg29x_lexibook_jg7425.cpp",
+ MAME_DIR .. "src/mame/drivers/sunplus_unsp20soc.cpp",
+ MAME_DIR .. "src/mame/drivers/sunplus_unsp20soc_mobigo.cpp",
MAME_DIR .. "src/mame/drivers/generalplus_gpl32612.cpp",
MAME_DIR .. "src/mame/drivers/xavix.cpp",
MAME_DIR .. "src/mame/video/xavix.cpp",
@@ -3849,7 +3851,6 @@ files {
MAME_DIR .. "src/mame/machine/xavix2002_io.h",
MAME_DIR .. "src/mame/drivers/xavix2.cpp",
MAME_DIR .. "src/mame/drivers/titan_soc.cpp",
- MAME_DIR .. "src/mame/drivers/lexibook_jg7425.cpp",
MAME_DIR .. "src/mame/drivers/unkmandd.cpp",
MAME_DIR .. "src/mame/drivers/bbl380.cpp",
MAME_DIR .. "src/mame/drivers/actions_atj2279b.cpp",
@@ -3983,7 +3984,6 @@ files {
MAME_DIR .. "src/mame/drivers/vsmileb.cpp",
MAME_DIR .. "src/mame/drivers/clickstart.cpp",
MAME_DIR .. "src/mame/drivers/storio.cpp",
- MAME_DIR .. "src/mame/drivers/vtech_mobigo.cpp",
}
createMESSProjects(_target, _subtarget, "wang")
diff --git a/src/devices/machine/sunplus_gcm394.cpp b/src/devices/machine/sunplus_gcm394.cpp
index 29f83441d36..105eadfbd84 100644
--- a/src/devices/machine/sunplus_gcm394.cpp
+++ b/src/devices/machine/sunplus_gcm394.cpp
@@ -62,12 +62,12 @@ void sunplus_gcm394_base_device::write_dma_params(int channel, int offset, uint1
LOGMASKED(LOG_GCM394_SYSDMA, "%s:sunplus_gcm394_base_device::write_dma_params (channel %01x) %01x %04x\n", machine().describe_context(), channel, offset, data);
m_dma_params[offset][channel] = data;
-
+
if (offset == 0 && (data & 1))
{
trigger_systemm_dma(space, channel);
}
-
+
}
@@ -133,7 +133,7 @@ void sunplus_gcm394_base_device::trigger_systemm_dma(address_space &space, int c
uint32_t length = m_dma_params[3][channel] | (m_dma_params[6][channel] << 16);
int sourcedelta = 0;
int destdelta = 0;
-
+
if ((mode & 0xa0) == 0x00)
sourcedelta = 1;
else if ((mode & 0xa0) == 0x20)
@@ -165,7 +165,7 @@ void sunplus_gcm394_base_device::trigger_systemm_dma(address_space &space, int c
}
source += sourcedelta;
-
+
if (mode & 0x2000)
{
write_space(dest, val & 0xFF);
@@ -184,10 +184,10 @@ void sunplus_gcm394_base_device::trigger_systemm_dma(address_space &space, int c
// note, these patch the code copied to SRAM so the 'PROGRAM ROM' check fails (it passes otherwise)
//if (mem.read_word(0x4368c) == 0x4846)
- // mem.write_word(0x4368c, 0x4840); // cars 2 force service mode
+ // mem.write_word(0x4368c, 0x4840); // cars 2 force service mode
//if (mem.read_word(0x34410) == 0x4846)
- // mem.write_word(0x34410, 0x4840); // golden tee force service mode
+ // mem.write_word(0x34410, 0x4840); // golden tee force service mode
// what is it waiting for when we need these? (needed on some service mode screens)
if (mem.read_word(0x3f368) == 0x4840)
@@ -1012,7 +1012,7 @@ void generalplus_gpac800_device::recalculate_calculate_effective_nand_address()
uint8_t type = m_nand_7856 & 0xf;
uint8_t shift = 0;
uint32_t page_offset = 0;
-
+
if (type == 7)
shift = 4;
else if (type == 11)
@@ -1027,7 +1027,7 @@ void generalplus_gpac800_device::recalculate_calculate_effective_nand_address()
if (m_nand_7850 & 0x4000)
nandaddress *= 2;
-
+
uint32_t page = type ? nandaddress : /*(m_nand_7850 & 0x4000) ?*/ nandaddress >> 8 /*: nandaddress >> 9*/;
m_effectiveaddress = (page * 528 + page_offset) << shift;
diff --git a/src/mame/drivers/casio_rompack.cpp b/src/mame/drivers/casio_rompack.cpp
index c41f7303f29..87693fc56a9 100644
--- a/src/mame/drivers/casio_rompack.cpp
+++ b/src/mame/drivers/casio_rompack.cpp
@@ -1,15 +1,15 @@
// license:BSD-3-Clause
// copyright-holders:
-/*
- This is just a holder for the Casio ROM Pack Software List to ensure they aren't orphaned
- These ROM Packs are used by various devices, but none of the devices have been dumped
-
- Once a supported system is dumped this can be removed and the list can be hooked up to that
+/*
+ This is just a holder for the Casio ROM Pack Software List to ensure they aren't orphaned
+ These ROM Packs are used by various devices, but none of the devices have been dumped
- Possible systems:
+ Once a supported system is dumped this can be removed and the list can be hooked up to that
- TODO
+ Possible systems:
+
+ TODO
*/
#include "emu.h"
diff --git a/src/mame/drivers/elan_eu3a05.cpp b/src/mame/drivers/elan_eu3a05.cpp
index 73f2f3921c9..43205a2f2a2 100644
--- a/src/mame/drivers/elan_eu3a05.cpp
+++ b/src/mame/drivers/elan_eu3a05.cpp
@@ -238,9 +238,9 @@ void elan_eu3a05_buzztime_state::elan_buzztime(machine_config &config)
m_sys->set_alt_timer();
m_gpio->read_0_callback().set(FUNC(elan_eu3a05_buzztime_state::porta_r)); // I/O lives in here
-// m_gpio->read_1_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
-// m_gpio->read_2_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
- m_gpio->write_1_callback().set(FUNC(elan_eu3a05_buzztime_state::portb_w)); // control related
+// m_gpio->read_1_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
+// m_gpio->read_2_callback().set(FUNC(elan_eu3a05_buzztime_state::random_r)); // nothing of note
+ m_gpio->write_1_callback().set(FUNC(elan_eu3a05_buzztime_state::portb_w)); // control related
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "buzztime_cart");
m_cart->set_width(GENERIC_ROM16_WIDTH);
diff --git a/src/mame/drivers/nes_sh6578.cpp b/src/mame/drivers/nes_sh6578.cpp
index 4dffc85cf37..24edcd7e823 100644
--- a/src/mame/drivers/nes_sh6578.cpp
+++ b/src/mame/drivers/nes_sh6578.cpp
@@ -2,8 +2,8 @@
// copyright-holders:David Haywood
/*
- SH6578 NES clone hardware
- enhanced NES, different to VT / OneBus systems
+ SH6578 NES clone hardware
+ enhanced NES, different to VT / OneBus systems
*/
#include "emu.h"
@@ -119,17 +119,23 @@ ROM_START( ts_handy11 )
ROM_LOAD( "tvplaypowercontroller.bin", 0x00000, 0x100000, CRC(9c7fe9ff) SHA1(c872e91ca835b66c9dd3b380e8374b51f12bcae0) ) // 29LV008B
ROM_END
-
ROM_START( cpatrolm )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD( "citypatrolman.bin", 0x00000, 0x100000, CRC(4b139c67) SHA1(a5b03f472a94ee879f58bbff201b671fbf4f1ea1) )
ROM_END
+ROM_START( ablwikid )
+ ROM_REGION( 0x200000, "maincpu", 0 )
+ ROM_LOAD( "mx29f1610atc.u2", 0x00000, 0x200000, CRC(f16abf79) SHA1(aeccbb40d7fdd451ba8e5cca20464da2cf116461) )
+ROM_END
+
CONS( 1997, bandgpad, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "Bandai", "Gamppad (Bandai)", MACHINE_NOT_WORKING )
// possibly newer than 2001
CONS( 2001, ts_handy11, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "Techno Source", "Handy Boy 11-in-1 (TV Play Power)", MACHINE_NOT_WORKING )
-
CONS( 200?, cpatrolm, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "<unknown>", "City Patrolman", MACHINE_NOT_WORKING )
+
+// this may or may not belong here, it appears to have 4bpp gfx, but unless the banks are scrambled, doesn't fit a standard VT scheme
+CONS( 200?, ablwikid, 0, 0, nes_sh6578, nes_sh6578, nes_sh6578_state, init_nes_sh6578, "Advance Bright Ltd.", "Wikid Joystick", MACHINE_NOT_WORKING ) // or Wik!d Joystick
diff --git a/src/mame/drivers/nes_vt.cpp b/src/mame/drivers/nes_vt.cpp
index 6f0595a2386..ac4cec921bf 100644
--- a/src/mame/drivers/nes_vt.cpp
+++ b/src/mame/drivers/nes_vt.cpp
@@ -349,7 +349,7 @@ public:
m_latch0_bit(0),
m_latch1_bit(0)
{ }
-
+
protected:
virtual DECLARE_READ8_MEMBER(in0_r) override;
virtual DECLARE_READ8_MEMBER(in1_r) override;
@@ -536,7 +536,7 @@ WRITE8_MEMBER(nes_vt_cy_lexibook_state::in0_w)
m_latch1_bit = m_latch1 & 0x01;
m_latch1 >>= 1;
}
-
+
m_previous_port0 = data;
}
@@ -1965,7 +1965,7 @@ void nes_vt_waixing_state::machine_reset()
nes_vt_state::machine_reset();
m_ppu->set_201x_descramble(0x3, 0x2, 0x7, 0x6, 0x5, 0x4); // reasonable
-// set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
+// set_8000_scramble(0x5, 0x4, 0x3, 0x2, 0x7, 0x6, 0x7, 0x8);
}
void nes_vt_hum_state::machine_reset()
diff --git a/src/mame/drivers/hyperscan.cpp b/src/mame/drivers/spg29x.cpp
index 6c89baf2d7f..4c821b3030f 100644
--- a/src/mame/drivers/hyperscan.cpp
+++ b/src/mame/drivers/spg29x.cpp
@@ -61,13 +61,13 @@
-class hyperscan_state : public driver_device
+class spg29x_game_state : public driver_device
{
public:
- hyperscan_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu")
- { }
+ spg29x_game_state(const machine_config &mconfig, device_type type, const char *tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu")
+ { }
void hyperscan(machine_config &config);
@@ -157,6 +157,22 @@ private:
spg290_i2c m_i2c;
emu_timer * m_update_timer;
emu_timer * m_i2c_timer;
+
+
+};
+
+class spg29x_nand_game_state : public spg29x_game_state
+{
+public:
+ spg29x_nand_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ spg29x_game_state(mconfig, type, tag)
+ { }
+
+ void nand_init(int blocksize, int blocksize_stripped);
+ void nand_init210();
+
+private:
+ std::vector<uint8_t> m_strippedrom;
};
@@ -190,7 +206,7 @@ static void log_spg290_regs(device_t *device,uint8_t module, uint16_t reg, uint3
#endif
-READ32_MEMBER(hyperscan_state::spg290_regs_r)
+READ32_MEMBER(spg29x_game_state::spg290_regs_r)
{
uint32_t addr = offset << 2;
uint32_t data = 0;
@@ -236,7 +252,7 @@ READ32_MEMBER(hyperscan_state::spg290_regs_r)
return data;
}
-WRITE32_MEMBER(hyperscan_state::spg290_regs_w)
+WRITE32_MEMBER(spg29x_game_state::spg290_regs_w)
{
uint32_t addr = offset << 2;
@@ -397,17 +413,17 @@ WRITE32_MEMBER(hyperscan_state::spg290_regs_w)
#endif
}
-inline uint32_t hyperscan_state::spg290_read_mem(uint32_t offset)
+inline uint32_t spg29x_game_state::spg290_read_mem(uint32_t offset)
{
return m_maincpu->space(0).read_dword(offset);
}
-inline void hyperscan_state::spg290_write_mem(uint32_t offset, uint32_t data)
+inline void spg29x_game_state::spg290_write_mem(uint32_t offset, uint32_t data)
{
return m_maincpu->space(0).write_dword(offset, data);
}
-void hyperscan_state::spg290_argb1555(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint16_t posy, uint16_t posx, uint16_t argb)
+void spg29x_game_state::spg290_argb1555(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint16_t posy, uint16_t posx, uint16_t argb)
{
if (!(argb & 0x8000) && cliprect.contains(posx, posy))
{
@@ -416,7 +432,7 @@ void hyperscan_state::spg290_argb1555(bitmap_rgb32 &bitmap, const rectangle &cli
}
}
-void hyperscan_state::spg290_rgb565(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint16_t posy, uint16_t posx, uint16_t rgb, uint32_t transrgb)
+void spg29x_game_state::spg290_rgb565(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint16_t posy, uint16_t posx, uint16_t rgb, uint32_t transrgb)
{
if ((!(transrgb & 0x10000) || (transrgb & 0xffff) != rgb) && cliprect.contains(posx, posy))
{
@@ -425,7 +441,7 @@ void hyperscan_state::spg290_rgb565(bitmap_rgb32 &bitmap, const rectangle &clipr
}
}
-void hyperscan_state::spg290_blit_sprite(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, uint32_t *palettes, uint32_t buf_start)
+void spg29x_game_state::spg290_blit_sprite(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, uint32_t *palettes, uint32_t buf_start)
{
uint32_t sprite_base = buf_start + ((control & 0xffff) << 8);
uint16_t sprite_x = (control >> 16) & 0x3ff;
@@ -462,7 +478,7 @@ void hyperscan_state::spg290_blit_sprite(bitmap_rgb32 &bitmap, const rectangle &
}
}
-void hyperscan_state::spg290_blit_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, int posy, int posx, uint32_t nptr, uint32_t buf_start, uint32_t transrgb)
+void spg29x_game_state::spg290_blit_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, int posy, int posx, uint32_t nptr, uint32_t buf_start, uint32_t transrgb)
{
for (int y=0; y<512; y++)
{
@@ -488,13 +504,13 @@ void hyperscan_state::spg290_blit_bitmap(bitmap_rgb32 &bitmap, const rectangle &
}
}
-void hyperscan_state::spg290_blit_character(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, int posy, int posx, uint32_t nptr, uint32_t buf_start, uint32_t transrgb)
+void spg29x_game_state::spg290_blit_character(bitmap_rgb32 &bitmap, const rectangle &cliprect, uint32_t control, uint32_t attribute, int posy, int posx, uint32_t nptr, uint32_t buf_start, uint32_t transrgb)
{
// TODO
}
-uint32_t hyperscan_state::spg290_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t spg29x_game_state::spg290_screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
if (m_ppu.control & 0x1000)
{
@@ -526,7 +542,7 @@ uint32_t hyperscan_state::spg290_screen_update(screen_device &screen, bitmap_rgb
return 0;
}
-void hyperscan_state::spg290_timers_update()
+void spg29x_game_state::spg290_timers_update()
{
for(auto & elem : m_timers)
if (elem.control & 0x80000000)
@@ -553,7 +569,7 @@ void hyperscan_state::spg290_timers_update()
}
}
-WRITE_LINE_MEMBER(hyperscan_state::spg290_vblank_irq)
+WRITE_LINE_MEMBER(spg29x_game_state::spg290_vblank_irq)
{
if (state && m_ppu.irq_control & 0x01) // VBlanking Start IRQ
{
@@ -568,7 +584,7 @@ WRITE_LINE_MEMBER(hyperscan_state::spg290_vblank_irq)
}
-void hyperscan_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
+void spg29x_game_state::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
{
switch (id)
{
@@ -587,11 +603,11 @@ void hyperscan_state::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
-void hyperscan_state::spg290_mem(address_map &map)
+void spg29x_game_state::spg290_mem(address_map &map)
{
map.global_mask(0x1fffffff);
map(0x00000000, 0x00ffffff).ram().mirror(0x07000000);
- map(0x08000000, 0x09ffffff).rw(FUNC(hyperscan_state::spg290_regs_r), FUNC(hyperscan_state::spg290_regs_w));
+ map(0x08000000, 0x09ffffff).rw(FUNC(spg29x_game_state::spg290_regs_r), FUNC(spg29x_game_state::spg290_regs_w));
map(0x0a000000, 0x0a003fff).ram(); // internal SRAM
map(0x0b000000, 0x0b007fff).rom().region("spg290", 0); // internal ROM
map(0x10000000, 0x100fffff).rom().region("bios", 0).mirror(0x0e000000);
@@ -603,13 +619,13 @@ static INPUT_PORTS_START( hyperscan )
INPUT_PORTS_END
-void hyperscan_state::machine_start()
+void spg29x_game_state::machine_start()
{
m_update_timer = timer_alloc(TIMER_SPG290);
m_i2c_timer = timer_alloc(TIMER_I2C);
}
-void hyperscan_state::machine_reset()
+void spg29x_game_state::machine_reset()
{
memset(&m_ppu, 0, sizeof(spg290_ppu));
memset(&m_miu, 0, sizeof(spg290_miu));
@@ -621,11 +637,11 @@ void hyperscan_state::machine_reset()
}
-void hyperscan_state::hyperscan(machine_config &config)
+void spg29x_game_state::hyperscan(machine_config &config)
{
/* basic machine hardware */
SCORE7(config, m_maincpu, XTAL(27'000'000) * 4); // 108MHz S+core 7
- m_maincpu->set_addrmap(AS_PROGRAM, &hyperscan_state::spg290_mem);
+ m_maincpu->set_addrmap(AS_PROGRAM, &spg29x_game_state::spg290_mem);
SOFTWARE_LIST(config, "cd_list").set_original("hyperscan");
@@ -633,15 +649,57 @@ void hyperscan_state::hyperscan(machine_config &config)
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(50);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */
- screen.set_screen_update(FUNC(hyperscan_state::spg290_screen_update));
+ screen.set_screen_update(FUNC(spg29x_game_state::spg290_screen_update));
screen.set_size(640, 480);
screen.set_visarea(0, 640-1, 0, 480-1);
- screen.screen_vblank().set(FUNC(hyperscan_state::spg290_vblank_irq));
+ screen.screen_vblank().set(FUNC(spg29x_game_state::spg290_vblank_irq));
+}
+
+
+
+void spg29x_nand_game_state::nand_init(int blocksize, int blocksize_stripped)
+{
+ uint8_t* rom = memregion("nand")->base();
+ int size = memregion("nand")->bytes();
+
+ int numblocks = size / blocksize;
+
+ m_strippedrom.resize(numblocks * blocksize_stripped);
+
+ for (int i = 0; i < numblocks; i++)
+ {
+ const int base = i * blocksize;
+ const int basestripped = i * blocksize_stripped;
+
+ for (int j = 0; j < blocksize_stripped; j++)
+ {
+ m_strippedrom[basestripped + j] = rom[base + j];
+ }
+ }
+
+ // debug to allow for easy use of unidasm.exe
+ if (0)
+ {
+ FILE *fp;
+ char filename[256];
+ sprintf(filename,"stripped_%s", machine().system().name);
+ fp=fopen(filename, "w+b");
+ if (fp)
+ {
+ fwrite(&m_strippedrom[0], blocksize_stripped * numblocks, 1, fp);
+ fclose(fp);
+ }
+ }
+}
+
+void spg29x_nand_game_state::nand_init210()
+{
+ nand_init(0x210, 0x200);
}
/* ROM definition */
-ROM_START( hs )
+ROM_START( hyprscan )
ROM_REGION( 0x100000, "bios", ROMREGION_32BIT | ROMREGION_LE )
ROM_LOAD32_DWORD("hyperscan.bin", 0x000000, 0x100000, CRC(ce346a14) SHA1(560cb747e7193e6781d4b8b0bd4d7b45d3d28690))
@@ -649,8 +707,22 @@ ROM_START( hs )
ROM_LOAD32_DWORD("spg290.bin", 0x000000, 0x008000, NO_DUMP) // 256Kbit SPG290 internal ROM
ROM_END
+ROM_START( jak_bbsf )
+ ROM_REGION( 0x100000, "bios", ROMREGION_32BIT | ROMREGION_LE | ROMREGION_ERASE00 )
+
+ ROM_REGION( 0x4200000, "nand", 0 )
+ ROM_LOAD("bigbucksafari.bin", 0x000000, 0x4200000, CRC(dc5f9bf1) SHA1(27893c396d62f353ced52ef88fd9ade5c051598f) )
+
+ ROM_REGION( 0x008000, "spg290", ROMREGION_32BIT | ROMREGION_LE )
+ ROM_LOAD32_DWORD("internal.rom", 0x000000, 0x008000, NO_DUMP)
+ROM_END
+
/* Driver */
// YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS
-COMP( 2006, hs, 0, 0, hyperscan, hyperscan, hyperscan_state, empty_init, "Mattel", "HyperScan", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+COMP( 2006, hyprscan, 0, 0, hyperscan, hyperscan, spg29x_game_state, empty_init, "Mattel", "HyperScan", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+
+COMP( 2009, jak_bbsf, 0, 0, hyperscan, hyperscan, spg29x_nand_game_state, nand_init210, "JAKKS Pacific Inc", "Big Buck Hunter Safari (JAKKS Pacific TV Game)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND )
+
+
diff --git a/src/mame/drivers/lexibook_jg7425.cpp b/src/mame/drivers/spg29x_lexibook_jg7425.cpp
index c8fecbcb964..c8fecbcb964 100644
--- a/src/mame/drivers/lexibook_jg7425.cpp
+++ b/src/mame/drivers/spg29x_lexibook_jg7425.cpp
diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp
index 305528ef205..84879259611 100644
--- a/src/mame/drivers/spg2xx.cpp
+++ b/src/mame/drivers/spg2xx.cpp
@@ -691,7 +691,7 @@ static INPUT_PORTS_START( guitarfv )
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON5 )
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Wheel") // 'Wheel'
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Wheel / Whammy") // 'Wheel' in test mode
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
@@ -702,6 +702,27 @@ static INPUT_PORTS_START( guitarfv )
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused?
INPUT_PORTS_END
+static INPUT_PORTS_START( guitarss )
+ PORT_START("P1")
+ PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("B1: Blue / Up")
+ PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("B2: ellow / Down")
+ PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("B3: Purple")
+ PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("B4: Red")
+ PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("B5: Green")
+ PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Strum / Select")
+ PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) // unused? no Strum down?
+ PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Whammy")
+ PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Start / Select") // pause
+ PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unused?
+
+ PORT_START("P2")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unused?
+
+ PORT_START("P3")
+ PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // unused?
+
+INPUT_PORTS_END
+
static INPUT_PORTS_START( jjstrip )
PORT_START("P1") // active LOW or HIGH?
PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
@@ -1074,6 +1095,12 @@ ROM_START( guitarfv )
ROM_LOAD16_WORD_SWAP( "mx26l64.bin", 0x000000, 0x800000, CRC(eaadd2c2) SHA1(0c3fe004dbaa52a335c6ddcecb9e9f5582d7ef35) )
ROM_END
+ROM_START( guitarss )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "guitar_superstar_stratocaster.bin", 0x000000, 0x800000, CRC(63950016) SHA1(28b9613571f47c49995aa35c4d4a2d6f68389813) )
+ROM_END
+
+
ROM_START( jjstrip )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "strippoker.bin", 0x000000, 0x200000, CRC(7a70e6c8) SHA1(3d5da4774b00977939f309f3e71473dde9b70435) )
@@ -1143,6 +1170,9 @@ CONS( 200?, decathln, 0, 0, tvsprt10, decathln, spg2xx_ga
CONS( 2007, guitarfv, 0, 0, guitarfv, guitarfv, spg2xx_game_state, empty_init, "Advance Bright Ltd", "Guitar Fever (2007.07.03 Ver 2.7)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+// Another version of this has a red "Gibson Flying V" style controller. The difference is reflected on the title screen, songs are the same.
+CONS( 200?, guitarss, 0, 0, abltenni, guitarss, spg2xx_game_state, empty_init, "Senario", "Guitar Super Star (Fender Stratocaster style)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
+
CONS( 200?, jjstrip, 0, 0, tvsprt10, jjstrip, spg2xx_game_state, empty_init, "Shiggles Inc.", "Club Jenna Presents: Jenna Jameson's Strip Poker", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2005, tmntmutm, 0, 0, tvsprt10, tmntmutm, spg2xx_game_state, empty_init, "Tech2Go / WayForward", "Teenage Mutant Ninja Turtles: Mutant and Monster Mayhem", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_jakks.cpp b/src/mame/drivers/spg2xx_jakks.cpp
index 46bbd408382..5d8152c8b8e 100644
--- a/src/mame/drivers/spg2xx_jakks.cpp
+++ b/src/mame/drivers/spg2xx_jakks.cpp
@@ -40,6 +40,8 @@ public:
void jakks_gkr_wp(machine_config &config);
void jakks_gkr_cb(machine_config &config);
+ void jakks_tvtouch(machine_config& config);
+
DECLARE_READ_LINE_MEMBER(i2c_gkr_r);
protected:
@@ -456,6 +458,155 @@ static INPUT_PORTS_START( jak_dpr_i2c )
INPUT_PORTS_END
+static INPUT_PORTS_START( tvtouch )
+ PORT_START("P1")
+ PORT_DIPNAME( 0x0001, 0x0001, "P1" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START("P2")
+ PORT_DIPNAME( 0x0001, 0x0001, "P2" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+
+ PORT_START("P3")
+ PORT_DIPNAME( 0x0001, 0x0001, "P3" )
+ PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_BIT( 0x0800, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // might not only be a button input, check code
+ PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+ PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
+ PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
+ PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
+INPUT_PORTS_END
void jakks_gkr_state::jakks(machine_config &config)
@@ -625,8 +776,6 @@ void jakks_gkr_state::jakks_gkr_wf_i2c(machine_config &config)
//SOFTWARE_LIST(config, "jakks_gamekey_wf").set_original("jakks_gamekey_wf"); // no game keys were released
}
-
-
void jakks_gkr_state::walle(machine_config &config)
{
jakks_i2c(config);
@@ -635,6 +784,22 @@ void jakks_gkr_state::walle(machine_config &config)
m_maincpu->portc_out().set(FUNC(jakks_gkr_state::walle_portc_w));
}
+void jakks_gkr_state::jakks_tvtouch(machine_config &config)
+{
+ SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
+ m_maincpu->set_addrmap(AS_PROGRAM, &jakks_gkr_state::mem_map_4m);
+
+ spg2xx_base(config);
+
+ m_maincpu->porta_in().set(FUNC(jakks_gkr_state::rad_porta_r));
+ m_maincpu->portb_in().set(FUNC(jakks_gkr_state::rad_portb_r));
+ m_maincpu->portc_in().set(FUNC(jakks_gkr_state::rad_portc_r));
+}
+
+ROM_START( tvtchsw )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "touchstarwars.bin", 0x000000, 0x400000, CRC(db5ccc31) SHA1(786af933ef1fb644faf8eed935c448b93296bc33) )
+ROM_END
ROM_START( jak_batm )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
@@ -782,3 +947,6 @@ CONS( 2005, jak_pooh, 0, 0, jakks_gkr_wp, jak_pooh, jakks_gkr_state, emp
CONS( 2005, jak_care, 0, 0, jakks_gkr_cb, jak_care, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Backbone Entertainment", "Care Bears TV Games (JAKKS Pacific TV Game, Game-Key Ready)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // CB (no game-keys released)
// Some versions of the Shrek - Over the Hedge unit show the GameKey logo on startup (others don't) there is no evidence to suggest it was ever released with a GameKey port tho, and the internal PCB has no place for one on the versions we've seen (which show the logo)
+
+// TV Touch Games (these are re-release versions of classic JAKKS games but using a touchpad controller)
+CONS( 2012, tvtchsw, 0, 0, jakks_tvtouch, tvtouch, jakks_gkr_state, empty_init, "JAKKS Pacific Inc / Code Mystics", "TV Touch Games: Star Wars Original Trilogy", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_lexibook.cpp b/src/mame/drivers/spg2xx_lexibook.cpp
index 3257dc86bc3..3e0816841c1 100644
--- a/src/mame/drivers/spg2xx_lexibook.cpp
+++ b/src/mame/drivers/spg2xx_lexibook.cpp
@@ -264,4 +264,4 @@ ROM_END
CONS( 200?, lexizeus, 0, 0, lexizeus, lexizeus, spg2xx_lexiseal_game_state, init_zeus, "Lexibook", "Zeus IG900 20-in-1 (US?)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // bad sound and some corrupt bg tilemap entries in Tiger Rescue, verify ROM data (same game runs in Zone 60 without issue)
CONS( 200?, lexiseal, 0, 0, lexiseal, lexiseal, spg2xx_lexiseal_game_state, init_zeus, "Lexibook / Sit Up Limited", "Seal 50-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // also has bad sound in Tiger Rescue, but no corrupt tilemap
CONS( 200?, discpal, 0, 0, lexiseal, lexiseal, spg2xx_lexiseal_game_state, init_zeus, "Performance Designed Products / Disney / Jungle Soft", "Disney Game It! Classic Pals", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
-// there was also a Game It! Princess Pals \ No newline at end of file
+// there was also a Game It! Princess Pals
diff --git a/src/mame/drivers/spg2xx_mysprtch.cpp b/src/mame/drivers/spg2xx_mysprtch.cpp
index 49c07f28e6a..2560c024156 100644
--- a/src/mame/drivers/spg2xx_mysprtch.cpp
+++ b/src/mame/drivers/spg2xx_mysprtch.cpp
@@ -23,13 +23,13 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
-
+
void mem_map_mysprtch(address_map& map);
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
int m_romsize;
-
+
int m_mysprtch_rombase;
uint16_t m_prev_porta;
int m_bank_enabled;
@@ -71,7 +71,7 @@ void spg2xx_game_mysprtch_state::machine_start()
spg2xx_game_state::machine_start();
m_romsize = (memregion("maincpu")->bytes()/2);
-
+
save_item(NAME(m_mysprtch_rombase));
save_item(NAME(m_prev_porta));
save_item(NAME(m_bank_enabled));
@@ -290,7 +290,7 @@ WRITE16_MEMBER(spg2xx_game_mysprtch24_state::porta_w)
// probably should be the same logic for both games, as the test mode on this one proves
// that the logic in spg2xx_game_mysprtch_state::porta_w is incorrect
- if (m_maincpu->pc() < 0x4000)
+ if (m_maincpu->pc() < 0x4000)
{
int bank = 0;
bank |= (data & 0x0400) ? 1 : 0;
@@ -302,7 +302,7 @@ WRITE16_MEMBER(spg2xx_game_mysprtch24_state::porta_w)
m_prev_porta = data;
}
-
+
void spg2xx_game_mysprtch_state::mysprtch(machine_config& config)
{
@@ -337,10 +337,10 @@ void spg2xx_game_mysprtch_state::init_mysprtcp()
for (int i = 0; i < size / 2; i++)
{
ROM[i] = bitswap<16>(ROM[i], 15, 13, 14, 12,
- 7, 6, 5, 4,
- 11, 10, 9, 8,
- 3, 1, 2, 0);
-
+ 7, 6, 5, 4,
+ 11, 10, 9, 8,
+ 3, 1, 2, 0);
+
ROM[i] = ROM[i] ^ 0xfafa;
}
}
diff --git a/src/mame/drivers/spg2xx_zone.cpp b/src/mame/drivers/spg2xx_zone.cpp
index 1ad736d7db0..4616d8502f7 100644
--- a/src/mame/drivers/spg2xx_zone.cpp
+++ b/src/mame/drivers/spg2xx_zone.cpp
@@ -120,7 +120,7 @@ WRITE16_MEMBER(zone40_state::zone40_porta_w)
//logerror("%s: zone40_porta_w %04x z80 bank is now %04x \n", machine().describe_context(), data, m_z40_rombase);
m_maincpu->invalidate_cache();
-
+
}
READ16_MEMBER(zone40_state::zone40_porta_r)
@@ -276,7 +276,7 @@ void zone40_state::init_zone40()
{
ROM[i] = bitswap<16>(ROM[i], 11, 10, 3, 2, 4, 12, 5, 13,
9, 1, 8, 0, 6, 7, 14, 15);
-
+
ROM[i] = ROM[i] ^ 0xa5a5;
}
}
@@ -290,7 +290,7 @@ void zone40_state::init_reactmd()
for (int i = 0; i < size/2; i++)
{
ROM[i] = bitswap<16>(ROM[i], 15, 13, 14, 12, 7, 6, 5, 4,
- 11, 10, 9, 8, 3, 1, 2, 0);
+ 11, 10, 9, 8, 3, 1, 2, 0);
ROM[i] = ROM[i] ^ 0xa5a5;
}
@@ -352,7 +352,7 @@ CONS( 2011, lx_jg7415,0, 0, wireless60, wirels60, wireless60_state, init_lx_jg7
// Two systems in one unit - Genesis on a Chip and SunPlus, only the SunPlus part is currently emulated. Genesis on a chip is a very poor implementation with many issues on real hardware.
-// This should actually boot to a menu on the MD size, with the SunPlus only being enabled if selected from that menu. MD side menu runs in some enhanced / custom MD mode tho.
+// This should actually boot to a menu on the MD size, with the SunPlus only being enabled if selected from that menu. MD side menu runs in some enhanced / custom MD mode tho.
// Badminton hangs, as it does in the 49-in-1 above
CONS( 2009, reactmd, 0, 0, zone40p, wirels60, zone40_state, init_reactmd, "AtGames / Sega", "Reactor MD (PAL)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/sunplus_gcm394.cpp b/src/mame/drivers/sunplus_unsp20soc.cpp
index a2131a05183..6eb8f295bfe 100644
--- a/src/mame/drivers/sunplus_gcm394.cpp
+++ b/src/mame/drivers/sunplus_unsp20soc.cpp
@@ -1,7 +1,12 @@
// license:BSD-3-Clause
// copyright-holders:David Haywood
/*
- SunPlus unSP based hardware, SPG-??? (6xx?) (die is GCM394)
+ (unSP 2.0 based System on a Chip)
+
+ JAKKS call this GPAC800, other sources call it GPL16250
+
+ die on Smart Fit Park and Spongebob Bikini Bottom 500 is marked GCM394
+ some of the systems here might use newer dies but the video etc. appears the same.
Compared to vii.cpp this is clearly newer, has extra opcodes, different internal map etc. also scaling and higher resolutions based on Spongebob
@@ -43,49 +48,8 @@
*/
#include "emu.h"
+#include "includes/sunplus_unsp20soc.h"
-#include "machine/sunplus_gcm394.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
-
-#include "screen.h"
-#include "speaker.h"
-
-
-
-
-class full_memory_device :
- public device_t,
- public device_memory_interface
-{
-public:
- // construction/destruction
- full_memory_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
-
- // configuration helpers
- template <typename... T> full_memory_device& set_map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
-
- template <typename... T> full_memory_device& map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
-
- address_space* get_program() { return m_program; }
-
-protected:
- virtual void device_start() override;
- virtual void device_config_complete() override;
-
- // device_memory_interface overrides
- virtual space_config_vector memory_space_config() const override;
-
-
-private:
- // internal state
- address_space_config m_program_config;
- address_space *m_program;
-};
-
-
-// device type definition
-DECLARE_DEVICE_TYPE(FULL_MEMORY, full_memory_device)
// device type definition
DEFINE_DEVICE_TYPE(FULL_MEMORY, full_memory_device, "full_memory", "SunPlus Full CS Memory Map")
@@ -134,61 +98,6 @@ void full_memory_device::device_start()
}
-class gcm394_game_state : public driver_device
-{
-public:
- gcm394_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- driver_device(mconfig, type, tag),
- m_maincpu(*this, "maincpu"),
- m_screen(*this, "screen"),
- m_io(*this, "IN%u", 0U),
- m_romregion(*this, "maincpu"),
- m_memory(*this, "memory")
- {
- }
-
- void base(machine_config &config);
-
- void cs_map_base(address_map &map);
-
- virtual DECLARE_READ16_MEMBER(cs0_r);
- virtual DECLARE_WRITE16_MEMBER(cs0_w);
- virtual DECLARE_READ16_MEMBER(cs1_r);
- virtual DECLARE_WRITE16_MEMBER(cs1_w);
- virtual DECLARE_READ16_MEMBER(cs2_r);
- virtual DECLARE_WRITE16_MEMBER(cs2_w);
- virtual DECLARE_READ16_MEMBER(cs3_r);
- virtual DECLARE_WRITE16_MEMBER(cs3_w);
- virtual DECLARE_READ16_MEMBER(cs4_r);
- virtual DECLARE_WRITE16_MEMBER(cs4_w);
-
- void cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4);
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
-
- required_device<sunplus_gcm394_base_device> m_maincpu;
- required_device<screen_device> m_screen;
-
-
- required_ioport_array<3> m_io;
-
-
- optional_region_ptr<uint16_t> m_romregion;
- required_device<full_memory_device> m_memory;
-
- virtual DECLARE_READ16_MEMBER(porta_r);
- virtual DECLARE_READ16_MEMBER(portb_r);
- virtual DECLARE_READ16_MEMBER(portc_r);
- virtual DECLARE_WRITE16_MEMBER(porta_w);
-
- virtual DECLARE_READ16_MEMBER(read_external_space);
- virtual DECLARE_WRITE16_MEMBER(write_external_space);
-
-private:
-};
READ16_MEMBER(gcm394_game_state::cs0_r)
{
@@ -231,199 +140,6 @@ void gcm394_game_state::cs_map_base(address_map& map)
}
-class generalplus_gpac800_game_state : public gcm394_game_state
-{
-public:
- generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- gcm394_game_state(mconfig, type, tag),
- m_nandregion(*this, "nandrom"),
- m_initial_copy_words(0x2000)
- {
- }
-
- void generalplus_gpac800(machine_config &config);
-
- void nand_init210();
- void nand_init840();
- void nand_wlsair60();
- void nand_vbaby();
- void nand_tsm();
- void nand_beambox();
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- DECLARE_READ8_MEMBER(read_nand);
- std::vector<uint16_t> m_sdram;
- std::vector<uint16_t> m_sdram2;
-
- virtual DECLARE_READ16_MEMBER(cs0_r) override;
- virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
- virtual DECLARE_READ16_MEMBER(cs1_r) override;
- virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
-
-private:
- optional_region_ptr<uint8_t> m_nandregion;
-
- void nand_create_stripped_region();
-
- std::vector<uint8_t> m_strippedrom;
- int m_strippedsize;
- int m_size;
- int m_nandblocksize;
- int m_nandblocksize_stripped;
-
- int m_initial_copy_words;
- int m_vectorbase;
-};
-
-class generalplus_gpac800_vbaby_game_state : public generalplus_gpac800_game_state
-{
-public:
- generalplus_gpac800_vbaby_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- generalplus_gpac800_game_state(mconfig, type, tag),
- m_cart(*this, "cartslot")
- {
- }
-
- void generalplus_gpac800_vbaby(machine_config &config);
-
-protected:
- required_device<generic_slot_device> m_cart;
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
-
-private:
-};
-
-
-class generalplus_gpspispi_game_state : public gcm394_game_state
-{
-public:
- generalplus_gpspispi_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- gcm394_game_state(mconfig, type, tag)
- {
- }
-
- void generalplus_gpspispi(machine_config &config);
-
- void init_spi();
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
-private:
-};
-
-
-
-class generalplus_gpspispi_bkrankp_game_state : public generalplus_gpspispi_game_state
-{
-public:
- generalplus_gpspispi_bkrankp_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- generalplus_gpspispi_game_state(mconfig, type, tag),
- m_cart(*this, "cartslot")
- {
- }
-
- void generalplus_gpspispi_bkrankp(machine_config &config);
-
-protected:
- required_device<generic_slot_device> m_cart;
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
-
-private:
-};
-
-
-
-class tkmag220_game_state : public gcm394_game_state
-{
-public:
- tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- gcm394_game_state(mconfig, type, tag)
- {
- }
-
- void tkmag220(machine_config &config);
-
-protected:
-
- /*
- virtual DECLARE_READ16_MEMBER(porta_r) override
- {
- return machine().rand();
- }
-
- virtual DECLARE_READ16_MEMBER(portb_r) override
- {
- return machine().rand();
- }
-
- virtual DECLARE_WRITE16_MEMBER(porta_w) override
- {
- }
- */
-
-private:
-
- virtual DECLARE_READ16_MEMBER(cs0_r) override
- {
- return m_romregion[offset & 0x3ffffff];
- }
-};
-
-class wrlshunt_game_state : public gcm394_game_state
-{
-public:
- wrlshunt_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- gcm394_game_state(mconfig, type, tag)
- {
- }
-
- void wrlshunt(machine_config &config);
-
- void init_wrlshunt();
-
-protected:
- virtual void machine_start() override;
- virtual void machine_reset() override;
-
- std::vector<uint16_t> m_sdram;
-
- virtual DECLARE_READ16_MEMBER(porta_r) override;
- virtual DECLARE_WRITE16_MEMBER(porta_w) override;
-
-private:
-
-
- //required_shared_ptr<u16> m_mainram;
-
- virtual DECLARE_READ16_MEMBER(cs0_r) override;
- virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
- virtual DECLARE_READ16_MEMBER(cs1_r) override;
- virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
-};
-
-class jak_s500_game_state : public wrlshunt_game_state
-{
-public:
- jak_s500_game_state(const machine_config& mconfig, device_type type, const char* tag) :
- wrlshunt_game_state(mconfig, type, tag)
- {
- }
-
-protected:
- //virtual void machine_start() override;
- virtual void machine_reset() override;
-
- virtual DECLARE_READ16_MEMBER(porta_r) override;
- virtual DECLARE_READ16_MEMBER(portb_r) override;
-
-private:
-};
-
@@ -470,7 +186,7 @@ READ16_MEMBER(jak_s500_game_state::porta_r)
logerror("%s: Port A Read: %04x\n", machine().describe_context(), data);
//address_space& mem = m_maincpu->space(AS_PROGRAM);
-
+
//if (mem.read_word(0x22b408) == 0x4846)
// mem.write_word(0x22b408, 0x4840); // jak_s500 force service mode
diff --git a/src/mame/drivers/sunplus_unsp20soc_mobigo.cpp b/src/mame/drivers/sunplus_unsp20soc_mobigo.cpp
new file mode 100644
index 00000000000..5612e956b0f
--- /dev/null
+++ b/src/mame/drivers/sunplus_unsp20soc_mobigo.cpp
@@ -0,0 +1,91 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+
+#include "emu.h"
+#include "includes/sunplus_unsp20soc.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+#include "softlist_dev.h"
+#include "screen.h"
+
+
+class mobigo_state : public generalplus_gpac800_game_state
+{
+public:
+ mobigo_state(const machine_config &mconfig, device_type type, const char *tag) :
+ generalplus_gpac800_game_state(mconfig, type, tag),
+ m_cart(*this, "cartslot")
+ { }
+
+ void mobigo(machine_config &config);
+
+protected:
+
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+ required_device<generic_slot_device> m_cart;
+};
+
+
+static INPUT_PORTS_START( mobigo )
+ PORT_START("IN0")
+ PORT_START("IN1")
+ PORT_START("IN2")
+INPUT_PORTS_END
+
+
+
+DEVICE_IMAGE_LOAD_MEMBER(mobigo_state::cart_load)
+{
+ uint32_t size = m_cart->common_get_size("rom");
+ m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
+ m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
+ return image_init_result::PASS;
+}
+
+void mobigo_state::mobigo(machine_config &config)
+{
+ GPAC800(config, m_maincpu, 96000000/2, m_screen); // Doesn't have GPnandnand header in NAND tho, so non-standard bootloader
+ m_maincpu->porta_in().set(FUNC(mobigo_state::porta_r));
+ m_maincpu->portb_in().set(FUNC(mobigo_state::portb_r));
+ m_maincpu->portc_in().set(FUNC(mobigo_state::portc_r));
+ m_maincpu->porta_out().set(FUNC(mobigo_state::porta_w));
+ m_maincpu->space_read_callback().set(FUNC(mobigo_state::read_external_space));
+ m_maincpu->space_write_callback().set(FUNC(mobigo_state::write_external_space));
+ m_maincpu->set_irq_acknowledge_callback(m_maincpu, FUNC(sunplus_gcm394_base_device::irq_vector_cb));
+ m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
+ m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
+ m_maincpu->set_bootmode(0); // boot from internal ROM (NAND bootstrap)
+ m_maincpu->set_cs_config_callback(FUNC(mobigo_state::cs_callback));
+
+ m_maincpu->nand_read_callback().set(FUNC(mobigo_state::read_nand));
+
+ FULL_MEMORY(config, m_memory).set_map(&mobigo_state::cs_map_base);
+
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_refresh_hz(60);
+ m_screen->set_size(320*2, 262*2);
+ m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
+ m_screen->set_screen_update("maincpu", FUNC(sunplus_gcm394_device::screen_update));
+ m_screen->screen_vblank().set(m_maincpu, FUNC(sunplus_gcm394_device::vblank));
+
+ SPEAKER(config, "lspeaker").front_left();
+ SPEAKER(config, "rspeaker").front_right();
+
+ GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "mobigo_cart");
+ m_cart->set_width(GENERIC_ROM16_WIDTH);
+ m_cart->set_device_load(FUNC(mobigo_state::cart_load));
+ //m_cart->set_must_be_loaded(true);
+
+ SOFTWARE_LIST(config, "cart_list").set_original("mobigo_cart");
+}
+
+ROM_START( mobigo2 )
+ ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // doesn't have GPnandnand header in NAND, so bootstrap is likely custom
+
+ ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
+ ROM_LOAD( "mobigo2_bios_ger.bin", 0x00000, 0x8400000, CRC(d5ab613d) SHA1(6fb104057dc3484fa958e2cb20c5dd0c19589f75) ) // SPANSION S34ML01G100TF100
+ROM_END
+
+
+CONS( 200?, mobigo2, 0, 0, mobigo, mobigo, mobigo_state, nand_init840, "VTech", "MobiGo 2 (Germany)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/vtech_mobigo.cpp b/src/mame/drivers/vtech_mobigo.cpp
deleted file mode 100644
index 02c06279660..00000000000
--- a/src/mame/drivers/vtech_mobigo.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:David Haywood
-
-#include "emu.h"
-#include "bus/generic/slot.h"
-#include "bus/generic/carts.h"
-#include "softlist_dev.h"
-#include "screen.h"
-
-
-class mobigo_state : public driver_device
-{
-public:
- mobigo_state(const machine_config &mconfig, device_type type, const char *tag) :
- driver_device(mconfig, type, tag),
- m_cart(*this, "cartslot"),
- m_screen(*this, "screen")
- { }
-
- void mobigo(machine_config &config);
-
-protected:
-
- void video_start() override;
-
- uint32_t screen_update(screen_device& screen, bitmap_rgb32& bitmap, const rectangle& cliprect);
-
- DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
- required_device<generic_slot_device> m_cart;
- required_device<screen_device> m_screen;
-};
-
-
-static INPUT_PORTS_START( mobigo )
-INPUT_PORTS_END
-
-void mobigo_state::video_start()
-{
-}
-
-uint32_t mobigo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
-{
- return 0;
-}
-
-DEVICE_IMAGE_LOAD_MEMBER(mobigo_state::cart_load)
-{
- uint32_t size = m_cart->common_get_size("rom");
- m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
- m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
- return image_init_result::PASS;
-}
-
-void mobigo_state::mobigo(machine_config &config)
-{
- // CPU type not identified (ARM? S+Core?)
-
- GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "mobigo_cart");
- m_cart->set_width(GENERIC_ROM16_WIDTH);
- m_cart->set_device_load(FUNC(mobigo_state::cart_load));
- m_cart->set_must_be_loaded(true);
-
- SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
- m_screen->set_refresh_hz(60);
- m_screen->set_size(320, 262);
- m_screen->set_visarea(0, 320-1, 0, 240-1);
- m_screen->set_screen_update(FUNC(mobigo_state::screen_update));
-
- SOFTWARE_LIST(config, "cart_list").set_original("mobigo_cart");
-}
-
-ROM_START( mobigo2 )
- ROM_REGION( 0x8400000, "mainrom", 0 )
- ROM_LOAD( "mobigo2_bios_ger.bin", 0x00000, 0x8400000, CRC(d5ab613d) SHA1(6fb104057dc3484fa958e2cb20c5dd0c19589f75) ) // TODO: what type of NAND?
-ROM_END
-
-
-CONS( 200?, mobigo2, 0, 0, mobigo, mobigo, mobigo_state, empty_init, "VTech", "MobiGo 2 (Germany)", MACHINE_IS_SKELETON )
diff --git a/src/mame/drivers/xavix.cpp b/src/mame/drivers/xavix.cpp
index 5f1656fd0e0..2acd2c6e5ad 100644
--- a/src/mame/drivers/xavix.cpp
+++ b/src/mame/drivers/xavix.cpp
@@ -547,6 +547,24 @@ static INPUT_PORTS_START( xavix_i2c )
INPUT_PORTS_END
+static INPUT_PORTS_START( epo_tfit )
+ PORT_INCLUDE(xavix)
+
+ PORT_MODIFY("IN0")
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // select
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // back
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON3 )
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON4 )
+ PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT )
+
+ PORT_MODIFY("IN1")
+ PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_DEVICE_MEMBER("i2cmem", i2cmem_device, read_sda)
+INPUT_PORTS_END
+
+
static INPUT_PORTS_START( tomcpin )
PORT_INCLUDE(xavix_i2c)
@@ -2355,7 +2373,6 @@ ROM_START( epo_ebox )
ROM_LOAD("exciteboxing.bin", 0x000000, 0x400000, CRC(e25ae4f5) SHA1(7f7b613f0ab8f43f5cad0d13de538921e77cae9c) )
ROM_END
-
ROM_START( ttv_sw )
ROM_REGION( 0x800000, "bios", ROMREGION_ERASE00 )
ROM_LOAD( "jedi.bin", 0x000000, 0x800000, CRC(51cae5fd) SHA1(1ed8d556f31b4182259ca8c766d60c824d8d9744) )
@@ -2381,6 +2398,7 @@ ROM_START( ban_onep )
ROM_LOAD("onepiece.bin", 0x000000, 0x800000, CRC(c5cb5a5f) SHA1(db85f6cc48d77c5a4967b9b8e2999167e3dfc8c8) )
ROM_END
+
CONS( 2002, epo_ebox, 0, 0, xavix2000_nv, epo_epp, xavix_state, init_xavix, "Epoch / SSD Company LTD", "Excite Boxing (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND ) // doesn't use XaviX2000 extra opcodes, but had that type of CPU
// die not confirmed, but uses extra opcodes. (hangs on title screen due to combination of freq_timer_done nested interrupts tripping, and waiting on bits in input ports to change
CONS( 2002, epo_bowl, 0, 0, xavix2000_i2c_24c02, epo_bowl, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Bowling (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
@@ -2487,6 +2505,11 @@ ROM_START( tmy_thom )
ROM_LOAD( "thomastank.bin", 0x000000, 0x800000, CRC(a52a23be) SHA1(e5b3500239d9e56eb5405f7585982959e5a162da) )
ROM_END
+ROM_START( epo_tfit )
+ ROM_REGION(0x400000, "bios", ROMREGION_ERASE00)
+ ROM_LOAD("tennisfitness.bin", 0x000000, 0x400000, CRC(cbf65bd2) SHA1(30b3da6f061b2dd91679db42a050f715901beb87) )
+ROM_END
+
CONS( 2004, xavtenni, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Tennis (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
CONS( 2004, xavbaseb, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "SSD Company LTD", "XaviX Baseball (XaviXPORT)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
@@ -2520,5 +2543,7 @@ CONS( 2007, domdance, 0, 0, xavix2002_i2c_jmat, xavixp, xavix_i2c_jmat_state, in
CONS( 2005, mrangbat, 0, 0, xavix2002_i2c_mrangbat, mrangbat, xavix_i2c_state, init_xavix, "Bandai / SSD Company LTD", "Mahou Taiketsu Magiranger - Magimat de Dance & Battle (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
+CONS( 2004, epo_tfit, 0, 0, xavix2002_i2c_24c04, epo_tfit, xavix_i2c_state, init_xavix, "Epoch / SSD Company LTD", "Excite Sports Tennis x Fitness (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND )
+
// TODO: does it have an SEEPROM? why does it hang? full title?
CONS( 2005, tmy_thom, 0, 0, xavix2002_i2c_24c04, xavix_i2c, xavix_i2c_state, init_xavix, "Tomy / SSD Company LTD", "Thomas and Friends (Tomy)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_GRAPHICS | MACHINE_IMPERFECT_SOUND )
diff --git a/src/mame/includes/sunplus_unsp20soc.h b/src/mame/includes/sunplus_unsp20soc.h
new file mode 100644
index 00000000000..c08145bd21b
--- /dev/null
+++ b/src/mame/includes/sunplus_unsp20soc.h
@@ -0,0 +1,302 @@
+// license:BSD-3-Clause
+// copyright-holders:David Haywood
+#ifndef MAME_INCLUDES_SUNPLUS_GCM394_H
+#define MAME_INCLUDES_SUNPLUS_GCM394_H
+
+#pragma once
+
+#include "machine/sunplus_gcm394.h"
+#include "bus/generic/slot.h"
+#include "bus/generic/carts.h"
+
+#include "screen.h"
+#include "speaker.h"
+
+
+class full_memory_device :
+ public device_t,
+ public device_memory_interface
+{
+public:
+ // construction/destruction
+ full_memory_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
+
+ // configuration helpers
+ template <typename... T> full_memory_device& set_map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
+
+ template <typename... T> full_memory_device& map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
+
+ address_space* get_program() { return m_program; }
+
+protected:
+ virtual void device_start() override;
+ virtual void device_config_complete() override;
+
+ // device_memory_interface overrides
+ virtual space_config_vector memory_space_config() const override;
+
+
+private:
+ // internal state
+ address_space_config m_program_config;
+ address_space *m_program;
+};
+
+
+// device type definition
+DECLARE_DEVICE_TYPE(FULL_MEMORY, full_memory_device)
+
+
+
+class gcm394_game_state : public driver_device
+{
+public:
+ gcm394_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ driver_device(mconfig, type, tag),
+ m_maincpu(*this, "maincpu"),
+ m_screen(*this, "screen"),
+ m_io(*this, "IN%u", 0U),
+ m_romregion(*this, "maincpu"),
+ m_memory(*this, "memory")
+ {
+ }
+
+ void base(machine_config &config);
+
+ void cs_map_base(address_map &map);
+
+ virtual DECLARE_READ16_MEMBER(cs0_r);
+ virtual DECLARE_WRITE16_MEMBER(cs0_w);
+ virtual DECLARE_READ16_MEMBER(cs1_r);
+ virtual DECLARE_WRITE16_MEMBER(cs1_w);
+ virtual DECLARE_READ16_MEMBER(cs2_r);
+ virtual DECLARE_WRITE16_MEMBER(cs2_w);
+ virtual DECLARE_READ16_MEMBER(cs3_r);
+ virtual DECLARE_WRITE16_MEMBER(cs3_w);
+ virtual DECLARE_READ16_MEMBER(cs4_r);
+ virtual DECLARE_WRITE16_MEMBER(cs4_w);
+
+ void cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4);
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+
+ required_device<sunplus_gcm394_base_device> m_maincpu;
+ required_device<screen_device> m_screen;
+
+
+ required_ioport_array<3> m_io;
+
+
+ optional_region_ptr<uint16_t> m_romregion;
+ required_device<full_memory_device> m_memory;
+
+ virtual DECLARE_READ16_MEMBER(porta_r);
+ virtual DECLARE_READ16_MEMBER(portb_r);
+ virtual DECLARE_READ16_MEMBER(portc_r);
+ virtual DECLARE_WRITE16_MEMBER(porta_w);
+
+ virtual DECLARE_READ16_MEMBER(read_external_space);
+ virtual DECLARE_WRITE16_MEMBER(write_external_space);
+
+private:
+};
+
+
+class generalplus_gpac800_game_state : public gcm394_game_state
+{
+public:
+ generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ gcm394_game_state(mconfig, type, tag),
+ m_nandregion(*this, "nandrom"),
+ m_initial_copy_words(0x2000)
+ {
+ }
+
+ void generalplus_gpac800(machine_config &config);
+
+ void nand_init210();
+ void nand_init840();
+ void nand_wlsair60();
+ void nand_vbaby();
+ void nand_tsm();
+ void nand_beambox();
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ DECLARE_READ8_MEMBER(read_nand);
+ std::vector<uint16_t> m_sdram;
+ std::vector<uint16_t> m_sdram2;
+
+ virtual DECLARE_READ16_MEMBER(cs0_r) override;
+ virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
+ virtual DECLARE_READ16_MEMBER(cs1_r) override;
+ virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
+
+private:
+ optional_region_ptr<uint8_t> m_nandregion;
+
+ void nand_create_stripped_region();
+
+ std::vector<uint8_t> m_strippedrom;
+ int m_strippedsize;
+ int m_size;
+ int m_nandblocksize;
+ int m_nandblocksize_stripped;
+
+ int m_initial_copy_words;
+ int m_vectorbase;
+};
+
+
+class generalplus_gpac800_vbaby_game_state : public generalplus_gpac800_game_state
+{
+public:
+ generalplus_gpac800_vbaby_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ generalplus_gpac800_game_state(mconfig, type, tag),
+ m_cart(*this, "cartslot")
+ {
+ }
+
+ void generalplus_gpac800_vbaby(machine_config &config);
+
+protected:
+ required_device<generic_slot_device> m_cart;
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+
+private:
+};
+
+
+class generalplus_gpspispi_game_state : public gcm394_game_state
+{
+public:
+ generalplus_gpspispi_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ gcm394_game_state(mconfig, type, tag)
+ {
+ }
+
+ void generalplus_gpspispi(machine_config &config);
+
+ void init_spi();
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+private:
+};
+
+
+
+class generalplus_gpspispi_bkrankp_game_state : public generalplus_gpspispi_game_state
+{
+public:
+ generalplus_gpspispi_bkrankp_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ generalplus_gpspispi_game_state(mconfig, type, tag),
+ m_cart(*this, "cartslot")
+ {
+ }
+
+ void generalplus_gpspispi_bkrankp(machine_config &config);
+
+protected:
+ required_device<generic_slot_device> m_cart;
+ DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
+
+private:
+};
+
+
+
+class tkmag220_game_state : public gcm394_game_state
+{
+public:
+ tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ gcm394_game_state(mconfig, type, tag)
+ {
+ }
+
+ void tkmag220(machine_config &config);
+
+protected:
+
+ /*
+ virtual DECLARE_READ16_MEMBER(porta_r) override
+ {
+ return machine().rand();
+ }
+
+ virtual DECLARE_READ16_MEMBER(portb_r) override
+ {
+ return machine().rand();
+ }
+
+ virtual DECLARE_WRITE16_MEMBER(porta_w) override
+ {
+ }
+ */
+
+private:
+
+ virtual DECLARE_READ16_MEMBER(cs0_r) override
+ {
+ return m_romregion[offset & 0x3ffffff];
+ }
+};
+
+class wrlshunt_game_state : public gcm394_game_state
+{
+public:
+ wrlshunt_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ gcm394_game_state(mconfig, type, tag)
+ {
+ }
+
+ void wrlshunt(machine_config &config);
+
+ void init_wrlshunt();
+
+protected:
+ virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ std::vector<uint16_t> m_sdram;
+
+ virtual DECLARE_READ16_MEMBER(porta_r) override;
+ virtual DECLARE_WRITE16_MEMBER(porta_w) override;
+
+private:
+
+
+ //required_shared_ptr<u16> m_mainram;
+
+ virtual DECLARE_READ16_MEMBER(cs0_r) override;
+ virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
+ virtual DECLARE_READ16_MEMBER(cs1_r) override;
+ virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
+};
+
+class jak_s500_game_state : public wrlshunt_game_state
+{
+public:
+ jak_s500_game_state(const machine_config& mconfig, device_type type, const char* tag) :
+ wrlshunt_game_state(mconfig, type, tag)
+ {
+ }
+
+protected:
+ //virtual void machine_start() override;
+ virtual void machine_reset() override;
+
+ virtual DECLARE_READ16_MEMBER(porta_r) override;
+ virtual DECLARE_READ16_MEMBER(portb_r) override;
+
+private:
+};
+
+#endif
diff --git a/src/mame/machine/elan_eu3a05gpio.h b/src/mame/machine/elan_eu3a05gpio.h
index c476a303641..28372741a92 100644
--- a/src/mame/machine/elan_eu3a05gpio.h
+++ b/src/mame/machine/elan_eu3a05gpio.h
@@ -16,7 +16,7 @@ public:
auto read_0_callback() { return m_read_0_callback.bind(); }
auto read_1_callback() { return m_read_1_callback.bind(); }
auto read_2_callback() { return m_read_2_callback.bind(); }
-
+
DECLARE_READ8_MEMBER(gpio_r);
DECLARE_WRITE8_MEMBER(gpio_w);
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index 1f30efed645..722b504f6a4 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -16202,9 +16202,6 @@ ecm6127 //
hyhoo // (c) 1987
hyhoo2 // (c) 1987
-@source:hyperscan.cpp
-hs //
-
@source:hyperspt.cpp
hpolym84 // GX330 (c) 1984
hyperspt // GX330 (c) 1984 + Centuri
@@ -19034,9 +19031,6 @@ lethalj // (c) 1996 The Game Room
ripribit // (c) 1997 LAI Games
ripribita // (c) 1997 LAI Games
-@source:lexibook_jg7425.cpp
-lx_jg7425
-
@source:lft.cpp
lft1230 //
lft1510 //
@@ -31331,6 +31325,7 @@ afbm7800
bandgpad
cpatrolm
ts_handy11
+ablwikid
@source:nes_vt.cpp
vdogdeme
@@ -37005,6 +37000,13 @@ conyping //
conyfght
karaokd2
+@source:spg29x.cpp
+hyprscan //
+jak_bbsf
+
+@source:spg29x_lexibook_jg7425.cpp
+lx_jg7425
+
@source:spg2xx.cpp
rad_skat //
rad_skatp //
@@ -37017,6 +37019,7 @@ tvsprt10 //
decathln
wiwi18 //
guitarfv
+guitarss
jjstrip
tmntmutm
@@ -37050,6 +37053,7 @@ jak_pooh //
jak_care //
jak_nick //
jak_sbfc //
+tvtchsw
@source:spg2xx_lexibook.cpp
lexizeus // Lexibook
@@ -37682,7 +37686,7 @@ srangero // (c) 1988
srangerw // (c) 1988 SunA (WDK License)
starfigh // (c) 1990 SunA
-@source:sunplus_gcm394.cpp
+@source:sunplus_unsp20soc.cpp
jak_s500
jak_totm
smartfp // Smart Fit Park
@@ -37701,6 +37705,9 @@ mgtfit
beambox
bkrankp
+@source:sunplus_unsp20soc_mobigo.cpp
+mobigo2
+
@source:supbtime.cpp
chinatwn // MAK (c) 1991 Data East Corporation (Japan)
supbtime // MAE (c) 1990 Data East Corporation (World)
@@ -40271,9 +40278,6 @@ laser700 // 1984? Laser 700
@source:vtech_eu3a12.cpp
vreadere
-@source:vtech_mobigo.cpp
-mobigo2
-
@source:vulgus.cpp
mach9 // bootleg (ITISA)
vulgus // 5/1984 (c) 1984
@@ -41220,6 +41224,7 @@ epo_epp //
epo_eppk //
epo_epp3 //
epo_efdx //
+epo_tfit
epo_ebox //
epo_sdb //
epo_guru //
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index b9949207298..c834077f2a3 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -377,7 +377,7 @@ hunter2.cpp
hunter16.cpp
husky.cpp
hx20.cpp
-hyperscan.cpp
+spg29x.cpp
i7000.cpp
ibm3153.cpp
ibm6580.cpp
@@ -453,7 +453,7 @@ leapfrog_leappad.cpp
leapster.cpp
learnwin.cpp
lee1214.cpp
-lexibook_jg7425.cpp
+spg29x_lexibook_jg7425.cpp
lft.cpp
lg-dvd.cpp
lilith.cpp
@@ -835,7 +835,8 @@ sun2.cpp
sun3.cpp
sun3x.cpp
sun4.cpp
-sunplus_gcm394.cpp
+sunplus_unsp20soc.cpp
+sunplus_unsp20soc_mobigo.cpp
super6.cpp
super80.cpp
superga2.cpp
@@ -993,7 +994,6 @@ vta2000.cpp
vtech1.cpp
vtech2.cpp
vtech_eu3a12.cpp
-vtech_mobigo.cpp
wangpc.cpp
wicat.cpp
wrinkles.cpp
diff --git a/src/mame/video/xavix.cpp b/src/mame/video/xavix.cpp
index 2c576515c83..541d026b97b 100644
--- a/src/mame/video/xavix.cpp
+++ b/src/mame/video/xavix.cpp
@@ -836,7 +836,7 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
uint16_t start = ((m_bmp_base[0x11] << 8) | m_bmp_base[0x10]);
uint8_t end = m_bmp_base[0x12]; // ?? related to width?
uint8_t size = m_bmp_base[0x13]; // some kind of additional scaling?
- uint8_t mode = m_bmp_base[0x14]; // eanble,bpp, zval etc.
+ uint8_t mode = m_bmp_base[0x14]; // enable,bpp, zval etc.
uint32_t unused = ((m_bmp_base[0x15] << 16) | (m_bmp_base[0x16] << 8) | (m_bmp_base[0x17] << 0));
@@ -856,29 +856,35 @@ uint32_t xavix_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
int width = (rgtadr * 8) / bpp;
//int count = 0;
- set_data_address(base + base2, 0);
- for (int y = top; y < 256; y++)
+ for (int y = cliprect.min_y; y <= cliprect.max_y; y++)
{
- for (int x = 0; x < width; x++)
+ int line = y - top;
+
+ if ((line > 0) && (y < bot))
{
- uint32_t* yposptr = &bitmap.pix32(y);
- uint16_t* zyposptr = &m_zbuffer.pix16(y);
+ set_data_address(base + base2 + ((line * width * bpp) / 8), 0);
- uint8_t dat = 0;
- for (int i = 0; i < bpp; i++)
+ for (int x = 0; x < width; x++)
{
- dat |= (get_next_bit() << i);
- }
+ uint32_t* yposptr = &bitmap.pix32(y);
+ uint16_t* zyposptr = &m_zbuffer.pix16(y);
- if (((x <= cliprect.max_x) && (x >= cliprect.min_x)) && ((y <= cliprect.max_y) && (y >= cliprect.min_y)))
- {
- if ((m_bmp_palram_sh[dat] & 0x1f) < 24) // same transparency logic as everything else? (baseball title)
+ uint8_t dat = 0;
+ for (int i = 0; i < bpp; i++)
+ {
+ dat |= (get_next_bit() << i);
+ }
+
+ if (((x <= cliprect.max_x) && (x >= cliprect.min_x)) && ((y <= cliprect.max_y) && (y >= cliprect.min_y)))
{
- if (zval >= zyposptr[x])
+ if ((m_bmp_palram_sh[dat] & 0x1f) < 24) // same transparency logic as everything else? (baseball title)
{
- yposptr[x] = paldata[dat + 0x100];
- zyposptr[x] = zval;
+ if (zval >= zyposptr[x])
+ {
+ yposptr[x] = paldata[dat + 0x100];
+ zyposptr[x] = zval;
+ }
}
}
}