mirror of
https://github.com/holub/mame
synced 2025-04-19 07:00:31 +03:00
Plug and Play work (#6609)
* new WORKING machines Millennium M505 Arcade Neo Portable Spielkonsole (Family Sport 100-in-1) [TeamEurope] * new NOT WORKING software list entries tvgogo.xml : Baseball (US) [Sean Riddle, David Haywood] tvgogo.xml : What-A-Mole (US) [Sean Riddle, David Haywood] * added internal NAND dump to didj [Sean Riddle, Clawgrip]
This commit is contained in:
parent
b676b1c8ba
commit
a17d577403
@ -8,13 +8,13 @@ license:CC0
|
||||
Dumped | Dumped | Name |Notes
|
||||
_(EU)__|__(US)__|____________|_____________________________________
|
||||
Y* | Y | 4 in 1 |No controller
|
||||
Y | - | Whac-A-Mole|Hammer-shaped IR motion controller
|
||||
Y | Y | Whac-A-Mole|Hammer-shaped IR motion controller
|
||||
Y | | Tennis |Racquet-shaped IR motion controller
|
||||
| | Paintball |Gun controller
|
||||
| | Skateboard |Skateboard-shaped motion controller
|
||||
- | | Basketball |Ball-shaped motion controller
|
||||
| Y | Dodgeball |Motion controller
|
||||
| - | Baseball |Baseball Bat shaped motion controller
|
||||
| Y | Baseball |Baseball Bat shaped motion controller
|
||||
|
||||
|
||||
The US carts do not appear to have a language selection screen
|
||||
@ -40,16 +40,27 @@ _(EU)__|__(US)__|____________|_____________________________________
|
||||
</software>
|
||||
|
||||
<software name="4in1u" cloneof="4in1" supported="no">
|
||||
<description>4-in-1 (Flashcard Fishing, Break a Brick, Balloon Juggling, Penguin Maze) (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="tvgogo4in1_m5m29gb320_001c0021.bin" size="0x400000" crc="2bbcbeff" sha1="1e58c05c1efa344622962476d465c1540d964d14"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<description>4-in-1 (Flashcard Fishing, Break a Brick, Balloon Juggling, Penguin Maze) (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="tvgogo4in1_m5m29gb320_001c0021.bin" size="0x400000" crc="2bbcbeff" sha1="1e58c05c1efa344622962476d465c1540d964d14"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="basebalu" supported="no">
|
||||
<description>Baseball (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="gogobaseball_29lv320attc_00c222a7.bin" size="0x400000" crc="89af1769" sha1="c913d3e874d163db0fe62de51d850d12c37a5f10"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="tennis" supported="no">
|
||||
<description>Tennis (EU)</description>
|
||||
<year>2005</year>
|
||||
@ -72,15 +83,26 @@ _(EU)__|__(US)__|____________|_____________________________________
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="whacmoleu" cloneof="whacmole" supported="no">
|
||||
<description>Whac-A-Mole (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="gogotvwhacamole.bin" size="0x400000" crc="703845ab" sha1="2e727bb1d8cb82db8746d28f58b103d90e5d9450"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
<software name="dodgebalu" supported="no">
|
||||
<description>Dodgeball (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="tvgogododgeball_m5m29gt320_001c0020.bin" size="0x400000" crc="785f4305" sha1="0c96d6330acd2771adb4dbdcb6b9ccaa73ffc513"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
<description>Dodgeball (US)</description>
|
||||
<year>2005</year>
|
||||
<publisher>Toyquest</publisher>
|
||||
<part name="cart" interface="tvgogo_cart">
|
||||
<dataarea name="rom" size="0x400000">
|
||||
<rom name="tvgogododgeball_m5m29gt320_001c0020.bin" size="0x400000" crc="785f4305" sha1="0c96d6330acd2771adb4dbdcb6b9ccaa73ffc513"/>
|
||||
</dataarea>
|
||||
</part>
|
||||
</software>
|
||||
|
||||
</softwarelist>
|
||||
|
@ -2867,7 +2867,7 @@ end
|
||||
--
|
||||
--@src/devices/machine/spg2xx.h,MACHINES["SPG2XX"] = true
|
||||
--@src/devices/machine/spg110.h,MACHINES["SPG2XX"] = true
|
||||
--@src/devices/machine/sunplus_gcm394.h,MACHINES["SPG2XX"] = true
|
||||
--@src/devices/machine/sunplus_gpl16250soc.h,MACHINES["SPG2XX"] = true
|
||||
---------------------------------------------------
|
||||
|
||||
if (MACHINES["SPG2XX"]~=null) then
|
||||
@ -2886,10 +2886,10 @@ if (MACHINES["SPG2XX"]~=null) then
|
||||
MAME_DIR .. "src/devices/machine/spg110.h",
|
||||
MAME_DIR .. "src/devices/machine/spg110_video.cpp",
|
||||
MAME_DIR .. "src/devices/machine/spg110_video.h",
|
||||
MAME_DIR .. "src/devices/machine/sunplus_gcm394.cpp",
|
||||
MAME_DIR .. "src/devices/machine/sunplus_gcm394.h",
|
||||
MAME_DIR .. "src/devices/machine/sunplus_gcm394_video.cpp",
|
||||
MAME_DIR .. "src/devices/machine/sunplus_gcm394_video.h",
|
||||
MAME_DIR .. "src/devices/machine/generalplus_gpl16250soc.cpp",
|
||||
MAME_DIR .. "src/devices/machine/generalplus_gpl16250soc.h",
|
||||
MAME_DIR .. "src/devices/machine/generalplus_gpl16250soc_video.cpp",
|
||||
MAME_DIR .. "src/devices/machine/generalplus_gpl16250soc_video.h",
|
||||
}
|
||||
end
|
||||
|
||||
|
@ -3949,8 +3949,17 @@ files {
|
||||
MAME_DIR .. "src/mame/includes/spg2xx.h",
|
||||
MAME_DIR .. "src/mame/drivers/spg29x.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/spg29x_lexibook_jg7425.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sunplus_unsp20soc.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/sunplus_unsp20soc_mobigo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250_rom.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250_romram.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250_nand.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250_mobigo.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl16250_spi.cpp",
|
||||
MAME_DIR .. "src/mame/includes/generalplus_gpl16250.h",
|
||||
MAME_DIR .. "src/mame/includes/generalplus_gpl16250_romram.h",
|
||||
MAME_DIR .. "src/mame/includes/generalplus_gpl16250_nand.h",
|
||||
MAME_DIR .. "src/mame/machine/generalplus_gpl16250.cpp",
|
||||
MAME_DIR .. "src/mame/machine/generalplus_gpl16250.h",
|
||||
MAME_DIR .. "src/mame/drivers/generalplus_gpl32612.cpp",
|
||||
MAME_DIR .. "src/mame/drivers/xavix.cpp",
|
||||
MAME_DIR .. "src/mame/video/xavix.cpp",
|
||||
|
@ -4,10 +4,13 @@
|
||||
|
||||
SunPlus "GCM394" (based on die pictures)
|
||||
|
||||
Note, these are all the same chip but in different configurations so
|
||||
should be tidied up and made to use callbacks
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#include "emu.h"
|
||||
#include "sunplus_gcm394.h"
|
||||
#include "generalplus_gpl16250soc.h"
|
||||
|
||||
|
||||
#define LOG_GCM394_SPI (1U << 5)
|
||||
@ -20,14 +23,14 @@
|
||||
#include "logmacro.h"
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(GCM394, sunplus_gcm394_device, "gcm394", "SunPlus GCM394 System-on-a-Chip")
|
||||
DEFINE_DEVICE_TYPE(GCM394, sunplus_gcm394_device, "gcm394", "GeneralPlus GPL16250 System-on-a-Chip")
|
||||
|
||||
sunplus_gcm394_device::sunplus_gcm394_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
sunplus_gcm394_base_device(mconfig, GCM394, tag, owner, clock)
|
||||
{
|
||||
}
|
||||
|
||||
DEFINE_DEVICE_TYPE(GPAC800, generalplus_gpac800_device, "gpac800", "GeneralPlus GPAC800 System-on-a-Chip")
|
||||
DEFINE_DEVICE_TYPE(GPAC800, generalplus_gpac800_device, "gpac800", "GeneralPlus GPL16250 System-on-a-Chip (with NAND handling)")
|
||||
|
||||
generalplus_gpac800_device::generalplus_gpac800_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
sunplus_gcm394_base_device(mconfig, GPAC800, tag, owner, clock, address_map_constructor(FUNC(generalplus_gpac800_device::gpac800_internal_map), this))
|
||||
@ -35,7 +38,7 @@ generalplus_gpac800_device::generalplus_gpac800_device(const machine_config &mco
|
||||
}
|
||||
|
||||
|
||||
DEFINE_DEVICE_TYPE(GP_SPISPI, generalplus_gpspispi_device, "gpac800spi", "GeneralPlus unSP20 SPI-based SoC")
|
||||
DEFINE_DEVICE_TYPE(GP_SPISPI, generalplus_gpspispi_device, "gpac800spi", "GeneralPlus GPL16250 (with SPI handling)")
|
||||
|
||||
generalplus_gpspispi_device::generalplus_gpspispi_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
|
||||
sunplus_gcm394_base_device(mconfig, GP_SPISPI, tag, owner, clock, address_map_constructor(FUNC(generalplus_gpspispi_device::gpspispi_internal_map), this))
|
@ -6,15 +6,15 @@
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_MACHINE_SUNPLUS_GCM394_H
|
||||
#define MAME_MACHINE_SUNPLUS_GCM394_H
|
||||
#ifndef MAME_MACHINE_GENERALPLUS_GPL16250SOC_H
|
||||
#define MAME_MACHINE_GENERALPLUS_GPL16250SOC_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "cpu/unsp/unsp.h"
|
||||
#include "screen.h"
|
||||
#include "emupal.h"
|
||||
#include "sunplus_gcm394_video.h"
|
||||
#include "generalplus_gpl16250soc_video.h"
|
||||
#include "spg2xx_audio.h"
|
||||
|
||||
typedef device_delegate<void (uint16_t, uint16_t, uint16_t, uint16_t, uint16_t)> sunplus_gcm394_cs_callback_device;
|
||||
@ -427,4 +427,4 @@ DECLARE_DEVICE_TYPE(GCM394, sunplus_gcm394_device)
|
||||
DECLARE_DEVICE_TYPE(GPAC800, generalplus_gpac800_device)
|
||||
DECLARE_DEVICE_TYPE(GP_SPISPI, generalplus_gpspispi_device)
|
||||
|
||||
#endif // MAME_MACHINE_SUNPLUS_GCM394_H
|
||||
#endif // MAME_MACHINE_GENERALPLUS_GPL16250SOC_H
|
@ -101,9 +101,9 @@
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "sunplus_gcm394_video.h"
|
||||
#include "generalplus_gpl16250soc_video.h"
|
||||
|
||||
DEFINE_DEVICE_TYPE(GCM394_VIDEO, gcm394_video_device, "gcm394_video", "SunPlus GCM394 System-on-a-Chip (Video)")
|
||||
DEFINE_DEVICE_TYPE(GCM394_VIDEO, gcm394_video_device, "gcm394_video", "GeneralPlus GPL16250 System-on-a-Chip (Video)")
|
||||
|
||||
#define LOG_GCM394_VIDEO_PALETTE (1U << 5)
|
||||
#define LOG_GCM394_VIDEO_DMA (1U << 4)
|
@ -6,8 +6,8 @@
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef MAME_MACHINE_GCM394_VIDEO_H
|
||||
#define MAME_MACHINE_GCM394_VIDEO_H
|
||||
#ifndef MAME_MACHINE_GENERALPLUS_GPL16250SOC_VIDEO_H
|
||||
#define MAME_MACHINE_GENERALPLUS_GPL16250SOC_VIDEO_H
|
||||
|
||||
#pragma once
|
||||
|
||||
@ -288,4 +288,4 @@ public:
|
||||
|
||||
DECLARE_DEVICE_TYPE(GCM394_VIDEO, gcm394_video_device)
|
||||
|
||||
#endif // MAME_MACHINE_GCM394_VIDEO_H
|
||||
#endif // MAME_MACHINE_GENERALPLUS_GPL16250SOC_VIDEO_H
|
227
src/mame/drivers/generalplus_gpl16250.cpp
Normal file
227
src/mame/drivers/generalplus_gpl16250.cpp
Normal file
@ -0,0 +1,227 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
(unSP 2.0 based System on a Chip)
|
||||
|
||||
JAKKS call this GPAC800, other sources (including Pac-Man Connect and Play test mode) call it GPL16250
|
||||
|
||||
die markings GCM394
|
||||
- Smart Fit Park
|
||||
- Spongebob Bikini Bottom 500
|
||||
- Mobigo2 (sunplus_unsp20soc_mobigo.cpp)
|
||||
|
||||
some of the systems here might use newer dies but the video etc. appears the same.
|
||||
|
||||
Compared to vii.cpp this is clearly newer, has extra opcodes, different internal map etc. also scaling and higher resolutions based on Spongebob
|
||||
|
||||
note, these SoC types always have a 128Kwords internal ROM, which the JAKKS games appear to use for basic bootstrap purposes.
|
||||
|
||||
GPAC800 / GCM394 (SpongeBob Bikini Bottom 500 Test Mode also calls this GPAC800, even if the mappings appear different to the NAND version below - different CS base, maybe just depends on boot mode?)
|
||||
Smart Fit Park
|
||||
SpongeBob SquarePants Bikini Bottom 500
|
||||
Spiderman - The Masked Menace 'Spider Sense' (pad type with Spiderman model)
|
||||
(Wireless Hunting? - maybe, register map looks the same even if it sets stack to 2fff not 6fff)
|
||||
|
||||
GPAC800 (with NAND support)
|
||||
Wireless Air 60
|
||||
Golden Tee Golf
|
||||
Cars 2
|
||||
Toy Story Mania
|
||||
V.Baby
|
||||
Playskool Heroes Transformers Rescue Bots Beam Box
|
||||
|
||||
GPAC500 (based on test modes, unknown hardware, might be GPAC800 but without the higher resolution support?)
|
||||
The Price is Right
|
||||
Bejeweled? (might be GPAC800)
|
||||
|
||||
Notes
|
||||
smartfp: hold button Circle, Star and Home on startup for Test Menu
|
||||
|
||||
these are all unsp 2.0 type, as they use the extended ocpodes
|
||||
|
||||
|
||||
NAND types:
|
||||
|
||||
Toy Story Mania H27U518S2C dumped as HY27US08121A (512+16) x 32 x 4096
|
||||
Beam Box GPR27P512A dumped as HY27US08121A (512+16) x 32 x 4096
|
||||
Golden Tee GPR27P512A dumped as HY27US08121A (512+16) x 32 x 4096
|
||||
Cars 2 GPR27P512A dumped as HY27US08121A (512+16) x 32 x 4096
|
||||
|
||||
V.Baby HY27UF081G2A (2048+64) x 64 x 1024
|
||||
|
||||
|
||||
|
||||
Non-emulation bugs (happen on real hardware):
|
||||
paccon: Pac-Man - Bottom set of Power Pills are squashed.
|
||||
Galaga - Incorrect sprite used for left shot in 'Double Ship' mode
|
||||
|
||||
|
||||
JAKKS Pacific Test modes:
|
||||
|
||||
jak_hmhsm : uses the standard JAKKS code (on first screen - Hold Up, Hold A, Release Up, Down)
|
||||
the High School Musical part has its own test mode which tests a different part of the ROM, use the same code but after selecting the game from menu
|
||||
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::cs0_r)
|
||||
{
|
||||
return m_romregion[offset & 0x3fffff];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_game_state::cs0_w)
|
||||
{
|
||||
logerror("cs0_w %04x %04x (to ROM!)\n", offset, data);
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::cs1_r) { logerror("cs1_r %06n", offset); return 0x0000; }
|
||||
WRITE16_MEMBER(gcm394_game_state::cs1_w) { logerror("cs1_w %06x %04x\n", offset, data); }
|
||||
READ16_MEMBER(gcm394_game_state::cs2_r) { logerror("cs2_r %06n", offset); return 0x0000; }
|
||||
WRITE16_MEMBER(gcm394_game_state::cs2_w) { logerror("cs2_w %06x %04x\n", offset, data); }
|
||||
READ16_MEMBER(gcm394_game_state::cs3_r) { logerror("cs3_r %06n", offset); return 0x0000; }
|
||||
WRITE16_MEMBER(gcm394_game_state::cs3_w) { logerror("cs3_w %06x %04x\n", offset, data); }
|
||||
READ16_MEMBER(gcm394_game_state::cs4_r) { logerror("cs4_r %06n", offset); return 0x0000; }
|
||||
WRITE16_MEMBER(gcm394_game_state::cs4_w) { logerror("cs4_w %06x %04x\n", offset, data); }
|
||||
|
||||
void gcm394_game_state::cs_map_base(address_map& map)
|
||||
{
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::read_external_space)
|
||||
{
|
||||
return m_memory->get_program()->read_word(offset);
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_game_state::write_external_space)
|
||||
{
|
||||
m_memory->get_program()->write_word(offset, data);
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::porta_r)
|
||||
{
|
||||
uint16_t data = m_io[0]->read();
|
||||
logerror("Port A Read: %04x\n", data);
|
||||
return data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::portb_r)
|
||||
{
|
||||
uint16_t data = m_io[1]->read();
|
||||
logerror("Port B Read: %04x\n", data);
|
||||
return data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(gcm394_game_state::portc_r)
|
||||
{
|
||||
uint16_t data = m_io[2]->read();
|
||||
logerror("Port C Read: %04x\n", data);
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(gcm394_game_state::porta_w)
|
||||
{
|
||||
logerror("%s: Port A:WRITE %04x\n", machine().describe_context(), data);
|
||||
}
|
||||
|
||||
// some sources indicate these later SoC types run at 96Mhz, others indicate 48Mhz.
|
||||
// unSP 2.0 CPUs have a lower average CPI too (2 instead of 6 on unSP 1.0 or 5 on unSP 1.1 / 1.2 / unSP 2.0) so using regular unSP timings might result in things being too slow
|
||||
// as with the older SunPlus chips this appears to be an fully internally generated frequency, external XTALs again are typically 6MHz or simply not present.
|
||||
|
||||
void gcm394_game_state::base(machine_config &config)
|
||||
{
|
||||
GCM394(config, m_maincpu, 96000000/2, m_screen);
|
||||
m_maincpu->porta_in().set(FUNC(gcm394_game_state::porta_r));
|
||||
m_maincpu->portb_in().set(FUNC(gcm394_game_state::portb_r));
|
||||
m_maincpu->portc_in().set(FUNC(gcm394_game_state::portc_r));
|
||||
m_maincpu->porta_out().set(FUNC(gcm394_game_state::porta_w));
|
||||
m_maincpu->space_read_callback().set(FUNC(gcm394_game_state::read_external_space));
|
||||
m_maincpu->space_write_callback().set(FUNC(gcm394_game_state::write_external_space));
|
||||
m_maincpu->set_irq_acknowledge_callback(m_maincpu, FUNC(sunplus_gcm394_base_device::irq_vector_cb));
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
|
||||
m_maincpu->set_bootmode(1); // boot from external ROM / CS mirror
|
||||
m_maincpu->set_cs_config_callback(FUNC(gcm394_game_state::cs_callback));
|
||||
|
||||
FULL_MEMORY(config, m_memory).set_map(&gcm394_game_state::cs_map_base);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(60);
|
||||
m_screen->set_size(320*2, 262*2);
|
||||
m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
|
||||
m_screen->set_screen_update("maincpu", FUNC(sunplus_gcm394_device::screen_update));
|
||||
m_screen->screen_vblank().set(m_maincpu, FUNC(sunplus_gcm394_device::vblank));
|
||||
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
}
|
||||
|
||||
|
||||
void tkmag220_game_state::tkmag220(machine_config &config)
|
||||
{
|
||||
gcm394_game_state::base(config);
|
||||
|
||||
m_maincpu->porta_in().set_ioport("IN0");
|
||||
m_maincpu->portb_in().set_ioport("IN1");
|
||||
m_maincpu->portc_in().set_ioport("IN2");
|
||||
}
|
||||
|
||||
void gcm394_game_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void gcm394_game_state::machine_reset()
|
||||
{
|
||||
cs_callback(0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
m_maincpu->set_cs_space(m_memory->get_program());
|
||||
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
|
||||
m_maincpu->set_paldisplaybank_high_hack(1);
|
||||
m_maincpu->set_alt_tile_addressing_hack(0);
|
||||
}
|
||||
|
||||
void gcm394_game_state::cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4)
|
||||
{
|
||||
// wipe existing mappings;
|
||||
m_memory->get_program()->unmap_readwrite(0, (0x8000000*5)-1);
|
||||
m_memory->get_program()->nop_readwrite(0, (0x8000000*5)-1); // stop logging spam if video params are invalid
|
||||
|
||||
int start_address = 0;
|
||||
int end_address;
|
||||
|
||||
int size; // cs region sizes in kwords
|
||||
|
||||
size = (((cs0 & 0xff00) >> 8) + 1) * 0x10000;
|
||||
end_address = start_address + (size - 1);
|
||||
logerror("installing cs0 handler start_address %08x end_address %08x\n", start_address, end_address);
|
||||
m_memory->get_program()->install_readwrite_handler( start_address, end_address, read16_delegate(*this, FUNC(gcm394_game_state::cs0_r)), write16_delegate(*this, FUNC(gcm394_game_state::cs0_w)));
|
||||
start_address += size;
|
||||
|
||||
size = (((cs1 & 0xff00) >> 8) + 1) * 0x10000;
|
||||
end_address = start_address + (size - 1);
|
||||
logerror("installing cs1 handler start_address %08x end_address %08x\n", start_address, end_address);
|
||||
m_memory->get_program()->install_readwrite_handler( start_address, end_address, read16_delegate(*this, FUNC(gcm394_game_state::cs1_r)), write16_delegate(*this, FUNC(gcm394_game_state::cs1_w)));
|
||||
start_address += size;
|
||||
|
||||
size = (((cs2 & 0xff00) >> 8) + 1) * 0x10000;
|
||||
end_address = start_address + (size - 1);
|
||||
logerror("installing cs2 handler start_address %08x end_address %08x\n", start_address, end_address);
|
||||
m_memory->get_program()->install_readwrite_handler( start_address, end_address, read16_delegate(*this, FUNC(gcm394_game_state::cs2_r)), write16_delegate(*this, FUNC(gcm394_game_state::cs2_w)));
|
||||
start_address += size;
|
||||
|
||||
size = (((cs3 & 0xff00) >> 8) + 1) * 0x10000;
|
||||
end_address = start_address + (size - 1);
|
||||
logerror("installing cs3 handler start_address %08x end_address %08x\n", start_address, end_address);
|
||||
m_memory->get_program()->install_readwrite_handler( start_address, end_address, read16_delegate(*this, FUNC(gcm394_game_state::cs3_r)), write16_delegate(*this, FUNC(gcm394_game_state::cs3_w)));
|
||||
start_address += size;
|
||||
|
||||
size = (((cs4 & 0xff00) >> 8) + 1) * 0x10000;
|
||||
end_address = start_address + (size - 1);
|
||||
logerror("installing cs4 handler start_address %08x end_address %08x\n", start_address, end_address);
|
||||
m_memory->get_program()->install_readwrite_handler( start_address, end_address, read16_delegate(*this, FUNC(gcm394_game_state::cs4_r)), write16_delegate(*this, FUNC(gcm394_game_state::cs4_w)));
|
||||
//start_address += size;
|
||||
}
|
||||
|
@ -1,8 +1,25 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
|
||||
/*
|
||||
GPL16250 / GPAC800 / GMC384 / GCM420 related support
|
||||
|
||||
GPL16250 is the GeneralPlus / SunPlus part number
|
||||
GPAC800 is the JAKKS Pacific codename
|
||||
GMC384 / GCM420 is what is printed on the die
|
||||
|
||||
----
|
||||
|
||||
GPL16250 Mobigo support
|
||||
the original Mobigo is ROM+RAM config
|
||||
the Mobigo 2 is NAND+RAM config
|
||||
cartridges are compatible
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/sunplus_unsp20soc.h"
|
||||
#include "includes/generalplus_gpl16250_nand.h"
|
||||
#include "includes/generalplus_gpl16250_romram.h"
|
||||
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
#include "softlist_dev.h"
|
828
src/mame/drivers/generalplus_gpl16250_nand.cpp
Normal file
828
src/mame/drivers/generalplus_gpl16250_nand.cpp
Normal file
@ -0,0 +1,828 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
GPL16250 / GPAC800 / GMC384 / GCM420 related support
|
||||
|
||||
GPL16250 is the GeneralPlus / SunPlus part number
|
||||
GPAC800 is the JAKKS Pacific codename
|
||||
GMC384 / GCM420 is what is printed on the die
|
||||
|
||||
----
|
||||
|
||||
GPL16250 games using NAND + RAM configuration
|
||||
*/
|
||||
|
||||
/*
|
||||
map info (NAND type)
|
||||
|
||||
map(0x000000, 0x006fff) internal RAM
|
||||
map(0x007000, 0x007fff) internal peripherals
|
||||
map(0x008000, 0x00ffff) internal ROM (lower 32kwords) - can also be configured to mirror CS0 308000 area with external pin for boot from external ROM
|
||||
map(0x010000, 0x027fff) internal ROM (upper 96kwords) - can't be switched
|
||||
map(0x028000, 0x02ffff) reserved
|
||||
|
||||
map(0x030000, 0x0.....) view into external spaces (CS0 area starts here. followed by CS1 area, CS2 area etc.)
|
||||
|
||||
map(0x200000, 0x3fffff) continued view into external spaces, but this area is banked with m_membankswitch_7810 (valid bank values 0x00-0x3f)
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
#include "includes/generalplus_gpl16250_nand.h"
|
||||
|
||||
READ16_MEMBER(generalplus_gpac800_game_state::cs0_r)
|
||||
{
|
||||
return m_sdram2[offset & 0xffff];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(generalplus_gpac800_game_state::cs0_w)
|
||||
{
|
||||
m_sdram2[offset & 0xffff] = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(generalplus_gpac800_game_state::cs1_r)
|
||||
{
|
||||
return m_sdram[offset & (m_sdram_kwords-1)];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(generalplus_gpac800_game_state::cs1_w)
|
||||
{
|
||||
m_sdram[offset & (m_sdram_kwords-1)] = data;
|
||||
}
|
||||
|
||||
READ8_MEMBER(generalplus_gpac800_game_state::read_nand)
|
||||
{
|
||||
if (!m_nandregion)
|
||||
return 0x0000;
|
||||
|
||||
if (offset < m_size)
|
||||
{
|
||||
return m_nandregion[offset];
|
||||
}
|
||||
else
|
||||
{
|
||||
popmessage("read outside of NAND ROM space (offset %08x) (size %08x)\n", offset, m_size);
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
return 0x00;
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::generalplus_gpac800(machine_config &config)
|
||||
{
|
||||
GPAC800(config, m_maincpu, 96000000/2, m_screen);
|
||||
m_maincpu->porta_in().set(FUNC(generalplus_gpac800_game_state::porta_r));
|
||||
m_maincpu->portb_in().set(FUNC(generalplus_gpac800_game_state::portb_r));
|
||||
m_maincpu->portc_in().set(FUNC(generalplus_gpac800_game_state::portc_r));
|
||||
m_maincpu->porta_out().set(FUNC(generalplus_gpac800_game_state::porta_w));
|
||||
m_maincpu->space_read_callback().set(FUNC(generalplus_gpac800_game_state::read_external_space));
|
||||
m_maincpu->space_write_callback().set(FUNC(generalplus_gpac800_game_state::write_external_space));
|
||||
m_maincpu->set_irq_acknowledge_callback(m_maincpu, FUNC(sunplus_gcm394_base_device::irq_vector_cb));
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
|
||||
m_maincpu->set_bootmode(0); // boot from internal ROM (NAND bootstrap)
|
||||
m_maincpu->set_cs_config_callback(FUNC(gcm394_game_state::cs_callback));
|
||||
|
||||
m_maincpu->nand_read_callback().set(FUNC(generalplus_gpac800_game_state::read_nand));
|
||||
|
||||
FULL_MEMORY(config, m_memory).set_map(&generalplus_gpac800_game_state::cs_map_base);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(60);
|
||||
m_screen->set_size(320*2, 262*2);
|
||||
m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
|
||||
m_screen->set_screen_update("maincpu", FUNC(sunplus_gcm394_device::screen_update));
|
||||
m_screen->screen_vblank().set(m_maincpu, FUNC(sunplus_gcm394_device::vblank));
|
||||
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
}
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(generalplus_gpac800_vbaby_game_state::cart_load)
|
||||
{
|
||||
uint32_t size = m_cart->common_get_size("rom");
|
||||
|
||||
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
|
||||
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
void generalplus_gpac800_vbaby_game_state::generalplus_gpac800_vbaby(machine_config &config)
|
||||
{
|
||||
generalplus_gpac800_game_state::generalplus_gpac800(config);
|
||||
|
||||
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "vbaby_cart");
|
||||
m_cart->set_width(GENERIC_ROM16_WIDTH);
|
||||
m_cart->set_device_load(FUNC(generalplus_gpac800_vbaby_game_state::cart_load));
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("vbaby_cart");
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( jak_car2 )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON3 ) // unused
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( jak_gtg )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
|
||||
static INPUT_PORTS_START( jak_hsm )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON4 )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
ROM_START( wlsair60 )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "wlsair60.nand", 0x0000, 0x8400000, CRC(eec23b97) SHA1(1bb88290cf54579a5bb51c08a02d793cd4d79f7a) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_gtg )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "goldentee.bin", 0x0000, 0x4200000, CRC(87d5e815) SHA1(5dc46cd753b791449cc41d5eff4928c0dcaf35c0) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_car2 )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "cars2.bin", 0x0000, 0x4200000, CRC(4d610e09) SHA1(bc59f5f7f676a8f2a78dfda7fb62c804bbf850b6) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/* The following pinout was used when dumping jak_sspop, jak_hmhsm, jak_umdf
|
||||
For the 256Mbyte parts the parameters of the programmer had to be overridden to dump the full capacity as there were no equivalent parts.
|
||||
|
||||
Sandisk TSOP32 NAND Flash
|
||||
|
||||
+----------------------------------------------+
|
||||
NC-|01 32|-NC
|
||||
VSS-|02 31|-NC
|
||||
R/B-|03 SanDisk 30|-I/O7
|
||||
NC-|04 NAND 29|-I/O6
|
||||
RE-|05 28|-I/O5
|
||||
CE-|06 32PIN 27|-I/O4
|
||||
NC-|07 26|-VCC
|
||||
VCC-|08 25|-VSS
|
||||
VSS-|09 24|-NC
|
||||
NC-|10 23|-I/O3
|
||||
NC-|11 22|-I/O2
|
||||
CLE-|12 21|-I/O1
|
||||
ALE-|13 20|-I/O0
|
||||
WE-|14 19|-NC
|
||||
WP-|15 18|-NC
|
||||
NC-|16 17|-NC
|
||||
+----------------------------------------------+
|
||||
|
||||
One of the games has pin 2 grounded, and the other 2 have it N/C. I'm not sure what it would be, since all the signals are accounted for.
|
||||
|
||||
*/
|
||||
|
||||
ROM_START( jak_sspop )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
/* TSOP32 NAND ROM
|
||||
|
||||
S976172-1
|
||||
SanDisk
|
||||
11015-128B
|
||||
POC142
|
||||
0845
|
||||
<obscured #>
|
||||
|
||||
appears to be a 128MByte part (or at least that is how much service mode tests)
|
||||
|
||||
*/
|
||||
|
||||
ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "singscenepop_as_hy27us081g1m_4579.bin", 0x0000, 0x8400000, CRC(4c8123fe) SHA1(388fda8ddd90b541a53eac4bcbe66bebe7360724) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_hmhsm )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
/* TSOP32 NAND ROM
|
||||
|
||||
5769522.1
|
||||
SanDisk
|
||||
11354-256B
|
||||
P44247.00
|
||||
xx20
|
||||
01xxxx_HSM
|
||||
|
||||
256Mbyte part, 2nd half is just 0xff filled tho so a 128Mbyte part would have been fine
|
||||
|
||||
*/
|
||||
|
||||
ROM_REGION( 0x10800000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "hmhsm.bin", 0x0000, 0x10800000, CRC(e63ad24c) SHA1(a7844b14af701914150aa7c06743a410f478ff7b) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( jak_umdf )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
/* TSOP32 NAND ROM
|
||||
|
||||
S744565-1
|
||||
SanDisk
|
||||
11352-256B
|
||||
PA2777.00
|
||||
0834
|
||||
61050
|
||||
|
||||
again part number would suggest that this is a 256MByte ROM, although in reality all data fits into 64Mbyte, rest is blank
|
||||
|
||||
*/
|
||||
|
||||
ROM_REGION( 0x10800000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "jak_umdf.bin", 0x0000, 0x10800000, CRC(05f47aca) SHA1(61b417141ccc22324224b1862ea2f5778453f206) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( jak_tsm )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "toystorymania.bin", 0x0000, 0x4200000, CRC(183b20a5) SHA1(eb4fa5ee9dfac58f5244d00d4e833b1e461cc52c) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( jak_duck )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "duckcommander_gpr27p512a_c276_as_hy27us08121a.bin", 0x0000, 0x4200000, CRC(d9356d5b) SHA1(aca05525b4a504f7ad264ae9bbc2f1f8f399c4ca) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_swc )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "jakksstarwarspistol_gpr27p512a_c276_as_hy27us08121a.bin", 0x0000, 0x4200000, CRC(024d49b8) SHA1(9694f4c7cd083c976ffbbcfa6f626fc6b4bc8d91) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_wdzh )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "walkingdeadrifle_gpr27p512a_c276_as_hy27us08121a.bin", 0x0000, 0x4200000, CRC(b2c762f0) SHA1(7e10df517cc24924e0ec55e2a263563023d945f8) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( jak_wdbg )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "amcwalkingdeadcrossbow_gpr27p512a_c276_as_hy27us08121a.bin", 0x0000, 0x4200000, CRC(66510fd4) SHA1(3ad6347c5a7758c035654cb3e96858320875b97a) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( vbaby )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "vbaby.bin", 0x0000, 0x8400000, CRC(d904441b) SHA1(3742bc4e1e403f061ce2813ecfafc6f30a44d287) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( mgtfit )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x8400000, "nandrom", ROMREGION_ERASE00 ) // Samsung 937 K9F1G08U0D Ident: 0xEC 0xF1 Full Ident: 0xECF1001540
|
||||
ROM_LOAD( "k9f1g08u0d.bin", 0x0000, 0x8400000, CRC(1ca5ac09) SHA1(c2e123085d2198999c2c0edb1df4895361c00a99) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( beambox )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION( 0x4200000, "nandrom", ROMREGION_ERASE00 )
|
||||
ROM_LOAD( "beambox.bin", 0x0000, 0x4200000, CRC(a486f04e) SHA1(73c7d99d8922eba58d94e955e254b9c3baa4443e) )
|
||||
ROM_END
|
||||
|
||||
|
||||
void generalplus_gpac800_game_state::machine_start()
|
||||
{
|
||||
save_item(NAME(m_sdram));
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_create_stripped_region()
|
||||
{
|
||||
uint8_t* rom = m_nandregion;
|
||||
int size = memregion("nandrom")->bytes();
|
||||
m_size = size;
|
||||
|
||||
int numblocks = size / m_nandblocksize;
|
||||
m_strippedsize = numblocks * m_nandblocksize_stripped;
|
||||
m_strippedrom.resize(m_strippedsize);
|
||||
|
||||
for (int i = 0; i < numblocks; i++)
|
||||
{
|
||||
const int base = i * m_nandblocksize;
|
||||
const int basestripped = i * m_nandblocksize_stripped;
|
||||
|
||||
for (int j = 0; j < m_nandblocksize_stripped; j++)
|
||||
{
|
||||
m_strippedrom[basestripped + j] = rom[(base + j)];
|
||||
}
|
||||
}
|
||||
|
||||
// debug to allow for easy use of unidasm.exe
|
||||
if (0)
|
||||
{
|
||||
FILE *fp;
|
||||
char filename[256];
|
||||
sprintf(filename,"stripped_%s", machine().system().name);
|
||||
fp=fopen(filename, "w+b");
|
||||
if (fp)
|
||||
{
|
||||
fwrite(&m_strippedrom[0], m_nandblocksize_stripped * numblocks, 1, fp);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::machine_reset()
|
||||
{
|
||||
// configure CS defaults
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
mem.write_word(0x007820, 0x0047);
|
||||
mem.write_word(0x007821, 0xff47);
|
||||
mem.write_word(0x007822, 0x00c7);
|
||||
mem.write_word(0x007823, 0x0047);
|
||||
mem.write_word(0x007824, 0x0047);
|
||||
|
||||
m_maincpu->set_cs_space(m_memory->get_program());
|
||||
|
||||
if (m_nandregion)
|
||||
{
|
||||
nand_create_stripped_region();
|
||||
|
||||
// up to 256 pages (16384kw) for each space
|
||||
|
||||
// (size of cs0 + cs1 + cs2 + cs3 + cs4) <= 81920kwords
|
||||
|
||||
// simulate bootstrap / internal ROM
|
||||
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
|
||||
00000000 (50 47 61 6E 64 6E 61 6E 64 6E)-- -- -- -- -- -- PGandnandn------
|
||||
00000010 -- -- -- -- -- bb -- -- -- -- -- -- -- -- -- -- ----------------
|
||||
|
||||
bb = where to copy first block
|
||||
|
||||
The header is GPnandnand (byteswapped) then some params
|
||||
one of the params appears to be for the initial code copy operation done
|
||||
by the bootstrap
|
||||
*/
|
||||
|
||||
// probably more bytes are used
|
||||
int dest = m_strippedrom[0x15] << 8;
|
||||
|
||||
// copy a block of code from the NAND to RAM
|
||||
for (int i = 0; i < m_initial_copy_words; i++)
|
||||
{
|
||||
uint16_t word = m_strippedrom[(i * 2) + 0] | (m_strippedrom[(i * 2) + 1] << 8);
|
||||
|
||||
mem.write_word(dest + i, word);
|
||||
}
|
||||
|
||||
// these vectors must either directly point to RAM, or at least redirect there after some code
|
||||
uint16_t* internal = (uint16_t*)memregion("maincpu:internal")->base();
|
||||
internal[0x7ff5] = m_vectorbase + 0x0a;
|
||||
internal[0x7ff6] = m_vectorbase + 0x0c;
|
||||
internal[0x7ff7] = dest + 0x20; // point boot vector at code in RAM (probably in reality points to internal code that copies the first block)
|
||||
internal[0x7ff8] = m_vectorbase + 0x10;
|
||||
internal[0x7ff9] = m_vectorbase + 0x12;
|
||||
internal[0x7ffa] = m_vectorbase + 0x14;
|
||||
internal[0x7ffb] = m_vectorbase + 0x16;
|
||||
internal[0x7ffc] = m_vectorbase + 0x18;
|
||||
internal[0x7ffd] = m_vectorbase + 0x1a;
|
||||
internal[0x7ffe] = m_vectorbase + 0x1c;
|
||||
internal[0x7fff] = m_vectorbase + 0x1e;
|
||||
}
|
||||
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
|
||||
m_maincpu->set_paldisplaybank_high_hack(0);
|
||||
m_maincpu->set_alt_tile_addressing_hack(1);
|
||||
}
|
||||
|
||||
|
||||
void generalplus_gpac800_game_state::nand_init210()
|
||||
{
|
||||
m_sdram.resize(m_sdram_kwords);
|
||||
m_sdram2.resize(0x10000);
|
||||
|
||||
m_nandblocksize = 0x210;
|
||||
m_nandblocksize_stripped = 0x200;
|
||||
|
||||
m_vectorbase = 0x6fe0;
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_init210_32mb()
|
||||
{
|
||||
m_sdram_kwords = 0x400000 * 4;
|
||||
nand_init210();
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_init840()
|
||||
{
|
||||
m_sdram.resize(m_sdram_kwords);
|
||||
m_sdram2.resize(0x10000);
|
||||
|
||||
m_nandblocksize = 0x840;
|
||||
m_nandblocksize_stripped = 0x800;
|
||||
|
||||
m_vectorbase = 0x6fe0;
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_wlsair60()
|
||||
{
|
||||
nand_init840();
|
||||
m_initial_copy_words = 0x2800;
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_vbaby()
|
||||
{
|
||||
nand_init840();
|
||||
m_initial_copy_words = 0x1000;
|
||||
m_maincpu->set_romtype(2);
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_tsm()
|
||||
{
|
||||
|
||||
// something odd must be going on with the bootloader?
|
||||
// structure has the first 0x4000 block repeated 3 times (must appear in RAM on startup?)
|
||||
// then it has a 0x10000 block repeated 4 times (must get copied to 0x30000 by code)
|
||||
// then it has the larger, main payload, just the once.
|
||||
|
||||
// the addresses written to the NAND device don't compensate for these data repeats, however dump seems ok as no other data is being repeated?
|
||||
// reads after startup still need checking
|
||||
nand_init210();
|
||||
m_maincpu->set_romtype(1);
|
||||
}
|
||||
|
||||
void generalplus_gpac800_game_state::nand_beambox()
|
||||
{
|
||||
nand_init210();
|
||||
m_vectorbase = 0x2fe0;
|
||||
}
|
||||
|
||||
// NAND dumps w/ internal bootstrap (and u'nSP 2.0 extended opcodes) (have gpnandnand strings)
|
||||
// the JAKKS ones seem to be known as 'Generalplus GPAC800' hardware
|
||||
CONS(2010, wlsair60, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_wlsair60, "Jungle Soft / Kids Station Toys Inc", "Wireless Air 60", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, beambox, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_beambox, "Hasbro", "Playskool Heroes Transformers Rescue Bots Beam Box (Spain)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, mgtfit, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_wlsair60, "MGT", "Fitness Konsole (NC1470)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // probably has other names in English too? menus don't appear to be in German
|
||||
CONS(200?, vbaby, 0, 0, generalplus_gpac800_vbaby, jak_car2, generalplus_gpac800_vbaby_game_state, nand_vbaby, "VTech", "V.Baby", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
|
||||
CONS(200?, jak_gtg, 0, 0, generalplus_gpac800, jak_gtg, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc / HotGen Ltd", "Golden Tee Golf (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(200?, jak_car2, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc / HotGen Ltd", "Cars 2 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2010, jak_tsm, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_tsm, "JAKKS Pacific Inc / Schell Games", "Toy Story Mania (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2009, jak_sspop, 0, 0, generalplus_gpac800, jak_hsm, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / HotGen Ltd", "Sing Scene Pop (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2008, jak_hmhsm, 0, 0, generalplus_gpac800, jak_hsm, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / HotGen Ltd", "Hannah Montana G2 Deluxe / High School Musical G2 Deluxe 2-in-1 (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2008, jak_umdf, 0, 0, generalplus_gpac800, jak_hsm, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / Handheld Games", "Ultimotion - Disney Fairies Sleeping Beauty & TinkerBell (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
// Ultimotion Swing Zone is SPG29xx instead
|
||||
|
||||
// There were 1 player and 2 player versions for several of the JAKKS guns. The 2nd gun appears to be simply a controller (no AV connectors) but as they were separate products with the 2 player verisons being released up to a year after the original, the code could differ.
|
||||
// If they differ, it is currently uncertain which versions these ROMs are from
|
||||
CONS(2012, jak_wdzh, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210, "JAKKS Pacific Inc / Merge Interactive", "The Walking Dead: Zombie Hunter (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // gun games all had Atmel 16CM (24C16).
|
||||
CONS(2013, jak_swc, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / Merge Interactive", "Star Wars Clone Trooper (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
CONS(2013, jak_duck, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / Merge Interactive", "Duck Commander (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING) // no 2 Player version was released
|
||||
CONS(2014, jak_wdbg, 0, 0, generalplus_gpac800, jak_car2, generalplus_gpac800_game_state, nand_init210_32mb, "JAKKS Pacific Inc / Super Happy Fun Fun", "The Walking Dead: Battleground (JAKKS Pacific TV Game)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
427
src/mame/drivers/generalplus_gpl16250_rom.cpp
Normal file
427
src/mame/drivers/generalplus_gpl16250_rom.cpp
Normal file
@ -0,0 +1,427 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
GPL16250 / GPAC800 / GMC384 / GCM420 related support
|
||||
|
||||
GPL16250 is the GeneralPlus / SunPlus part number
|
||||
GPAC800 is the JAKKS Pacific codename
|
||||
GMC384 / GCM420 is what is printed on the die
|
||||
|
||||
----
|
||||
|
||||
GPL16250 games using ROM (no extra RAM) configuration
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
|
||||
|
||||
static INPUT_PORTS_START( smartfp )
|
||||
PORT_START("IN0")
|
||||
// entirely non-standard mat based controller (0-11 are where your feet are placed normally, row of selection places to step above those)
|
||||
// no sensible default mapping unless forced
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_CODE(KEYCODE_Q) PORT_NAME("0")
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_CODE(KEYCODE_W) PORT_NAME("1")
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_CODE(KEYCODE_E) PORT_NAME("2")
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON8 ) PORT_CODE(KEYCODE_R) PORT_NAME("3")
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON9 ) PORT_CODE(KEYCODE_T) PORT_NAME("4")
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON10 ) PORT_CODE(KEYCODE_Y) PORT_NAME("5")
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON11 ) PORT_CODE(KEYCODE_U) PORT_NAME("6")
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON12 ) PORT_CODE(KEYCODE_I) PORT_NAME("7")
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_BUTTON13 ) PORT_CODE(KEYCODE_O) PORT_NAME("8")
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_BUTTON14 ) PORT_CODE(KEYCODE_P) PORT_NAME("9")
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_BUTTON15 ) PORT_CODE(KEYCODE_OPENBRACE) PORT_NAME("10")
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_BUTTON16 ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_NAME("11")
|
||||
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_CODE(KEYCODE_A) PORT_NAME("Circle / Red")
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_CODE(KEYCODE_S) PORT_NAME("Square / Orange")
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_CODE(KEYCODE_D) PORT_NAME("Triangle / Yellow")
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_CODE(KEYCODE_F) PORT_NAME("Star / Blue")
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_NAME("HOME")
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( gormiti ) // DOWN with A+B+C for test mode?
|
||||
PORT_START("IN0")
|
||||
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_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_START1 ) // causes long delay in test mode?
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( tkmag220 )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN1" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0000, "Important" ) // gets stuck in inf loop if this is wrong
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
ROM_START( smartfp )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("smartfitparkuk.bin", 0x000000, 0x800000, CRC(2072d7d0) SHA1(eaa4f254d6dee3a7eac64ae2204dd6291e4d27cc) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( smartfps )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("smartfitpark.bin", 0x000000, 0x800000, CRC(ada84507) SHA1(a3a80bf71fae62ebcbf939166a51d29c24504428) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( gormiti )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("gormiti.bin", 0x000000, 0x800000, CRC(71b82d41) SHA1(169b35dc7bdd05b7b32176ddf901ace27736cb86) )
|
||||
ROM_END
|
||||
|
||||
ROM_START( tkmag220 )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION( 0x8000000, "maincpu", ROMREGION_ERASE00 )
|
||||
ROM_LOAD16_WORD_SWAP( "u1g-2a.u2", 0x0000000, 0x8000000, CRC(0fd769a1) SHA1(df19402bcd20075483d63fb98fb3fa42bd33ccfd) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
|
||||
// the JAKKS ones of these seem to be known as 'Generalplus GPAC500' hardware?
|
||||
CONS(2009, smartfp, 0, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (UK)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2009, smartfps, smartfp, 0, base, smartfp, gcm394_game_state, empty_init, "Fisher-Price", "Fun 2 Learn Smart Fit Park (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(200?, tkmag220, 0, 0, tkmag220, tkmag220, tkmag220_game_state, empty_init, "TaiKee", "Mini Arcade Games Console (Family Sport 220-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
// die on this one is 'GCM420'
|
||||
CONS(2013, gormiti, 0, 0, base, gormiti, gcm394_game_state, empty_init, "Giochi Preziosi", "Gormiti Game Arena (Spain)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
// Fun 2 Learn 3-in-1 SMART SPORTS ?
|
499
src/mame/drivers/generalplus_gpl16250_romram.cpp
Normal file
499
src/mame/drivers/generalplus_gpl16250_romram.cpp
Normal file
@ -0,0 +1,499 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
GPL16250 / GPAC800 / GMC384 / GCM420 related support
|
||||
|
||||
GPL16250 is the GeneralPlus / SunPlus part number
|
||||
GPAC800 is the JAKKS Pacific codename
|
||||
GMC384 / GCM420 is what is printed on the die
|
||||
|
||||
----
|
||||
|
||||
GPL16250 games using ROM + RAM configuration
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/generalplus_gpl16250_romram.h"
|
||||
|
||||
|
||||
static INPUT_PORTS_START( wrlshunt )
|
||||
PORT_START("IN0")
|
||||
PORT_START("IN1")
|
||||
PORT_START("IN2")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( jak_s500 )
|
||||
PORT_START("IN0")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN0" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_BUTTON2 )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_BUTTON1 )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_BUTTON3 )
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
static INPUT_PORTS_START( paccon ) // for Test Mode hold buttons 1+2 until the screen starts changing colours (happens after the copyright display)
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNUSED ) // PAL/NTSC flag
|
||||
PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_BUTTON1 ) // 'A'
|
||||
PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_BUTTON3 ) // '*C* (doesn't exist?) (cheat)
|
||||
PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON2 ) // 'B'
|
||||
PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_BUTTON4 ) // '*MENU*' (doesn't exist?)
|
||||
PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
|
||||
PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
|
||||
PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
|
||||
PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
|
||||
PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNUSED ) // '***'
|
||||
|
||||
PORT_START("IN1")
|
||||
PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED )
|
||||
|
||||
PORT_START("IN2")
|
||||
PORT_DIPNAME( 0x0001, 0x0001, "IN2" )
|
||||
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0002, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0004, 0x0004, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0004, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0008, 0x0008, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0008, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0010, 0x0010, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0010, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0020, 0x0020, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0020, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0040, 0x0040, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0040, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0080, 0x0080, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0080, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0100, 0x0100, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0100, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0200, 0x0200, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0200, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0400, 0x0400, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0400, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x0800, 0x0800, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x0800, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x1000, 0x1000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x1000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x2000, 0x2000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x2000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x4000, 0x4000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x4000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
PORT_DIPNAME( 0x8000, 0x8000, DEF_STR( Unknown ) )
|
||||
PORT_DIPSETTING( 0x8000, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
|
||||
READ16_MEMBER(wrlshunt_game_state::cs0_r)
|
||||
{
|
||||
return m_romregion[offset & m_romwords_mask];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(wrlshunt_game_state::cs0_w)
|
||||
{
|
||||
logerror("cs0_w write to ROM?\n");
|
||||
//m_romregion[offset & 0x3ffffff] = data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(wrlshunt_game_state::cs1_r)
|
||||
{
|
||||
return m_sdram[offset & 0x3fffff];
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(wrlshunt_game_state::cs1_w)
|
||||
{
|
||||
m_sdram[offset & 0x3fffff] = data;
|
||||
}
|
||||
|
||||
|
||||
void wrlshunt_game_state::machine_start()
|
||||
{
|
||||
m_romwords_mask = (memregion("maincpu")->bytes()/2)-1;
|
||||
save_item(NAME(m_sdram));
|
||||
}
|
||||
|
||||
void wrlshunt_game_state::machine_reset()
|
||||
{
|
||||
cs_callback(0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
m_maincpu->set_cs_space(m_memory->get_program());
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
|
||||
m_maincpu->set_paldisplaybank_high_hack(1);
|
||||
m_maincpu->set_alt_tile_addressing_hack(1);
|
||||
}
|
||||
|
||||
void wrlshunt_game_state::init_wrlshunt()
|
||||
{
|
||||
m_sdram.resize(0x400000); // 0x400000 words, 0x800000 bytes
|
||||
}
|
||||
|
||||
void wrlshunt_game_state::init_ths()
|
||||
{
|
||||
m_sdram.resize(0x400000); // 0x400000 words, 0x800000 bytes (verify)
|
||||
}
|
||||
|
||||
void wrlshunt_game_state::wrlshunt(machine_config &config)
|
||||
{
|
||||
gcm394_game_state::base(config);
|
||||
}
|
||||
|
||||
void wrlshunt_game_state::paccon(machine_config &config)
|
||||
{
|
||||
gcm394_game_state::base(config);
|
||||
|
||||
m_maincpu->set_clock(96000000); // needs to be somewhere in this region or the emulator running on the SunPlus is too slow
|
||||
}
|
||||
|
||||
READ16_MEMBER(wrlshunt_game_state::porta_r)
|
||||
{
|
||||
uint16_t data = m_io[0]->read();
|
||||
logerror("%s: Port A Read: %04x\n", machine().describe_context(), data);
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER(wrlshunt_game_state::porta_w)
|
||||
{
|
||||
logerror("%s: Port A:WRITE %04x\n", machine().describe_context(), data);
|
||||
|
||||
// HACK
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
if (mem.read_word(0x5b354) == 0xafd0) // wrlshubt - skip check (EEPROM?)
|
||||
mem.write_word(0x5b354, 0xB403);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
READ16_MEMBER(jak_s500_game_state::porta_r)
|
||||
{
|
||||
uint16_t data = m_io[0]->read();
|
||||
logerror("%s: Port A Read: %04x\n", machine().describe_context(), data);
|
||||
|
||||
//address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
//if (mem.read_word(0x22b408) == 0x4846)
|
||||
// mem.write_word(0x22b408, 0x4840); // jak_s500 force service mode
|
||||
|
||||
//if (mem.read_word(0x236271) == 0x4846)
|
||||
// mem.write_word(0x236271, 0x4840); // jak_totm force service mode
|
||||
|
||||
//if (mem.read_word(0x22D6F7) == 0x4846)
|
||||
// mem.write_word(0x22D6F7, 0x4840); // jak_pf force service mode
|
||||
|
||||
//if (mem.read_word(0x23E295) == 0x4846)
|
||||
// mem.write_word(0x23E295, 0x4840); // jak_smwm force service mode
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
READ16_MEMBER(jak_s500_game_state::portb_r)
|
||||
{
|
||||
uint16_t data = m_io[1]->read();
|
||||
logerror("%s: Port B Read: %04x\n", machine().describe_context(), data);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
void jak_s500_game_state::machine_reset()
|
||||
{
|
||||
cs_callback(0x00, 0x00, 0x00, 0x00, 0x00);
|
||||
m_maincpu->set_cs_space(m_memory->get_program());
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
|
||||
m_maincpu->set_paldisplaybank_high_hack(0);
|
||||
m_maincpu->set_alt_tile_addressing_hack(1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ROM_START( paccon )
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("pacmanconnect.bin", 0x000000, 0x400000, CRC(8567cdc7) SHA1(cef4e003142e479169e4438ab33558436ee9ee68) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
ROM_START(lazertag)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x1000000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("lazertag.bin", 0x000000, 0x1000000, CRC(8bf16a28) SHA1(90d05e1876332324b074e4845e28b90fcb007122) )
|
||||
ROM_END
|
||||
|
||||
ROM_START(jak_s500)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("spbwheel.bin", 0x000000, 0x800000, CRC(6ba1d335) SHA1(1bb3e4d02c7b35dd4d336971c6a9f82071cc6ce1) )
|
||||
ROM_END
|
||||
|
||||
ROM_START(jak_smwm)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("spidersense.bin", 0x000000, 0x800000, CRC(e0676d0e) SHA1(01c01852fe4aea799c09ebbb6870b2f6e92085c4) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START(jak_pf)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("phineas.bin", 0x000000, 0x800000, CRC(bb18f70d) SHA1(4e3c204e44efe9186809404521ebeac348c45fac))
|
||||
ROM_END
|
||||
|
||||
ROM_START(jak_prft)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("powerrangerssword.bin", 0x000000, 0x800000, CRC(77bc8aea) SHA1(a2efaa718d8ecece46cebb9f0f13a8fa10fc2826) )
|
||||
ROM_END
|
||||
|
||||
ROM_START(jak_tink)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("disneyfairies.bin", 0x000000, 0x800000, CRC(566dae87) SHA1(3abe1b7d578ed9255101bfec0e4bb4d6dc0aa0b7) )
|
||||
ROM_END
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
ROM_START(jak_totm)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("toysonthemove.bin", 0x000000, 0x800000, CRC(d08fb72a) SHA1(1fea98542ef7c65eef31afb70fd50952b4cef1c1) )
|
||||
ROM_END
|
||||
|
||||
ROM_START(jak_ths)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x800000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("tripleheadersports.bin", 0x000000, 0x800000, CRC(2b5f8734) SHA1(57bccaa70f0efbf3da3259b74f3082d1a14c9908) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START(wrlshunt)
|
||||
//ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 ) // not on this model? (or at least not this size, as CS base is different)
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP )
|
||||
|
||||
ROM_REGION(0x8000000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP("wireless.bin", 0x0000, 0x8000000, CRC(a6ecc20e) SHA1(3645f23ba2bb218e92d4560a8ae29dddbaabf796))
|
||||
ROM_END
|
||||
|
||||
/*
|
||||
Wireless Hunting Video Game System
|
||||
(info provided with dump)
|
||||
|
||||
System: Wireless Hunting Video Game System
|
||||
Publisher: Hamy / Kids Station Toys Inc
|
||||
Year: 2011
|
||||
ROM: FDI MSP55LV100G
|
||||
RAM: Micron Technology 48LC8M16A2
|
||||
|
||||
Games:
|
||||
|
||||
Secret Mission
|
||||
Predator
|
||||
Delta Force
|
||||
Toy Land
|
||||
Dream Forest
|
||||
Trophy Season
|
||||
Freedom Force
|
||||
Be Careful
|
||||
Net Power
|
||||
Open Training
|
||||
Super Archer
|
||||
Ultimate Frisbee
|
||||
UFO Shooting
|
||||
Happy Darts
|
||||
Balloon Shoot
|
||||
Avatair
|
||||
Angry Pirate
|
||||
Penguin War
|
||||
Ghost Shooter
|
||||
Duck Hunt
|
||||
|
||||
|
||||
ROM Board:
|
||||
|
||||
Package: SO44
|
||||
Spacing: 1.27 mm
|
||||
Width: 16.14 mm
|
||||
Length: 27.78 mm
|
||||
Voltage: 3V
|
||||
Pinout:
|
||||
|
||||
A25 A24
|
||||
| |
|
||||
+--------------------------+
|
||||
A21 --|== # # `.__.' ==|-- A20
|
||||
A18 --|== ==|-- A19
|
||||
A17 --|== ==|-- A8
|
||||
A7 --|== ==|-- A9
|
||||
A6 --|== o ==|-- A10
|
||||
A5 --|== +----------------+ ==|-- A11
|
||||
A4 --|== | | ==|-- A12
|
||||
A3 --|== | MSP55LV100G | ==|-- A13
|
||||
A2 --|== | 0834 M02H | ==|-- A14
|
||||
A1 --|== | JAPAN | ==|-- A15
|
||||
A0 --|== | | ==|-- A16
|
||||
#CE --|== | | ==|-- A23
|
||||
GND --|== | | ==|-- A22
|
||||
#OE --|== | | ==|-- Q15
|
||||
Q0 --|== | | ==|-- Q7
|
||||
Q8 --|== | | ==|-- Q14
|
||||
Q1 --|== +----------------+ ==|-- Q6
|
||||
Q9 --|== ==|-- Q13
|
||||
Q2 --|== M55L100G ==|-- Q5
|
||||
Q10 --|== ==|-- Q12
|
||||
Q3 --|== ==|-- Q4
|
||||
Q11 --|== ==|-- VCC
|
||||
+--------------------------+
|
||||
|
||||
|
||||
The only interesting string in this ROM is SPF2ALP,
|
||||
which is also found in the Wireless Air 60 ROM.
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// also sold as "Pac-Man Connect & Play 35th Anniversary" (same ROM?)
|
||||
CONS(2012, paccon, 0, 0, paccon, paccon, jak_s500_game_state, init_wrlshunt, "Bandai", "Pac-Man Connect & Play (Feb 14 2012 10:46:23)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
CONS(2008, lazertag, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "Tiger Electronics", "Lazer Tag Video Game Module", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
CONS(2009, jak_s500, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "SpongeBob SquarePants Bikini Bottom 500 (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2009, jak_smwm, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Spider-Man Web Master (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2010, jak_pf, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Phineas and Ferb: Best Game Ever! (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // build date is 2009, but onscreen display is 2010
|
||||
CONS(200?, jak_totm, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / HotGen Ltd", "Toy Story - Toys on the Move (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND) // Toys on the Move has ISSI 404A
|
||||
CONS(2009, jak_prft, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Power Rangers Force In Time (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2009, jak_tink, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_wrlshunt, "JAKKS Pacific Inc / Santa Cruz Games", "Tinker Bell and the Lost Treasure (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
CONS(2009, jak_ths, 0, 0, wrlshunt, jak_s500, jak_s500_game_state, init_ths, "JAKKS Pacific Inc / Super Happy Fun Fun", "Triple Header Sports (JAKKS Pacific TV Motion Game)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
||||
|
||||
CONS(2011, wrlshunt, 0, 0, wrlshunt, wrlshunt, wrlshunt_game_state, init_wrlshunt, "Hamy / Kids Station Toys Inc", "Wireless Hunting Video Game System", MACHINE_NO_SOUND | MACHINE_NOT_WORKING)
|
||||
|
185
src/mame/drivers/generalplus_gpl16250_spi.cpp
Normal file
185
src/mame/drivers/generalplus_gpl16250_spi.cpp
Normal file
@ -0,0 +1,185 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
/*
|
||||
GPL16250 / GPAC800 / GMC384 / GCM420 related support
|
||||
|
||||
GPL16250 is the GeneralPlus / SunPlus part number
|
||||
GPAC800 is the JAKKS Pacific codename
|
||||
GMC384 / GCM420 is what is printed on the die
|
||||
|
||||
----
|
||||
|
||||
GPL16250 games using SPI Flash + RAM configuration
|
||||
*/
|
||||
|
||||
#include "emu.h"
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
|
||||
|
||||
class generalplus_gpspispi_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpspispi_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpspispi(machine_config &config);
|
||||
|
||||
void init_spi();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
class generalplus_gpspispi_bkrankp_game_state : public generalplus_gpspispi_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpspispi_bkrankp_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
generalplus_gpspispi_game_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpspispi_bkrankp(machine_config &config);
|
||||
|
||||
protected:
|
||||
required_device<generic_slot_device> m_cart;
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
void generalplus_gpspispi_game_state::machine_start()
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpspispi_game_state::machine_reset()
|
||||
{
|
||||
m_maincpu->reset(); // reset CPU so vector gets read etc.
|
||||
|
||||
m_maincpu->set_paldisplaybank_high_hack(0);
|
||||
m_maincpu->set_alt_tile_addressing_hack(1);
|
||||
}
|
||||
|
||||
static INPUT_PORTS_START( gcm394 )
|
||||
PORT_START("IN0")
|
||||
PORT_START("IN1")
|
||||
PORT_START("IN2")
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
void generalplus_gpspispi_game_state::generalplus_gpspispi(machine_config &config)
|
||||
{
|
||||
GP_SPISPI(config, m_maincpu, 96000000/2, m_screen);
|
||||
m_maincpu->porta_in().set(FUNC(generalplus_gpspispi_game_state::porta_r));
|
||||
m_maincpu->portb_in().set(FUNC(generalplus_gpspispi_game_state::portb_r));
|
||||
m_maincpu->portc_in().set(FUNC(generalplus_gpspispi_game_state::portc_r));
|
||||
m_maincpu->porta_out().set(FUNC(generalplus_gpspispi_game_state::porta_w));
|
||||
m_maincpu->space_read_callback().set(FUNC(generalplus_gpspispi_game_state::read_external_space));
|
||||
m_maincpu->space_write_callback().set(FUNC(generalplus_gpspispi_game_state::write_external_space));
|
||||
m_maincpu->set_irq_acknowledge_callback(m_maincpu, FUNC(sunplus_gcm394_base_device::irq_vector_cb));
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "lspeaker", 0.5);
|
||||
m_maincpu->add_route(ALL_OUTPUTS, "rspeaker", 0.5);
|
||||
m_maincpu->set_bootmode(0); // boot from internal ROM (SPI bootstrap)
|
||||
m_maincpu->set_cs_config_callback(FUNC(gcm394_game_state::cs_callback));
|
||||
|
||||
FULL_MEMORY(config, m_memory).set_map(&generalplus_gpspispi_game_state::cs_map_base);
|
||||
|
||||
SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
|
||||
m_screen->set_refresh_hz(60);
|
||||
m_screen->set_size(320*2, 262*2);
|
||||
m_screen->set_visarea(0, (320*2)-1, 0, (240*2)-1);
|
||||
m_screen->set_screen_update("maincpu", FUNC(sunplus_gcm394_device::screen_update));
|
||||
m_screen->screen_vblank().set(m_maincpu, FUNC(sunplus_gcm394_device::vblank));
|
||||
|
||||
SPEAKER(config, "lspeaker").front_left();
|
||||
SPEAKER(config, "rspeaker").front_right();
|
||||
}
|
||||
|
||||
DEVICE_IMAGE_LOAD_MEMBER(generalplus_gpspispi_bkrankp_game_state::cart_load)
|
||||
{
|
||||
uint32_t size = m_cart->common_get_size("rom");
|
||||
|
||||
m_cart->rom_alloc(size, GENERIC_ROM16_WIDTH, ENDIANNESS_LITTLE);
|
||||
m_cart->common_load_rom(m_cart->get_rom_base(), size, "rom");
|
||||
|
||||
return image_init_result::PASS;
|
||||
}
|
||||
|
||||
void generalplus_gpspispi_bkrankp_game_state::generalplus_gpspispi_bkrankp(machine_config &config)
|
||||
{
|
||||
generalplus_gpspispi_game_state::generalplus_gpspispi(config);
|
||||
|
||||
GENERIC_CARTSLOT(config, m_cart, generic_plain_slot, "bkrankp_cart");
|
||||
m_cart->set_width(GENERIC_ROM16_WIDTH);
|
||||
m_cart->set_device_load(FUNC(generalplus_gpspispi_bkrankp_game_state::cart_load));
|
||||
|
||||
SOFTWARE_LIST(config, "cart_list").set_original("bkrankp_cart");
|
||||
}
|
||||
|
||||
|
||||
|
||||
ROM_START( bkrankp )
|
||||
ROM_REGION16_BE( 0x40000, "maincpu:internal", ROMREGION_ERASE00 )
|
||||
//ROM_LOAD16_WORD_SWAP( "internal.rom", 0x00000, 0x40000, NO_DUMP ) // used as bootstrap only
|
||||
|
||||
ROM_REGION(0x400000, "maincpu", ROMREGION_ERASE00)
|
||||
ROM_LOAD16_WORD_SWAP( "unit_mx25l3206e_c22016.bin", 0x0000, 0x400000, CRC(7efad116) SHA1(427d707e97586ae6ab5fe08f29ca450ddc7ad36e) )
|
||||
ROM_END
|
||||
|
||||
|
||||
void generalplus_gpspispi_game_state::init_spi()
|
||||
{
|
||||
int vectorbase = 0x2fe0;
|
||||
uint8_t* spirom = memregion("maincpu")->base();
|
||||
|
||||
address_space& mem = m_maincpu->space(AS_PROGRAM);
|
||||
|
||||
/* Offset(h) 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
|
||||
|
||||
00000000 50 47 70 73 73 69 69 70 70 73 44 00 44 3F 44 00 PGpssiipps
|
||||
00000010 -- -- -- -- -- bb -- -- -- -- -- -- -- -- -- --
|
||||
^^ copy dest, just like with nand type
|
||||
|
||||
bb = where to copy first block
|
||||
|
||||
The header is GPspispi (byteswapped) then some params
|
||||
one of the params appears to be for the initial code copy operation done
|
||||
by the bootstrap
|
||||
*/
|
||||
|
||||
// probably more bytes are used
|
||||
int dest = spirom[0x15] << 8;
|
||||
|
||||
// copy a block of code from the NAND to RAM
|
||||
for (int i = 0; i < 0x2000; i++)
|
||||
{
|
||||
uint16_t word = spirom[(i * 2) + 0] | (spirom[(i * 2) + 1] << 8);
|
||||
|
||||
mem.write_word(dest + i, word);
|
||||
}
|
||||
|
||||
// these vectors must either directly point to RAM, or at least redirect there after some code
|
||||
uint16_t* internal = (uint16_t*)memregion("maincpu:internal")->base();
|
||||
internal[0x7ff5] = vectorbase + 0x0a;
|
||||
internal[0x7ff6] = vectorbase + 0x0c;
|
||||
internal[0x7ff7] = dest + 0x20; // point boot vector at code in RAM (probably in reality points to internal code that copies the first block)
|
||||
internal[0x7ff8] = vectorbase + 0x10;
|
||||
internal[0x7ff9] = vectorbase + 0x12;
|
||||
internal[0x7ffa] = vectorbase + 0x14;
|
||||
internal[0x7ffb] = vectorbase + 0x16;
|
||||
internal[0x7ffc] = vectorbase + 0x18;
|
||||
internal[0x7ffd] = vectorbase + 0x1a;
|
||||
internal[0x7ffe] = vectorbase + 0x1c;
|
||||
internal[0x7fff] = vectorbase + 0x1e;
|
||||
}
|
||||
|
||||
|
||||
CONS(200?, bkrankp, 0, 0, generalplus_gpspispi_bkrankp, gcm394, generalplus_gpspispi_bkrankp_game_state , init_spi, "Bandai", "Karaoke Ranking Party (Japan)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND)
|
@ -110,8 +110,10 @@ void magiceyes_vr3520f_game_state::leapfrog_didj(machine_config &config)
|
||||
}
|
||||
|
||||
ROM_START( didj )
|
||||
ROM_REGION32_BE( 0x200000, "bios", 0 ) // external BIOS, undumped
|
||||
ROM_LOAD16_WORD_SWAP( "didjbios.bin", 0x000000, 0x200000, NO_DUMP )
|
||||
ROM_REGION32_BE( 0x10800000, "bios", 0 ) // external NAND
|
||||
ROM_LOAD16_WORD_SWAP( "didj_29f2g08aac_2cda.bin", 0x000000, 0x10800000, CRC(3df8c3ee) SHA1(6dc4044be10da48b6dd37e40f8a112fc4314c87d) )
|
||||
|
||||
// is there an internal bootloader beyond copying code from NAND into RAM?
|
||||
ROM_END
|
||||
|
||||
|
||||
|
@ -68,6 +68,8 @@ public:
|
||||
|
||||
void init_oplayer();
|
||||
|
||||
void init_m505neo();
|
||||
|
||||
|
||||
protected:
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
@ -777,7 +779,14 @@ ROM_START( dnv200fs )
|
||||
ROM_LOAD16_WORD_SWAP( "famsport200in1.u2", 0x0000000, 0x8000000, CRC(f59221e2) SHA1(d532cf5a80ffe9d527efcccbf380a7a860f0fbd9) )
|
||||
ROM_END
|
||||
|
||||
|
||||
ROM_START( m505neo )
|
||||
ROM_REGION( 0x4000000, "maincpu", ROMREGION_ERASE00 )
|
||||
// 1st and 2nd half are identical apart from one bit. Likely used double capacity ROM and only wired up half of it because ROM had a problem?
|
||||
// the data segment in question is identical to one in oplayer and suggests the first half of the ROM here is correct with the bit being set
|
||||
// incorrectly in the 2nd half of the ROM.
|
||||
ROM_LOAD16_WORD_SWAP( "m505arcadeneo.u2", 0x0000000, 0x4000000, CRC(b72bdbe1) SHA1(263b60148980ac1f82546e2449b1dd938b7b827c) )
|
||||
ROM_IGNORE(0x4000000)
|
||||
ROM_END
|
||||
|
||||
|
||||
void oplayer_100in1_state::init_oplayer()
|
||||
@ -795,6 +804,54 @@ void oplayer_100in1_state::init_oplayer()
|
||||
rom[0xc351e + (0x3000000 / 2)] = 0xf165;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
oplayer m505
|
||||
---------------
|
||||
0001 | 0001 0
|
||||
0002 | 0100 8
|
||||
0004 | 0002 1
|
||||
0008 | 0200 9
|
||||
0010 | 0004 2
|
||||
0020 | 0400 10
|
||||
0040 | 0008 3
|
||||
0080 | 0800 11
|
||||
|
||||
|
||||
0100 | 8000 15
|
||||
0200 | 0080 7
|
||||
0400 | 4000 14
|
||||
0800 | 0040 6
|
||||
1000 | 2000 13
|
||||
2000 | 0020 5
|
||||
4000 | 1000 12
|
||||
8000 | 0010 4
|
||||
|
||||
*/
|
||||
|
||||
void oplayer_100in1_state::init_m505neo()
|
||||
{
|
||||
uint16_t *ROM = (uint16_t*)memregion("maincpu")->base();
|
||||
int size = memregion("maincpu")->bytes();
|
||||
|
||||
for (int i = 0; i < size / 2; i++)
|
||||
{
|
||||
ROM[i] = bitswap<16>(ROM[i],
|
||||
11, 3, 10, 2,
|
||||
9, 1, 8, 0,
|
||||
|
||||
4, 12, 5, 13,
|
||||
6, 14, 7, 15
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
// TODO: remove these hacks
|
||||
// port a checks when starting the system
|
||||
ROM[0x43c30 + (0x2000000 / 2)] = 0xf165; // boot
|
||||
}
|
||||
|
||||
|
||||
void denver_200in1_state::init_denver()
|
||||
{
|
||||
// TODO: remove these hacks
|
||||
@ -815,6 +872,9 @@ void denver_200in1_state::init_denver()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
// Box advertises this as '40 Games Included' but the cartridge, which was glued directly to the PCB, not removable, is a 41-in-1. Maybe some versions exist with a 40 game selection.
|
||||
CONS( 200?, zon32bit, 0, 0, zon32bit, zon32bit, zon32bit_state, empty_init, "Jungle Soft / Ultimate Products (HK) Ltd", "Zone 32-bit Gaming Console System (Family Sport 41-in-1)", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
// My Wico Deluxe was also available under the MiWi brand (exact model unknown, but it was a cart there instead of built in)
|
||||
@ -825,6 +885,8 @@ CONS( 200?, mywicodx, 0, 0, zon32bit, zon32bit, mywicodx_state, empty_init,
|
||||
// issues with 'low battery' always showing, but otherwise functional
|
||||
CONS( 200?, oplayer, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_oplayer, "OPlayer", "OPlayer Mobile Game Console (MGS03-white) (Family Sport 100-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
CONS( 2012, m505neo, 0, 0, zon32bit, oplayer, oplayer_100in1_state, init_m505neo, "Millennium 2000 GmbH", "Millennium M505 Arcade Neo Portable Spielkonsole (Family Sport 100-in-1)", MACHINE_IMPERFECT_SOUND | MACHINE_IMPERFECT_GRAPHICS )
|
||||
|
||||
/*
|
||||
DENVER(r)
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
114
src/mame/includes/generalplus_gpl16250.h
Normal file
114
src/mame/includes/generalplus_gpl16250.h
Normal file
@ -0,0 +1,114 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
#ifndef MAME_INCLUDES_SUNPLUS_GCM394_H
|
||||
#define MAME_INCLUDES_SUNPLUS_GCM394_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "machine/generalplus_gpl16250soc.h"
|
||||
#include "machine/generalplus_gpl16250.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
|
||||
class gcm394_game_state : public driver_device
|
||||
{
|
||||
public:
|
||||
gcm394_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_screen(*this, "screen"),
|
||||
m_io(*this, "IN%u", 0U),
|
||||
m_romregion(*this, "maincpu"),
|
||||
m_memory(*this, "memory")
|
||||
{
|
||||
}
|
||||
|
||||
void base(machine_config &config);
|
||||
|
||||
void cs_map_base(address_map &map);
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs2_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs2_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs3_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs3_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs4_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs4_w);
|
||||
|
||||
void cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
|
||||
required_device<sunplus_gcm394_base_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
|
||||
required_ioport_array<3> m_io;
|
||||
|
||||
|
||||
optional_region_ptr<uint16_t> m_romregion;
|
||||
required_device<full_memory_device> m_memory;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r);
|
||||
virtual DECLARE_READ16_MEMBER(portb_r);
|
||||
virtual DECLARE_READ16_MEMBER(portc_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w);
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(read_external_space);
|
||||
virtual DECLARE_WRITE16_MEMBER(write_external_space);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
class tkmag220_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void tkmag220(machine_config &config);
|
||||
|
||||
protected:
|
||||
|
||||
/*
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override
|
||||
{
|
||||
return machine().rand();
|
||||
}
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(portb_r) override
|
||||
{
|
||||
return machine().rand();
|
||||
}
|
||||
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w) override
|
||||
{
|
||||
}
|
||||
*/
|
||||
|
||||
private:
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override
|
||||
{
|
||||
return m_romregion[offset & 0x3ffffff];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
89
src/mame/includes/generalplus_gpl16250_nand.h
Normal file
89
src/mame/includes/generalplus_gpl16250_nand.h
Normal file
@ -0,0 +1,89 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
#ifndef MAME_INCLUDES_GENERALPLUS_GPL16250_NAND_H
|
||||
#define MAME_INCLUDES_GENERALPLUS_GPL16250_NAND_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
#include "machine/generalplus_gpl16250soc.h"
|
||||
#include "machine/generalplus_gpl16250.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
class generalplus_gpac800_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag),
|
||||
m_nandregion(*this, "nandrom"),
|
||||
m_sdram_kwords(0x400000), // 0x400000 words (0x800000 bytes)
|
||||
m_initial_copy_words(0x2000)
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpac800(machine_config &config);
|
||||
|
||||
void nand_init210();
|
||||
void nand_init210_32mb();
|
||||
void nand_init840();
|
||||
void nand_wlsair60();
|
||||
void nand_vbaby();
|
||||
void nand_tsm();
|
||||
void nand_beambox();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_READ8_MEMBER(read_nand);
|
||||
std::vector<uint16_t> m_sdram;
|
||||
std::vector<uint16_t> m_sdram2;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
|
||||
|
||||
private:
|
||||
optional_region_ptr<uint8_t> m_nandregion;
|
||||
|
||||
void nand_create_stripped_region();
|
||||
|
||||
std::vector<uint8_t> m_strippedrom;
|
||||
int m_strippedsize;
|
||||
int m_size;
|
||||
int m_nandblocksize;
|
||||
int m_nandblocksize_stripped;
|
||||
|
||||
int m_sdram_kwords;
|
||||
int m_initial_copy_words;
|
||||
int m_vectorbase;
|
||||
};
|
||||
|
||||
|
||||
class generalplus_gpac800_vbaby_game_state : public generalplus_gpac800_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpac800_vbaby_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
generalplus_gpac800_game_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpac800_vbaby(machine_config &config);
|
||||
|
||||
protected:
|
||||
required_device<generic_slot_device> m_cart;
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_GENERALPLUS_GPL16250_NAND_H
|
||||
|
74
src/mame/includes/generalplus_gpl16250_romram.h
Normal file
74
src/mame/includes/generalplus_gpl16250_romram.h
Normal file
@ -0,0 +1,74 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
#ifndef MAME_INCLUDES_GENERALPLUS_GPL16250_ROMRAM_H
|
||||
#define MAME_INCLUDES_GENERALPLUS_GPL16250_ROMRAM_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "includes/generalplus_gpl16250.h"
|
||||
#include "machine/generalplus_gpl16250soc.h"
|
||||
#include "machine/generalplus_gpl16250.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
class wrlshunt_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
wrlshunt_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void wrlshunt(machine_config &config);
|
||||
void paccon(machine_config &config);
|
||||
|
||||
void init_wrlshunt();
|
||||
void init_ths();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
std::vector<uint16_t> m_sdram;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
//required_shared_ptr<u16> m_mainram;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
|
||||
|
||||
int m_romwords_mask;
|
||||
};
|
||||
|
||||
class jak_s500_game_state : public wrlshunt_game_state
|
||||
{
|
||||
public:
|
||||
jak_s500_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
wrlshunt_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
//virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
#endif // MAME_INCLUDES_GENERALPLUS_GPL16250_ROMRAM_H
|
||||
|
@ -1,309 +0,0 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
#ifndef MAME_INCLUDES_SUNPLUS_GCM394_H
|
||||
#define MAME_INCLUDES_SUNPLUS_GCM394_H
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "machine/sunplus_gcm394.h"
|
||||
#include "bus/generic/slot.h"
|
||||
#include "bus/generic/carts.h"
|
||||
|
||||
#include "screen.h"
|
||||
#include "speaker.h"
|
||||
|
||||
|
||||
class full_memory_device :
|
||||
public device_t,
|
||||
public device_memory_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
full_memory_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
// configuration helpers
|
||||
template <typename... T> full_memory_device& set_map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
|
||||
|
||||
template <typename... T> full_memory_device& map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
|
||||
|
||||
address_space* get_program() { return m_program; }
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_config_complete() override;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual space_config_vector memory_space_config() const override;
|
||||
|
||||
|
||||
private:
|
||||
// internal state
|
||||
address_space_config m_program_config;
|
||||
address_space *m_program;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(FULL_MEMORY, full_memory_device)
|
||||
|
||||
|
||||
|
||||
class gcm394_game_state : public driver_device
|
||||
{
|
||||
public:
|
||||
gcm394_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu"),
|
||||
m_screen(*this, "screen"),
|
||||
m_io(*this, "IN%u", 0U),
|
||||
m_romregion(*this, "maincpu"),
|
||||
m_memory(*this, "memory")
|
||||
{
|
||||
}
|
||||
|
||||
void base(machine_config &config);
|
||||
|
||||
void cs_map_base(address_map &map);
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs2_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs2_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs3_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs3_w);
|
||||
virtual DECLARE_READ16_MEMBER(cs4_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(cs4_w);
|
||||
|
||||
void cs_callback(uint16_t cs0, uint16_t cs1, uint16_t cs2, uint16_t cs3, uint16_t cs4);
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
|
||||
required_device<sunplus_gcm394_base_device> m_maincpu;
|
||||
required_device<screen_device> m_screen;
|
||||
|
||||
|
||||
required_ioport_array<3> m_io;
|
||||
|
||||
|
||||
optional_region_ptr<uint16_t> m_romregion;
|
||||
required_device<full_memory_device> m_memory;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r);
|
||||
virtual DECLARE_READ16_MEMBER(portb_r);
|
||||
virtual DECLARE_READ16_MEMBER(portc_r);
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w);
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(read_external_space);
|
||||
virtual DECLARE_WRITE16_MEMBER(write_external_space);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
class generalplus_gpac800_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpac800_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag),
|
||||
m_nandregion(*this, "nandrom"),
|
||||
m_sdram_kwords(0x400000), // 0x400000 words (0x800000 bytes)
|
||||
m_initial_copy_words(0x2000)
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpac800(machine_config &config);
|
||||
|
||||
void nand_init210();
|
||||
void nand_init210_32mb();
|
||||
void nand_init840();
|
||||
void nand_wlsair60();
|
||||
void nand_vbaby();
|
||||
void nand_tsm();
|
||||
void nand_beambox();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
DECLARE_READ8_MEMBER(read_nand);
|
||||
std::vector<uint16_t> m_sdram;
|
||||
std::vector<uint16_t> m_sdram2;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
|
||||
|
||||
private:
|
||||
optional_region_ptr<uint8_t> m_nandregion;
|
||||
|
||||
void nand_create_stripped_region();
|
||||
|
||||
std::vector<uint8_t> m_strippedrom;
|
||||
int m_strippedsize;
|
||||
int m_size;
|
||||
int m_nandblocksize;
|
||||
int m_nandblocksize_stripped;
|
||||
|
||||
int m_sdram_kwords;
|
||||
int m_initial_copy_words;
|
||||
int m_vectorbase;
|
||||
};
|
||||
|
||||
|
||||
class generalplus_gpac800_vbaby_game_state : public generalplus_gpac800_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpac800_vbaby_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
generalplus_gpac800_game_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpac800_vbaby(machine_config &config);
|
||||
|
||||
protected:
|
||||
required_device<generic_slot_device> m_cart;
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
class generalplus_gpspispi_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpspispi_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpspispi(machine_config &config);
|
||||
|
||||
void init_spi();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
class generalplus_gpspispi_bkrankp_game_state : public generalplus_gpspispi_game_state
|
||||
{
|
||||
public:
|
||||
generalplus_gpspispi_bkrankp_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
generalplus_gpspispi_game_state(mconfig, type, tag),
|
||||
m_cart(*this, "cartslot")
|
||||
{
|
||||
}
|
||||
|
||||
void generalplus_gpspispi_bkrankp(machine_config &config);
|
||||
|
||||
protected:
|
||||
required_device<generic_slot_device> m_cart;
|
||||
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
|
||||
class tkmag220_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
tkmag220_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void tkmag220(machine_config &config);
|
||||
|
||||
protected:
|
||||
|
||||
/*
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override
|
||||
{
|
||||
return machine().rand();
|
||||
}
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(portb_r) override
|
||||
{
|
||||
return machine().rand();
|
||||
}
|
||||
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w) override
|
||||
{
|
||||
}
|
||||
*/
|
||||
|
||||
private:
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override
|
||||
{
|
||||
return m_romregion[offset & 0x3ffffff];
|
||||
}
|
||||
};
|
||||
|
||||
class wrlshunt_game_state : public gcm394_game_state
|
||||
{
|
||||
public:
|
||||
wrlshunt_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
gcm394_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
void wrlshunt(machine_config &config);
|
||||
void paccon(machine_config &config);
|
||||
|
||||
void init_wrlshunt();
|
||||
void init_ths();
|
||||
|
||||
protected:
|
||||
virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
std::vector<uint16_t> m_sdram;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(porta_w) override;
|
||||
|
||||
private:
|
||||
|
||||
|
||||
//required_shared_ptr<u16> m_mainram;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(cs0_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs0_w) override;
|
||||
virtual DECLARE_READ16_MEMBER(cs1_r) override;
|
||||
virtual DECLARE_WRITE16_MEMBER(cs1_w) override;
|
||||
|
||||
int m_romwords_mask;
|
||||
};
|
||||
|
||||
class jak_s500_game_state : public wrlshunt_game_state
|
||||
{
|
||||
public:
|
||||
jak_s500_game_state(const machine_config& mconfig, device_type type, const char* tag) :
|
||||
wrlshunt_game_state(mconfig, type, tag)
|
||||
{
|
||||
}
|
||||
|
||||
protected:
|
||||
//virtual void machine_start() override;
|
||||
virtual void machine_reset() override;
|
||||
|
||||
virtual DECLARE_READ16_MEMBER(porta_r) override;
|
||||
virtual DECLARE_READ16_MEMBER(portb_r) override;
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
#endif
|
33
src/mame/machine/generalplus_gpl16250.cpp
Normal file
33
src/mame/machine/generalplus_gpl16250.cpp
Normal file
@ -0,0 +1,33 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
|
||||
#include "generalplus_gpl16250.h"
|
||||
|
||||
// device type definition
|
||||
DEFINE_DEVICE_TYPE(FULL_MEMORY, full_memory_device, "full_memory", "SunPlus Full CS Memory Map")
|
||||
|
||||
full_memory_device::full_memory_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) :
|
||||
device_t(mconfig, FULL_MEMORY, tag, owner, clock),
|
||||
device_memory_interface(mconfig, *this),
|
||||
m_program(nullptr)
|
||||
{
|
||||
}
|
||||
|
||||
device_memory_interface::space_config_vector full_memory_device::memory_space_config() const
|
||||
{
|
||||
return space_config_vector {
|
||||
std::make_pair(AS_PROGRAM, &m_program_config)
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
void full_memory_device::device_config_complete()
|
||||
{
|
||||
m_program_config = address_space_config( "program", ENDIANNESS_BIG, 16, 32, -1 );
|
||||
}
|
||||
|
||||
void full_memory_device::device_start()
|
||||
{
|
||||
m_program = &space(AS_PROGRAM);
|
||||
}
|
||||
|
42
src/mame/machine/generalplus_gpl16250.h
Normal file
42
src/mame/machine/generalplus_gpl16250.h
Normal file
@ -0,0 +1,42 @@
|
||||
// license:BSD-3-Clause
|
||||
// copyright-holders:David Haywood
|
||||
|
||||
#ifndef MAME_MACHINE_GENERALPLUS_GPL16250_H
|
||||
#define MAME_MACHINE_GENERALPLUS_GPL16250_H
|
||||
|
||||
#pragma once
|
||||
|
||||
class full_memory_device :
|
||||
public device_t,
|
||||
public device_memory_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
full_memory_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);
|
||||
|
||||
// configuration helpers
|
||||
template <typename... T> full_memory_device& set_map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
|
||||
|
||||
template <typename... T> full_memory_device& map(T &&... args) { set_addrmap(0, std::forward<T>(args)...); return *this; }
|
||||
|
||||
address_space* get_program() { return m_program; }
|
||||
|
||||
protected:
|
||||
virtual void device_start() override;
|
||||
virtual void device_config_complete() override;
|
||||
|
||||
// device_memory_interface overrides
|
||||
virtual space_config_vector memory_space_config() const override;
|
||||
|
||||
|
||||
private:
|
||||
// internal state
|
||||
address_space_config m_program_config;
|
||||
address_space *m_program;
|
||||
};
|
||||
|
||||
|
||||
// device type definition
|
||||
DECLARE_DEVICE_TYPE(FULL_MEMORY, full_memory_device)
|
||||
|
||||
#endif // MAME_MACHINE_GENERALPLUS_GPL16250_H
|
@ -14672,6 +14672,48 @@ suprpokr // (c) 1986 Grayhound Electronics
|
||||
suprpokra // (c) 1986 Grayhound Electronics
|
||||
suprpokrb // (c) 1986 Grayhound Electronics
|
||||
|
||||
@source:generalplus_gpl16250_mobigo.cpp
|
||||
mobigo
|
||||
mobigos
|
||||
mobigo2
|
||||
|
||||
@source:generalplus_gpl16250_nand.cpp
|
||||
wlsair60 // Wireless Air 60
|
||||
jak_car2
|
||||
jak_gtg
|
||||
jak_sspop
|
||||
jak_hmhsm
|
||||
jak_umdf
|
||||
jak_duck
|
||||
jak_swc
|
||||
jak_wdzh
|
||||
jak_wdbg
|
||||
jak_tsm
|
||||
vbaby
|
||||
mgtfit
|
||||
beambox
|
||||
|
||||
@source:generalplus_gpl16250_rom.cpp
|
||||
smartfp // Smart Fit Park
|
||||
smartfps
|
||||
gormiti
|
||||
tkmag220 //
|
||||
|
||||
@source:generalplus_gpl16250_romram.cpp
|
||||
paccon
|
||||
lazertag
|
||||
jak_s500
|
||||
jak_smwm
|
||||
jak_pf
|
||||
jak_prft
|
||||
jak_tink
|
||||
jak_totm
|
||||
jak_ths
|
||||
wrlshunt // Wireless: Hunting Video Game System
|
||||
|
||||
@source:generalplus_gpl16250_spi.cpp
|
||||
bkrankp
|
||||
|
||||
@source:generalplus_gpl32612.cpp
|
||||
jak_swbstrik
|
||||
jak_tmnthp
|
||||
@ -37485,6 +37527,7 @@ mywicodx //
|
||||
zon32bit // Zone 32-bit
|
||||
oplayer
|
||||
dnv200fs
|
||||
m505neo
|
||||
|
||||
@source:spiders.cpp
|
||||
spiders // (c) 1981 Sigma Ent. Inc.
|
||||
@ -38061,42 +38104,6 @@ srangero // (c) 1988
|
||||
srangerw // (c) 1988 SunA (WDK License)
|
||||
starfigh // (c) 1990 SunA
|
||||
|
||||
@source:sunplus_unsp20soc.cpp
|
||||
paccon
|
||||
lazertag
|
||||
jak_s500
|
||||
jak_smwm
|
||||
jak_pf
|
||||
jak_prft
|
||||
jak_tink
|
||||
jak_totm
|
||||
jak_ths
|
||||
smartfp // Smart Fit Park
|
||||
smartfps
|
||||
gormiti
|
||||
wlsair60 // Wireless Air 60
|
||||
wrlshunt // Wireless: Hunting Video Game System
|
||||
tkmag220 //
|
||||
jak_car2
|
||||
jak_gtg
|
||||
jak_sspop
|
||||
jak_hmhsm
|
||||
jak_umdf
|
||||
jak_duck
|
||||
jak_swc
|
||||
jak_wdzh
|
||||
jak_wdbg
|
||||
jak_tsm
|
||||
vbaby
|
||||
mgtfit
|
||||
beambox
|
||||
bkrankp
|
||||
|
||||
@source:sunplus_unsp20soc_mobigo.cpp
|
||||
mobigo
|
||||
mobigos
|
||||
mobigo2
|
||||
|
||||
@source:supbtime.cpp
|
||||
chinatwn // MAK (c) 1991 Data East Corporation (Japan)
|
||||
supbtime // MAE (c) 1990 Data East Corporation (World)
|
||||
|
@ -320,6 +320,12 @@ gamemachine.cpp
|
||||
gamepock.cpp
|
||||
gb.cpp
|
||||
gba.cpp
|
||||
generalplus_gpl16250.cpp
|
||||
generalplus_gpl16250_mobigo.cpp
|
||||
generalplus_gpl16250_nand.cpp
|
||||
generalplus_gpl16250_rom.cpp
|
||||
generalplus_gpl16250_romram.cpp
|
||||
generalplus_gpl16250_spi.cpp
|
||||
generalplus_gpl32612.cpp
|
||||
geneve.cpp
|
||||
geniusiq.cpp
|
||||
@ -889,8 +895,6 @@ sun2.cpp
|
||||
sun3.cpp
|
||||
sun3x.cpp
|
||||
sun4.cpp
|
||||
sunplus_unsp20soc.cpp
|
||||
sunplus_unsp20soc_mobigo.cpp
|
||||
super6.cpp
|
||||
super80.cpp
|
||||
superga2.cpp
|
||||
|
Loading…
Reference in New Issue
Block a user