mirror of
https://github.com/holub/mame
synced 2025-07-03 17:08:39 +03:00
New systems marked not working
------------------------------ Happy Planet [Guru] New working clones ------------------ Mahjong Electron Base (parts 2 & 3, Japan set 3) [little0] - excellent/es8906.cpp: fleshed out a bit
This commit is contained in:
parent
b9a91cada5
commit
924601d45f
@ -5963,6 +5963,19 @@ ROM_START( mjelct3a )
|
|||||||
ROM_LOAD( "eb-02.rom", 0x100000, 0x080000, CRC(e1f1b431) SHA1(04a612aff4c30cb8ea741f228bfa7e4289acfee8) )
|
ROM_LOAD( "eb-02.rom", 0x100000, 0x080000, CRC(e1f1b431) SHA1(04a612aff4c30cb8ea741f228bfa7e4289acfee8) )
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
|
ROM_START( mjelct3b ) // code almost identical to mjelct3
|
||||||
|
ROM_REGION( 0x50000, "maincpu", 0 ) // Z80 Code
|
||||||
|
ROM_LOAD( "se-3010", 0x00000, 0x20000, CRC(bcdb5827) SHA1(f27987a0ef2146ba18f0243cb4409f48da772140) )
|
||||||
|
ROM_RELOAD( 0x10000, 0x08000 )
|
||||||
|
ROM_CONTINUE( 0x28000, 0x08000 )
|
||||||
|
ROM_CONTINUE( 0x20000, 0x08000 )
|
||||||
|
ROM_CONTINUE( 0x18000, 0x08000 )
|
||||||
|
|
||||||
|
ROM_REGION( 0x200000, "blitter", 0 ) // blitter data
|
||||||
|
ROM_LOAD( "eb-01.rom", 0x000000, 0x100000, CRC(e5c41448) SHA1(b8322e32b0cb3d771316c9c4f7be91de6e422a24) )
|
||||||
|
ROM_LOAD( "eb-02.rom", 0x100000, 0x080000, CRC(f5b354d1) SHA1(d3f35d090de9af3f50aae9ff11de731950256212) ) // different GFX ROM
|
||||||
|
ROM_END
|
||||||
|
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
Mahjong Electron Base (bootleg)
|
Mahjong Electron Base (bootleg)
|
||||||
|
|
||||||
@ -7252,6 +7265,7 @@ GAME( 1993, mjelctrn, 0, mjelctrn, mjelctrn, dynax_adpcm_state, init_
|
|||||||
GAME( 1989, mjembase, mjelctrn, mjembase, mjembase, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electromagnetic Base (Japan)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1989, mjembase, mjelctrn, mjembase, mjembase, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electromagnetic Base (Japan)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1990, mjelct3, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 1)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1990, mjelct3, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 1)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1990, mjelct3a, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3a, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 2)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1990, mjelct3a, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3a, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 2)", MACHINE_SUPPORTS_SAVE )
|
||||||
|
GAME( 1990, mjelct3b, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong Electron Base (parts 2 & 3, Japan set 3)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1993, mjelctrb, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 4, Japan bootleg)", MACHINE_SUPPORTS_SAVE )
|
GAME( 1993, mjelctrb, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 4, Japan bootleg)", MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1993, mjelct3bl, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 3, Japan bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
GAME( 1993, mjelct3bl, mjelctrn, mjelctrn, mjelct3, dynax_adpcm_state, init_mjelct3, ROT180, "bootleg", "Mahjong Electron Base (parts 2 & 3, Japan bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE )
|
||||||
GAME( 1990, majxtal7, 7jigen, neruton, majxtal7, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // reuses a subset of 7jigen assets
|
GAME( 1990, majxtal7, 7jigen, neruton, majxtal7, dynax_adpcm_state, init_mjelct3, ROT180, "Dynax", "Mahjong X-Tal 7 - Crystal Mahjong / Mahjong Diamond 7 (Japan)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_SUPPORTS_SAVE ) // reuses a subset of 7jigen assets
|
||||||
|
@ -501,20 +501,9 @@ static INPUT_PORTS_START( dblcrown )
|
|||||||
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
static const gfx_layout char_16x16_layout =
|
|
||||||
{
|
|
||||||
16,16,
|
|
||||||
RGN_FRAC(1,1),
|
|
||||||
4,
|
|
||||||
{ 0,1,2,3 },
|
|
||||||
{ 4,0, 12,8, 20,16, 28,24, 36,32, 44,40, 52,48, 60,56 },
|
|
||||||
{ STEP16(0,8*8) },
|
|
||||||
8*8*16
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_dblcrown )
|
static GFXDECODE_START( gfx_dblcrown )
|
||||||
GFXDECODE_ENTRY( "gfx1", 0, char_16x16_layout, 0, 0x10 )
|
GFXDECODE_ENTRY( "gfx1", 0, gfx_16x16x4_packed_lsb, 0, 0x10 )
|
||||||
GFXDECODE_RAM( nullptr, 0, gfx_8x8x4_packed_lsb, 0, 0x10 )
|
GFXDECODE_RAM( nullptr, 0, gfx_8x8x4_packed_lsb, 0, 0x10 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
@ -15,7 +15,14 @@ Excellent ES-8712 custom
|
|||||||
reset button (SW1)
|
reset button (SW1)
|
||||||
NE555P (near SW1)
|
NE555P (near SW1)
|
||||||
|
|
||||||
TODO: everything
|
TODO:
|
||||||
|
* colors
|
||||||
|
* complete inputs
|
||||||
|
* outputs
|
||||||
|
* use CRTC device for drawing routines
|
||||||
|
* sound? PCB pics show an unmarked 22 (?) pin chip with a 104K yellow resonator
|
||||||
|
* first half of the program ROM?
|
||||||
|
* why doesn't the game draw the title? pics show it should
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "emu.h"
|
||||||
@ -39,10 +46,12 @@ public:
|
|||||||
: driver_device(mconfig, type, tag),
|
: driver_device(mconfig, type, tag),
|
||||||
m_maincpu(*this, "maincpu"),
|
m_maincpu(*this, "maincpu"),
|
||||||
m_screen(*this, "screen"),
|
m_screen(*this, "screen"),
|
||||||
m_gfxdecode(*this, "gfxdecode")
|
m_gfxdecode(*this, "gfxdecode"),
|
||||||
|
m_tileram(*this, "tileram%u", 0U),
|
||||||
|
m_attrram(*this, "attrram%u", 0U)
|
||||||
{ }
|
{ }
|
||||||
|
|
||||||
void es8906(machine_config &config);
|
void es8906(machine_config &config) ATTR_COLD;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void video_start() override ATTR_COLD;
|
virtual void video_start() override ATTR_COLD;
|
||||||
@ -52,6 +61,14 @@ private:
|
|||||||
required_device<screen_device> m_screen;
|
required_device<screen_device> m_screen;
|
||||||
required_device<gfxdecode_device> m_gfxdecode;
|
required_device<gfxdecode_device> m_gfxdecode;
|
||||||
|
|
||||||
|
required_shared_ptr_array<uint8_t, 2> m_tileram;
|
||||||
|
required_shared_ptr_array<uint8_t, 2> m_attrram;
|
||||||
|
|
||||||
|
tilemap_t *m_tilemap[2]{};
|
||||||
|
|
||||||
|
template <uint8_t Which> void tileram_w(offs_t offset, uint8_t data);
|
||||||
|
template <uint8_t Which> void attrram_w(offs_t offset, uint8_t data);
|
||||||
|
template <uint8_t Which> TILE_GET_INFO_MEMBER(get_tile_info);
|
||||||
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
void program_map(address_map &map) ATTR_COLD;
|
void program_map(address_map &map) ATTR_COLD;
|
||||||
@ -60,10 +77,40 @@ private:
|
|||||||
|
|
||||||
void es8906_state::video_start()
|
void es8906_state::video_start()
|
||||||
{
|
{
|
||||||
|
m_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(es8906_state::get_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||||
|
m_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(es8906_state::get_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
|
||||||
|
|
||||||
|
m_tilemap[1]->set_transparent_pen(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <uint8_t Which>
|
||||||
|
TILE_GET_INFO_MEMBER(es8906_state::get_tile_info)
|
||||||
|
{
|
||||||
|
int const tile = m_tileram[Which][tile_index] | ((m_attrram[Which][tile_index] & 0x0f) << 8);
|
||||||
|
int const color = (m_attrram[Which][tile_index] & 0xf0) >> 4;
|
||||||
|
|
||||||
|
tileinfo.set(Which, tile, color, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <uint8_t Which>
|
||||||
|
void es8906_state::tileram_w(offs_t offset, uint8_t data)
|
||||||
|
{
|
||||||
|
m_tileram[Which][offset] = data;
|
||||||
|
m_tilemap[Which]->mark_tile_dirty(offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <uint8_t Which>
|
||||||
|
void es8906_state::attrram_w(offs_t offset, uint8_t data)
|
||||||
|
{
|
||||||
|
m_attrram[Which][offset] = data;
|
||||||
|
m_tilemap[Which]->mark_tile_dirty(offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t es8906_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
uint32_t es8906_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
{
|
{
|
||||||
|
m_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
m_tilemap[1]->draw(screen, bitmap, cliprect, 0, 0);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -75,23 +122,45 @@ void es8906_state::program_map(address_map &map)
|
|||||||
map(0x0000, 0x07ff).ram();
|
map(0x0000, 0x07ff).ram();
|
||||||
map(0x0800, 0x0800).w("crtc", FUNC(hd6845s_device::address_w));
|
map(0x0800, 0x0800).w("crtc", FUNC(hd6845s_device::address_w));
|
||||||
map(0x0801, 0x0801).rw("crtc", FUNC(hd6845s_device::register_r), FUNC(hd6845s_device::register_w));
|
map(0x0801, 0x0801).rw("crtc", FUNC(hd6845s_device::register_r), FUNC(hd6845s_device::register_w));
|
||||||
map(0x1000, 0x2fff).ram();
|
map(0x1000, 0x17ff).ram().w(FUNC(es8906_state::tileram_w<0>)).share(m_tileram[0]);
|
||||||
|
map(0x1800, 0x1fff).ram().w(FUNC(es8906_state::attrram_w<0>)).share(m_attrram[0]);
|
||||||
|
map(0x2000, 0x27ff).ram().w(FUNC(es8906_state::tileram_w<0>)).share(m_tileram[1]); // only 0-ed at start up?
|
||||||
|
map(0x2800, 0x2fff).ram().w(FUNC(es8906_state::attrram_w<0>)).share(m_attrram[1]); // only 0-ed at start up?
|
||||||
|
map(0x3000, 0x3000).portr("IN1");
|
||||||
|
map(0x3010, 0x3010).portr("IN2");
|
||||||
|
map(0x3020, 0x3020).portr("IN3");
|
||||||
|
map(0x3030, 0x3030).portr("IN4");
|
||||||
|
map(0x3040, 0x3040).portr("IN5");
|
||||||
|
map(0x3800, 0x3800).portr("SW2");
|
||||||
|
map(0x3801, 0x3801).portr("SW3");
|
||||||
|
map(0x3802, 0x3802).portr("SW4");
|
||||||
|
map(0x3803, 0x3803).portr("SW5");
|
||||||
map(0x8000, 0xffff).rom();
|
map(0x8000, 0xffff).rom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static INPUT_PORTS_START( dream9 )
|
static INPUT_PORTS_START( dream9 ) // TODO: inputs are very incomplete
|
||||||
PORT_START("IN0")
|
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
|
||||||
|
|
||||||
PORT_START("IN1")
|
PORT_START("IN1")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_LOW )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_BET )
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_NAME("Show Rules") // press Start to return to game
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
|
||||||
|
|
||||||
|
PORT_START("IN2")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_NAME("Bet 2") // ??
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN3")
|
||||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
@ -101,45 +170,133 @@ static INPUT_PORTS_START( dream9 )
|
|||||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN4")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN3 )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||||
|
|
||||||
|
PORT_START("IN5")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_MEMORY_RESET )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE1 )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
|
||||||
|
PORT_SERVICE_NO_TOGGLE(0x40, IP_ACTIVE_LOW)
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK )
|
||||||
|
|
||||||
|
// DIP definitions from test mode, not verified if the actually work in game (coinage seems not)
|
||||||
|
// defaults unknown, set to all off for now
|
||||||
PORT_START("SW2")
|
PORT_START("SW2")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1")
|
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Service_Mode ) ) PORT_DIPLOCATION("SW2:8")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2")
|
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3")
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4")
|
PORT_DIPNAME( 0x02, 0x02, "Hopper Switch" ) PORT_DIPLOCATION("SW2:7")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5")
|
PORT_DIPSETTING( 0x02, "Active Low" )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6")
|
PORT_DIPSETTING( 0x00, "Active High" )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7")
|
PORT_DIPNAME( 0x0c, 0x0c, "Credit Limit" ) PORT_DIPLOCATION("SW2:6,5")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8")
|
PORT_DIPSETTING( 0x0c, "1000" )
|
||||||
|
PORT_DIPSETTING( 0x08, "5000" )
|
||||||
|
PORT_DIPSETTING( 0x04, "10000" )
|
||||||
|
PORT_DIPSETTING( 0x00, "50000" )
|
||||||
|
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") // effect not shown in test mode
|
||||||
|
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:3") // effect not shown in test mode
|
||||||
|
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:2") // effect not shown in test mode
|
||||||
|
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:1") // effect not shown in test mode
|
||||||
|
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
|
||||||
PORT_START("SW3")
|
PORT_START("SW3")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW3:1")
|
PORT_DIPNAME( 0x01, 0x01, "W-Up Type" ) PORT_DIPLOCATION("SW3:8")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW3:2")
|
PORT_DIPSETTING( 0x01, "1" )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW3:3")
|
PORT_DIPSETTING( 0x00, "2" )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW3:4")
|
PORT_DIPNAME( 0x06, 0x06, "W-Up" ) PORT_DIPLOCATION("SW3:7,6")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW3:5")
|
PORT_DIPSETTING( 0x06, DEF_STR( Easy ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW3:6")
|
PORT_DIPSETTING( 0x04, DEF_STR( Normal ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW3:7")
|
PORT_DIPSETTING( 0x02, DEF_STR( Hard ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW3:8")
|
PORT_DIPSETTING( 0x00, DEF_STR( Very_Hard ) )
|
||||||
|
PORT_DIPNAME( 0x18, 0x18, "Maximum Bet" ) PORT_DIPLOCATION("SW3:5,4")
|
||||||
|
PORT_DIPSETTING( 0x18, "8" )
|
||||||
|
PORT_DIPSETTING( 0x10, "16" )
|
||||||
|
PORT_DIPSETTING( 0x08, "32" )
|
||||||
|
PORT_DIPSETTING( 0x00, "64" )
|
||||||
|
PORT_DIPNAME( 0xe0, 0xe0, "Rate Of Win" ) PORT_DIPLOCATION("SW3:3,2,1")
|
||||||
|
PORT_DIPSETTING( 0x00, "60%" )
|
||||||
|
PORT_DIPSETTING( 0x20, "65%" )
|
||||||
|
PORT_DIPSETTING( 0x40, "70%" )
|
||||||
|
PORT_DIPSETTING( 0x60, "75%" )
|
||||||
|
PORT_DIPSETTING( 0x80, "80%" )
|
||||||
|
PORT_DIPSETTING( 0xa0, "85%" )
|
||||||
|
PORT_DIPSETTING( 0xc0, "90%" )
|
||||||
|
PORT_DIPSETTING( 0xe0, "95%" )
|
||||||
|
|
||||||
PORT_START("SW4")
|
PORT_START("SW4")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW4:1")
|
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW4:8") // effect not shown in test mode
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW4:2")
|
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW4:3")
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW4:4")
|
PORT_DIPNAME( 0x0e, 0x0e, DEF_STR( Coin_B ) ) PORT_DIPLOCATION("SW4:7,6,5")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW4:5")
|
PORT_DIPSETTING( 0x00, "10 Coins/1 Credit" )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW4:6")
|
PORT_DIPSETTING( 0x02, DEF_STR( 9C_1C ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW4:7")
|
PORT_DIPSETTING( 0x04, DEF_STR( 6C_1C ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW4:8")
|
PORT_DIPSETTING( 0x06, DEF_STR( 5C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x08, DEF_STR( 3C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0a, DEF_STR( 2C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0c, DEF_STR( 1C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x0e, "1 Coin/50 Credits" )
|
||||||
|
PORT_DIPNAME( 0xf0, 0xf0, DEF_STR( Coin_A ) ) PORT_DIPLOCATION("SW4:4,3,2,1")
|
||||||
|
PORT_DIPSETTING( 0x00, "10 Coins/1 Credit" )
|
||||||
|
PORT_DIPSETTING( 0x10, DEF_STR( 5C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x20, DEF_STR( 5C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x30, DEF_STR( 4C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x40, DEF_STR( 3C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x50, DEF_STR( 2C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x60, DEF_STR( 2C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0x70, DEF_STR( 1C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x80, DEF_STR( 1C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x90, DEF_STR( 1C_3C ) )
|
||||||
|
PORT_DIPSETTING( 0xa0, DEF_STR( 1C_5C ) )
|
||||||
|
PORT_DIPSETTING( 0xb0, "1 Coin/10 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xc0, "1 Coin/20 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xd0, "1 Coin/25 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xe0, "1 Coin/50 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xf0, "1 Coin/100 Credits" )
|
||||||
|
|
||||||
PORT_START("SW5")
|
PORT_START("SW5")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW5:1")
|
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW5:8") // effect not shown in test mode
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW5:2")
|
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW5:3")
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW5:4")
|
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW5:7") // effect not shown in test mode
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW5:5")
|
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW5:6")
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW5:7")
|
PORT_DIPNAME( 0x1c, 0x1c, "Key In" ) PORT_DIPLOCATION("SW5:6,5,4")
|
||||||
PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW5:8")
|
PORT_DIPSETTING( 0x00, "1 Coin/10 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x04, "1 Coin/20 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x08, "1 Coin/40 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x0c, "1 Coin/50 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x10, "1 Coin/100 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x14, "1 Coin/200 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x18, "1 Coin/250 Credits" )
|
||||||
|
PORT_DIPSETTING( 0x1c, "1 Coin/500 Credits" )
|
||||||
|
PORT_DIPNAME( 0xe0, 0xe0, "Coin C" ) PORT_DIPLOCATION("SW5:3,2,1")
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
|
||||||
|
PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
|
||||||
|
PORT_DIPSETTING( 0x40, DEF_STR( 1C_4C ) )
|
||||||
|
PORT_DIPSETTING( 0x60, DEF_STR( 1C_5C ) )
|
||||||
|
PORT_DIPSETTING( 0x80, "1 Coin/10 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xa0, "1 Coin/20 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xc0, "1 Coin/25 Credits" )
|
||||||
|
PORT_DIPSETTING( 0xe0, "1 Coin/50 Credits" )
|
||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -141,19 +141,8 @@ static INPUT_PORTS_START( specd9 )
|
|||||||
INPUT_PORTS_END
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
static const gfx_layout char_16x16_layout =
|
|
||||||
{
|
|
||||||
16,16,
|
|
||||||
RGN_FRAC(1,1),
|
|
||||||
4,
|
|
||||||
{ 0,1,2,3 },
|
|
||||||
{ 4,0, 12,8, 20,16, 28,24, 36,32, 44,40, 52,48, 60,56 },
|
|
||||||
{ STEP16(0,8*8) },
|
|
||||||
8*8*16
|
|
||||||
};
|
|
||||||
|
|
||||||
static GFXDECODE_START( gfx_es9501 )
|
static GFXDECODE_START( gfx_es9501 )
|
||||||
GFXDECODE_ENTRY( "gfx", 0, char_16x16_layout, 0, 0x10 )
|
GFXDECODE_ENTRY( "gfx", 0, gfx_16x16x4_packed_lsb, 0, 0x10 )
|
||||||
GFXDECODE_END
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
|
@ -184,7 +184,7 @@ public:
|
|||||||
void init_jinhulu2120gi() ATTR_COLD;
|
void init_jinhulu2120gi() ATTR_COLD;
|
||||||
void init_jinhulu2101is() ATTR_COLD;
|
void init_jinhulu2101is() ATTR_COLD;
|
||||||
void init_jinhulu2100gi() ATTR_COLD;
|
void init_jinhulu2100gi() ATTR_COLD;
|
||||||
void init_sleyuan() ATTR_COLD;
|
void init_sleyuan2() ATTR_COLD;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void machine_start() override ATTR_COLD;
|
virtual void machine_start() override ATTR_COLD;
|
||||||
@ -2251,7 +2251,7 @@ ROM_START( jinhuang )
|
|||||||
ROM_LOAD( "rom.u12", 0x00000, 0x20000, CRC(27caf888) SHA1(be57ce7f6b32a51656f8f16b894f58278544201a) ) // 1ST AND 2ND HALF IDENTICAL
|
ROM_LOAD( "rom.u12", 0x00000, 0x20000, CRC(27caf888) SHA1(be57ce7f6b32a51656f8f16b894f58278544201a) ) // 1ST AND 2ND HALF IDENTICAL
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( sleyuan )
|
ROM_START( sleyuan2 )
|
||||||
ROM_REGION( 0x10000, "maincpu", 0 )
|
ROM_REGION( 0x10000, "maincpu", 0 )
|
||||||
ROM_LOAD( "rom.u40", 0x00000, 0x10000, CRC(869a2ff7) SHA1(beb110eecf6c8c2f5d5272e0669391f73766d463) )
|
ROM_LOAD( "rom.u40", 0x00000, 0x10000, CRC(869a2ff7) SHA1(beb110eecf6c8c2f5d5272e0669391f73766d463) )
|
||||||
|
|
||||||
@ -2383,7 +2383,7 @@ void jinhulu2_state::init_dafuwng3()
|
|||||||
if ((a & 0x0060) == 0x0060) rom[a] ^= 0x40;
|
if ((a & 0x0060) == 0x0060) rom[a] ^= 0x40;
|
||||||
}
|
}
|
||||||
|
|
||||||
void jinhulu2_state::init_sleyuan()
|
void jinhulu2_state::init_sleyuan2()
|
||||||
{
|
{
|
||||||
init_jinhulu2();
|
init_jinhulu2();
|
||||||
|
|
||||||
@ -2523,10 +2523,10 @@ GAME( 1995, jinhulu2120gi, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_j
|
|||||||
GAME( 1996, jinhulu2101is, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2101is, ROT0, "IGS", "Jin Hu Lu II (v101IS)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // tries to link to something?
|
GAME( 1996, jinhulu2101is, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2101is, ROT0, "IGS", "Jin Hu Lu II (v101IS)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // tries to link to something?
|
||||||
GAME( 1995, jinhulu2100gi, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2100gi, ROT0, "IGS", "Jin Hu Lu II (v100GI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper, ROM patch
|
GAME( 1995, jinhulu2100gi, jinhulu2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2100gi, ROT0, "IGS", "Jin Hu Lu II (v100GI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper, ROM patch
|
||||||
GAME( 1995, huahuas2, 0, jinhulu2, huahuas2, jinhulu2_state, init_huahuas2, ROT0, "IGS", "Huahua Shijie II (v100FI, set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1995, huahuas2, 0, jinhulu2, huahuas2, jinhulu2_state, init_huahuas2, ROT0, "IGS", "Huahua Shijie II (v100FI, set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
GAME( 1995, huahuas2a, huahuas2, jinhulu2, jinhulu2, jinhulu2_state, init_jinhulu2120gi, ROT0, "IGS", "Huahua Shijie II (v100FI, set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // no GFX ROM dump, hopper
|
GAME( 1995, huahuas2a, huahuas2, jinhulu2, huahuas2, jinhulu2_state, init_jinhulu2120gi, ROT0, "IGS", "Huahua Shijie II (v100FI, set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // no GFX ROM dump, hopper
|
||||||
GAME( 1995, huluw2, 0, jinhulu2, huluw2, jinhulu2_state, init_huluw2, ROT0, "IGS", "Hu Lu Wang II (v100KI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1995, huluw2, 0, jinhulu2, huluw2, jinhulu2_state, init_huluw2, ROT0, "IGS", "Hu Lu Wang II (v100KI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
GAME( 1995, hsheng2, 0, jinhulu2, jinhulu2, jinhulu2_state, init_hsheng2, ROT0, "IGS", "Hua Shen II (v120DI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1995, hsheng2, 0, jinhulu2, jinhulu2, jinhulu2_state, init_hsheng2, ROT0, "IGS", "Hua Shen II (v120DI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
GAME( 1995, dafuwng3, 0, jinhulu2, jinhulu2, jinhulu2_state, init_dafuwng3, ROT0, "IGS", "Da Fu Weng III (V130LI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1995, dafuwng3, 0, jinhulu2, jinhulu2, jinhulu2_state, init_dafuwng3, ROT0, "IGS", "Da Fu Weng III (V130LI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
GAME( 1996, zuanshiw, 0, jinhulu2, zuanshiw, jinhulu2_state, init_jinhulu2120gi, ROT0, "IGS", "Zuanshi Wutai (V110II)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1996, zuanshiw, 0, jinhulu2, zuanshiw, jinhulu2_state, init_jinhulu2120gi, ROT0, "IGS", "Zuanshi Wutai (V110II)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
GAME( 2002, jinhuang, 0, jinhuang, jinhuang, jinhulu2_state, init_jinhuang, ROT0, "IGS", "Jin Huang Guan", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different memory map
|
GAME( 2002, jinhuang, 0, jinhuang, jinhuang, jinhulu2_state, init_jinhuang, ROT0, "IGS", "Jin Huang Guan", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different memory map
|
||||||
GAME( 1998, sleyuan, 0, jinhulu2, jinhulu2, jinhulu2_state, init_sleyuan, ROT0, "IGS", "Shuiguo Leyuan (V150UI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
GAME( 1998, sleyuan2, 0, jinhulu2, jinhulu2, jinhulu2_state, init_sleyuan2, ROT0, "IGS", "Shuiguo Leyuan II (V150UI)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // hopper
|
||||||
|
@ -17696,6 +17696,7 @@ mjdialq2
|
|||||||
mjdialq2a
|
mjdialq2a
|
||||||
mjelct3
|
mjelct3
|
||||||
mjelct3a
|
mjelct3a
|
||||||
|
mjelct3b
|
||||||
mjelct3bl
|
mjelct3bl
|
||||||
mjelctrb
|
mjelctrb
|
||||||
mjelctrn
|
mjelctrn
|
||||||
@ -20887,7 +20888,7 @@ jinhulu2
|
|||||||
jinhulu2100gi
|
jinhulu2100gi
|
||||||
jinhulu2101is
|
jinhulu2101is
|
||||||
jinhulu2120gi
|
jinhulu2120gi
|
||||||
sleyuan
|
sleyuan2
|
||||||
spk100
|
spk100
|
||||||
spk102u
|
spk102u
|
||||||
spk102ua
|
spk102ua
|
||||||
@ -33946,6 +33947,9 @@ tactcian2
|
|||||||
@source:namco/rbowlorama.cpp
|
@source:namco/rbowlorama.cpp
|
||||||
rbowlorama
|
rbowlorama
|
||||||
|
|
||||||
|
@source:namco/sg_vga.cpp
|
||||||
|
hplanet
|
||||||
|
|
||||||
@source:namco/shootaway2.cpp
|
@source:namco/shootaway2.cpp
|
||||||
shootaw2
|
shootaw2
|
||||||
|
|
||||||
|
290
src/mame/namco/sg_vga.cpp
Normal file
290
src/mame/namco/sg_vga.cpp
Normal file
@ -0,0 +1,290 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:
|
||||||
|
|
||||||
|
/***********************************************************************************
|
||||||
|
|
||||||
|
Namco SH2-based Medal Series, Namco 2000-2001
|
||||||
|
Hardware info by Guru
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
Games on this system include....
|
||||||
|
Game
|
||||||
|
Game Year Code Series#
|
||||||
|
------------------------------------------------
|
||||||
|
Shooting Paradise 2000 Z029 1st
|
||||||
|
Galaxian Fever 2000 Z030 2nd
|
||||||
|
*Pac'n Party 2000 ? 3rd
|
||||||
|
Happy Planet 2001 Z037 ?
|
||||||
|
|
||||||
|
*=confirmed but not dumped.
|
||||||
|
These games above are all medal shooting games.
|
||||||
|
There should be several more games, likely some coin pushers and
|
||||||
|
other redemption games but no others are known or secured yet.
|
||||||
|
The sound and graphics chips are the same as used on SETA2 hardware.
|
||||||
|
|
||||||
|
|
||||||
|
PCB Layout
|
||||||
|
----------
|
||||||
|
|
||||||
|
SG_VGA MAIN PCB
|
||||||
|
1828960501 (1828970501)
|
||||||
|
B0-0018B
|
||||||
|
(Note later revision 1828960502 (8128970502) B0-0018C just removes some
|
||||||
|
patch wires but appears identical)
|
||||||
|
|
||||||
|
|------------------------------------------------------------|
|
||||||
|
| CN12 CN11 CN10 L |-----| |---| |
|
||||||
|
| LT1381 L |X1-010 | | |
|
||||||
|
| L SW01 CN09 |-----| | | |
|
||||||
|
|CN08 |--------| L |U42| |
|
||||||
|
| |SH2 | L 7.3728MHz | | |
|
||||||
|
| |HD64F7045 L | | |
|
||||||
|
| |F28 | L |---| | | |
|
||||||
|
| 2003 |--U01---| L |1016 |---| |
|
||||||
|
| |---| 3404 CN07|
|
||||||
|
| 2003 CN01 62C256 |
|
||||||
|
| | SG_VGA ROM PCB
|
||||||
|
| PC410 |-----| |---| | 1828961100 (1828971100) B1-002A
|
||||||
|
| PS2801 |NEC | | | | |-------------|
|
||||||
|
|CN06 PS2801 |DX-102 | | |-----| TC551001 | | |
|
||||||
|
| |-----| |U02| DSW01 |NEC | 70MHz | | U01 |
|
||||||
|
| | | |DX-102 TC551001 | | | Notes:
|
||||||
|
| TD62083 | | |-----| CN05| | | U01-U04 32Mbit SOP44 mask ROM
|
||||||
|
| | | |-------------| | | U03 | CN01 connects to CN05 on main board
|
||||||
|
| |---| 62C256 62C256 | NEC | | | CN01|
|
||||||
|
|CN04 3403 62C256 62C256 | DX-101 | | | |
|
||||||
|
| SW03 60MHz | | | | U02 |
|
||||||
|
| M1027 |-----| | | | | |
|
||||||
|
|CN03 |NEC | | | | | |
|
||||||
|
| LA4705 BATT |DX102| |-------------| | | U04 |
|
||||||
|
|CN02 |-----| 62C256 62C256 | | |
|
||||||
|
|------------------------------------------------------------| |-------------|
|
||||||
|
Notes:
|
||||||
|
SH2 - Hitachi SH2 HD64F7045F28 QFP144 microcontroller with 256kB internal flash ROM,
|
||||||
|
4kB on-chip RAM and on-chip peripherals. Clock input 7.3728MHz.
|
||||||
|
This CPU holds the main program. Dumping it is not trivial.
|
||||||
|
ROMs:
|
||||||
|
Shooting Paradise - Z029_VER.1.10_SH2_HD64F7045F28.U01
|
||||||
|
Galaxian Fever - Z030_VER.1.28_SH2_HD64F7045F28.U01
|
||||||
|
Happy Planet - Z037_VER.1.00_SH2_HD64F7045F28.U01
|
||||||
|
U42 - DIP42 32Mbit mask ROM used for audio data. Chip is programmed in BYTE mode.
|
||||||
|
ROMs:
|
||||||
|
Shooting Paradise - SPD1_SND-0A.U42
|
||||||
|
Galaxian Fever - GXF1_SND-0A.U42
|
||||||
|
Happy Planet - HP1_SND-0A.U42
|
||||||
|
U02 - DIP40 MX27C4100 EPROM
|
||||||
|
ROMs:
|
||||||
|
Shooting Paradise - SPD1_MPR-0A.U02
|
||||||
|
Galaxian Fever - GXF1_MPR-0A.U02
|
||||||
|
Happy Planet - HP1_MPR-0A.U02
|
||||||
|
1016 - Lattice iSP1016E QFP44 CPLD, stamped with game code...
|
||||||
|
- Shooting Paradise : Z029A
|
||||||
|
- Galaxian Fever : Z030A
|
||||||
|
- Happy Planet : Z037A
|
||||||
|
62C256 - ISSI IS62C256 SOJ32 32kBx8-bit Static RAM
|
||||||
|
TC551001 - Toshiba TC551001 SOP32 128kBx8-bit Static RAM
|
||||||
|
L - LED
|
||||||
|
CN01 - Multi-pin expansion connector for a plug-in board (not populated / not used)
|
||||||
|
CN02 - 6 pin Namco connector for RGB & Sync Video Output
|
||||||
|
CN03 - 4 pin Namco connector, purpose unknown
|
||||||
|
CN04 - 9 pin Namco connector for power input
|
||||||
|
CN05 - Multi-pin connector for ROM board connection.
|
||||||
|
ROM board contains 4x 74HC373 and 4x 64Mbit SOP44 mask ROMs stamped with game code.
|
||||||
|
ROMs:
|
||||||
|
Shooting Paradise - SPD1_OBJ-1A.U01 SPD1_OBJ-0A.U02 SPD1_OBJ-3A.U03 SPD1_OBJ-2A.U04
|
||||||
|
Galaxian Fever - GXF1_OBJ-1A.U01 GXF1_OBJ-0A.U02 GXF1_OBJ-3A.U03 GXF1_OBJ-2A.U04
|
||||||
|
Happy Planet - HP1_OBJ-1A.U01 HP1_OBJ-0A.U02 HP1_OBJ-3A.U03 HP1_OBJ-2A.U04
|
||||||
|
CN06 - 50 pin flat cable connector. Probably used for controls.
|
||||||
|
CN07 - Multi-pin connector (not populated / not used)
|
||||||
|
CN08 - 20 pin flat cable connector. Probably connected to a drive board for motors and mechanical items in the cabinet.
|
||||||
|
CN09 - 8 pin connector joined to Lattice iSP1016 CPLD for JTAG programming.
|
||||||
|
CN10 - 25 pin flat cable connector (not populated / not used)
|
||||||
|
CN11 - 3 pin connector. This is a serial port TX, RX, GND, most likely for debugging purposes.
|
||||||
|
This connector is tied to the LT1381 on pins 7 and 8. Logic-level pins on the LT1381 are tied to the SH2 on pins 130, 131, 133 & 134
|
||||||
|
CN12 - 6 pin connector, purpose unknown.
|
||||||
|
SW01 - 1 DIP switch with on position tied to SH2 pin 106 (PLLVSS). DIP is off so pin 106 is not tied to GND.
|
||||||
|
SW03 - Reset Push Button
|
||||||
|
DSW01 - 8 position DIP Switch. Default all off.
|
||||||
|
LT1381 - Linear Technology (now Analog Devices) LT1381 Dual RS232 Driver/Receiver Pair
|
||||||
|
X1-010 - Allumer/Seta X1-010 Sound Chip
|
||||||
|
LA4705 - Sanyo LA4705 15W Stereo Power Amplifier
|
||||||
|
3403 - New Japan Radio Co. NJM3403 Quad Operational Amplifier
|
||||||
|
3404 - New Japan Radio Co. NJM3404 Dual Operational Amplifier
|
||||||
|
M1027 - Mitsumi MM1027 System Reset IC with Battery-Backup Circuit for Static RAM Power Switching
|
||||||
|
BATT - 3V Coin Battery
|
||||||
|
2003 - ULN2003 Darlington Array
|
||||||
|
TD62083 - Toshiba TD62083 8-Channel Darlington Sink Driver
|
||||||
|
PC410 - Sharp PC410 Photocoupler
|
||||||
|
PS2801 - NEC PS2801-4 Photocoupler
|
||||||
|
DX-102 - NEC DX-102 custom chip used for graphics generation
|
||||||
|
DX-101 - NEC DX-101 custom chip used for graphics generation
|
||||||
|
|
||||||
|
TODO:
|
||||||
|
- everything, driver-wise
|
||||||
|
- device-fy DX-101 / DX-102 emulation found in seta/seta2_v.cpp
|
||||||
|
***********************************************************************************/
|
||||||
|
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
|
||||||
|
#include "cpu/sh/sh7042.h"
|
||||||
|
#include "sound/x1_010.h"
|
||||||
|
|
||||||
|
#include "emupal.h"
|
||||||
|
#include "screen.h"
|
||||||
|
#include "speaker.h"
|
||||||
|
#include "tilemap.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
class sg_vga_state : public driver_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
sg_vga_state(const machine_config &mconfig, device_type type, const char *tag) :
|
||||||
|
driver_device(mconfig, type, tag),
|
||||||
|
m_maincpu(*this, "maincpu")
|
||||||
|
{ }
|
||||||
|
|
||||||
|
void sg_vga(machine_config &config) ATTR_COLD;
|
||||||
|
|
||||||
|
private:
|
||||||
|
required_device<sh7043a_device> m_maincpu;
|
||||||
|
|
||||||
|
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
|
||||||
|
|
||||||
|
void program_map(address_map &map) ATTR_COLD;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
uint32_t sg_vga_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sg_vga_state::program_map(address_map &map)
|
||||||
|
{
|
||||||
|
map(0x000000, 0x03ffff).rom();
|
||||||
|
map(0x200000, 0x27ffff).rom().region("external_prg", 0);
|
||||||
|
map(0x4e0000, 0x4effff).ram();
|
||||||
|
map(0x800000, 0x83ffff).ram().share("spriteram"); // ?
|
||||||
|
map(0x840000, 0x84ffff).ram().share("palette"); // ?
|
||||||
|
map(0x860000, 0x86003f).ram().share("vregs"); // ?
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static INPUT_PORTS_START( hplanet )
|
||||||
|
PORT_START("IN0")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("IN1")
|
||||||
|
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||||
|
|
||||||
|
PORT_START("DSW")
|
||||||
|
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:1")
|
||||||
|
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:2")
|
||||||
|
PORT_DIPSETTING( 0x02, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:3")
|
||||||
|
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:4")
|
||||||
|
PORT_DIPSETTING( 0x08, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:5")
|
||||||
|
PORT_DIPSETTING( 0x10, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:6")
|
||||||
|
PORT_DIPSETTING( 0x20, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:7")
|
||||||
|
PORT_DIPSETTING( 0x40, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW01:8")
|
||||||
|
PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
|
||||||
|
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
|
||||||
|
INPUT_PORTS_END
|
||||||
|
|
||||||
|
|
||||||
|
static const gfx_layout tile_layout =
|
||||||
|
{
|
||||||
|
8,8,
|
||||||
|
RGN_FRAC(1,1),
|
||||||
|
8,
|
||||||
|
{ STEP8(7*8, -8) },
|
||||||
|
{ STEP8(0, 1) },
|
||||||
|
{ STEP8(0, 8*8) },
|
||||||
|
8*8*8
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* Tiles are 8bpp, but the hardware is additionally able to discard
|
||||||
|
some bitplanes and use the low 4 bits only, or the high 4 bits only */
|
||||||
|
static GFXDECODE_START( gfx_dx_10x )
|
||||||
|
GFXDECODE_ENTRY( "sprites", 0, tile_layout, 0, 0x8000 / 16 ) // 8bpp, but 4bpp color granularity
|
||||||
|
GFXDECODE_END
|
||||||
|
|
||||||
|
|
||||||
|
void sg_vga_state::sg_vga(machine_config &config)
|
||||||
|
{
|
||||||
|
// basic machine hardware
|
||||||
|
SH7043A(config, m_maincpu, 7.3728_MHz_XTAL * 4); // actually SH7045
|
||||||
|
m_maincpu->set_addrmap(AS_PROGRAM, &sg_vga_state::program_map);
|
||||||
|
|
||||||
|
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
|
||||||
|
screen.set_refresh_hz(60);
|
||||||
|
screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500));
|
||||||
|
screen.set_size(0x200, 0x100);
|
||||||
|
screen.set_visarea(0x00, 0x140-1, 0x00, 0xe0-1);
|
||||||
|
screen.set_screen_update(FUNC(sg_vga_state::screen_update));
|
||||||
|
screen.set_palette("palette");
|
||||||
|
|
||||||
|
GFXDECODE(config, "gfxdecode", "palette", gfx_dx_10x);
|
||||||
|
PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x8000 + 0xf0); // extra 0xf0 because we might draw 256-color object with 16-color granularity
|
||||||
|
|
||||||
|
// sound hardware
|
||||||
|
SPEAKER(config, "mono").front_center();
|
||||||
|
|
||||||
|
x1_010_device &x1snd(X1_010(config, "x1snd", 16'000'000)); // clock unknown
|
||||||
|
x1snd.add_route(ALL_OUTPUTS, "mono", 1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ROM_START( hplanet )
|
||||||
|
ROM_REGION( 0x40000, "maincpu", 0 ) // internal ROM
|
||||||
|
ROM_LOAD( "z037_ver.1.00_sh2_hd64f7045f28.u01", 0x00000, 0x40000, CRC(5b2e5b30) SHA1(b69b9a0cc70816449c8894fd6a46ce852b9883ab) )
|
||||||
|
|
||||||
|
ROM_REGION32_BE( 0x80000, "external_prg", 0 )
|
||||||
|
ROM_LOAD16_WORD_SWAP( "hp1_mpr-0a.u02", 0x00000, 0x80000, CRC(83dd903f) SHA1(37ca41f8423bcf6e7ae422a5a6e1aef0e52a38cc) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x2000000, "sprites", 0 )
|
||||||
|
ROM_LOAD64_WORD( "hp1_obj-1a.u01", 0x000000, 0x800000, CRC(124f99b9) SHA1(41970a06a95875688f8bc21465a5bbd80b8cf8ce) )
|
||||||
|
ROM_LOAD64_WORD( "hp1_obj-0a.u02", 0x000002, 0x800000, CRC(597e179c) SHA1(5130c5f4f7f8b3c730363ff843440fa5f059663c) )
|
||||||
|
ROM_LOAD64_WORD( "hp1_obj-3a.u03", 0x000004, 0x800000, CRC(17eeb4fd) SHA1(3bc30cd8f6a43d4aee9cd2da119dbab66c99565e) )
|
||||||
|
ROM_LOAD64_WORD( "hp1_obj-2a.u04", 0x000006, 0x800000, CRC(31f71432) SHA1(b572045af0c0ad54df72d9396168be004c07f7f7) )
|
||||||
|
|
||||||
|
ROM_REGION( 0x400000, "x1snd", 0 )
|
||||||
|
ROM_LOAD( "hp1_snd-0a.u42", 0x000000, 0x400000, CRC(a78b01e5) SHA1(20e904a2e01a7e40c037a7c4ab9bd1b4e9054c4d) )
|
||||||
|
ROM_END
|
||||||
|
|
||||||
|
} // anonymous namespace
|
||||||
|
|
||||||
|
|
||||||
|
GAME( 2001, hplanet, 0, sg_vga, hplanet, sg_vga_state, empty_init, ROT0, "Namco", "Happy Planet", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )
|
@ -33,7 +33,7 @@ TODO:
|
|||||||
- currently starts with 9 credits inserted. After entering and exiting test mode, the game shows 0
|
- currently starts with 9 credits inserted. After entering and exiting test mode, the game shows 0
|
||||||
coins and can be coined up normally;
|
coins and can be coined up normally;
|
||||||
- implement proper controls. The game has a peculiar input setup (see video link above);
|
- implement proper controls. The game has a peculiar input setup (see video link above);
|
||||||
- sound system is the same as namco/namcond1.cpp (puts "Quattro Ver.1.2.H8" in H8 RAM). Ir interacts
|
- sound system is the same as namco/namcond1.cpp (puts "Quattro Ver.1.2.H8" in H8 RAM). It interacts
|
||||||
with the keycus. Handling is copied over from said driver, but could probably be improved;
|
with the keycus. Handling is copied over from said driver, but could probably be improved;
|
||||||
- after coining up there's a GFX bug that maybe points to some unimplemented feature in seta2_v.cpp;
|
- after coining up there's a GFX bug that maybe points to some unimplemented feature in seta2_v.cpp;
|
||||||
- once the video emulation in seta/seta2_v.cpp has been devicified, remove derivation from
|
- once the video emulation in seta/seta2_v.cpp has been devicified, remove derivation from
|
||||||
|
Loading…
Reference in New Issue
Block a user