diff options
Diffstat (limited to 'src/mame/drivers/spg2xx.cpp')
-rw-r--r-- | src/mame/drivers/spg2xx.cpp | 2244 |
1 files changed, 0 insertions, 2244 deletions
diff --git a/src/mame/drivers/spg2xx.cpp b/src/mame/drivers/spg2xx.cpp deleted file mode 100644 index 6a7484a6a9b..00000000000 --- a/src/mame/drivers/spg2xx.cpp +++ /dev/null @@ -1,2244 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Ryan Holtz, David Haywood -/****************************************************************************** - - Short Description: - - Systems which run on the SPG243 SoC - - die markings show - "SunPlus QL8041" ( also known as Sunplus SPG240 & PAC300 ) - - All GameKeyReady units - Disney Princess (GKR) - Wheel of Fortune (GKR) - JAKKS WWE (GKR) - Fantastic 4 (GKR) - Justice League (GKR) - Dora the Explorer Nursery Rhyme (GKR) - Dora the Explorer Play Park (GKR) - Spiderman 5-in-1 (GKR) - etc. - - (other non GKR JAKKS games) - X-Men (Wolverine pad) - Avatar: The Last Airbender - Superman in Super Villain Showdown - - (other games) - Mattel Classic Sports - - "SunPlus QL8041C" ( known as Sunplus SPG2??, seems to be compatible with above, so probably just a chip revision ) - - Clickstart ( see clickstart.cpp instead) - Wheel of Fortune 2nd Edition - Spider-man - Villain Roundup - Dream Life Superstar - Designer's World - Star Wars TV Touch - - "SunPlus QU7074-P69A" - - The Batman - Star Wars (non-gamekey, which model? falcon? - check) - Dream Life - - "SunPlus QL8167b" (is the scrambling built into the CPU, or external?) - - Lexibook Zeus IG900 20-in-1 - - "SunPlus QL8139C" - - Radica Cricket - V Smile Baby (Sweden) - see vsmileb.cpp - - --- - - Very likely the same - - "Sunplus QL8167" (these might have ROM scrambling if that is a 8167 feature) - - Disney Princess Magical Adventure - Go Diego Go - Shrek - Over the Hedge (this unit shows a 'GameKey Unlock More Games' on startup, but has no port, not even on the internal PCB) - Marvel Heroes (Spider-man) - Spiderman 3 (Movie - black) - - - --- - - It is unknown if the following are close to this architecture or not (no dumps yet) - - "SunPlus QU7073-P69A" - - Mortal Kombat - - "Sunplus PU7799-P680?" (difficult to read) - - Mission Paintball - - --- - - These are definitely different but still unSP based - - "SunPlus PA7801" ( known as Sunplus SPG110? ) - - see spg110.cpp instead - - "GCM394" (this is clearly newer, has extra opcodes, different internal map etc. also scaling and higher resolutions based on Spongebob) - - see sunplus_unsp20soc.cpp instead - - Status: - - Mostly working - - To-Do: - - Proper driver_device inheritance to untangle the mess of members - - Detailed list of bugs: - - All systems: - Various inaccuracies in samples/envelopes. - - jak_wall, jak_sdoo: - Game seems unhappy with NVRAM, clears contents on each boot. - jak_disf: - Shows corrupt logo on first boot with no valid nvram (possibly hardware does too - verify if possible to invalidate EEPROM on device) - lexizeus: - Some corrupt sound effects and a few corrupt ground tiles a few minutes in. (checksum is good, and a video recorded - from one of these doesn't exhibit these problems, so either emulation issue or alt revision?) - pvmil: - Question order depends on SoC RNG, only reads when it wants a new value, so unless RNG runs on a timer question order ends up the same - - vii: - When loading a cart from file manager, sometimes MAME will crash. - The "MOTOR" option in the diagnostic menu does nothing when selected. - The "SPEECH IC" option in the diagnostic menu does nothing when selected. - On 'vii_vc1' & 'vii_vc2' cart, the left-right keys are transposed with the up-down keys. - - This is not a bug per se, as the games are played with the controller physically rotated 90 degrees. - - Note: - Cricket, Skateboarder, Skannerz and Football 2 list a 32-bit checksum at the start of ROM. - This is the byte sum of the file, excluding the first 16 byte (where the checksum is stored) - - Test Modes: - Justice League : press UP, DOWN, LEFT, BT3 on the JAKKS logo in that order, quickly, to get test menu - WWE : press UP, BT1, BT2 together during startup logos - - Disney Friends, MS Pacman, WallE, Batman (and some other HotGen GameKeys) for test mode, hold UP, - press A, press DOWN during startup - - Capcom test (same access as other Hotgen games) mode looks like this (tested on PAL unit, same ROM as dumped one) - - RAM OK 2800 - 111111 - 5432109876543210 - IOA ............111. (values go from . to 1 when inputs are moved, never 0 as in MAME!, core bug?) - GAMEKEY E0 - IOB0 - IOC XXX.........X... - SPRITES - - Care Bears : Hold analog stck up, rotate stick 360 degress back to up, press 'A' while still holding up - - TODO: - Work out how to access the hidden TEST menus for all games (most JAKKS games should have one at least) - -*******************************************************************************/ - -#include "emu.h" -#include "includes/spg2xx.h" - - -/************************* -* Common Helper * -*************************/ - -void spg2xx_game_state::decrypt_ac_ff(uint16_t* ROM, int size) -{ - 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); - - ROM[i] = ROM[i] ^ 0xfafa; - } -} - - -/************************* -* Machine Hardware * -*************************/ - -void spg2xx_game_state::switch_bank(uint32_t bank) -{ - if (m_bank) - { - if (bank != m_current_bank) - { - m_current_bank = bank; - m_bank->set_entry(bank); - m_maincpu->invalidate_cache(); - } - } -} - -void spg2xx_game_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: porta_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); -} - -void spg2xx_game_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: portb_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); -} - -void spg2xx_game_state::portc_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: portc_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); -} - -void spg2xx_game_state::i2c_w(offs_t offset, uint8_t data) -{ - logerror("%s: i2c_w %05x %04x\n", machine().describe_context(), offset, data); -} - -uint8_t spg2xx_game_state::i2c_r(offs_t offset) -{ - logerror("%s: i2c_r %04x\n", machine().describe_context(), offset); - return 0x0000; -} - -uint16_t spg2xx_game_state::base_porta_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_io_p1->read(); - logerror("%s: Port A Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -uint16_t spg2xx_game_state::base_portb_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_io_p2->read(); - logerror("%s: Port B Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -uint16_t spg2xx_game_state::base_portc_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_io_p3->read(); - logerror("%s: Port C Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -uint16_t spg2xx_game_state::base_guny_r() -{ - uint16_t data = m_io_guny->read(); - logerror("%s: Gun Y Read: %04x\n", machine().describe_context(), data); - return data; -} - -uint16_t spg2xx_game_state::base_gunx_r() -{ - uint16_t data = m_io_gunx->read(); - logerror("%s: Gun X Read: %04x\n", machine().describe_context(), data); - return data; -} - - - -void spg2xx_game_state::mem_map_4m(address_map &map) -{ - map(0x000000, 0x3fffff).bankr("cartbank"); -} - -void spg2xx_game_state::mem_map_2m(address_map &map) -{ - map(0x000000, 0x1fffff).mirror(0x200000).bankr("cartbank"); -} - -void spg2xx_game_state::mem_map_1m(address_map &map) -{ - map(0x000000, 0x0fffff).mirror(0x300000).bankr("cartbank"); -} - -void spg2xx_game_gssytts_state::mem_map_upperbank(address_map &map) -{ - map(0x000000, 0x1fffff).bankr("cartbank"); - map(0x200000, 0x3fffff).bankr("upperbank"); -} - - -void spg2xx_game_wfcentro_state::mem_map_wfcentro(address_map &map) -{ - map(0x000000, 0x37ffff).bankr("cartbank"); - map(0x380000, 0x3fffff).ram(); -} - - -static INPUT_PORTS_START( spg2xx ) // base structure for easy debugging / figuring out of inputs - PORT_START("P1") - PORT_DIPNAME( 0x0001, 0x0001, "P1:0001" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0001, "0001" ) - PORT_DIPNAME( 0x0002, 0x0002, "P1:0002" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0002, "0002" ) - PORT_DIPNAME( 0x0004, 0x0004, "P1:0004" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0004, "0004" ) - PORT_DIPNAME( 0x0008, 0x0008, "P1:0008" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0008, "0008" ) - PORT_DIPNAME( 0x0010, 0x0010, "P1:0010" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0010, "0010" ) - PORT_DIPNAME( 0x0020, 0x0020, "P1:0020" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0020, "0020" ) - PORT_DIPNAME( 0x0040, 0x0040, "P1:0040" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0040, "0040" ) - PORT_DIPNAME( 0x0080, 0x0080, "P1:0080" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0080, "0080" ) - PORT_DIPNAME( 0x0100, 0x0100, "P1:0100" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0100, "0100" ) - PORT_DIPNAME( 0x0200, 0x0200, "P1:0200" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0200, "0200" ) - PORT_DIPNAME( 0x0400, 0x0400, "P1:0400" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0400, "0400" ) - PORT_DIPNAME( 0x0800, 0x0800, "P1:0800" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0800, "0800" ) - PORT_DIPNAME( 0x1000, 0x1000, "P1:1000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x1000, "1000" ) - PORT_DIPNAME( 0x2000, 0x2000, "P1:2000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x2000, "2000" ) - PORT_DIPNAME( 0x4000, 0x4000, "P1:4000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x4000, "4000" ) - PORT_DIPNAME( 0x8000, 0x8000, "P1:8000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x8000, "8000" ) - - PORT_START("P2") - PORT_DIPNAME( 0x0001, 0x0001, "P2:0001" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0001, "0001" ) - PORT_DIPNAME( 0x0002, 0x0002, "P2:0002" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0002, "0002" ) - PORT_DIPNAME( 0x0004, 0x0004, "P2:0004" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0004, "0004" ) - PORT_DIPNAME( 0x0008, 0x0008, "P2:0008" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0008, "0008" ) - PORT_DIPNAME( 0x0010, 0x0010, "P2:0010" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0010, "0010" ) - PORT_DIPNAME( 0x0020, 0x0020, "P2:0020" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0020, "0020" ) - PORT_DIPNAME( 0x0040, 0x0040, "P2:0040" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0040, "0040" ) - PORT_DIPNAME( 0x0080, 0x0080, "P2:0080" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0080, "0080" ) - PORT_DIPNAME( 0x0100, 0x0100, "P2:0100" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0100, "0100" ) - PORT_DIPNAME( 0x0200, 0x0200, "P2:0200" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0200, "0200" ) - PORT_DIPNAME( 0x0400, 0x0400, "P2:0400" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0400, "0400" ) - PORT_DIPNAME( 0x0800, 0x0800, "P2:0800" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0800, "0800" ) - PORT_DIPNAME( 0x1000, 0x1000, "P2:1000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x1000, "1000" ) - PORT_DIPNAME( 0x2000, 0x2000, "P2:2000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x2000, "2000" ) - PORT_DIPNAME( 0x4000, 0x4000, "P2:4000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x4000, "4000" ) - PORT_DIPNAME( 0x8000, 0x8000, "P2:8000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x8000, "8000" ) - - PORT_START("P3") - PORT_DIPNAME( 0x0001, 0x0001, "P3:0001" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0001, "0001" ) - PORT_DIPNAME( 0x0002, 0x0002, "P3:0002" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0002, "0002" ) - PORT_DIPNAME( 0x0004, 0x0004, "P3:0004" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0004, "0004" ) - PORT_DIPNAME( 0x0008, 0x0008, "P3:0008" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0008, "0008" ) - PORT_DIPNAME( 0x0010, 0x0010, "P3:0010" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0010, "0010" ) - PORT_DIPNAME( 0x0020, 0x0020, "P3:0020" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0020, "0020" ) - PORT_DIPNAME( 0x0040, 0x0040, "P3:0040" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0040, "0040" ) - PORT_DIPNAME( 0x0080, 0x0080, "P3:0080" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0080, "0080" ) - PORT_DIPNAME( 0x0100, 0x0100, "P3:0100" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0100, "0100" ) - PORT_DIPNAME( 0x0200, 0x0200, "P3:0200" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0200, "0200" ) - PORT_DIPNAME( 0x0400, 0x0400, "P3:0400" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0400, "0400" ) - PORT_DIPNAME( 0x0800, 0x0800, "P3:0800" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x0800, "0800" ) - PORT_DIPNAME( 0x1000, 0x1000, "P3:1000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x1000, "1000" ) - PORT_DIPNAME( 0x2000, 0x2000, "P3:2000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x2000, "2000" ) - PORT_DIPNAME( 0x4000, 0x4000, "P3:4000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x4000, "4000" ) - PORT_DIPNAME( 0x8000, 0x8000, "P3:8000" ) - PORT_DIPSETTING( 0x0000, "0000" ) - PORT_DIPSETTING( 0x8000, "8000" ) -INPUT_PORTS_END - -static INPUT_PORTS_START( itvphone ) // hold 8 and ENTER for Diagnostics mode - PORT_START("P1") // note, the physical inputs are in 'phone' order, so 1 is top left, not bottom left like a PC Keypad - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 1") PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 2") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 3") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 4") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 5") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 6") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 7") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 8") PORT_CODE(KEYCODE_8_PAD) // needed for DIAGNOSTICS mode - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 9") PORT_CODE(KEYCODE_9_PAD) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 0") PORT_CODE(KEYCODE_0_PAD) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad +") PORT_CODE(KEYCODE_PLUS_PAD) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad *") PORT_CODE(KEYCODE_ASTERISK) - PORT_CONFNAME( 0x7000, 0x0000, "Non-TV Mode Game" ) - PORT_CONFSETTING( 0x1000, "Learning Game" ) - PORT_CONFSETTING( 0x2000, "Finding Game" ) - PORT_CONFSETTING( 0x4000, "Memory Game" ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - 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_BUTTON1 ) PORT_NAME("Enter") // needed for DIAGNOSTICS mode - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bell") - PORT_CONFNAME( 0x0040, 0x0000, "TV / Non-TV mode" ) // this is shown as a button in DIAGNOSTICS mode - PORT_CONFSETTING( 0x0000, "TV" ) - PORT_CONFSETTING( 0x0040, "Non-TV" ) - PORT_BIT( 0xff80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0x0fff, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_NAME("Reset") // reset? back? - PORT_BIT( 0xe000, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( rad_skat ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Full Left") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("Full Right") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Slight Left") // you have to use this for the menus (eg trick lists) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Slight Right") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Front") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Back") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) - // there only seem to be 3 buttons on the pad part, so presumably all the above are the skateboard, and below are the pad? - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("M Button") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("X Button") - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("O Button") - PORT_BIT( 0xf800, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) // read but unused? - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag -INPUT_PORTS_END - -static INPUT_PORTS_START( rad_skatp ) - PORT_INCLUDE(rad_skat) - - PORT_MODIFY("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag -INPUT_PORTS_END - - - - -static INPUT_PORTS_START( tvsprt10 ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0180, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Start - PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) -INPUT_PORTS_END - -static INPUT_PORTS_START( decathln ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0180, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // Start - PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) -INPUT_PORTS_END - -static INPUT_PORTS_START( mattelcs ) // there is a 'secret test mode' that previously got activated before inputs were mapped, might need unused inputs to active? - PORT_START("P1") - PORT_BIT( 0x0007, IP_ACTIVE_LOW, IPT_UNUSED ) // must be IP_ACTIVE_LOW or you can't switch to Football properly? - PORT_DIPNAME( 0x0018, 0x0000, "Game Select Slider" ) // technically not a dipswitch, a 3 position slider, but how best map it? - PORT_DIPSETTING( 0x0008, "Baseball (Left)" ) - PORT_DIPSETTING( 0x0010, "Basketball (Middle)" ) - PORT_DIPSETTING( 0x0000, "Football (Right)" ) - // no 4th position possible - PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Difficulty ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( Hard ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_BIT( 0xffa0, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_NAME("Joypad Up") - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_NAME("Joypad Down") - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_NAME("Joypad Left") - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_NAME("Joypad Right") - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Sound") // toggles between sound+music, sound only, and no sound - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Hike / Pitch") - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Shoot / Run") - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Kick / Hit") - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - -/* hold 'Console Down' while powering up to get the test menu, including input tests - the ball (Wired) and bat (IR) are read some other way as they don't seem to appear in the ports. */ -static INPUT_PORTS_START( rad_crik ) - PORT_START("P1") - PORT_BIT( 0x003f, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Console Enter") // these are the controls on the base unit - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Console Down") - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_NAME("Console Left") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_NAME("Console Right") - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Console Up") - PORT_BIT( 0xf800, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - -static INPUT_PORTS_START( rad_fb2 ) // controls must be multiplexed somehow, as there's no room for P2 controls otherwise (unless P2 controls were never finished and it was only sold in a single mat version, Radica left useless P2 menu options in the mini Genesis consoles) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) // 'left' - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) // 'up' - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) // 'right' - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) // acts a 'motion ball' in menu (this is an analog input from the ball tho? at least in rad_fb in xavix.cpp so this might just be a debug input here) - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) // 'p2 right' - // none of the remaining inputs seem to do anything - PORT_BIT( 0xffe0, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_CUSTOM ) // NTSC (1) / PAL (0) flag -INPUT_PORTS_END - -static INPUT_PORTS_START( abltenni ) - PORT_INCLUDE( spg2xx ) - - PORT_MODIFY("P1") // Down and both buttons on startup for Diagnostics Menu - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - // all remaining bits in this port will stop the demo mode, also having them high/low determines if you get 2P demos or Vs. CPU demos, not sure what the real state would be - PORT_BIT( 0xffc0, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_MODIFY("P2") - PORT_DIPNAME( 0x0020, 0x0000, "Used" ) // doesn't boot otherwise - PORT_DIPSETTING( 0x0020, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_MODIFY("P3") -INPUT_PORTS_END - - -static INPUT_PORTS_START( ordentv ) - PORT_INCLUDE( spg2xx ) - - PORT_MODIFY("P2") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) -INPUT_PORTS_END - -static INPUT_PORTS_START( fordrace ) - PORT_INCLUDE( spg2xx ) - - PORT_MODIFY("P1") // hold button 1 on powerup for test - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - 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_BUTTON1 ) PORT_NAME("Select / Start") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Gear Up") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("Gear Down") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("Pause") - - PORT_MODIFY("P2") - - PORT_MODIFY("P3") - - PORT_START("AD0") // 12-bit port, Accelerator - PORT_BIT(0x0fff, 0x0000, IPT_PEDAL ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff) - - PORT_START("AD1") // 12-bit port, Brake - PORT_BIT(0x0fff, 0x0000, IPT_PEDAL2 ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x0fff) - - PORT_START("AD2") // 12-bit port, Wheel is split across 2 ports, value added together? - PORT_BIT( 0x0fff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(spg2xx_game_fordrace_state, wheel2_r) - - PORT_START("AD3") // 12-bit port, Wheel (see above) - PORT_BIT( 0x0fff, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_CUSTOM_MEMBER(spg2xx_game_fordrace_state, wheel_r) - - PORT_START("WHEEL_REAL") - PORT_BIT(0x1fff, 0x0000, IPT_AD_STICK_X ) PORT_SENSITIVITY(100) PORT_KEYDELTA(100) PORT_MINMAX(0x00,0x1fff) PORT_NAME("Wheel") -INPUT_PORTS_END - -static INPUT_PORTS_START( totspies ) - PORT_INCLUDE( spg2xx ) - - PORT_MODIFY("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - 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_BUTTON2 ) PORT_NAME("B") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A") - PORT_BIT( 0xff80, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_MODIFY("P2") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - // unit also has a 'select' button next to 'OK' and while test mode shows it onscreen too, it doesn't get tested, so probably isn't connected to anything? - PORT_MODIFY("P3") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("OK") - PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNKNOWN ) -INPUT_PORTS_END - - - -CUSTOM_INPUT_MEMBER(spg2xx_game_fordrace_state::wheel_r) -{ - return ioport("WHEEL_REAL")->read() >> 1; -} - -CUSTOM_INPUT_MEMBER(spg2xx_game_fordrace_state::wheel2_r) -{ -// return 0x0800; - uint16_t dat = ioport("WHEEL_REAL")->read(); - - return ((dat >> 1) ^ 0xfff) + (dat & 1); -} - -static INPUT_PORTS_START( senspeed ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_NAME("Accelerate / Select") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_NAME("Reverse / Confirm") - PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A (Autojacks)") - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("B (Belt Tires)") - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("C (Cutting Saw)") - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("D (Deflector)") - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("E (Evening Eyes)") - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("F (Frogman Mode)") - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("G (Go Robot)") - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_START1 ) PORT_NAME("Start / Pause") - PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) // eeprom bit, handled in read function - PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( ablkickb ) - PORT_INCLUDE( spg2xx ) - - PORT_MODIFY("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - PORT_DIPNAME( 0x0040, 0x0040, "Show Coleco Logo" ) // must be wired inside unit for Coleco distributed ones (US?) - PORT_DIPSETTING( 0x0040, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0000, DEF_STR( On ) ) - - PORT_MODIFY("P2") - - PORT_MODIFY("P3") -INPUT_PORTS_END - -static INPUT_PORTS_START( lxspidaj ) - PORT_START("P1") // base controller has dpad, 2 regular buttons, 2 turbo buttons, start button, reset button. IR connected JetSki pad has the same inputs but in handlebar form. - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) - 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_BUTTON2 ) - PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0xff80, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) // is this a button or comms with the controller on the Jetski, check code (possibly just 'start' tho) - PORT_BIT( 0xfffe, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( comil ) - PORT_START("EXTRA0") - PORT_BIT( 0x1, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_NAME("50:50") - PORT_BIT( 0x2, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_NAME("Phone A Friend") - PORT_BIT( 0x4, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_NAME("Ask The Audience") - PORT_BIT( 0x8, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_NAME("Walk Away") - - PORT_START("EXTRA1") - PORT_BIT( 0x1, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("A") - PORT_BIT( 0x2, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("B") - PORT_BIT( 0x4, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_NAME("C") - PORT_BIT( 0x8, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_NAME("D") - - PORT_START("EXTRA2") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA3") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA4") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA5") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA6") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("EXTRA7") - PORT_BIT( 0xf, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P1") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNUSED ) // multiplex select for Port B - PORT_BIT( 0xff00, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) // multiplexed inputs - PORT_BIT( 0xfff0, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( guitarfv ) - PORT_START("P1") // Button 1 + 2 and start for service mode - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON1 ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON2 ) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON3 ) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON4 ) - 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 / Whammy") // 'Wheel' in test mode - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_START1 ) - PORT_BIT( 0xfe00, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN ) // unused? - - PORT_START("P3") - 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: Yellow / 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_UNUSED ) // unused, strum is single direction here - 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( senwfit ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_16WAY - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_16WAY - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_16WAY - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_16WAY - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Select") - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Start") - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Weight Left") - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Weight Right") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_BUTTON5 ) PORT_NAME("Up-Left") - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_BUTTON6 ) PORT_NAME("Down-Left") - PORT_BIT( 0x1c00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x2000, IP_ACTIVE_HIGH, IPT_BUTTON7 ) PORT_NAME("Up-Right") - PORT_BIT( 0x4000, IP_ACTIVE_HIGH, IPT_BUTTON8 ) PORT_NAME("Down-Right") - PORT_BIT( 0x8000, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - 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 ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // on pad but not used? - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_SELECT ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_START ) - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( pballpup ) - PORT_START("GUNY") - PORT_BIT(0x0ff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 256.0f / 240.0f, 0.0, 0) PORT_MINMAX(0x000, 0x0ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("GUNX") - PORT_BIT(0x1ff, 0x100, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 512.0f / 320.0f, -0.03f, 0) PORT_MINMAX(0x000, 0x1ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("P1") - PORT_BIT( 0x003f, IP_ACTIVE_HIGH, IPT_UNUSED ) // lower bits are seeprom - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // pause - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // trigger - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // hide - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // reload - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( swclone ) - PORT_START("GUNY") - PORT_BIT(0x0ff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 1.0f, 0.0, 0) PORT_MINMAX(0x000, 0x0ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("GUNX") - PORT_BIT(0x1ff, 0x100, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 512.0f / 320.0f, -0.105f, 0) PORT_MINMAX(0x000, 0x1ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_UNUSED ) // i2cmem here - PORT_BIT( 0x003e, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0x000f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON4 ) // pause - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // trigger - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON2 ) // grenade - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON3 ) // reload (doesn't exist here?) - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( tmntmutm ) - PORT_START("GUNY") - PORT_BIT(0x0ff, 0x80, IPT_LIGHTGUN_Y) PORT_CROSSHAIR(Y, 256.0f / 240.0f, -0.032f, 0) PORT_MINMAX(0x000, 0x0ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("GUNX") - PORT_BIT(0x1ff, 0x100, IPT_LIGHTGUN_X) PORT_CROSSHAIR(X, 512.0f / 320.0f, -0.127f, 0) PORT_MINMAX(0x000, 0x1ff) PORT_SENSITIVITY(100) PORT_KEYDELTA(10) PORT_PLAYER(1) - - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_BUTTON1 ) // trigger - PORT_BIT( 0xfffe, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - -static INPUT_PORTS_START( dreamlss ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("A") - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("B") - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("C") - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_SERVICE ) PORT_NAME("Test (Debug)") // not externally connected on unit - PORT_BIT( 0xfe00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( tmntbftc ) - PORT_START("P1") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0180, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0200, IP_ACTIVE_HIGH, IPT_START1 ) - PORT_BIT( 0xfc00, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P2") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( hotwheels ) - // 2 pads, each pad has 4 directions and 1 button, and an internal solder pad to select type, but input reading code seems a bit more complex - // the unit this was dumped from was a PAL, with P1 as 'Bling' and P2 as 'Tuner' so those are the defaults used - PORT_START("P1") - PORT_BIT( 0x00ff, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_CONFNAME( 0x0500, 0x0000, "Player 2 Controller Type" ) - PORT_CONFSETTING( 0x0000, "Tuner" ) - PORT_CONFSETTING( 0x0100, "Off-Road" ) - //PORT_CONFSETTING( 0x0400, "Tuner" ) - PORT_CONFSETTING( 0x0500, "Nothing" ) - PORT_BIT( 0x0a00, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0xf000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P2") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - PORT_CONFNAME( 0x0080, 0x0000, "Player 1 Controller Type" ) - PORT_CONFSETTING( 0x0000, "Bling" ) - PORT_CONFSETTING( 0x0080, "Rally" ) - PORT_BIT( 0xff00, IP_ACTIVE_HIGH, IPT_UNKNOWN ) - - PORT_START("P1EXTRA") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) // PAL/NTSC flag (ACTIVE_HIGH = NTSC, ACTIVE_LOW = PAL) - PORT_BIT( 0x00fc, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(2) - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(2) - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(2) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(2) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(2) - PORT_BIT( 0xe000, IP_ACTIVE_LOW, IPT_UNKNOWN ) - - PORT_START("P3") // never read? - PORT_BIT( 0xffff, IP_ACTIVE_HIGH, IPT_UNUSED ) -INPUT_PORTS_END - - -// TODO: work out how to access hidden test mode again -static INPUT_PORTS_START( doraphone ) - PORT_START("P1") - PORT_CONFNAME( 0x0070, 0x0060, "On/Off Mode Slider" ) - PORT_CONFSETTING( 0x0030, "Play Alone (no video)" ) - PORT_CONFSETTING( 0x0060, "Play on TV" ) - - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("Lift Handset") // this could be done as a toggle, although note, handset being down is treated like a button being held - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this setting is US NTSC, ACTIVE_LOW gives US PAL (invalid?) no way to switch to non-US? - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_CUSTOM ) // must be 0x0200 or resets over and over - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - - PORT_START("P1_ROW1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 1") PORT_CODE(KEYCODE_1_PAD) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 4") PORT_CODE(KEYCODE_4_PAD) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 7") PORT_CODE(KEYCODE_7_PAD) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 'Repeat'") PORT_CODE(KEYCODE_PLUS_PAD) - - PORT_START("P1_ROW2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 2") PORT_CODE(KEYCODE_2_PAD) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 5") PORT_CODE(KEYCODE_5_PAD) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 8") PORT_CODE(KEYCODE_8_PAD) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 0") PORT_CODE(KEYCODE_0_PAD) - - PORT_START("P1_ROW3") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 3") PORT_CODE(KEYCODE_3_PAD) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 6") PORT_CODE(KEYCODE_6_PAD) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 9") PORT_CODE(KEYCODE_9_PAD) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("Phone Pad 'Help'") PORT_CODE(KEYCODE_MINUS_PAD) - - PORT_START("P1_ROW4") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Show Answer") // Not 'answer phone' - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("Enter") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_PLAYER(1) PORT_NAME("Reset") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(1) PORT_NAME("Hear Dora (non-TV mode only)") - - PORT_START("P1_ROW5") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_PLAYER(1) PORT_NAME("Dora The Explorer Logo Button (non-TV mode only)") // manual doesn't list this? speech says 'Dora the Explorer' in alone mode, presumably when you press the logo - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("Exit") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(1) PORT_NAME("Adventure Mode") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(1) PORT_NAME("Hear Boots (non-TV mode only)") - - PORT_START("P1_ROW6") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("Amusement Park") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(1) PORT_NAME("Quick Play") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("Big Drum Parade") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("Banana Grove") - - PORT_START("P2") - PORT_BIT( 0xff7f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_CUSTOM ) // battery state - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( doraglobe ) - PORT_START("P1") - PORT_CONFNAME( 0x0070, 0x0060, "On/Off Mode Slider" ) - PORT_CONFSETTING( 0x0030, "Play Alone (no video)" ) - PORT_CONFSETTING( 0x0060, "Play on TV" ) - - // TODO: check if these region bits are the same - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0100, IP_ACTIVE_HIGH, IPT_CUSTOM ) // this setting is US NTSC, ACTIVE_LOW gives US PAL (invalid?) no way to switch to non-US? - PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_CUSTOM ) // must be 0x0200 or resets over and over - PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) - PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) - - PORT_START("P1_ROW1") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(1) PORT_NAME("Continent Button: Asia") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(1) PORT_NAME("Continent Button: North America") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_PLAYER(1) PORT_NAME("Mode Button: Learn and Explore") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_PLAYER(1) PORT_NAME("Repeat") - - PORT_START("P1_ROW2") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(1) PORT_NAME("Continent Button: Europe") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(1) PORT_NAME("Continent Button: South America") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(1) PORT_NAME("Enter") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("Back") - - PORT_START("P1_ROW3") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(1) PORT_NAME("Continent Button: Africa") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_PLAYER(1) PORT_NAME("Continent Button: Antarctica") - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_PLAYER(1) PORT_NAME("Mode Button: Adventure Play") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_PLAYER(1) PORT_NAME("Show Answer") - - PORT_START("P1_ROW4") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_PLAYER(1) PORT_NAME("Continent Button: Australia") - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) // skips over some cutscenes and makes a 'button press' sound, but doesn't seem to be a real input on the device - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_SERVICE1 ) PORT_PLAYER(1) PORT_NAME("Reset") - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_PLAYER(1) PORT_NAME("Mode Button: Explore and Find") - - PORT_START("P1_ROW5") - PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_PLAYER(1) - PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_PLAYER(1) - PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(1) - PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_PLAYER(1) - - PORT_START("P1_ROW6") - PORT_BIT( 0x000f, IP_ACTIVE_LOW, IPT_UNUSED ) // no response to these - - PORT_START("P2") - PORT_BIT( 0xff7f, IP_ACTIVE_HIGH, IPT_UNUSED ) - PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_CUSTOM ) // battery state - - PORT_START("P3") - PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) -INPUT_PORTS_END - - -void spg2xx_game_state::machine_start() -{ - if (m_bank) - { - m_bank->configure_entries(0, (memregion("maincpu")->bytes() + 0x7fffff) / 0x800000, memregion("maincpu")->base(), 0x800000); - m_bank->set_entry(0); - } - - save_item(NAME(m_current_bank)); -} - -void spg2xx_game_state::machine_reset() -{ - m_current_bank = -1; - switch_bank(0); - m_maincpu->reset(); -} - -void spg2xx_game_state::spg2xx_base(machine_config &config) -{ - m_maincpu->porta_out().set(FUNC(spg2xx_game_state::porta_w)); - m_maincpu->portb_out().set(FUNC(spg2xx_game_state::portb_w)); - m_maincpu->portc_out().set(FUNC(spg2xx_game_state::portc_w)); - - 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("maincpu", FUNC(spg2xx_device::screen_update)); - m_screen->screen_vblank().set(m_maincpu, FUNC(spg2xx_device::vblank)); - - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5); - m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5); -} - -void spg2xx_game_state::non_spg_base(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); -} - -void spg2xx_game_state::rad_skat(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_ioport("P1"); - m_maincpu->portb_in().set_ioport("P2"); - m_maincpu->portc_in().set_ioport("P3"); - 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::spg2xx(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)); -} - -void spg2xx_game_state::spg2xx_pal(machine_config& config) -{ - spg2xx(config); - - m_maincpu->set_pal(true); - m_screen->set_refresh_hz(50); -} - -void spg2xx_game_fordrace_state::fordrace(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_fordrace_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_fordrace_state::base_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_fordrace_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_fordrace_state::base_portc_r)); - - // these do something in test mode, but in game the ADC interrupt is never generated? - m_maincpu->adc_in<0>().set_ioport("AD0"); // pedals1 - m_maincpu->adc_in<1>().set_ioport("AD1"); // pedal2 - m_maincpu->adc_in<2>().set_ioport("AD2"); // steering - m_maincpu->adc_in<3>().set_ioport("AD3"); // steering - -} - -uint16_t spg2xx_game_senspeed_state::portb_r() -{ - uint16_t ret = 0x0000; - ret = m_i2cmem->read_sda() ? 1: 0; - - logerror("%s: spg2xx_game_senspeed_state::portb_r (%04x)\n", machine().describe_context(), ret); - return ret; -} - -void spg2xx_game_senspeed_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - if (BIT(mem_mask, 1)) - m_i2cmem->write_scl(BIT(data, 1)); - if (BIT(mem_mask, 0)) - m_i2cmem->write_sda(BIT(data, 0)); -} - -void spg2xx_game_senspeed_state::senspeed(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_senspeed_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set_ioport("P1"); - m_maincpu->portb_in().set(FUNC(spg2xx_game_senspeed_state::portb_r)); - m_maincpu->portc_in().set_ioport("P3"); - - m_maincpu->portb_out().set(FUNC(spg2xx_game_senspeed_state::portb_w)); - - /* - ATMLH806 - 02B 1 - A7J4565E - */ - I2C_24C01(config, "i2cmem", 0); // saves 0x80 bytes, but loading fails? -} - - -uint16_t spg2xx_game_comil_state::porta_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_porta_data; - logerror("%s: Port A Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -void spg2xx_game_comil_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: Port A Write: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - m_porta_data = data; -} - -uint16_t spg2xx_game_comil_state::portb_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_io_p2->read() & 0xfff0; - - if (!(m_porta_data & 0x0001)) data |= (m_extra_in[0]->read() & 0xf); - if (!(m_porta_data & 0x0002)) data |= (m_extra_in[1]->read() & 0xf); - if (!(m_porta_data & 0x0004)) data |= (m_extra_in[2]->read() & 0xf); - if (!(m_porta_data & 0x0008)) data |= (m_extra_in[3]->read() & 0xf); - if (!(m_porta_data & 0x0010)) data |= (m_extra_in[4]->read() & 0xf); - if (!(m_porta_data & 0x0020)) data |= (m_extra_in[5]->read() & 0xf); - if (!(m_porta_data & 0x0040)) data |= (m_extra_in[6]->read() & 0xf); - if (!(m_porta_data & 0x0080)) data |= (m_extra_in[7]->read() & 0xf); - - logerror("%s: Port B Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -void spg2xx_game_comil_state::comil(machine_config &config) -{ - SPG28X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_comil_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->set_pal(true); - m_screen->set_refresh_hz(50); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_comil_state::porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_comil_state::portb_r)); - - m_maincpu->porta_out().set(FUNC(spg2xx_game_comil_state::porta_w)); - //m_maincpu->portb_out().set(FUNC(spg2xx_game_comil_state::portb_w)); -} - -void spg2xx_game_state::guitarfv(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->set_pal(true); - m_screen->set_refresh_hz(50); - - m_maincpu->porta_in().set_ioport("P1"); - m_maincpu->portb_in().set_ioport("P2"); - m_maincpu->portc_in().set_ioport("P3"); -} - - -void spg2xx_game_state::tvsprt10(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_state::mem_map_2m); - - 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)); -} - -uint16_t spg2xx_game_tmntmutm_state::guny_r() -{ - int frame = m_screen->frame_number() & 1; // game will not register shots if the co-ordinates are exactly the same as previous shot - uint16_t data = m_io_guny->read() ^ frame; - logerror("%s: Gun Y Read: %04x\n", machine().describe_context(), data); - return data; -} - -uint16_t spg2xx_game_tmntmutm_state::gunx_r() -{ - int frame = (m_screen->frame_number() >> 1) & 1; - uint16_t data = m_io_gunx->read() ^ frame; - logerror("%s: Gun X Read: %04x\n", machine().describe_context(), data); - return data; -} - - - -void spg2xx_game_tmntmutm_state::tmntmutm(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_tmntmutm_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_tmntmutm_state::base_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_tmntmutm_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_tmntmutm_state::base_portc_r)); - - m_maincpu->guny_in().set(FUNC(spg2xx_game_tmntmutm_state::guny_r)); - m_maincpu->gunx_in().set(FUNC(spg2xx_game_tmntmutm_state::gunx_r)); - - I2C_24C08(config, "i2cmem", 0); -} - -uint16_t spg2xx_game_albkickb_state::portb_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = machine().rand();// TODO - logerror("%s: Port B Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -void spg2xx_game_albkickb_state::ablkickb(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_albkickb_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_albkickb_state::base_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_albkickb_state::portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_albkickb_state::base_portc_r)); -} - - -uint16_t spg2xx_game_pballpup_state::porta_r() -{ - uint16_t ret = m_io_p1->read() & 0xfff7; -// logerror("%s: spg2xx_game_pballpup_state::porta_r\n", machine().describe_context()); - ret |= m_eeprom->do_read() ? 0x8 : 0x0; - return ret; -} - -void spg2xx_game_pballpup_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: spg2xx_game_pballpup_state::porta_w (%04x)\n", machine().describe_context(), data); - m_eeprom->di_write(BIT(data, 2)); - m_eeprom->cs_write(BIT(data, 0) ? ASSERT_LINE : CLEAR_LINE); - m_eeprom->clk_write(BIT(data, 1) ? ASSERT_LINE : CLEAR_LINE); - - // this can actually change bank from running code, because the code part in each bank is almost identical, just the data changes - switch_bank((data & 0x1000) ? 1 : 0); -} - - -void spg2xx_game_pballpup_state::pballpup(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_pballpup_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_pballpup_state::porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_pballpup_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_pballpup_state::base_portc_r)); - - m_maincpu->porta_out().set(FUNC(spg2xx_game_pballpup_state::porta_w)); - m_maincpu->portb_out().set(FUNC(spg2xx_game_pballpup_state::portb_w)); - m_maincpu->portc_out().set(FUNC(spg2xx_game_pballpup_state::portc_w)); - - m_maincpu->guny_in().set(FUNC(spg2xx_game_pballpup_state::base_guny_r)); - m_maincpu->gunx_in().set(FUNC(spg2xx_game_pballpup_state::base_gunx_r)); - - EEPROM_93C66_16BIT(config, m_eeprom); // type? -} - -uint16_t spg2xx_game_swclone_state::porta_r() -{ - uint16_t ret = m_io_p1->read() & 0xfffe; - ret |= m_i2cmem->read_sda() ? 0x1: 0x0; - - //logerror("%s: spg2xx_game_swclone_state::porta_r (%04x)\n", machine().describe_context(), ret); - return ret; -} - -void spg2xx_game_swclone_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - //logerror("%s: spg2xx_game_swclone_state::porta_w (%04x & %04x)\n", machine().describe_context(), data, mem_mask); - - if (BIT(mem_mask, 1)) - m_i2cmem->write_scl(BIT(data, 1)); - if (BIT(mem_mask, 0)) - m_i2cmem->write_sda(BIT(data, 0)); - - m_porta_data = data; -} - - -void spg2xx_game_swclone_state::swclone(machine_config &config) -{ - SPG2XX_128(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_swclone_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_swclone_state::porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_swclone_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_swclone_state::base_portc_r)); - - m_maincpu->porta_out().set(FUNC(spg2xx_game_swclone_state::porta_w)); - m_maincpu->portb_out().set(FUNC(spg2xx_game_swclone_state::portb_w)); - m_maincpu->portc_out().set(FUNC(spg2xx_game_swclone_state::portc_w)); - - m_maincpu->guny_in().set(FUNC(spg2xx_game_swclone_state::base_guny_r)); - m_maincpu->gunx_in().set(FUNC(spg2xx_game_swclone_state::base_gunx_r)); - - I2C_24C08(config, "i2cmem", 0); -} - - - -uint16_t spg2xx_game_dreamlss_state::porta_r() -{ - uint16_t ret = m_io_p1->read()&0xefff; - ret |= m_porta_data & 0x1000; // needs to be able to read back current bank - logerror("%s: spg2xx_game_dreamlss_state::porta_r\n", machine().describe_context()); - return ret; -} - -void spg2xx_game_dreamlss_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: spg2xx_game_dreamlss_state::porta_w (%04x)\n", machine().describe_context(), data); - - m_porta_data = data; - - switch_bank((data & 0x1000) ? 1 : 0); -} - - -// TODO: how does the SEEPROM hook up? (will need hack removing in init_dreamlss ) -uint16_t spg2xx_game_dreamlss_state::portb_r() -{ - uint16_t ret = m_portb_data & 0xfffe; - ret |= m_i2cmem->read_sda() ? 0x1: 0x0; - - //logerror("%s: spg2xx_game_dreamlss_state::portb_r (%04x)\n", machine().describe_context(), ret); - return ret; -} - -void spg2xx_game_dreamlss_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - //logerror("%s: spg2xx_game_dreamlss_state::portb_w (%04x & %04x)\n", machine().describe_context(), data, mem_mask); - - if (BIT(mem_mask, 1)) - m_i2cmem->write_scl(BIT(data, 1)); - if (BIT(mem_mask, 0)) - m_i2cmem->write_sda(BIT(data, 0)); - - m_portb_data = data; -} - - -void spg2xx_game_dreamlss_state::dreamlss(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_dreamlss_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_dreamlss_state::porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_dreamlss_state::portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_dreamlss_state::base_portc_r)); - - m_maincpu->porta_out().set(FUNC(spg2xx_game_dreamlss_state::porta_w)); - m_maincpu->portb_out().set(FUNC(spg2xx_game_dreamlss_state::portb_w)); - m_maincpu->portc_out().set(FUNC(spg2xx_game_dreamlss_state::portc_w)); - - I2C_24C08(config, "i2cmem", 0); -} - -void spg2xx_game_gssytts_state::portc_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - int bank = 0; - - logerror("%s: portc_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); - - if (mem_mask & 1) - if (data & 1) - bank |= 1; - - if (mem_mask & 2) - if (data & 2) - bank |= 2; - - m_upperbank->set_entry(bank); - m_maincpu->invalidate_cache(); -} - -void spg2xx_game_gssytts_state::machine_start() -{ - m_upperbank->configure_entries(0, memregion("maincpu")->bytes()/0x400000, memregion("maincpu")->base(), 0x400000); - m_upperbank->set_entry(1); - - spg2xx_game_state::machine_start(); -} - -void spg2xx_game_gssytts_state::machine_reset() -{ - m_upperbank->set_entry(1); - - spg2xx_game_state::machine_reset(); -} - - -void spg2xx_game_gssytts_state::gssytts(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_gssytts_state::mem_map_upperbank); - - spg2xx_base(config); - -// m_maincpu->porta_out().set(FUNC(spg2xx_game_state::porta_w)); -// m_maincpu->portb_out().set(FUNC(spg2xx_game_state::portb_w)); -// m_maincpu->portc_out().set(FUNC(spg2xx_game_state::portc_w)); - - m_maincpu->porta_in().set_ioport("P1"); - m_maincpu->portb_in().set_ioport("P2"); - m_maincpu->portc_in().set_ioport("P3"); -} - - -void spg2xx_game_wfcentro_state::wfcentro(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_wfcentro_state::mem_map_wfcentro); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_wfcentro_state::base_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_wfcentro_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_wfcentro_state::base_portc_r)); -} - - - -void spg2xx_game_senwfit_state::portc_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - int bank = 0; - - logerror("%s: portc_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); - - if (mem_mask & 1) - if (data & 1) - bank |= 1; - - if (mem_mask & 2) - if (data & 2) - bank |= 2; - - if (mem_mask & 4) - if (data & 4) - bank |= 4; - - m_upperbank->set_entry(bank); - m_maincpu->invalidate_cache(); -} - - -void spg2xx_game_senwfit_state::init_senwfit() -{ - uint8_t *src = memregion("maincpu")->base(); - int len = memregion("maincpu")->bytes(); - - std::vector<u8> buffer(len); - - for (int i = 0; i < len; i++) - { - int newaddr = bitswap<25>(i, 24,23,22,20,9,19,18,21,17,16,15,14,13,12,11,10,8,7,6,5,4,3,2,1,0); - buffer[i] = src[newaddr]; - } - std::copy(buffer.begin(), buffer.end(), &src[0]); - -} - -void spg2xx_game_state::rad_skatp(machine_config &config) -{ - rad_skat(config); - m_maincpu->set_pal(true); - m_screen->set_refresh_hz(50); -// m_screen->set_size(320, 312); -} - - -void spg2xx_game_state::rad_crik(machine_config &config) -{ - SPG28X(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_ioport("P1"); - m_maincpu->portb_in().set_ioport("P2"); - m_maincpu->portc_in().set_ioport("P3"); - m_maincpu->i2c_w().set(FUNC(spg2xx_game_state::i2c_w)); - m_maincpu->i2c_r().set(FUNC(spg2xx_game_state::i2c_r)); -} - -uint16_t spg2xx_game_ordentv_state::ordentv_portc_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data = m_io_p3->read() ^ (machine().rand() & 1); - logerror("%s: Port C Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -void spg2xx_game_ordentv_state::ordentv(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_ordentv_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_ordentv_state::base_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_ordentv_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_ordentv_state::ordentv_portc_r)); -} - - -void spg2xx_game_hotwheels_state::porta_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - logerror("%s: porta_w %04x (%04x) %c %c %c %c | %c %c %c %c | %c %c %c %c | %c %c %c %c \n", machine().describe_context(), data, mem_mask, - (mem_mask & 0x8000) ? ((data & 0x8000) ? '1' : '0') : 'x', - (mem_mask & 0x4000) ? ((data & 0x4000) ? '1' : '0') : 'x', - (mem_mask & 0x2000) ? ((data & 0x2000) ? '1' : '0') : 'x', - (mem_mask & 0x1000) ? ((data & 0x1000) ? '1' : '0') : 'x', - (mem_mask & 0x0800) ? ((data & 0x0800) ? '1' : '0') : 'x', - (mem_mask & 0x0400) ? ((data & 0x0400) ? '1' : '0') : 'x', - (mem_mask & 0x0200) ? ((data & 0x0200) ? '1' : '0') : 'x', - (mem_mask & 0x0100) ? ((data & 0x0100) ? '1' : '0') : 'x', - (mem_mask & 0x0080) ? ((data & 0x0080) ? '1' : '0') : 'x', - (mem_mask & 0x0040) ? ((data & 0x0040) ? '1' : '0') : 'x', - (mem_mask & 0x0020) ? ((data & 0x0020) ? '1' : '0') : 'x', - (mem_mask & 0x0010) ? ((data & 0x0010) ? '1' : '0') : 'x', - (mem_mask & 0x0008) ? ((data & 0x0008) ? '1' : '0') : 'x', - (mem_mask & 0x0004) ? ((data & 0x0004) ? '1' : '0') : 'x', - (mem_mask & 0x0002) ? ((data & 0x0002) ? '1' : '0') : 'x', - (mem_mask & 0x0001) ? ((data & 0x0001) ? '1' : '0') : 'x'); - - m_porta_dat_hot = data; -} - -uint16_t spg2xx_game_hotwheels_state::hotwheels_porta_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t data; - if (m_porta_dat_hot) - data = m_io_p1->read(); - else - data = m_io_p1_extra->read(); - - logerror("%s: Port A Read: %04x (%04x)\n", machine().describe_context(), data, mem_mask); - return data; -} - -void spg2xx_game_hotwheels_state::hotwheels(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_hotwheels_state::mem_map_2m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_hotwheels_state::hotwheels_porta_r)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_hotwheels_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_hotwheels_state::base_portc_r)); - - m_maincpu->porta_out().set(FUNC(spg2xx_game_hotwheels_state::porta_w)); - - m_maincpu->set_pal(true); - m_screen->set_refresh_hz(50); -} - -uint16_t spg2xx_game_doraphone_state::porta_r(offs_t offset, uint16_t mem_mask) -{ - uint16_t matrix = 0x000f; - for (int b = 1; 6 >= b; ++b) - { - if (!BIT(m_portb_data, b)) - matrix &= m_io_p1_rows[b - 1]->read(); - } - - return matrix | (m_io_p1->read() & 0xfff0); -} - -void spg2xx_game_doraphone_state::portb_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - m_portb_data = data; -} - -void spg2xx_game_doraphone_state::doraphone(machine_config &config) -{ - SPG24X(config, m_maincpu, XTAL(27'000'000), m_screen); - m_maincpu->set_addrmap(AS_PROGRAM, &spg2xx_game_doraphone_state::mem_map_4m); - - spg2xx_base(config); - - m_maincpu->porta_in().set(FUNC(spg2xx_game_doraphone_state::porta_r)); - m_maincpu->portb_out().set(FUNC(spg2xx_game_doraphone_state::portb_w)); - m_maincpu->portb_in().set(FUNC(spg2xx_game_doraphone_state::base_portb_r)); - m_maincpu->portc_in().set(FUNC(spg2xx_game_doraphone_state::base_portc_r)); -} - - -ROM_START( rad_skat ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) ) -ROM_END - -ROM_START( rad_skatp ) // rom was dumped from the NTSC version, but region comes from an io port, so ROM is probably the same - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "skateboarder.bin", 0x000000, 0x400000, CRC(08b9ab91) SHA1(6665edc4740804956136c68065890925a144626b) ) -ROM_END - -ROM_START( rad_fb2 ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "football2.bin", 0x000000, 0x400000, CRC(96b4f0d2) SHA1(e91f2ac679fb0c026ffe216eb4ab58802f361a17) ) -ROM_END - - - -ROM_START( rad_crik ) // only released in EU? - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "cricket.bin", 0x000000, 0x200000, CRC(6fa0aaa9) SHA1(210d2d4f542181f59127ce2f516d0408dc6de7a8) ) -ROM_END - -ROM_START( mattelcs ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "mattelclassicsports.bin", 0x000000, 0x100000, CRC(e633e7ad) SHA1(bf3e325a930cf645a7e32195939f3c79c6d35dac) ) -ROM_END - -ROM_START( abltenni ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "ablpnpwirelesstennis.bin", 0x000000, 0x400000, CRC(66bd8ef1) SHA1(a83640d5d9e84e10d29a065a61e0d7bbec16c6e4) ) -ROM_END - -ROM_START( totspies ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "w321tg.u2", 0x000000, 0x400000, CRC(76152ad7) SHA1(b37ea950670eb927f3f0ab5e38d0e2a5f3ca7904) ) -ROM_END - -ROM_START( ablkickb ) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "ablkickboxing.bin", 0x000000, 0x800000, CRC(61394c45) SHA1(291d28a39edcb32a8f5d776a5e5c05e6fd0abece) ) -ROM_END - -ROM_START( lxspidaj ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "mx29lv320ct.u2", 0x000000, 0x400000, CRC(e7e03c62) SHA1(ab13452f0436efb767f01dff54dd48a528538e3f) ) -ROM_END - - -ROM_START( fordrace ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "fordracing_29lv320ct_00c222a7.bin", 0x000000, 0x400000, CRC(998cad17) SHA1(98a65e9e0ec17e3366e0ac6ddc2d852a7efb360e) ) -ROM_END - - -ROM_START( comil ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "ukmillionaire.bin", 0x000000, 0x400000, CRC(b7e8e126) SHA1(fc76dba672eb5c4c115e16d8ea4a45a6e859f87c) ) -ROM_END - -ROM_START( tvsprt10 ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "tvsports10in1.bin", 0x000000, 0x400000, CRC(98b79889) SHA1(b0ba534d59b794bb38c071c70ab5bcf711364e06) ) -ROM_END - -ROM_START( decathln ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "decathlon.bin", 0x000000, 0x400000, CRC(63c8e6b6) SHA1(6a25b68b45336e04a2bfd75b43a494349024d714) ) -ROM_END - -ROM_START( decathlna ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "abldecathlon2.bin", 0x000000, 0x400000, CRC(594ed954) SHA1(6ddd9df8f645ac8e93ee37337ca9fb5f7f942827) ) -ROM_END - -ROM_START( guitarfv ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - 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( guitarssa ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "guitar_superstar_flying_v.bin", 0x000000, 0x800000, CRC(af0c837c) SHA1(f04c9a4292f811d92311d19fb35dcee3f1649a14) ) -ROM_END - -ROM_START( tmntbftc ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "tmntbftc.bin", 0x000000, 0x400000, CRC(f923da5b) SHA1(79b290b75d06dabd0f579800edc4453b044c8fd4) ) -ROM_END - - -ROM_START( gssytts ) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "guitarssytts.bin", 0x000000, 0x800000, CRC(ec3de9e1) SHA1(690efe2676c664c2be52cda00d6dcb9d60a26e9a) ) // no data - ROM_CONTINUE(0x000000, 0x800000) // 1st 8mb - ROM_CONTINUE(0x800000, 0x800000) // no data - ROM_CONTINUE(0x800000, 0x800000) // 2nd 8mb -ROM_END - -ROM_START( senwfit ) - ROM_REGION( 0x2000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "wirelessfit.bin", 0x000000, 0x2000000, CRC(bfdc9c56) SHA1(dd0d4262720fcc3fab5b66d39df9be3419b07178) ) -ROM_END - - -ROM_START( jjstrip ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "strippoker.bin", 0x000000, 0x200000, CRC(7a70e6c8) SHA1(3d5da4774b00977939f309f3e71473dde9b70435) ) -ROM_END - -ROM_START( tmntmutm ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "tmntmutantsandmonsters_sst39vf3201_00bf235b.bin", 0x000000, 0x400000, CRC(93ab5ff7) SHA1(e78a5d380663d351ad9be5087ec8434d9be16ba7) ) -ROM_END - -ROM_START( pballpup ) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "paintballpoweredup.bin", 0x000000, 0x1000000, CRC(57dbdfd1) SHA1(d98cb7321cc7af092f6f4f83e85fabbdbc1bbd95) ) - - ROM_REGION16_BE( 0x200, "eeprom", ROMREGION_ERASE00 ) - // ensure eeprom defaults to 00 or there are unwanted invalid entries already saved -ROM_END - -ROM_START( dreamlss ) - ROM_REGION( 0x1000000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "dreamlifesuperstar.bin", 0x000000, 0x1000000, CRC(aefad2c3) SHA1(cf962082f09e27d7d24cfc722ae978d9aa735a57) ) -ROM_END - -ROM_START( swclone ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "swclone.bin", 0x000000, 0x800000, CRC(2c983509) SHA1(6138f21fe0b82a7121c4639b6833d4014d5aeb74) ) - - ROM_REGION( 0x400, "i2cmem", ROMREGION_ERASE00 ) - // ensure eeprom defaults to 00 or there are unwanted invalid entries already saved -ROM_END - -ROM_START( vtechtvssp ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "vtechtvstation_sp.bin", 0x000000, 0x800000, CRC(4a2e91eb) SHA1(1ff9cc0360b670cc0ad7efa9de0edd2c68d4d8e3) ) -ROM_END - -ROM_START( vtechtvsgr ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "vtechtvstation_gr.bin", 0x000000, 0x800000, CRC(879f1b12) SHA1(c14d52bead2c190130ce88cbdd4f5e93145f13f9) ) -ROM_END - -ROM_START( itvphone ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "inttvphone.bin", 0x000000, 0x200000, CRC(2ecbb0ad) SHA1(2b6babaaf1582e6b1de944258eba87ddf30406c5) ) -ROM_END - -ROM_START( jouet ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "jouet.bin", 0x000000, 0x400000, CRC(da46097e) SHA1(f760f4d126a8291b7dacdea7a70691b25ad8b989) ) -ROM_END - -ROM_START( doraphon ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "doraphone.bin", 0x000000, 0x800000, CRC(a79c154b) SHA1(f5b9bf63ea52d058252ab6702508b519fbdee0cc) ) -ROM_END - -ROM_START( doraglob ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "doraglobe.bin", 0x000000, 0x800000, CRC(6f454c50) SHA1(201e2de3d90abe017a8dc141613cbf6383423d13) ) -ROM_END - - -ROM_START( senspeed ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "speedracer.bin", 0x000000, 0x800000, CRC(4efbcd39) SHA1(2edffbaa9ea309ad308fa60f32d8b7a98ee313c7) ) -ROM_END - -ROM_START( ordentv ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "taikeeordenadortv.bin", 0x000000, 0x800000, CRC(ba15895a) SHA1(0a18076cbc3264c91473b8518dfb10d679321b47) ) -ROM_END - -ROM_START( wfcentro ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "winfuncentro.bin", 0x000000, 0x800000, CRC(fd6ad052) SHA1(78af844729bf4843dc70531349e38a8c25caf748) ) -ROM_END - -ROM_START( tiktokmm ) - ROM_REGION( 0x800000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "webcamthingy.bin", 0x000000, 0x800000, CRC(54c0d4a9) SHA1(709ee607ca447baa6f7e686268df1998372fe617) ) -ROM_END - - -ROM_START( hotwhl2p ) - ROM_REGION( 0x400000, "maincpu", ROMREGION_ERASE00 ) - ROM_LOAD16_WORD_SWAP( "hotwheels.bin", 0x000000, 0x400000, CRC(f3520b74) SHA1(02a53558d68cf3640a9ab09514cd6cebff8b30af) ) -ROM_END - - -void spg2xx_game_state::init_crc() -{ - // several games have a byte sum checksum listed at the start of ROM, this little helper function logs what it should match. - const int length = memregion("maincpu")->bytes(); - const uint8_t* rom = memregion("maincpu")->base(); - - uint32_t checksum = 0x00000000; - // the first 0x10 bytes are where the "chksum:xxxxxxxx " string is listed, so skip over them - for (int i = 0x10; i < length; i++) - { - checksum += rom[i]; - } - - logerror("Calculated Byte Sum of bytes from 0x10 to 0x%08x is %08x)\n", length - 1, checksum); -} - - -void spg2xx_game_state::init_tvsprt10() -{ - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - // hack 'MASK' check (some kind of EEPROM maybe?) - // this hack means the ROM CRC fails, but without it the CRC is OK, so dump is good. - /* - port b 0010 = chip select? / always set when accessing? - 0008 = write enable (set when writing, not when reading) - 0004 = chip select? / always set when accessing? - 0002 = clock? (toggles) - 0001 = data in / out - */ - if (rom[0x18c55d] == 0x9240) rom[0x18c55d] ^= 0x0001; // tvsprt10 - if (rom[0x179911] == 0x9240) rom[0x179911] ^= 0x0001; // decathln - if (rom[0x16fa67] == 0x9240) rom[0x16fa67] ^= 0x0001; // decathlna -} - -void spg2xx_game_swclone_state::init_swclone() -{ - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - rom[0x2649d1] = 0x0000; // don't write 0x1234 to the start of the RAM that is copied to spriteram on startup (this is an explicit write, probably actually a failure condition for something?) -} - -void spg2xx_game_albkickb_state::init_ablkickb() -{ - uint16_t *ROM = (uint16_t*)memregion("maincpu")->base(); - int size = memregion("maincpu")->bytes(); - - decrypt_ac_ff(ROM, size); -} - -void spg2xx_game_ordentv_state::init_ordentv() -{ - // the game will die by jumping to an infinite loop if this check fails, what is it checking? - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - rom[0x4fef8] = 0xee07; -} - -void spg2xx_game_state::init_itvphone() -{ - // the game will die by jumping to an infinite loop if this check fails, what is it checking? - uint16_t* rom = (uint16_t*)memregion("maincpu")->base(); - rom[0xf152] = 0xee08; -} - -// year, name, parent, compat, machine, input, class, init, company, fullname, flags - -// Radica TV games -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_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 -CONS( 2006, abltenni, 0, 0, spg2xx, abltenni, spg2xx_game_state, empty_init, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Wireless Tennis (WT2000, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2006, ablkickb, 0, 0, ablkickb, ablkickb, spg2xx_game_albkickb_state, init_ablkickb, "Advance Bright Ltd / Coleco / V-Tac Technology Co Ltd.", "Kick Boxing (BJ8888, ABL TV Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // 4 motion sensors, one for each limb - -CONS( 2007, lxspidaj, 0, 0, spg2xx_pal,lxspidaj, spg2xx_game_albkickb_state, init_ablkickb, "Lexibook", "Spider-Man Super TV Air Jet (Lexibook Junior, JG6000SP)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2006, totspies, 0, 0, spg2xx_pal,totspies, spg2xx_game_state, empty_init, "Senario / Marathon - Mystery Animation Inc.", "Totally Spies! (France)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2006, fordrace, 0, 0, fordrace, fordrace, spg2xx_game_fordrace_state, empty_init, "Excalibur Electronics", "Ford Racing", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2008, comil, 0, 0, comil, comil, spg2xx_game_comil_state, empty_init, "Character Options", "Who Wants to Be a Millionaire? (Character Options, Plug and Play, UK)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// Same as Excalibur Decathlon? Not identical to the ABL game below, but built on the same engine -CONS( 2006, tvsprt10, 0, 0, tvsprt10, tvsprt10, spg2xx_game_state, init_tvsprt10, "Simba / V-Tac Technology Co Ltd.", "TV Sports 10-in-1 / Decathlon Athletic Sport Games", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 200?, decathln, 0, 0, tvsprt10, decathln, spg2xx_game_state, init_tvsprt10, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Decathlon (set 1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit found in Spain -CONS( 200?, decathlna, decathln, 0, tvsprt10, decathln, spg2xx_game_state, init_tvsprt10, "Advance Bright Ltd / V-Tac Technology Co Ltd.", "Decathlon (set 2, SM570, ABL TV Game)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) // unit found in UK - -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 ) - -// The box for these has 'YOU take the stage' text, but unlike the sequel, it is not part of the ingame title screen, this sometimes causes confusion -CONS( 200?, guitarss, 0, 0, spg2xx, guitarss, spg2xx_game_state, empty_init, "Senario", "Guitar Super Star ('Fender Stratocaster' style)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) -CONS( 200?, guitarssa, guitarss, 0, spg2xx, guitarss, spg2xx_game_state, empty_init, "Senario", "Guitar Super Star (red 'Gibson Flying V' style)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// The sequel has 'You Take The Stage' on both the box and title screen -CONS( 2009, gssytts, 0, 0, gssytts, guitarss, spg2xx_game_gssytts_state, empty_init, "Senario", "Guitar Super Star: You Take The Stage", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2009, senwfit, 0, 0, gssytts, senwfit, spg2xx_game_senwfit_state, init_senwfit, "Senario", "Wireless Fitness / Dance Fit (Senario)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// VTech "TV Station" / "TV Learning Station" / "Nitro Vision" -CONS( 2006, vtechtvssp, 0, 0, spg2xx, spg2xx, spg2xx_game_state, empty_init, "VTech", "TV Station (VTech, Spain)", MACHINE_NOT_WORKING ) -CONS( 2006, vtechtvsgr, 0, 0, spg2xx, spg2xx, spg2xx_game_state, empty_init, "VTech", "TV Learning Station (VTech, Germany)", MACHINE_NOT_WORKING ) - -CONS( 2007, itvphone, 0, 0, spg2xx_pal, itvphone, spg2xx_game_state, init_itvphone, "Taikee / Oregon Scientific / V-Tac Technology Co Ltd.", u8"Teléfono interactivo de TV (Spain)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// "Boots's" is used on the title screen and in the manual, even if "Boots'" is usually used outside of this game. -CONS( 2006, doraphon, 0, 0, doraphone, doraphone, spg2xx_game_doraphone_state,empty_init, "VTech", "Dora the Explorer - Dora TV Explorer Phone / Boots's Special Day", MACHINE_IMPERFECT_SOUND ) -// This was from a 'cost reduced' unit with the 'non-TV' mode switch and internal speaker removed, however it looks like the code was not disabled or removed as the mode is fully functional. -// The ZC-Infinity video for this on YouTube shows the map scrolling to center the continent, there doesn't appear to be an input for this, different revision? -// A Dutch localized version also exists, which again must be different code -CONS( 2007, doraglob, 0, 0, doraphone, doraglobe, spg2xx_game_doraphone_state,empty_init, "VTech", "Dora the Explorer - Dora TV Adventure Globe", MACHINE_IMPERFECT_SOUND ) - -// ROM checksum fails, but is expecting 0 as a result? shows 'CopyRight' when booting normally? protection? -CONS( 200?, jouet, 0, 0, spg2xx, spg2xx, spg2xx_game_state, empty_init, "<unknown>", "10 Jeux Interactifs / Jeux Pour Filles (France)", MACHINE_NOT_WORKING ) - -CONS( 2008, senspeed, 0, 0, senspeed, senspeed, spg2xx_game_senspeed_state, empty_init, "Senario", "Speed Racer (Senario)", 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, tmntbftc, 0, 0, spg2xx, tmntbftc, spg2xx_game_state, empty_init, "Tech2Go / WayForward", "Teenage Mutant Ninja Turtles: Battle for the City", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2005, tmntmutm, 0, 0, tmntmutm, tmntmutm, spg2xx_game_tmntmutm_state, empty_init, "Tech2Go / WayForward", "Teenage Mutant Ninja Turtles: Mutant and Monster Mayhem", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2006, pballpup, 0, 0, pballpup, pballpup, spg2xx_game_pballpup_state, empty_init, "Hasbro / Tiger Electronics", "Mission: Paintball Powered Up", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2007, dreamlss, 0, 0, dreamlss, dreamlss, spg2xx_game_dreamlss_state, empty_init, "Hasbro / Tiger Electronics", "Dream Life Superstar (Version 0.3, Mar 16 2007)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// Needs a hack to not show garbage sprite on startup -CONS( 2008, swclone, 0, 0, swclone, swclone, spg2xx_game_swclone_state, init_swclone, "Hasbro / Tiger Electronics", "Star Wars - The Clone Wars", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -// Mattel games -CONS( 2005, mattelcs, 0, 0, rad_skat, mattelcs, spg2xx_game_state, empty_init, "Mattel", "Mattel Classic Sports", MACHINE_IMPERFECT_SOUND ) - -// there's also a single player Hot Wheels Plug and Play that uses a wheel style controller -CONS( 2006, hotwhl2p, 0, 0, hotwheels, hotwheels, spg2xx_game_hotwheels_state,empty_init, "Mattel", "Hot Wheels (2 player, pad controllers)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS ) - -CONS( 2007, ordentv, 0, 0, ordentv, ordentv, spg2xx_game_ordentv_state, init_ordentv, "Taikee / V-Tac", "Ordenador-TV (Spain)", MACHINE_NOT_WORKING ) - -CONS( 200?, wfcentro, 0, 0, wfcentro, spg2xx, spg2xx_game_wfcentro_state, empty_init, "WinFun", "Centro TV de Diseno Artistico (Spain)", MACHINE_NOT_WORKING ) - -// set 2862 to 0003 (irq enable) when it stalls on boot to show something (doesn't turn on IRQs again otherwise?) needs camera emulating -CONS( 200?, tiktokmm, 0, 0, spg2xx, spg2xx, spg2xx_game_wfcentro_state, empty_init, "TikTokTech Ltd. / 3T Games / Senario", "Moving Music (MM-TV110)", MACHINE_NOT_WORKING ) |