- dataeast/madmotor.cpp: dumped PROM [Phil Bennett]

- nichibutsu/galivan.cpp: consolidated driver into single file, split into subclasses

- skeleton/palsystems_sh2.cpp: added documentation and Mach dumps for 2 boards [Hammy, buffi]
This commit is contained in:
Ivan Vangelista 2024-11-11 18:04:34 +01:00
parent 6183053ecc
commit 5aa5842469
7 changed files with 926 additions and 863 deletions

View File

@ -341,6 +341,9 @@ ROM_START( madmotor )
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "13.h3", 0x00000, 0x20000, CRC(cc4d65e9) SHA1(b9bcaa52c570f94d2f2e5dd84c94773cc4115442) )
ROM_REGION( 0x100, "proms", 0 )
ROM_LOAD( "fm-23.19h", 0x000, 0x100, CRC(6d51adf8) SHA1(51f2792d06f46ec27c60c814745641aa8709a200) ) // probably related to sprites' hardware
ROM_END
ROM_START( madmotora )
@ -382,6 +385,9 @@ ROM_START( madmotora )
ROM_REGION( 0x40000, "oki2", 0 )
ROM_LOAD( "13.h3", 0x00000, 0x20000, CRC(cc4d65e9) SHA1(b9bcaa52c570f94d2f2e5dd84c94773cc4115442) )
ROM_REGION( 0x100, "proms", 0 )
ROM_LOAD( "fm-23.19h", 0x000, 0x100, CRC(6d51adf8) SHA1(51f2792d06f46ec27c60c814745641aa8709a200) ) // probably related to sprites' hardware
ROM_END
/******************************************************************************/

View File

@ -8964,12 +8964,14 @@ void guttangt_state::init_guttangts3()
common_init(&galaxian_state::galaxian_draw_bullet, &galaxian_state::galaxian_draw_background, nullptr, &galaxian_state::guttangt_extend_sprite_info);
uint8_t *romdata = memregion("maincpu")->base();
uint8_t buf[0x4800];
memcpy(buf, romdata, 0x4800);
// descramble the content of each 0x100 block
for (int i = 0; i < 0x4800; i++)
romdata[i] = buf[i ^ 0xff];
for (int i = 0; i < 0x4800; i += 0x100)
{
using std::swap;
for (int j = 0; j < (0x100 / 2); j++)
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
}
}
void sbhoei_state::init_sbhoei()
@ -9146,12 +9148,14 @@ void galaxian_state::init_jumpbugbc()
init_jumpbug();
uint8_t *romdata = memregion("maincpu")->base();
uint8_t buf[0x10000];
memcpy(buf, romdata, 0x10000);
// descramble the content of each 0x100 block
for (int i = 0; i < 0x10000; i++)
romdata[i] = buf[i ^ 0xff];
for (int i = 0; i < 0x10000; i += 0x100)
{
using std::swap;
for (int j = 0; j < (0x100 / 2); j++)
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,138 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, Olivier Galibert
/***************************************************************************
Galivan - Cosmo Police
***************************************************************************/
#ifndef MAME_NICHIBUTSU_GALIVAN_H
#define MAME_NICHIBUTSU_GALIVAN_H
#pragma once
#include "nb1412m2.h"
#include "nb1414m4.h"
#include "machine/gen_latch.h"
#include "video/bufsprite.h"
#include "sound/flt_biquad.h"
#include "screen.h"
#include "emupal.h"
#include "tilemap.h"
class galivan_state : public driver_device
{
public:
galivan_state(const machine_config &mconfig, device_type type, const char *tag) :
driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_videoram(*this, "videoram")
, m_spriteram(*this, "spriteram")
, m_nb1414m4(*this, "nb1414m4")
, m_screen(*this, "screen")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_soundlatch(*this, "soundlatch")
, m_dacfilter1(*this, "dacfilter1")
, m_dacfilter2(*this, "dacfilter2")
, m_ymfilter(*this, "ymfilter")
, m_rombank(*this, "rombank")
{ }
void galivan(machine_config &config);
void ninjemak(machine_config &config);
void youmab(machine_config &config);
void init_youmab();
protected:
void io_map(address_map &map) ATTR_COLD;
void galivan_common(machine_config &config);
void video_config(machine_config &config);
required_device<cpu_device> m_maincpu;
private:
/* memory pointers */
required_shared_ptr<uint8_t> m_videoram;
required_device<buffered_spriteram8_device> m_spriteram;
/* video-related */
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_tx_tilemap = nullptr;
uint16_t m_scrollx = 0U;
uint16_t m_scrolly = 0U;
uint8_t m_galivan_scrollx[2]{}, m_galivan_scrolly[2]{};
uint8_t m_layers = 0U;
uint8_t m_ninjemak_dispdisable = 0U;
uint8_t m_shift_scroll = 0U; //youmab
uint32_t m_shift_val = 0U;
void galivan_sound_command_w(uint8_t data);
uint8_t soundlatch_clear_r();
uint8_t IO_port_c0_r();
void blit_trigger_w(uint8_t data);
void vblank_ack_w(uint8_t data);
void youmab_extra_bank_w(uint8_t data);
uint8_t youmab_8a_r();
void youmab_81_w(uint8_t data);
void youmab_84_w(uint8_t data);
void youmab_86_w(uint8_t data);
void galivan_videoram_w(offs_t offset, uint8_t data);
void galivan_gfxbank_w(uint8_t data);
void ninjemak_gfxbank_w(uint8_t data);
void galivan_scrollx_w(offs_t offset, uint8_t data);
void galivan_scrolly_w(offs_t offset, uint8_t data);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_tx_tile_info);
TILE_GET_INFO_MEMBER(ninjemak_get_bg_tile_info);
TILE_GET_INFO_MEMBER(ninjemak_get_tx_tile_info);
void galivan_palette(palette_device &palette) const;
void ninjemak_palette(palette_device &palette) const;
DECLARE_MACHINE_START(galivan);
DECLARE_MACHINE_RESET(galivan);
DECLARE_VIDEO_START(galivan);
DECLARE_MACHINE_START(ninjemak);
DECLARE_MACHINE_RESET(ninjemak);
DECLARE_VIDEO_START(ninjemak);
uint32_t screen_update_galivan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
uint32_t screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
optional_device<nb1414m4_device> m_nb1414m4;
required_device<screen_device> m_screen;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_device<generic_latch_8_device> m_soundlatch;
required_device<filter_biquad_device> m_dacfilter1;
required_device<filter_biquad_device> m_dacfilter2;
required_device<filter_biquad_device> m_ymfilter;
memory_bank_creator m_rombank;
void galivan_map(address_map &map) ATTR_COLD;
void ninjemak_io_map(address_map &map) ATTR_COLD;
void ninjemak_map(address_map &map) ATTR_COLD;
void sound_io_map(address_map &map) ATTR_COLD;
void sound_map(address_map &map) ATTR_COLD;
};
class dangarj_state : public galivan_state
{
public:
dangarj_state(const machine_config &mconfig, device_type type, const char *tag) :
galivan_state(mconfig, type, tag),
m_prot(*this, "prot_chip")
{ }
void dangarj(machine_config &config);
private:
required_device<nb1412m2_device> m_prot;
void dangarj_io_map(address_map &map) ATTR_COLD;
};
#endif // MAME_NICHIBUTSU_GALIVAN_H

View File

@ -1,407 +0,0 @@
// license:BSD-3-Clause
// copyright-holders:Luca Elia, Olivier Galibert
/***************************************************************************
video.c
Functions to emulate the video hardware of the machine.
d800-dbff foreground: char low bits (1 screen * 1024 chars/screen)
dc00-dfff foreground attribute: 7 ?
6543 color
21 ?
0 char hi bit
e000-e0ff spriteram: 64 sprites (4 bytes/sprite)
offset : 0 1 2 3
meaning: ypos(lo) sprite(lo) attribute xpos(lo)
7 flipy
6 flipx
5-2 color
1 sprite(hi)
0 xpos(hi)
background: 0x4000 bytes of ROM: 76543210 tile code low bits
0x4000 bytes of ROM: 7 ?
6543 color
2 ?
10 tile code high bits
***************************************************************************/
#include "emu.h"
#include "galivan.h"
/* Layers has only bits 5-7 active.
7 selects text off/on
6 selects background off/on
5 controls sprite priority (active only on title screen,
not for scores or push start nor game)
*/
/* Notes:
layers are used in galivan/dangar but not ninjemak
ninjemak_dispdisable is used in ninjemak but not galivan/dangar
*/
/***************************************************************************
Convert the color PROMs into a more useable format.
***************************************************************************/
void galivan_state::galivan_palette(palette_device &palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0-0x3f
// the bottom two bits of the color code select the palette bank for pens 0-7;
// the top two bits for pens 8-15.
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
palette.set_pen_indirect(i, ctabentry);
}
// I think that background tiles use colors 0xc0-0xff in four banks
// the bottom two bits of the color code select the palette bank for pens 0-7;
// the top two bits for pens 8-15.
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
palette.set_pen_indirect(0x100 + i, ctabentry);
}
// sprites use colors 0x80-0xbf in four banks
// The lookup table tells which colors to pick from the selected bank
// the bank is selected by another PROM and depends on the top 7 bits of the sprite code.
// The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles).
for (int i = 0; i < 0x1000; i++)
{
uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f);
int const i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4);
palette.set_pen_indirect(0x200 + i_swapped, ctabentry);
}
}
void galivan_state::ninjemak_palette(palette_device& palette) const
{
const uint8_t *color_prom = memregion("proms")->base();
// create a lookup table for the palette
for (int i = 0; i < 0x100; i++)
{
int const r = pal4bit(color_prom[i + 0x000]);
int const g = pal4bit(color_prom[i + 0x100]);
int const b = pal4bit(color_prom[i + 0x200]);
palette.set_indirect_color(i, rgb_t(r, g, b));
}
// color_prom now points to the beginning of the lookup table
color_prom += 0x300;
// characters use colors 0-0x7f
for (int i = 0; i < 0x80; i++)
palette.set_pen_indirect(i, i);
// I think that background tiles use colors 0xc0-0xff in four banks
// the bottom two bits of the color code select the palette bank for pens 0-7;
// the top two bits for pens 8-15.
for (int i = 0; i < 0x100; i++)
{
uint8_t const ctabentry = 0xc0 | (i & 0x0f) | ((i >> ((i & 0x08) ? 2 : 0)) & 0x30);
palette.set_pen_indirect(0x80 + i, ctabentry);
}
// sprites use colors 0x80-0xbf in four banks
// The lookup table tells which colors to pick from the selected bank
// the bank is selected by another PROM and depends on the top 7 bits of the sprite code.
// The PROM selects the bank *separately* for pens 0-7 and 8-15 (like for tiles).
for (int i = 0; i < 0x1000; i++)
{
uint8_t const ctabentry = 0x80 | ((i << ((i & 0x80) ? 2 : 4)) & 0x30) | (color_prom[i >> 4] & 0x0f);
int const i_swapped = ((i & 0x0f) << 8) | ((i & 0xff0) >> 4);
palette.set_pen_indirect(0x180 + i_swapped, ctabentry);
}
}
/***************************************************************************
Callbacks for the TileMap code
***************************************************************************/
TILE_GET_INFO_MEMBER(galivan_state::get_bg_tile_info)
{
uint8_t *BGROM = memregion("gfx4")->base();
int attr = BGROM[tile_index + 0x4000];
int code = BGROM[tile_index] | ((attr & 0x03) << 8);
tileinfo.set(1,
code,
(attr & 0x78) >> 3, /* seems correct */
0);
}
TILE_GET_INFO_MEMBER(galivan_state::get_tx_tile_info)
{
int attr = m_videoram[tile_index + 0x400];
int code = m_videoram[tile_index] | ((attr & 0x01) << 8);
tileinfo.set(0,
code,
(attr & 0x78) >> 3, /* seems correct */
0);
tileinfo.category = attr & 8 ? 0 : 1; /* seems correct */
}
TILE_GET_INFO_MEMBER(galivan_state::ninjemak_get_bg_tile_info)
{
uint8_t *BGROM = memregion("gfx4")->base();
int attr = BGROM[tile_index + 0x4000];
int code = BGROM[tile_index] | ((attr & 0x03) << 8);
tileinfo.set(1,
code,
((attr & 0x60) >> 3) | ((attr & 0x0c) >> 2), /* seems correct */
0);
}
TILE_GET_INFO_MEMBER(galivan_state::ninjemak_get_tx_tile_info)
{
uint16_t index = tile_index;
// TODO: skip drawing the NB1414M4 params, how the HW actually handles this?
if (index < 0x12)
index = 0x12;
int attr = m_videoram[index + 0x400];
int code = m_videoram[index] | ((attr & 0x03) << 8);
tileinfo.set(0,
code,
(attr & 0x1c) >> 2, /* seems correct ? */
0);
}
/***************************************************************************
Start the video hardware emulation.
***************************************************************************/
VIDEO_START_MEMBER(galivan_state,galivan)
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 16, 16, 128, 128);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::get_tx_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_tx_tilemap->set_transparent_pen(15);
}
VIDEO_START_MEMBER(galivan_state,ninjemak)
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::ninjemak_get_bg_tile_info)), TILEMAP_SCAN_COLS, 16, 16, 512, 32);
m_tx_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(galivan_state::ninjemak_get_tx_tile_info)), TILEMAP_SCAN_COLS, 8, 8, 32, 32);
m_tx_tilemap->set_transparent_pen(15);
}
/***************************************************************************
Memory handlers
***************************************************************************/
void galivan_state::galivan_videoram_w(offs_t offset, uint8_t data)
{
m_videoram[offset] = data;
m_tx_tilemap->mark_tile_dirty(offset & 0x3ff);
}
/* Written through port 40 */
void galivan_state::galivan_gfxbank_w(uint8_t data)
{
/* bits 0 and 1 coin counters */
machine().bookkeeping().coin_counter_w(0,data & 1);
machine().bookkeeping().coin_counter_w(1,data & 2);
/* bit 2 flip screen */
flip_screen_set(data & 0x04);
/* bit 7 selects one of two ROM banks for c000-dfff */
membank("bank1")->set_entry((data & 0x80) >> 7);
/* logerror("%s port 40 = %02x\n", machine().describe_context(), data); */
}
void galivan_state::ninjemak_gfxbank_w(uint8_t data)
{
/* bits 0 and 1 coin counters */
machine().bookkeeping().coin_counter_w(0,data & 1);
machine().bookkeeping().coin_counter_w(1,data & 2);
/* bit 2 flip screen */
flip_screen_set(data & 0x04);
/* bit 3 unknown */
/* bit 4 background disable flag */
m_ninjemak_dispdisable = data & 0x10;
/* bit 5 sprite flag ??? */
/* bit 6, 7 ROM bank select */
membank("bank1")->set_entry((data & 0xc0) >> 6);
#if 0
{
char mess[80];
int btz[8];
int offs;
for (offs = 0; offs < 8; offs++) btz[offs] = (((data >> offs) & 0x01) ? 1 : 0);
sprintf(mess, "BK:%01X%01X S:%01X B:%01X T:%01X FF:%01X C2:%01X C1:%01X", btz[7], btz[6], btz[5], btz[4], btz[3], btz[2], btz[1], btz[0]);
popmessage(mess);
}
#endif
}
/* Written through port 41-42 */
void galivan_state::galivan_scrollx_w(offs_t offset, uint8_t data)
{
if (offset == 1)
{
m_layers = data & 0xe0;
}
m_galivan_scrollx[offset] = data;
}
/* Written through port 43-44 */
void galivan_state::galivan_scrolly_w(offs_t offset, uint8_t data)
{
m_galivan_scrolly[offset] = data;
}
/***************************************************************************
Display refresh
***************************************************************************/
void galivan_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
{
const uint8_t *spritepalettebank = memregion("user1")->base();
uint8_t *buffered_spriteram = m_spriteram->buffer();
int length = m_spriteram->bytes();
int flip = flip_screen();
gfx_element *gfx = m_gfxdecode->gfx(2);
/* draw the sprites */
for (int offs = 0; offs < length; offs += 4)
{
int code;
int attr = buffered_spriteram[offs + 2];
int color = (attr & 0x3c) >> 2;
int flipx = attr & 0x40;
int flipy = attr & 0x80;
int sx, sy;
sx = (buffered_spriteram[offs + 3] - 0x80) + 256 * (attr & 0x01);
sy = 240 - buffered_spriteram[offs];
if (flip)
{
sx = 240 - sx;
sy = 240 - sy;
flipx = !flipx;
flipy = !flipy;
}
// code = buffered_spriteram[offs + 1] + ((attr & 0x02) << 7);
code = buffered_spriteram[offs + 1] + ((attr & 0x06) << 7); // for ninjemak, not sure ?
gfx->transpen(bitmap,cliprect,
code,
color + 16 * (spritepalettebank[code >> 2] & 0x0f),
flipx,flipy,
sx,sy,15);
}
}
uint32_t galivan_state::screen_update_galivan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
m_bg_tilemap->set_scrollx(0, m_galivan_scrollx[0] + 256 * (m_galivan_scrollx[1] & 0x07));
m_bg_tilemap->set_scrolly(0, m_galivan_scrolly[0] + 256 * (m_galivan_scrolly[1] & 0x07));
if (m_layers & 0x40)
bitmap.fill(0, cliprect);
else
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
if (m_layers & 0x20)
{
if ((m_layers & 0x80) == 0)
{
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_tx_tilemap->draw(screen, bitmap, cliprect, 1, 0);
}
draw_sprites(bitmap, cliprect);
}
else
{
draw_sprites(bitmap, cliprect);
if ((m_layers & 0x80) == 0)
{
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
m_tx_tilemap->draw(screen, bitmap, cliprect, 1, 0);
}
}
return 0;
}
uint32_t galivan_state::screen_update_ninjemak(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
/* (scrollx[1] & 0x40) does something */
m_bg_tilemap->set_scrollx(0, m_scrollx);
m_bg_tilemap->set_scrolly(0, m_scrolly);
if (m_ninjemak_dispdisable)
bitmap.fill(0, cliprect);
else
m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
draw_sprites(bitmap, cliprect);
m_tx_tilemap->draw(screen, bitmap, cliprect, 0, 0);
return 0;
}

View File

@ -5633,7 +5633,7 @@ ROM_END
/* Marti Colls bootleg (set 1).
There are two PCB versions with the same ROM set:
-An older one, just labeled "PAC", with a 18 MHz xtal, and a Novatronic NVS board (a small sub-board from Novatronic,
-An older one, just labeled "PAC", with a 18 MHz xtal, and a Novatronic NVS board (a small sub-board from Novatronic,
silkscreened "NOVATRONIC BILBAO SPAIN COPYRIGHT 1982", with the CPU, program ROMs, a PROM and a 6116 SRAM
(https://www.recreativas.org/novatronic-video-sistema-nvs-6072-novatronic-sa). This one is where the PROMs were dumped from.
-A newer one, silkscreened by MARTI COLLS, with a sub-board similar to the Novatronic one (but without Novatronic texts).
@ -8654,12 +8654,14 @@ uint8_t pacman_state::cannonbp_protection_r(offs_t offset)
void pacman_state::init_pengomc1()
{
uint8_t *romdata = memregion("maincpu")->base();
uint8_t buf[0xc000];
memcpy(buf, romdata, 0xc000);
// some sort of weak protection?
for (int i = 0; i < 0xc000; i++)
romdata[i] = buf[i^0xff];
for (int i = 0; i < 0xc000; i += 0x100)
{
using std::swap;
for (int j = 0; j < (0x100 / 2); j++)
swap(romdata[i | j], romdata[i | (j ^ 0xff)]);
}
}
ioport_value clubpacm_state::clubpacm_input_r()

View File

@ -14,7 +14,7 @@ HD64F7044F28 (SH-2) with internal ROM
D720J8 XTAL (near SH2)
DS2404S RTC
KOS9F XTAL (near RTC)
square 144 pin chip with no marking
square 144 pin chip with no marking (probably YGV617B-S like board below)
12.000 MHz XTAL (near 144 pin chip)
2x LATTICE Mach211SP-15JC - 18JI 8010OPY3 PK3_CTRL chips
2x GM71C18163CJ6 RAM
@ -22,6 +22,30 @@ BR62256P RAM
Oki M6295 sound chip
2x bank of 8 DIP switches
The main components for PAL POKER 3 are:
HD64F7044F28 (SH-2) with internal ROM
D720J8 XTAL (near SH2)
DS2404S RTC
KOS9F XTAL (near RTC)
YGV617B-S Advanced Video Processor
12.000 MHz XTAL (near 144 pin chip)
LATTICE Mach211SP-15JC - 18JI 9950APA B PK2_CTRL chip
2x GM71C18163CJ6 RAM
BR62256P RAM
Oki M6295 sound chip
2x bank of 8 DIP switches
The main components for SH-POKER V3.0 are:
scratched square 112 pin chip (probably HD64F7044F28 as above)
14.318 MHz XTAL
DS2404S RTC
DS7A XTAL (near RTC)
scratched square 144 pin chip (probably YGV617B-S as above)
12.000 MHz XTAL (near 144 pin chip)
scratched square 40 pin chip (probably LATTICE Mach211SP as above)
scratched square 44 pin chip (probably Oki M6295 as above)
6x bank of 8 DIP switches (on base board)
bank of 8 DIP switches (on CPU board)
TODO: everything. Needs internal ROM dumps.
*/
@ -188,6 +212,9 @@ ROM_START( mpoker2 ) // this was on the PAL PCB
ROM_REGION( 0x200000, "gfx", 0 )
ROM_LOAD( "lh28f160s5t.u0222", 0x000000, 0x200000, CRC(12dc71c7) SHA1(e0db76e05752f475e554ccd24244ea8bc60f2042) )
ROM_REGION( 0x4934, "mach", 0 )
ROM_LOAD( "pk3_ctrl.jed", 0x0000, 0x4934, NO_DUMP )
ROM_REGION( 0x80000, "oki", 0 )
ROM_LOAD( "msm27c401.u066", 0x00000, 0x80000, CRC(2aba63a3) SHA1(c3d0a5a37cfa309cb94d6218c068fe90272d1721) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
ROM_END
@ -196,6 +223,9 @@ ROM_START( mpoker2a ) // this was on the PAL POKER 3 PCB
ROM_REGION( 0x40000, "maincpu", ROMREGION_ERASE00 )
ROM_LOAD( "internal_rom", 0x00000, 0x40000, NO_DUMP)
ROM_REGION( 0x4934, "mach", 0 )
ROM_LOAD( "pk2_ctrl.u0114.jed", 0x0000, 0x4934, CRC(5f897e0e) SHA1(018eadeeb43846fb23b2665758a108e0c1a79d72) ) // JED as jedutil can't handle MACHs yet
ROM_REGION( 0x200000, "gfx", 0 )
ROM_LOAD( "flash56.bin", 0x000000, 0x200000, CRC(fbca21df) SHA1(78ab98468bb4d5563d14a9a5be4be73112e8b0a2) )
@ -210,6 +240,9 @@ ROM_START( mpoker2b ) // this was on the SH-POKER V3.0
ROM_REGION( 0x200000, "gfx", 0 )
ROM_LOAD( "flash56.bin", 0x000000, 0x200000, CRC(1d65901c) SHA1(f8f42ff2dc858a5970ecfbdfb08154047833676b) )
ROM_REGION( 0x4934, "mach", 0 )
ROM_LOAD( "mach.u0114.jed", 0x0000, 0x4934, CRC(2f9b8fdc) SHA1(ab5ddac49db6d8a8a5a59cf6fefe145031add487) ) // JED as jedutil can't handle MACHs yet
ROM_REGION( 0x80000, "oki", 0 )
ROM_LOAD( "msm27c401.bin", 0x00000, 0x80000, CRC(2aba63a3) SHA1(c3d0a5a37cfa309cb94d6218c068fe90272d1721) ) // 1xxxxxxxxxxxxxxxxxx = 0x00
ROM_END