New working clones

------------------
Ms. Pac-Man (Elmac bootleg, earlier) [IZ8DWF]
Ms. Pac-Man (Elmac bootleg, later) [Tirino73]
Pac-Man (Model Racing bootleg) [IZ8DWF]

- misc/ettrivia.cpp: switched to configured banking, enabled save state support
This commit is contained in:
Ivan Vangelista 2024-06-10 22:45:02 +02:00
parent 6681c9d947
commit 478c82756d
3 changed files with 193 additions and 96 deletions

View File

@ -35307,6 +35307,8 @@ mspacmanbi // bootleg
mspacmanblt // bootleg
mspacmanblt2 // bootleg
mspacmancr // bootleg on Crush Roller board
mspacmane // bootleg
mspacmane2 // bootleg
mspacmanhnc // hack
mspacmanlai // bootleg
mspacmat // hack
@ -35331,6 +35333,7 @@ pacman // (c) 1980 Midway
pacmanf // hack
pacmanfm // bootleg (FAMARE S.A.)
pacmanjpm // bootleg
pacmanmr // bootleg
pacmanpe //
pacmanso //
pacmansp // hack (Video Game SA)

View File

@ -1,12 +1,13 @@
// license:BSD-3-Clause
// copyright-holders:Pierpaolo Prazzoli
// copyright-holders: Pierpaolo Prazzoli
/*
Enerdyne Technologies Inc. (El Cajon, CA 92020) hardware
CPU: Z80
Sound: AY-3-8912 (x3)
Other: Dallas DS1220Y NVRAM, N8T245N (x2), PAL16L8A-2CN (x2,protected)
Other: Dallas DS1220Y NVRAM, N8T245N (x2), PAL16L8A-2CN (x2, protected)
XTAL = 12 MHz
@ -27,10 +28,12 @@ Notes:
*/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "machine/nvram.h"
#include "sound/ay8910.h"
#include "video/resnet.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
@ -44,83 +47,86 @@ class ettrivia_state : public driver_device
public:
ettrivia_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_fg_videoram(*this, "fg_videoram")
, m_bg_videoram(*this, "bg_videoram")
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_ay(*this, "ay%u", 1)
, m_fg_videoram(*this, "fg_videoram")
, m_bg_videoram(*this, "bg_videoram")
, m_questions_bank(*this, "questions_bank")
, m_coin(*this, "COIN")
{
}
void ettrivia(machine_config &config);
protected:
virtual void machine_start() override;
virtual void video_start() override;
private:
int m_palreg = 0;
int m_gfx_bank = 0;
int m_question_bank = 0;
int m_b000_val = 0;
int m_b000_ret = 0;
int m_b800_prev = 0;
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device_array<ay8912_device, 3> m_ay;
required_shared_ptr<uint8_t> m_fg_videoram;
required_shared_ptr<uint8_t> m_bg_videoram;
required_memory_bank m_questions_bank;
required_ioport m_coin;
uint8_t m_palreg = 0;
uint8_t m_gfx_bank = 0;
uint8_t m_b000_val = 0;
uint8_t m_b000_ret = 0;
uint8_t m_b800_prev = 0;
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
void ettrivia_fg_w(offs_t offset, uint8_t data);
void ettrivia_bg_w(offs_t offset, uint8_t data);
void ettrivia_control_w(uint8_t data);
uint8_t ettrivia_question_r(offs_t offset);
void fg_w(offs_t offset, uint8_t data);
void bg_w(offs_t offset, uint8_t data);
void control_w(uint8_t data);
uint8_t question_r(offs_t offset);
void b000_w(uint8_t data);
uint8_t b000_r();
void b800_w(uint8_t data);
TILE_GET_INFO_MEMBER(get_tile_info_bg);
TILE_GET_INFO_MEMBER(get_tile_info_fg);
void ettrivia_palette(palette_device &palette) const;
uint32_t screen_update_ettrivia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(ettrivia_interrupt);
void palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(interrupt);
inline void get_tile_info(tile_data &tileinfo, int tile_index, uint8_t *vidram, int gfx_code);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device_array<ay8912_device, 3> m_ay;
void cpu_map(address_map &map);
void program_map(address_map &map);
void io_map(address_map &map);
};
void ettrivia_state::ettrivia_fg_w(offs_t offset, uint8_t data)
void ettrivia_state::fg_w(offs_t offset, uint8_t data)
{
m_fg_videoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
void ettrivia_state::ettrivia_bg_w(offs_t offset, uint8_t data)
void ettrivia_state::bg_w(offs_t offset, uint8_t data)
{
m_bg_videoram[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
void ettrivia_state::ettrivia_control_w(uint8_t data)
void ettrivia_state::control_w(uint8_t data)
{
machine().tilemap().mark_all_dirty();
m_palreg = (data >> 1) & 3;
m_gfx_bank = (data >> 2) & 1;
m_question_bank = (data >> 3) & 3;
m_questions_bank->set_entry((data >> 3) & 3);
machine().bookkeeping().coin_counter_w(0, data & 0x80);
flip_screen_set(data & 1);
}
uint8_t ettrivia_state::ettrivia_question_r(offs_t offset)
{
uint8_t *QUESTIONS = memregion("user1")->base();
return QUESTIONS[offset + 0x10000 * m_question_bank];
}
void ettrivia_state::b000_w(uint8_t data)
{
m_b000_val = data;
@ -128,7 +134,7 @@ void ettrivia_state::b000_w(uint8_t data)
uint8_t ettrivia_state::b000_r()
{
if(m_b800_prev)
if (m_b800_prev)
return m_b000_ret;
else
return m_b000_val;
@ -136,17 +142,17 @@ uint8_t ettrivia_state::b000_r()
void ettrivia_state::b800_w(uint8_t data)
{
switch(data)
switch (data)
{
/* special case to return the value written to 0xb000 */
/* does it reset the chips too ? */
/* special case to return the value written to 0xb000
does it reset the chips too ? */
case 0: break;
case 0xc4: m_b000_ret = m_ay[0]->data_r(); break;
case 0x94: m_b000_ret = m_ay[1]->data_r(); break;
case 0x86: m_b000_ret = m_ay[2]->data_r(); break;
case 0x80:
switch(m_b800_prev)
switch (m_b800_prev)
{
case 0xe0: m_ay[0]->address_w(m_b000_val); break;
case 0x98: m_ay[1]->address_w(m_b000_val); break;
@ -163,22 +169,33 @@ void ettrivia_state::b800_w(uint8_t data)
m_b800_prev = data;
}
void ettrivia_state::cpu_map(address_map &map)
void ettrivia_state::machine_start()
{
m_questions_bank->configure_entries(0, 4, memregion("questions")->base(), 0x10000);
save_item(NAME(m_palreg));
save_item(NAME(m_gfx_bank));
save_item(NAME(m_b000_val));
save_item(NAME(m_b000_ret));
save_item(NAME(m_b800_prev));
}
void ettrivia_state::program_map(address_map &map)
{
map(0x0000, 0x7fff).rom();
map(0x8000, 0x87ff).ram().share("nvram");
map(0x9000, 0x9000).w(FUNC(ettrivia_state::ettrivia_control_w));
map(0x9000, 0x9000).w(FUNC(ettrivia_state::control_w));
map(0x9800, 0x9800).nopw();
map(0xa000, 0xa000).nopw();
map(0xb000, 0xb000).r(FUNC(ettrivia_state::b000_r)).w(FUNC(ettrivia_state::b000_w));
map(0xb800, 0xb800).w(FUNC(ettrivia_state::b800_w));
map(0xc000, 0xc7ff).ram().w(FUNC(ettrivia_state::ettrivia_fg_w)).share("fg_videoram");
map(0xe000, 0xe7ff).ram().w(FUNC(ettrivia_state::ettrivia_bg_w)).share("bg_videoram");
map(0xc000, 0xc7ff).ram().w(FUNC(ettrivia_state::fg_w)).share(m_fg_videoram);
map(0xe000, 0xe7ff).ram().w(FUNC(ettrivia_state::bg_w)).share(m_bg_videoram);
}
void ettrivia_state::io_map(address_map &map)
{
map(0x0000, 0xffff).r(FUNC(ettrivia_state::ettrivia_question_r));
map(0x0000, 0xffff).bankr(m_questions_bank);
}
static INPUT_PORTS_START( ettrivia )
@ -212,24 +229,24 @@ static const gfx_layout charlayout =
RGN_FRAC(1,2),
2,
{ RGN_FRAC(1,2), RGN_FRAC(0,2) },
{ 7, 6, 5, 4, 3, 2, 1, 0 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
{ STEP8(7,-1) },
{ STEP8(0,8) },
8*8
};
static GFXDECODE_START( gfx_ettrivia )
GFXDECODE_ENTRY( "gfx1", 0, charlayout, 0, 32 )
GFXDECODE_ENTRY( "gfx2", 0, charlayout, 32*4, 32 )
GFXDECODE_ENTRY( "bgchars", 0, charlayout, 0, 32 )
GFXDECODE_ENTRY( "fgchars", 0, charlayout, 32*4, 32 )
GFXDECODE_END
void ettrivia_state::get_tile_info(tile_data &tileinfo, int tile_index, uint8_t *vidram, int gfx_code)
{
int code = vidram[tile_index];
int color = (code >> 5) + 8 * m_palreg;
int const color = (code >> 5) + 8 * m_palreg;
code += m_gfx_bank * 0x100;
tileinfo.set(gfx_code,code,color,0);
tileinfo.set(gfx_code, code, color, 0);
}
TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_bg)
@ -242,7 +259,7 @@ TILE_GET_INFO_MEMBER(ettrivia_state::get_tile_info_fg)
get_tile_info(tileinfo, tile_index, m_fg_videoram, 1);
}
void ettrivia_state::ettrivia_palette(palette_device &palette) const
void ettrivia_state::palette(palette_device &palette) const
{
uint8_t const *const color_prom = memregion("proms")->base();
static constexpr int resistances[2] = { 270, 130 };
@ -260,41 +277,41 @@ void ettrivia_state::ettrivia_palette(palette_device &palette) const
// red component
bit0 = BIT(color_prom[i], 0);
bit1 = BIT(color_prom[i+0x100], 0);
bit1 = BIT(color_prom[i + 0x100], 0);
int const r = combine_weights(weights, bit0, bit1);
// green component
bit0 = BIT(color_prom[i], 2);
bit1 = BIT(color_prom[i+0x100], 2);
bit1 = BIT(color_prom[i + 0x100], 2);
int const g = combine_weights(weights, bit0, bit1);
// blue component
bit0 = BIT(color_prom[i], 1);
bit1 = BIT(color_prom[i+0x100], 1);
bit1 = BIT(color_prom[i + 0x100], 1);
int const b = combine_weights(weights, bit0, bit1);
palette.set_pen_color(bitswap<8>(i,5,7,6,2,1,0,4,3), rgb_t(r, g, b));
palette.set_pen_color(bitswap<8>(i, 5, 7, 6, 2, 1, 0, 4, 3), rgb_t(r, g, b));
}
}
void ettrivia_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_bg)), TILEMAP_SCAN_ROWS, 8,8,64,32);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_fg)), TILEMAP_SCAN_ROWS, 8,8,64,32);
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_bg)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(ettrivia_state::get_tile_info_fg)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap->set_transparent_pen(0);
}
uint32_t ettrivia_state::screen_update_ettrivia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t ettrivia_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->draw(screen, bitmap, cliprect, 0,0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0,0);
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_fg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}
INTERRUPT_GEN_MEMBER(ettrivia_state::ettrivia_interrupt)
INTERRUPT_GEN_MEMBER(ettrivia_state::interrupt)
{
if( ioport("COIN")->read() & 0x01 )
if (m_coin->read() & 0x01)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
else
device.execute().set_input_line(0, HOLD_LINE);
@ -302,26 +319,26 @@ INTERRUPT_GEN_MEMBER(ettrivia_state::ettrivia_interrupt)
void ettrivia_state::ettrivia(machine_config &config)
{
Z80(config, m_maincpu, 12000000/4-48000); //should be ok, it gives the 300 interrupts expected
m_maincpu->set_addrmap(AS_PROGRAM, &ettrivia_state::cpu_map);
Z80(config, m_maincpu, 12'000'000 / 4 - 48'000); //should be ok, it gives the 300 interrupts expected
m_maincpu->set_addrmap(AS_PROGRAM, &ettrivia_state::program_map);
m_maincpu->set_addrmap(AS_IO, &ettrivia_state::io_map);
m_maincpu->set_vblank_int("screen", FUNC(ettrivia_state::ettrivia_interrupt));
m_maincpu->set_vblank_int("screen", FUNC(ettrivia_state::interrupt));
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(256, 256);
screen.set_visarea(0*8, 32*8-1, 0*8, 28*8-1);
screen.set_screen_update(FUNC(ettrivia_state::screen_update_ettrivia));
screen.set_screen_update(FUNC(ettrivia_state::screen_update));
screen.set_palette("palette");
GFXDECODE(config, m_gfxdecode, "palette", gfx_ettrivia);
PALETTE(config, "palette", FUNC(ettrivia_state::ettrivia_palette), 256);
PALETTE(config, "palette", FUNC(ettrivia_state::palette), 256);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
AY8912(config, m_ay[0], 1500000).add_route(ALL_OUTPUTS, "mono", 0.25);
@ -339,19 +356,19 @@ ROM_START( promutrv )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "u16.u16", 0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_REGION( 0x2000, "bgchars", 0 )
ROM_LOAD( "mt44ic.44", 0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
ROM_LOAD( "mt46ic.46", 0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_REGION( 0x2000, "fgchars", 0 )
ROM_LOAD( "mt48ic.48", 0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
ROM_LOAD( "mt50ic.50", 0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "ic64.prm", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
ROM_LOAD( "ic63.prm", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
ROM_LOAD( "ic64.prm", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) // palette low bits
ROM_LOAD( "ic63.prm", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) // palette high bits
ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "movie-tv.lo0", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
ROM_LOAD( "movie-tv.hi0", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
ROM_LOAD( "scifi.lo1", 0x10000, 0x8000, CRC(b5595f81) SHA1(5e7fa334f6541860a5c04e5f345673ea12efafb4) )
@ -366,19 +383,19 @@ ROM_START( promutrva )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "u16.u16", 0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_REGION( 0x2000, "bgchars", 0 )
ROM_LOAD( "mt44ic.44", 0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
ROM_LOAD( "mt46ic.46", 0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_REGION( 0x2000, "fgchars", 0 )
ROM_LOAD( "mt48ic.48", 0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
ROM_LOAD( "mt50ic.50", 0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "ic64.prm", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
ROM_LOAD( "ic63.prm", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
ROM_LOAD( "ic64.prm", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) // palette low bits
ROM_LOAD( "ic63.prm", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) // palette high bits
ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "movie-tv.lo0", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
ROM_LOAD( "movie-tv.hi0", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
ROM_LOAD( "rock-pop.lo1", 0x10000, 0x8000, CRC(4252bc23) SHA1(d6c5b3c5f227b043f298cea585bcb934538b8880) )
@ -393,19 +410,19 @@ ROM_START( promutrvb )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "u16.u16", 0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_REGION( 0x2000, "bgchars", 0 )
ROM_LOAD( "mt44.ic44", 0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
ROM_LOAD( "mt46.ic46", 0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_REGION( 0x2000, "fgchars", 0 )
ROM_LOAD( "mt48.ic48", 0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
ROM_LOAD( "mt50.ic50", 0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "dm74s287n.ic64", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
ROM_LOAD( "dm74s287n.ic63", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
ROM_LOAD( "dm74s287n.ic64", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) // palette low bits
ROM_LOAD( "dm74s287n.ic63", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) // palette high bits
ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "movie-tv.lo0.u8", 0x00000, 0x8000, CRC(dbf03e62) SHA1(0210442ff80cce8fe39ba5e373bca0f47bb389c4) )
ROM_LOAD( "movie-tv.hi0.u7", 0x08000, 0x8000, CRC(77f09aab) SHA1(007ae0ec1f37b575412fa71c92d1891a62069089) )
ROM_LOAD( "rock-pop.lo1.u6", 0x10000, 0x8000, CRC(4252bc23) SHA1(d6c5b3c5f227b043f298cea585bcb934538b8880) )
@ -424,19 +441,19 @@ ROM_START( promutrvc )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "u16.u16", 0x0000, 0x8000, CRC(e37d48be) SHA1(1d700cff0c28e50fa2851e0c46de21aa47a23416) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_REGION( 0x2000, "bgchars", 0 )
ROM_LOAD( "mt44.ic44", 0x0000, 0x1000, CRC(8d543ea4) SHA1(86ab848a45851540d5d3315e15b92f7b2ac0b77c) )
ROM_LOAD( "mt46.ic46", 0x1000, 0x1000, CRC(6d6e1f68) SHA1(e8196ecd915a2528122407d31a7078f177be0beb) )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_REGION( 0x2000, "fgchars", 0 )
ROM_LOAD( "mt48.ic48", 0x0000, 0x1000, CRC(f2efe300) SHA1(419e889b2f4d038ae64e3ccf4e2498add80b4c9f) )
ROM_LOAD( "mt50.ic50", 0x1000, 0x1000, CRC(ee89d24e) SHA1(e3536df549278040255657201433ab23e0386533) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "dm74s287n.ic64", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) /* palette low bits */
ROM_LOAD( "dm74s287n.ic63", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) /* palette high bits */
ROM_LOAD( "dm74s287n.ic64", 0x0000, 0x0100, CRC(1cf9c914) SHA1(4c39b10c1be889d6ef4313b2112f4216d34f7327) ) // palette low bits
ROM_LOAD( "dm74s287n.ic63", 0x0100, 0x0100, CRC(749da5a8) SHA1(8e30f5b014bc8ff2dc4986ef35a979e525681cb9) ) // palette high bits
ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "sports.lo0.u8", 0x00000, 0x8000, CRC(bb28fa92) SHA1(a3c4c67be0e31793d68b0b048f3a73e9ce1d5859) )
ROM_LOAD( "sports2.hi0.u7", 0x08000, 0x8000, CRC(4d0107d7) SHA1(4cbef1bc5faaca52ce6bb490560f213d60a96191) )
ROM_LOAD( "expert.lo1.u6", 0x10000, 0x8000, CRC(19153d1a) SHA1(a2f2bbabbd1c68aae58ff29a43cb02b0e8867f5a) )
@ -455,19 +472,19 @@ ROM_START( strvmstr )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "stm16.u16", 0x0000, 0x8000, CRC(ae734db9) SHA1(1bacdfdebaa1f250bfbd49053c3910f1396afe11) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_REGION( 0x2000, "bgchars", 0 )
ROM_LOAD( "stm44.rom", 0x0000, 0x1000, CRC(e69da710) SHA1(218a9d7600d67858d1f21282a0cebec0ae93e0ff) )
ROM_LOAD( "stm46.rom", 0x1000, 0x1000, CRC(d927a1f1) SHA1(63a49a61107deaf7a9f28b9653c310c5331f5143) )
ROM_REGION( 0x2000, "gfx2", 0 )
ROM_REGION( 0x2000, "fgchars", 0 )
ROM_LOAD( "stm48.rom", 0x0000, 0x1000, CRC(51719714) SHA1(fdecbd22ea65eec7b4b5138f89ddc5876b05def6) )
ROM_LOAD( "stm50.rom", 0x1000, 0x1000, CRC(cfc1a1d1) SHA1(9ef38f12360dd946651e67770742ca72fa6846f1) )
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD( "stm64.prm", 0x0000, 0x0100, BAD_DUMP CRC(69ebc0b8) SHA1(de2b936e3246e3bfc7e2ff9546c1854ec3504cc2) ) /* palette low bits */
ROM_LOAD( "stm63.prm", 0x0100, 0x0100, BAD_DUMP CRC(305271cf) SHA1(6fd5fe085d79ca7aa57010cffbdb2a85b9c24701) ) /* palette high bits */
ROM_LOAD( "stm64.prm", 0x0000, 0x0100, BAD_DUMP CRC(69ebc0b8) SHA1(de2b936e3246e3bfc7e2ff9546c1854ec3504cc2) ) // palette low bits
ROM_LOAD( "stm63.prm", 0x0100, 0x0100, BAD_DUMP CRC(305271cf) SHA1(6fd5fe085d79ca7aa57010cffbdb2a85b9c24701) ) // palette high bits
ROM_REGION( 0x40000, "user1", 0 ) /* Question roms */
ROM_REGION( 0x40000, "questions", 0 )
ROM_LOAD( "sex2.lo0", 0x00000, 0x8000, CRC(9c68b277) SHA1(34bc9d7b973fe482abd5e34a058b72eb5ec8db64) )
ROM_LOAD( "sports.hi0", 0x08000, 0x8000, CRC(3678fb79) SHA1(4e40cc20707195c0e88e595f752a2982b531b57e) )
ROM_LOAD( "movies.lo1", 0x10000, 0x8000, CRC(16cba1b7) SHA1(8aa3eff72d1ec8dac906f2e803a88578a9fe763c) )
@ -481,8 +498,8 @@ ROM_END
} // anonymous namespace
GAME( 1985, promutrv, 0, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 1)", 0 )
GAME( 1985, promutrva, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 2)", 0 )
GAME( 1985, promutrvb, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 3)", 0 )
GAME( 1985, promutrvc, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 4)", 0 )
GAME( 1986, strvmstr, 0, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Super Trivia Master", MACHINE_WRONG_COLORS )
GAME( 1985, promutrv, 0, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, promutrva, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, promutrvb, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 3)", MACHINE_SUPPORTS_SAVE )
GAME( 1985, promutrvc, promutrv, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Progressive Music Trivia (Question set 4)", MACHINE_SUPPORTS_SAVE )
GAME( 1986, strvmstr, 0, ettrivia, ettrivia, ettrivia_state, empty_init, ROT270, "Enerdyne Technologies Inc.", "Super Trivia Master", MACHINE_WRONG_COLORS | MACHINE_SUPPORTS_SAVE )

View File

@ -5554,6 +5554,32 @@ ROM_START( pacmanjpm )
ROM_LOAD( "82s126.3m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used
ROM_END
ROM_START( pacmanmr ) // PCB is marked "PAC/M" on component side
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "pacm.7f", 0x0000, 0x0800, CRC(2c0fa0ab) SHA1(37680e4502771ae69d51d07ce43f65b9b2dd2a49) )
ROM_LOAD( "pacm.7l", 0x0800, 0x0800, CRC(afeca2f1) SHA1(1e6d6c75eeb3a354ce2dc88da62caf9e7d53d0cb) )
ROM_LOAD( "pacm.7h", 0x1000, 0x0800, CRC(7d177853) SHA1(9b5ddaaa8b564654f97af193dbcc29f81f230a25) )
ROM_LOAD( "pacm.7m", 0x1800, 0x0800, CRC(d3e8914c) SHA1(c2f00e1773c6864435f29c8b7f44f2ef85d227d3) )
ROM_LOAD( "pacm.7j", 0x2000, 0x0800, CRC(9045a44c) SHA1(a97d7016effbd2ace9a7d92ceb04a6ce18fb42f9) )
ROM_LOAD( "pacm.7n-1", 0x2800, 0x0800, CRC(93f344c5) SHA1(987c7fa18a774a47c045fa1dc7dff37457cb8983) )
ROM_LOAD( "pacm.7k", 0x3000, 0x0800, CRC(cd9f1fa7) SHA1(d8c5bbd488ad193bdb32e745d9e8164c45f33bce) )
ROM_LOAD( "pacm.7p", 0x3800, 0x0800, CRC(124d8ddf) SHA1(0a661bab79482c35c3fa4edb3b9376f49c3f3c87) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "pacm-0.5e", 0x0000, 0x0800, CRC(3ed40275) SHA1(bf56f9a21bc1dacee438d88eb5bc59f20906b00c) )
ROM_LOAD( "pacm-1.5h", 0x0800, 0x0800, CRC(3591b89d) SHA1(79bb456be6c39c1ccd7d077fbe181523131fb300) )
ROM_LOAD( "pacm-0.5f", 0x1000, 0x0800, CRC(9e39323a) SHA1(be933e691df4dbe7d12123913c3b7b7b585b7a35) )
ROM_LOAD( "pacm-1.5j", 0x1800, 0x0800, CRC(1b1d9096) SHA1(53771c573051db43e7185b1d188533056290a620) )
ROM_REGION( 0x0120, "proms", 0 )
ROM_LOAD( "pacm.8h", 0x0000, 0x0020, CRC(2c3cc909) SHA1(32d68d4cfdf9f3e7351353428d268c763e809c63) )
ROM_LOAD( "pacm.4a", 0x0020, 0x0100, CRC(4c8e83a4) SHA1(e522cbc6c14bc481f2e97f1a7224c66bb283f553) )
ROM_REGION( 0x0200, "namco", 0 ) // Sound PROMs
ROM_LOAD( "pacm.1m", 0x0000, 0x0100, CRC(4e8b3b74) SHA1(aa427aa45373e9a1e6a1155b4bc7bbd97f74f3d8) )
ROM_LOAD( "pacm.3m", 0x0100, 0x0100, CRC(05197026) SHA1(9b71fb175331bbc12e43441ecfad75b633e2f953) ) // Timing - not used
ROM_END
// this bootleg on Pacman hardware has half as many tiles as the original and some gfx / animations
// have been reduced / removed to fit
ROM_START( pengojpm )
@ -6389,6 +6415,54 @@ ROM_START( mspacmanlai )
ROM_LOAD( "82s129-vid.3m", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) // Timing - not used
ROM_END
ROM_START( mspacmane )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "7f", 0x0000, 0x1000, CRC(d16b31b7) SHA1(bc2247ec946b639dd1f00bfc603fa157d0baaa97) )
ROM_LOAD( "7h", 0x1000, 0x1000, CRC(0d32de5e) SHA1(13ea0c343de072508908be885e6a2a217bbb3047) )
ROM_LOAD( "7j", 0x2000, 0x1000, CRC(1821ee0b) SHA1(5ea4d907dbb2690698db72c4e0b5be4d3e9a7786) )
ROM_LOAD( "7k", 0x3000, 0x1000, CRC(629c4399) SHA1(cd469a5ab04d4f21237bb5c04e469f250f94e9a2) )
ROM_LOAD( "7m", 0x8000, 0x1000, CRC(8c3e6de6) SHA1(fed6e9a2b210b07e7189a18574f6b8c4ec5bb49b) )
ROM_LOAD( "7n", 0x9000, 0x0800, CRC(286041cf) SHA1(5a5fc97ea66a59895b3403b2982940b755076667) )
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "5e", 0x0000, 0x0800, BAD_DUMP CRC(93933d1d) SHA1(fa38d2cb87e872bb9a3158a4df98f38360dc85ec) ) // broken ROM, couldn't be read
ROM_LOAD( "5h", 0x0800, 0x0800, CRC(7409fbec) SHA1(f440f08ba026ae6172666e1bdc0894ce33bba420) )
ROM_LOAD( "5f", 0x1000, 0x0800, CRC(22b0188a) SHA1(a9ed9ca8b36a60081fd364abc9bc23963932cc0b) )
ROM_LOAD( "5l", 0x1800, 0x0800, CRC(50c7477d) SHA1(c04ec282a8cb528df5e38ad750d12ee71612695d) )
ROM_REGION( 0x0120, "proms", 0 )
ROM_LOAD( "8h", 0x0000, 0x0020, CRC(2c3cc909) SHA1(32d68d4cfdf9f3e7351353428d268c763e809c63) )
ROM_LOAD( "4a", 0x0020, 0x0100, CRC(4c8e83a4) SHA1(e522cbc6c14bc481f2e97f1a7224c66bb283f553) )
ROM_REGION( 0x0200, "namco", 0 ) // Sound PROMs
ROM_LOAD( "1m", 0x0000, 0x0100, CRC(7b1f9b71) SHA1(5ef72bbdfb72db3eb1175fed652a761938eeb6cd) )
ROM_LOAD( "3m", 0x0100, 0x0100, CRC(05197026) SHA1(9b71fb175331bbc12e43441ecfad75b633e2f953) ) // Timing - not used
ROM_END
ROM_START( mspacmane2 ) // G-GA-2 + G-GB-2 PCBs
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "mpe1.6e", 0x0000, 0x1000, CRC(3ad0ae2f) SHA1(8431a2f4a89935a9f9898bef48f92f456d316aeb) )
ROM_LOAD( "mpe2.6f", 0x1000, 0x1000, CRC(0d32de5e) SHA1(13ea0c343de072508908be885e6a2a217bbb3047) )
ROM_LOAD( "mpe3.6h", 0x2000, 0x1000, CRC(1821ee0b) SHA1(5ea4d907dbb2690698db72c4e0b5be4d3e9a7786) )
ROM_LOAD( "mpe4.6j", 0x3000, 0x1000, CRC(d5e5d2aa) SHA1(ffb0d701d6143e9a7c431e13bbe15db6b51eb49c) )
ROM_LOAD( "mpe5.6l", 0x8000, 0x1000, CRC(8c3e6de6) SHA1(fed6e9a2b210b07e7189a18574f6b8c4ec5bb49b) )
ROM_LOAD( "mpe6.6m", 0x9000, 0x1000, CRC(375f0693) SHA1(8ad53c966289e9cd402c7df6b3c04ec07aa89717) ) // 1xxxxxxxxxxx = 0xFF
ROM_REGION( 0x2000, "gfx1", 0 )
ROM_LOAD( "mpe7.5e", 0x0000, 0x0800, CRC(93933d1d) SHA1(fa38d2cb87e872bb9a3158a4df98f38360dc85ec) )
ROM_LOAD( "mpe9.5h", 0x0800, 0x0800, BAD_DUMP CRC(7409fbec) SHA1(f440f08ba026ae6172666e1bdc0894ce33bba420) ) // dump was bitrot, taken from other sets with same other ROMs
ROM_LOAD( "mpe8.5f", 0x1000, 0x0800, CRC(22b0188a) SHA1(a9ed9ca8b36a60081fd364abc9bc23963932cc0b) )
ROM_LOAD( "mpe10.5j", 0x1800, 0x0800, CRC(50c7477d) SHA1(c04ec282a8cb528df5e38ad750d12ee71612695d) )
ROM_REGION( 0x0120, "proms", 0 ) // not provided for this set
ROM_LOAD( "8h", 0x0000, 0x0020, BAD_DUMP CRC(2c3cc909) SHA1(32d68d4cfdf9f3e7351353428d268c763e809c63) )
ROM_LOAD( "4a", 0x0020, 0x0100, BAD_DUMP CRC(4c8e83a4) SHA1(e522cbc6c14bc481f2e97f1a7224c66bb283f553) )
ROM_REGION( 0x0200, "namco", 0 ) // Sound PROMs, not provided for this set
ROM_LOAD( "1m", 0x0000, 0x0100, BAD_DUMP CRC(7b1f9b71) SHA1(5ef72bbdfb72db3eb1175fed652a761938eeb6cd) )
ROM_LOAD( "3m", 0x0100, 0x0100, BAD_DUMP CRC(05197026) SHA1(9b71fb175331bbc12e43441ecfad75b633e2f953) ) // Timing - not used
ROM_END
ROM_START( pacgal )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "boot1", 0x0000, 0x1000, CRC(d16b31b7) SHA1(bc2247ec946b639dd1f00bfc603fa157d0baaa97) )
@ -8621,6 +8695,7 @@ GAME( 1980, pacmanf, puckman, pacman, pacman, pacman_state, empty_init,
GAME( 1981, puckmod, puckman, pacman, pacman, pacman_state, empty_init, ROT90, "Namco", "Puck Man (Japan set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, pacmod, puckman, pacman, pacman, pacman_state, empty_init, ROT90, "Namco (Midway license)", "Pac-Man (Midway, harder)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, pacmanjpm,puckman, pacman, pacman, pacman_state, empty_init, ROT90, "bootleg (JPM)", "Pac-Man (JPM bootleg)", MACHINE_SUPPORTS_SAVE ) // aka 'Muncher', UK bootleg, JPM later made fruit machines etc.
GAME( 1981, pacmanmr, puckman, pacman, pacman, pacman_state, empty_init, ROT90, "bootleg (Model Racing)", "Pac-Man (Model Racing bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, pacmanpe, puckman, pacman, pacmanpe, pacman_state, empty_init, ROT90, "bootleg (Petaco SA)", "Come Come (Petaco SA bootleg of Puck Man)", MACHINE_SUPPORTS_SAVE ) // might have a speed-up button, check
GAME( 1980, newpuc2, puckman, pacman, pacman, pacman_state, empty_init, ROT90, "hack", "Newpuc2 (set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1980, newpuc2b, puckman, pacman, pacman, pacman_state, empty_init, ROT90, "hack", "Newpuc2 (set 2)", MACHINE_SUPPORTS_SAVE )
@ -8663,6 +8738,8 @@ GAME( 1981, mspacmbe, mspacman, woodpek, mspacman, pacman_state, init_mspac
GAME( 1982, mspacmbmc, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Marti Colls)", "Ms. Pac-Man (Marti Colls bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, mspacmbn, mspacman, woodpek, mspacman, pacman_state, init_pengomc1, ROT90, "bootleg (Novatronic)", "Ms. Pac-Man (Novatronic bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, mspacmanlai, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Leisure and Allied)", "Ms. Pac-Man (Leisure and Allied bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1983, mspacmane, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Elmac)", "Ms. Pac-Man (Elmac bootleg, earlier)", MACHINE_SUPPORTS_SAVE )
GAME( 1984, mspacmane2, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "bootleg (Elmac)", "Ms. Pac-Man (Elmac bootleg, later)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, mspacii, mspacman, mspacii, mspacman, pacman_state, init_mspacii, ROT90, "bootleg (Orca)", "Ms. Pac-Man II (Orca bootleg set 1)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, mspacii2, mspacman, mspacii, mspacman, pacman_state, init_mspacii, ROT90, "bootleg (Orca)", "Ms. Pac-Man II (Orca bootleg set 2)", MACHINE_SUPPORTS_SAVE )
GAME( 1981, pacgal, mspacman, woodpek, mspacman, pacman_state, empty_init, ROT90, "hack", "Pac-Gal (set 1)", MACHINE_SUPPORTS_SAVE )