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.
This commit is contained in:
David Haywood 2020-03-01 12:44:27 +00:00 committed by GitHub
parent b48b0cb47c
commit b973a74df6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 643 additions and 127 deletions

View File

@ -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",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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