summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author David Haywood <28625134+DavidHaywood@users.noreply.github.com>2020-03-01 12:44:27 +0000
committer GitHub <noreply@github.com>2020-03-01 13:44:27 +0100
commitb973a74df6818d44eea90e126767ae8d0f901dae (patch)
tree11ca25be4da50857a4977226485f9e59ad2656c5
parentb48b0cb47c204950432ffa6867b9e1bd63370641 (diff)
Plug and Play work (#6363)
* set discpal to correct machine type (nw) * moew skannerz tv to its own driver and add notes from Tahg [Tahg] * buzztime IO notes from Tahg [Tahg] * new NOT WORKING ---- Pac-Man Connect & Play (Feb 14 2012 10:46:23) [Sean Riddle, David Haywood] boots and you can select things from the menu but this is the newer SP SoC and needs a LOT of work on the graphics.
-rw-r--r--scripts/target/mame/mess.lua1
-rw-r--r--src/mame/drivers/elan_eu3a05.cpp113
-rw-r--r--src/mame/drivers/spg2xx.cpp123
-rw-r--r--src/mame/drivers/spg2xx_lexibook.cpp5
-rw-r--r--src/mame/drivers/spg2xx_skannerztv.cpp432
-rw-r--r--src/mame/drivers/sunplus_unsp20soc.cpp90
-rw-r--r--src/mame/mame.lst5
-rw-r--r--src/mame/mess.flt1
8 files changed, 643 insertions, 127 deletions
diff --git a/scripts/target/mame/mess.lua b/scripts/target/mame/mess.lua
index e6a0df3eb59..229925d50fb 100644
--- a/scripts/target/mame/mess.lua
+++ b/scripts/target/mame/mess.lua
@@ -3823,6 +3823,7 @@ files {
MAME_DIR .. "src/mame/drivers/tvgame.cpp",
MAME_DIR .. "src/mame/drivers/spg110.cpp",
MAME_DIR .. "src/mame/drivers/spg2xx.cpp",
+ MAME_DIR .. "src/mame/drivers/spg2xx_skannerztv.cpp",
MAME_DIR .. "src/mame/drivers/spg2xx_jakks.cpp",
MAME_DIR .. "src/mame/drivers/spg2xx_jakks_gkr.cpp",
MAME_DIR .. "src/mame/drivers/spg2xx_jakks_tvtouch.cpp",
diff --git a/src/mame/drivers/elan_eu3a05.cpp b/src/mame/drivers/elan_eu3a05.cpp
index 43205a2f2a2..123872cb35e 100644
--- a/src/mame/drivers/elan_eu3a05.cpp
+++ b/src/mame/drivers/elan_eu3a05.cpp
@@ -93,6 +93,119 @@
*/
+/*
+
+Buzztime Trivia notes from Tahg (addresses based on base ROM, not cartridges)
+
+300 Cursor Left
+301 Cursor Top
+302 Cursor Right
+303 Cursor Bottom
+
+3E5 Sent Command
+3E6 Watchdog Counter
+3E9 Active Player
+3EA Sent Player Id/Incoming Byte
+3EB Sent Player Button/Loop Counter
+
+0-A Name
+E-F Score
+44x Player 1 Data
+...
+4Fx Player 12 Data
+
+509 Cursor index
+515 Name on Enter name screen
+
+These read a byte, (aaabbbcc) MSB first on IO 5041. In general:
+Set 5043 bit 0 high.
+Repeat 8 times
+ Wait for 5041 bit 0 to go high
+ Read 5041 bit 1
+Set 5043 bit 0 low
+
+6B29 ReadCommandA Exit on c=2 or c=1,b=7,a=7 Watchdog resets counters and reads port again
+6BE8 ReadCommandB Exit on c=2 or c=1,b=7,a=7 Watchdog exits with b=FF if 3E7 nonzero
+6CB4 ReadCommandC Exit on c=2 Watchdog exits with b=FF
+
+ Address Publics by Value
+
+ 00000000:00000000 byte_0
+ 00000000:0000050A index
+ 00000000:00006011 LoadTileSet
+ 00000000:0000605B LoadPalette
+ 00000000:00006090 SetTileBase
+ 00000000:000060D7 DisableSprites
+ 00000000:000060F0 SetSpriteBase
+ 00000000:0000648F Play0
+ 00000000:00006494 Play1
+ 00000000:00006499 Play2
+ 00000000:0000649E Play3
+ 00000000:000064A3 Play4
+ 00000000:000064A8 Play5
+ 00000000:000064AD Play6
+ 00000000:000064B2 Play7
+ 00000000:000064B7 Play8
+ 00000000:000064BC Play9
+ 00000000:000064C1 PlayA
+ 00000000:000064C6 PlayB
+ 00000000:000064CB DisableSoundCh0
+ 00000000:000064EA DisableSoundCh1
+ 00000000:00006509 DisableSoundCh2
+ 00000000:00006528 DisableSoundCh3
+ 00000000:00006547 DisableSoundCh4
+ 00000000:00006566 DisableSoundCh5
+ 00000000:00006585 DisableSoundChAll
+ 00000000:000065AC WaitForVBIAndSetSpriteBase
+ 00000000:000065B5 WaitForVBIAndSetTileBase
+ 00000000:000065BE WaitForVBIAndLoadTileSet
+ 00000000:000065C7 JJLoadTileSet
+ 00000000:00006933 DrawBackground
+ 00000000:00006B29 ReadCommandA
+ 00000000:00006BE8 ReadCommandB
+ 00000000:00006CB4 ReadCommandC
+ 00000000:00006D66 DrawText
+ 00000000:00007E80 WaitXTimesForInput
+ 00000000:000099B4 NameScreenLoop
+ 00000000:00009EB0 NameScreenSetChar
+ 00000000:00009F43 NameScreenDeleteChar
+ 00000000:00009FC8 NameScreenCalcCharacter
+ 00000000:0000A02F NameScreenCalculateCursor
+ 00000000:0000A051 NameScreenUpdateCursor
+ 00000000:0000A112 SelectPlayersLoop
+ 00000000:0000A290 SelectPlayer
+ 00000000:0000A31E CreatePlayer
+ 00000000:0000A769 ReadAAndWaitForSelect
+ 00000000:0000A821 DrawRoundTitles
+ 00000000:0000AD8A ReadAAndSetPlayer
+ 00000000:0000ADDF ReadAAndCheckPlayer
+ 00000000:0000AF1F ShowQuestion
+ 00000000:0000AF65 ShowChoices
+ 00000000:0000AFC5 ShowHint1
+ 00000000:0000B004 ShowHint2
+ 00000000:0000B033 ShowHint3
+ 00000000:0000B061 ShowAnswer
+ 00000000:0000B0BF ShowReason
+ 00000000:0000B1C0 ShowScore
+ 00000000:0000C848 MenuUpdate
+ 00000000:0000D10D WinScreen
+ 00000000:0000D1F1 DoFireworks
+ 00000000:0000E9AE JLoadTileSet
+ 00000000:0000E9B6 JLoadPalette
+ 00000000:0000E9C2 JSetTileBase
+ 00000000:0000E9C8 JSetSpriteBase
+ 00000000:0000E9CE JDisableSprites
+ 00000000:0000E9D4 SetGamePage
+ 00000000:0000E9DF MemoryTest
+ 00000000:0000EA36 SRAMTest
+ 00000000:0000EBA9 nullsub_1
+ 00000000:0000EBAA WaitForVBI
+ 00000000:0000EBCA RomTest
+ 00000000:0000EC24 WaitForTimer
+ 00000000:0000ECE9 nullsub_2
+
+*/
+
#include "emu.h"
#include "cpu/m6502/m6502.h"
//#include "cpu/m6502/m65c02.h"
diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp
index 76dc4b33a6e..77104819b89 100644
--- a/src/mame/drivers/spg2xx.cpp
+++ b/src/mame/drivers/spg2xx.cpp
@@ -322,104 +322,6 @@ static INPUT_PORTS_START( rad_skatp )
PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag
INPUT_PORTS_END
-static INPUT_PORTS_START( rad_sktv )
- /* how does the Scanner connect? probably some serial port with comms protocol, not IO ports?
- internal test mode shows 'uart' ports (which currently fail)
-
- To access internal test hold DOWN and BUTTON1 together on startup until a coloured screen appears.
- To cycle through the tests again hold DOWN and press BUTTON1 */
-
- PORT_START("P1")
- PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
- 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_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
- PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
- PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
- 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_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
- PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 )
- PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 )
- 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, "IN1" )
- 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_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
-INPUT_PORTS_END
static INPUT_PORTS_START( wiwi18 )
PORT_START("P1")
@@ -1187,19 +1089,6 @@ void spg2xx_game_state::rad_skatp(machine_config &config)
// m_screen->set_size(320, 312);
}
-void spg2xx_game_state::rad_sktv(machine_config &config)
-{
- SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
- m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_state::mem_map_4m);
-
- spg2xx_base(config);
-
- m_maincpu->porta_in().set(FUNC(spg2xx_game_state::base_porta_r));
- m_maincpu->portb_in().set(FUNC(spg2xx_game_state::base_portb_r));
- m_maincpu->portc_in().set(FUNC(spg2xx_game_state::base_portc_r));
- m_maincpu->i2c_w().set(FUNC(spg2xx_game_state::i2c_w));
- m_maincpu->i2c_r().set(FUNC(spg2xx_game_state::i2c_r));
-}
void spg2xx_game_state::rad_crik(machine_config &config)
{
@@ -1225,17 +1114,6 @@ ROM_START( rad_skatp ) // rom was dumped from the NTSC version, but region comes
ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) )
ROM_END
-ROM_START( rad_sktv )
- ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
- ROM_LOAD16_WORD_SWAP( "skannerztv.bin", 0x000000, 0x200000, CRC(e92278e3) SHA1(eb6bee5e661128d83784960dfff50379c36bfaeb) )
-
- /* The external scanner MCU is a Winbond from 2000: SA5641
- the scanner plays sound effects when scanning, without being connected to the main unit, so a way to dump / emulate
- this MCU is also needed for complete emulation
-
- TODO: find details on MCU so that we know capacity etc. */
-ROM_END
-
ROM_START( rad_fb2 )
ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD16_WORD_SWAP( "football2.bin", 0x000000, 0x400000, CRC(96b4f0d2) SHA1(e91f2ac679fb0c026ffe216eb4ab58802f361a17) )
@@ -1366,7 +1244,6 @@ void spg2xx_game_swclone_state::init_swclone()
CONS( 2006, rad_skat, 0, 0, rad_skat, rad_skat, spg2xx_game_state, init_crc, "Radica", "Play TV Skateboarder (NTSC)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, rad_skatp, rad_skat, 0, rad_skatp,rad_skatp, spg2xx_game_state, init_crc, "Radica", "Connectv Skateboarder (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
CONS( 2006, rad_crik, 0, 0, rad_crik, rad_crik, spg2xx_game_state, init_crc, "Radica", "Connectv Cricket (PAL)", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // Version 3.00 20/03/06 is listed in INTERNAL TEST
-CONS( 2007, rad_sktv, 0, 0, rad_sktv, rad_sktv, spg2xx_game_state, init_crc, "Radica", "Skannerz TV", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
CONS( 2007, rad_fb2, 0, 0, rad_skat, rad_fb2, spg2xx_game_state, init_crc, "Radica", "Play TV Football 2", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING ) // offers a 2 player option in menus, but seems to have only been programmed for, and released as, a single player unit, P2 controls appear unfinished.
// ABL TV Games
diff --git a/src/mame/drivers/spg2xx_lexibook.cpp b/src/mame/drivers/spg2xx_lexibook.cpp
index 978e2fe0596..194c2617d58 100644
--- a/src/mame/drivers/spg2xx_lexibook.cpp
+++ b/src/mame/drivers/spg2xx_lexibook.cpp
@@ -331,8 +331,11 @@ ROM_END
// these all have the same ROM scrambling
CONS( 200?, lexizeus, 0, 0, lexizeus, lexizeus, spg2xx_lexizeus_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 are versions of the Seal that actually show Lexibook on the boot screen rather than just the unit
+
+CONS( 200?, discpal, 0, 0, lexizeus, lexiseal, spg2xx_lexizeus_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
CONS( 200?, vgcaplet, 0, 0, lexiseal, lexiseal, spg2xx_lexiseal_game_state, init_zeus, "Performance Designed Products (licensed by Taito / Data East)", "VG Pocket Caplet Fast Acting 50-in-1", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
diff --git a/src/mame/drivers/spg2xx_skannerztv.cpp b/src/mame/drivers/spg2xx_skannerztv.cpp
new file mode 100644
index 00000000000..8ab794d8bc8
--- /dev/null
+++ b/src/mame/drivers/spg2xx_skannerztv.cpp
@@ -0,0 +1,432 @@
+// license:BSD-3-Clause
+// copyright-holders:Ryan Holtz, David Haywood
+
+// Skannerz TV
+
+/* I/O related notes from Tahg
+
+Summary:
+SEND(from console) RECEIVE (to console)
+--- Load monsters / items
+1 2
+128 + 0 M/I[0] HIBYTE, LOBYTE
+... ...
+128 + 99 M/I[99] HIBYTE, LOBYTE
+--- Save monsters / items
+4 5
+128 + 0, M/I[0] HIBYTE, LOBYTE 6
+... ...
+128 + 99, M/I[99] HIBYTE, LOBYTE 6
+--- Buttons
+3 BHI, BLO
+
+Buttons
+BLO:
+Bit 0 Up
+Bit 1 Down
+Bit 2 2/B
+Bit 3 1/A
+Bit 4 Left
+Bit 5 Right
+Bit 6 Unused
+Bit 7 Unused
+BHI: Unused
+
+Port A
+Bit 0 Enable "Left" Controller
+Bit 1 Enable "Right" Controller
+
+Player
+0:
+8:
+B:
+D:
+E:
+65: monsters
+B5: items
+
+doPlayer(player)
+ var_3 = player - 1
+ pData = Player[var_3]
+ switch(PlayerState[var_3])
+ case 0: // Request controller -> console state
+ r1 = 79
+ while(--r1 >= 0)
+ PlayerState[var_3] = 1
+ P_UART_Ctrl |= TxEn
+ P_UART_Ctrl |= TxIntEn
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = 1
+ WaitCycle[var_3] = 6
+ CurMI[var_3] = 0
+ break
+ case 1: // Receive controller -> console state (expects 2)
+ if(Uartp != Uartg)
+ byte_1241 = UARTBuffer[Uartg]
+ if(byte_1241 == 2)
+ PlayerState[var_3] = 2
+ InitPlayer(var_3)
+ Uartg = Uartg == 7 ? 0 : Uartg + 1
+ break
+ case 2: // Sync monster / item
+ if(CurMI[var_3] != 100)
+ var_6 = CurMI[var_3] | 80h
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_6
+ PlayerState[var_3] = 3
+ WaitCycle[var_3] = 6
+ Retries[var_3] = 3
+ CurRecByte[var_3] = 0
+ else if(player == 1 && byte_1238 & 100h)
+ PlayerState[var_3] = 6
+ byte_1238 &= ~100h
+ else if(player == 2 && byte_1238 & 200h)
+ PlayerState[var_3] = 6
+ byte_1238 &= ~200h
+ else
+ PlayerState[var_3] = 4
+ if(player == 1)
+ P_IOA_Buffer |= 1
+ byte_1238 |= 11
+ else if(player == 2)
+ P_IOA_Buffer |= 2
+ byte_1238 |= 22
+ break
+ case 3: // Receive monster / item
+ if(Uartp != Uartg)
+ r4 = CurMI[var_3]
+ var_A = UARTBuffer[Uartg]
+ if(CurRecByte[var_3] == 0)
+ if(r4 > 79)
+ pData.items[r4-80] = var_A << 8
+ else pData.monsters[r4] = var_A << 8
+ CurRecByte[var_3] += 1
+ else if(CurRecByte[var_3] == 1)
+ if(r4 > 79)
+ pData.items[r4-80] |= var_A
+ else pData.monsters[r4] |= var_A
+ PlayerState[var_3] = 2
+ CurMI[var_3] += 1
+ Uartg = Uartg == 7 ? 0 : Uartg + 1
+ break
+ case 4:
+ if(player == 1)
+ if((byte_1238 & 4) == 0)
+ byte_1238 |= 4
+ r1 = 79
+ while(--r1 >= 0)
+ while(P_UART_Status & TXBUSY)
+ else break
+ else if(player == 2)
+ if((byte_1238 & 8) == 0)
+ byte_1238 |= 8
+ r1 = 79
+ while(--r1 >= 0)
+ while(P_UART_Status & TXBUSY)
+ break
+ else break
+ else break
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = 3
+ PlayerState[var_3] = 5
+ WaitCycle[var_3] = 6
+ Retries[var_3] = 3
+ CurRecByte[var_3] = 0
+ break
+ case 5:
+ if(Uartp != Uartg)
+ var_4 = CurRecByte[var_3]
+ if(var_4 == 0)
+ byte_1242[var_3] = UARTBuffer[Uartg] & 3fh
+ CurRecByte[var_3] += 1
+ else if(var_4 == 1)
+ byte_1234[var_3] = UARTBuffer[Uartg] & 3fh
+ PlayerState = 2
+ WaitCycle[var_3] = 0
+ if(player == 1)
+ P_IOA_Buffer |= 1
+ byte_1238 &= ~4
+ else if(player == 2)
+ P_IOA_Buffer |= 2
+ byte_1238 &= ~8
+ Uartg = Uartg == 7 ? 0 : Uartg + 1
+ break:
+ case 6: // Request console -> controller state
+ r1 = 79
+ while(--r1 >= 0)
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = 4
+ PlayerState[var_3] = 7
+ WaitCycle[var_3] = 6
+ CurMI[var_3] = 0
+ Retries[var_3] = 3
+ case 7: // Receive console -> controller state (expects 5)
+ if(Uartp != Uartg)
+ if(UARTBuffer[Uartg] == 5)
+ PlayerState = 8
+ WaitCycle[var_3] = 6
+ CurSendByte[var_3] = 0
+ Retries[var_3] = 3
+ Uartg = Uartg == 7 ? 0 : Uartg + 1
+ break
+ case 8: // Send monster / item
+ r4 = CurMI[var_3]
+ if( r4 <= 99)
+ var_9 = CurSendByte[var_3]
+ var_8 = 0
+ if((P_UART_Status & TXBUSY) == 0)
+ var_8 = 1
+ if(var_8)
+ if(var_9 == 0)
+ var_1 = r4 | 80h
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_1
+ WaitCycle[var_3] = 6
+ CurSendByte[var_3] += 1
+ else if(var_9 == 1)
+ if (r4 <= 79)
+ var_1 = (pData.monsters[r4] & 0xFF00) >> 8
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_1
+ else
+ var_1 = (pData.monsters[r4-80] & 0xFF00) >> 8
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_1
+ WaitCycle[var_3] = 6
+ CurSendByte[var_3] += 1
+ else if(var_9 == 2)
+ if (r4 <= 79)
+ var_1 = pData.monsters[r4] & 0xFF
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_1
+ else
+ var_1 = pData.monsters[r4-80] & 0xFF
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl &= ~RxEn
+ P_UART_TxBuf = var_1
+ WaitCycle[var_3] = 6
+ CurSendByte[var_3] += 1
+ PlayerState[var_3] = 9
+ else
+ PlayerState = 4
+ if(player == 1)
+ P_IOA_Buffer |= 1
+ byte_1238 |= 4
+ else if(player == 2)
+ P_IOA_Buffer |= 2
+ byte_1238 |= 8
+ break
+ case 9: // Receive monster / item sent state (expects 6)
+ if(Uartp != Uartg)
+ if(UARTBuffer[Uartg] == 6)
+ PlayerState[var_3] = 8
+ WaitCycle[var_3] = 0
+ CurSendByte[var_3] = 0
+ CurMI[var_3] += 1
+ Retries[var_3] = 3
+ break
+ doPlayerMore(player)
+
+doPlayerMore(player)
+ var_2 = WaitCycle[player-1]
+ if(var_2 == 0) return
+ var_2--
+ WaitCycle[player-1] = var_2
+ if(var_2 != 0) return
+ switch(PlayerState[player-1])
+ case 3:
+ if(Retries[player-1]--)
+ var_3 = CurMI[player-1] | 80h
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl = var_1 = P_UART_Ctrl & ~RxEn
+ P_UART_TxBuf = var_3
+ WaitCycle[player-1] = 6
+ CurRecByte[player-1] = 0
+ return
+ break
+ case 5:
+ if(Retries[player-1]--)
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl = var_1 = P_UART_Ctrl & ~RxEn
+ P_UART_TxBuf = 3
+ WaitCycle[player-1] = 6
+ CurRecByte[player-1] = 0
+ return
+ break
+ case 7:
+ if(Retries[player-1]--)
+ while(P_UART_Status & TXBUSY)
+ P_UART_Ctrl = var_1 = P_UART_Ctrl & ~RxEn
+ P_UART_TxBuf = 4
+ WaitCycle[player-1] = 6
+ return
+ break
+ case 9:
+ if(Retries[player-1]--)
+ PlayerState = 8
+ CurSendByte[player] = 0
+ else
+ ClearPlayer(player)
+ return
+ case 1:
+ ClearPlayer(player)
+ return
+ ClearPlayer(player)
+ if(player == 1)
+ byte_1238 |= 40h
+ byte_1238 &= ~10h
+ else if(player == 2)
+ byte_1238 |= 80h
+ byte_1238 &= ~20h
+
+*/
+
+#include "emu.h"
+#include "includes/spg2xx.h"
+#include "machine/nvram.h"
+
+class skannerztv_state : public spg2xx_game_state
+{
+public:
+ skannerztv_state(const machine_config &mconfig, device_type type, const char *tag) :
+ spg2xx_game_state(mconfig, type, tag)
+ { }
+
+ void rad_sktv(machine_config& config);
+
+private:
+};
+
+static INPUT_PORTS_START( rad_sktv )
+ /* how does the Scanner connect? probably some serial port with comms protocol, not IO ports?
+ internal test mode shows 'uart' ports (which currently fail)
+
+ To access internal test hold DOWN and BUTTON1 together on startup until a coloured screen appears.
+ To cycle through the tests again hold DOWN and press BUTTON1 */
+
+ PORT_START("P1")
+ PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
+ 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_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
+ 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_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 )
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 )
+ 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, "IN1" )
+ 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_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED )
+INPUT_PORTS_END
+
+void skannerztv_state::rad_sktv(machine_config &config)
+{
+ SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen);
+ m_maincpu->set_addrmap(AS_PROGRAM, &skannerztv_state::mem_map_4m);
+
+ spg2xx_base(config);
+
+ m_maincpu->porta_in().set(FUNC(skannerztv_state::base_porta_r));
+ m_maincpu->portb_in().set(FUNC(skannerztv_state::base_portb_r));
+ m_maincpu->portc_in().set(FUNC(skannerztv_state::base_portc_r));
+ //m_maincpu->i2c_w().set(FUNC(skannerztv_state::i2c_w));
+ //m_maincpu->i2c_r().set(FUNC(skannerztv_state::i2c_r));
+}
+
+
+ROM_START( rad_sktv )
+ ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 )
+ ROM_LOAD16_WORD_SWAP( "skannerztv.bin", 0x000000, 0x200000, CRC(e92278e3) SHA1(eb6bee5e661128d83784960dfff50379c36bfaeb) )
+
+ /* The external scanner MCU is a Winbond from 2000: SA5641
+ the scanner plays sound effects when scanning, without being connected to the main unit, so a way to dump / emulate
+ this MCU is also needed for complete emulation
+
+ TODO: find details on MCU so that we know capacity etc. */
+ROM_END
+
+CONS( 2007, rad_sktv, 0, 0, rad_sktv, rad_sktv, skannerztv_state, init_crc, "Radica", "Skannerz TV", MACHINE_IMPERFECT_SOUND | MACHINE_NOT_WORKING )
diff --git a/src/mame/drivers/sunplus_unsp20soc.cpp b/src/mame/drivers/sunplus_unsp20soc.cpp
index c7e4b3fcf4e..269f06a558d 100644
--- a/src/mame/drivers/sunplus_unsp20soc.cpp
+++ b/src/mame/drivers/sunplus_unsp20soc.cpp
@@ -3,7 +3,7 @@
/*
(unSP 2.0 based System on a Chip)
- JAKKS call this GPAC800, other sources call it GPL16250
+ JAKKS call this GPAC800, other sources (including Pac-Man Connect and Play test mode) call it GPL16250
die markings GCM394
- Smart Fit Park
@@ -1049,7 +1049,80 @@ static INPUT_PORTS_START( jak_s500 )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
INPUT_PORTS_END
-ROM_START(smartfp)
+static INPUT_PORTS_START( paccon ) // for Test Mode hold buttons 1+2 until the screen starts changing colours (happens after the copyright display)
+ PORT_START("IN0")
+ PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) // PAL/NTSC flag
+ PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) // 'A'
+ PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) // '*C* (doesn't exist?) (cheat)
+ PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) // 'B'
+ PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) // '*MENU*' (doesn't exist?)
+ PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
+ PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
+ PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
+ PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
+ PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+ PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
+
+ PORT_START("IN1")
+ PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
+
+ PORT_START("IN2")
+ PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
+ 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 ) )
+INPUT_PORTS_END
+
+ROM_START( smartfp )
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
@@ -1057,6 +1130,15 @@ ROM_START(smartfp)
ROM_LOAD16_WORD_SWAP("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428))
ROM_END
+ROM_START( paccon )
+ //ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
+ //ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
+
+ ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
+ ROM_LOAD16_WORD_SWAP("pacmanconnect.bin", 0x000000, 0x400000, CRC(8567cdc7) SHA1(cef4e003142e479169e4438ab33558436ee9ee68) )
+ROM_END
+
+
ROM_START( tkmag220 )
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
@@ -1286,6 +1368,10 @@ CONS(200?, tkmag220, 0, 0, tkmag220, tkmag220, tkmag220_game_state, empty_init
// Fun 2 Learn 3-in-1 SMART SPORTS ?
+// also sold as "Pac-Man Connect & Play 35th Anniversary" (same ROM?)
+CONS(2012, paccon, 0, 0, wrlshunt, paccon, jak_s500_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
+
+
CONS(2009, jak_s500, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc", "SpongeBob SquarePants Bikini Bottom 500 (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
CONS(200?, jak_totm, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc", "Toy Story - Toys on the Move (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // Toys on the Move has ISSI 404A
diff --git a/src/mame/mame.lst b/src/mame/mame.lst
index f3605f1ec88..083040025d0 100644
--- a/src/mame/mame.lst
+++ b/src/mame/mame.lst
@@ -37083,7 +37083,6 @@ lx_jg7425
@source:spg2xx.cpp
rad_skat //
rad_skatp //
-rad_sktv //
rad_crik //
rad_fb2 //
mattelcs //
@@ -37157,6 +37156,9 @@ tmntpdc
@source:spg2xx_playvision.cpp
pvmil //
+@source:spg2xx_skannerztv.cpp
+rad_sktv //
+
@source:spg2xx_senario.cpp
senmil
senbbs
@@ -37773,6 +37775,7 @@ srangerw // (c) 1988 SunA (WDK License)
starfigh // (c) 1990 SunA
@source:sunplus_unsp20soc.cpp
+paccon
jak_s500
jak_totm
smartfp // Smart Fit Park
diff --git a/src/mame/mess.flt b/src/mame/mess.flt
index 71ddd2fb310..39cd8eb36f7 100644
--- a/src/mame/mess.flt
+++ b/src/mame/mess.flt
@@ -825,6 +825,7 @@ spg2xx_lexibook.cpp
spg2xx_mysprtch.cpp
spg2xx_pdc.cpp
spg2xx_playvision.cpp
+spg2xx_skannerztv.cpp
spg2xx_senario.cpp
spg2xx_senario_poker.cpp
spg2xx_shredmjr.cpp