From b6e44ca5e60ea3ecf03bce8923bfe2a9c7c482d9 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 31 Mar 2025 20:27:59 +0200 Subject: [PATCH] New systems marked not working ------------------------------ Zhongguo Majiang [little0] - misc/norautp.cpp: updated decryption tables for norautua / norautub. Also srccleaned --- src/mame/mame.lst | 3 + src/mame/misc/norautp.cpp | 122 ++++++++++------------- src/mame/skeleton/iam2.cpp | 196 +++++++++++++++++++++++++++++++++++++ 3 files changed, 253 insertions(+), 68 deletions(-) create mode 100644 src/mame/skeleton/iam2.cpp diff --git a/src/mame/mame.lst b/src/mame/mame.lst index c65bea8db95..6d213b047d6 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -42860,6 +42860,9 @@ poemzet2 @source:skeleton/i7000.cpp i7000 +@source:skeleton/iam2.cpp +zhonggmj + @source:skeleton/icatel.cpp icatel diff --git a/src/mame/misc/norautp.cpp b/src/mame/misc/norautp.cpp index c7797c11e21..d092ca34543 100644 --- a/src/mame/misc/norautp.cpp +++ b/src/mame/misc/norautp.cpp @@ -226,7 +226,7 @@ noraut type 60h-63h A0h-A3h C0h-C3h DPHL type 7Ch-7Fh BCh-BFh DCh-DFh - + (*) Confirmed lines. @@ -362,9 +362,9 @@ - the following sets have direct credits to play (no bet), and show paytable when coin-up through dynamic size change - of the lines 5 and 6: - - dphl, dphljp, dphlunkb, sureshoto, smshilo + of the lines 5 and 6: + + dphl, dphljp, dphlunkb, sureshoto, smshilo ******************************************************************************* @@ -623,11 +623,11 @@ - Derivated inputs for fasdrwp. - Added buttons-lamps layout for fastdrwp. - Promoted fastdrwp set to working. - + - Added support for dynamic size chars lines. That fixes the paytable shown in different games - such as dphl, dphljp, dphlunkb, sureshoto, smshilo, - etc, allowing to remove the imperfect graphics flags. + such as dphl, dphljp, dphlunkb, sureshoto, smshilo, + etc, allowing to remove the imperfect graphics flags. - norautua: fixed the overflow when drawing cards in the possible straight case. - Rewrote the screen update to save a big number of lines. @@ -661,12 +661,12 @@ [2025-04] - Decoded color palettes from bipolar PROMs - (applies to hardware types featuring these devices) + (applies to hardware types featuring these devices) - Implemented dynamic palette per line. - Unified sureshoto and dphl machine config. - Real colors for dphl, dphljp, newhilop, pkii_dm, pma, gtipoker, smshilo, fastdrwp, sureshoto, - and dphlunkb. + and dphlunkb. - Fixed more ASCII PCB layouts. - Improved edge connector / pinout diagram. - Fixed documentation about the 3x PPI 8255 devices @@ -828,40 +828,40 @@ void norautp_state::video_start() uint32_t norautp_state::screen_update_norautp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - bitmap.fill(0, cliprect); - - for (int y = 0, c = 0; y < 8; y++) + bitmap.fill(0, cliprect); + + for (int y = 0, c = 0; y < 8; y++) { - bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); - - for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++) + bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); + + for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++) { - int t = m_np_vram[c] & 0x3f; - int col = ((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3; - m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0, - double_w ? (x << 5) + 8 : x << 4, y << 5); - } - } - return 0; + int t = m_np_vram[c] & 0x3f; + int col = ((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3; + m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0, + double_w ? (x << 5) + 8 : x << 4, y << 5); + } + } + return 0; } uint32_t norautp_state::screen_update_dphl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - bitmap.fill(0, cliprect); - - for (int y = 0, c = 0; y < 8; y++) + bitmap.fill(0, cliprect); + + for (int y = 0, c = 0; y < 8; y++) { - bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); - - for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++) + bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); + + for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++) { - int t = m_np_vram[c] & 0x3f; - int col = (((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3 ) + (y * 4); - m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0, - double_w ? (x << 5) + 8 : x << 4, y << 5); - } - } - return 0; + int t = m_np_vram[c] & 0x3f; + int col = (((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3 ) + (y * 4); + m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0, + double_w ? (x << 5) + 8 : x << 4, y << 5); + } + } + return 0; } @@ -1035,14 +1035,14 @@ void norautp_state::ppi2_b_w(uint8_t data) Unknow: 7654 3210 - ---- ---x * - ---- --x- * - ---- -x-- * - ---- x--- * - ---x ---- * - --x- ---- * - -x-- ---- * - x--- ---- * + ---- ---x * + ---- --x- * + ---- -x-- * + ---- x--- * + ---x ---- * + --x- ---- * + -x-- ---- * + x--- ---- * */ logerror("PPI2-B: pc:%04x - data:%02x\n", m_maincpu->pc(), data); @@ -1262,9 +1262,9 @@ void norautp_state::gtipa_map(address_map &map) { //map.global_mask(0x7fff); // A15 not connected map(0x0000, 0x3fff).rom(); - map(0xc000, 0xc3ff).ram().share("nvram"); - map(0xd000, 0xd3ff).ram().share("nvram"); - + map(0xc000, 0xc3ff).ram().share("nvram"); + map(0xd000, 0xd3ff).ram().share("nvram"); + } void norautp_state::dphla_map(address_map &map) @@ -3046,7 +3046,7 @@ ROM_END PCB silksceened: DELLFERN U.K. LTD. MADE IN ENGLAND. - + PCB REDESIGNED BY M.A.BROWN. @@ -3103,7 +3103,7 @@ ROM_END | '--------------------' U5 U4 U3 U2 U1 | | U5 | '----------------------------------------------------------------------------------------------' - + */ ROM_START( df_djpkr ) @@ -3117,7 +3117,7 @@ ROM_START( df_djpkr ) ROM_END // Same as above, but with different graphics ROM. -// GFX ROM is identical to mainline one, but copied 32 times to fill the 64k device. +// GFX ROM is identical to mainline one, but copied 32 times to fill the 64k device. ROM_START( df_djpkra ) ROM_REGION( 0x10000, "maincpu", 0 ) // Program ROM is 0000-1fff, copied along the 64K of the ROM ROM_LOAD( "rom_u11.bin", 0x0000, 0x2000, CRC(9d150a47) SHA1(da9c0d6632faab685dd061f39b01d8e65793e1e6) ) @@ -4946,7 +4946,7 @@ void norautp_state::init_enc() static const uint8_t data_sub_table_01[0x100] = {// 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f unkn, unkn, 0x52, unkn, unkn, 0x85, 0x34, 0x60, unkn, unkn, 0x56, unkn, unkn, 0x0b, unkn, 0x7f, // 0x0x - unkn, unkn, 0x9e, 0x1d, 0x63, 0x2a, 0xb0, unkn, unkn, unkn, unkn, 0x4e, unkn, 0x35, 0xea, unkn, // 0x1x + unkn, 0x27, 0x9e, 0x1d, 0x63, 0x2a, 0xb0, unkn, unkn, unkn, unkn, 0x4e, unkn, 0x35, 0xea, unkn, // 0x1x 0x0d, 0xe2, 0x40, 0x45, unkn, unkn, unkn, unkn, 0x08, 0xef, 0x21, unkn, 0x7e, 0x10, unkn, 0x2d, // 0x2x 0x19, 0x0a, unkn, 0x0f, unkn, unkn, 0x50, 0xf4, unkn, unkn, 0x06, unkn, unkn, 0x4d, unkn, unkn, // 0x3x 0x30, 0xb4, unkn, 0xf8, unkn, 0xad, 0x1c, 0x3b, unkn, 0x2b, 0x93, 0xe4, unkn, unkn, unkn, unkn, // 0x4x @@ -4974,7 +4974,7 @@ void norautp_state::init_enc() 0xa5, unkn, 0x4c, unkn, 0x23, 0x54, unkn, unkn, unkn, 0x0a, unkn, unkn, unkn, unkn, unkn, unkn, // 0x6x 0x2b, 0xdd, 0x6b, unkn, 0x5c, unkn, 0x00, unkn, unkn, unkn, unkn, 0x36, unkn, 0x57, 0xce, unkn, // 0x7x 0x1d, unkn, unkn, unkn, 0xbf, 0x32, 0xf0, 0x4f, 0x16, 0x35, 0x63, 0x21, 0x0c, 0x1b, unkn, unkn, // 0x8x - 0x56, unkn, 0xef, unkn, 0x06, unkn, 0x59, 0x04, 0x41, unkn, unkn, unkn, 0x4b, unkn, unkn, unkn, // 0x9x + 0x56, unkn, 0xef, unkn, 0x06, unkn, 0x59, 0x04, 0x41, 0xe8, unkn, unkn, 0x4b, unkn, unkn, unkn, // 0x9x 0x28, 0x7b, 0x3d, unkn, unkn, 0x12, 0xb6, unkn, 0x44, 0xb4, unkn, unkn, unkn, 0x09, unkn, unkn, // 0xax 0xd2, unkn, 0xff, 0x3c, 0x6a, 0x20, 0xab, unkn, unkn, 0x40, 0xee, 0xa0, unkn, 0xbb, 0x68, 0x1e, // 0xbx 0xc5, 0x49, 0x6d, unkn, 0x5f, 0x17, 0xfc, unkn, unkn, 0xb0, unkn, unkn, 0x2f, unkn, 0xbe, unkn, // 0xcx @@ -4992,7 +4992,7 @@ void norautp_state::init_enc() 0x40, unkn, 0x04, 0x3c, 0x12, 0xe3, 0x4c, unkn, unkn, 0xf8, unkn, 0xc5, 0x4e, unkn, unkn, 0x15, // 0x4x 0xf1, 0x20, unkn, 0x93, unkn, 0x94, unkn, 0x16, 0xa5, unkn, unkn, 0xdc, 0x5a, unkn, 0x19, unkn, // 0x5x 0xff, unkn, 0x3b, unkn, 0x55, 0x4b, unkn, unkn, 0x54, 0x47, unkn, 0x50, unkn, unkn, 0x46, unkn, // 0x6x - unkn, unkn, unkn, 0x13, unkn, 0x6e, unkn, unkn, unkn, 0xb0, unkn, 0xb3, 0x90, 0x7a, unkn, unkn, // 0x7x + unkn, unkn, unkn, 0x13, unkn, 0x6e, unkn, unkn, unkn, 0xb0, unkn, 0xb3, 0x90, 0x6c, unkn, unkn, // 0x7x 0xd7, 0xf0, unkn, 0x42, unkn, unkn, 0xc3, unkn, unkn, 0xd5, unkn, 0x22, 0x4a, unkn, 0x4f, unkn, // 0x8x unkn, 0x6a, 0xdb, 0xf7, unkn, 0x37, unkn, unkn, 0xfc, 0x02, unkn, unkn, 0xbd, unkn, unkn, unkn, // 0x9x 0x11, 0x53, unkn, unkn, unkn, 0x1c, unkn, 0x52, 0x63, 0xbc, 0x41, 0xf9, unkn, unkn, 0xc4, unkn, // 0xax @@ -5267,20 +5267,6 @@ void norautp_state::init_enc() case 0x0f: rom[i] = data_sub_table_0f[x]; break; } } - - uint8_t *ROM = memregion("maincpu")->base(); - // fix table for bin to bcd conversion - ROM[0x1da0] = 0x10; // 10.000 - ROM[0x1da1] = 0x27; - ROM[0x1da2] = 0xe8; // 1.000 - ROM[0x1da3] = 0x03; - ROM[0x1da4] = 0x64; // 100 - ROM[0x1da5] = 0x00; - ROM[0x1da6] = 0x0a; // 10 - ROM[0x1da7] = 0x00; - - // fix jump - ROM[0x0b53] = 0x6c; } @@ -5312,7 +5298,7 @@ void norautp_state::init_gtipa() { uint8_t *ROM = memregion("maincpu")->base(); -// ROM[0x07a6] = 0xaf; // xor a (no checksum) +// ROM[0x07a6] = 0xaf; // xor a (no checksum) ROM[0x1ffe] = 0xff; } @@ -5385,4 +5371,4 @@ GAME( 1993, tpoker2, 0, dphltest, norautp, norautp_state, empty_init, //************************************************************************************** // YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS LAYOUT -GAME( 1989, unkljfpk, 0, nortest1, norautp, norautp_state, empty_init, ROT0, "LJF Corporation", "unknown LJF Corporation poker game", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) \ No newline at end of file +GAME( 1989, unkljfpk, 0, nortest1, norautp, norautp_state, empty_init, ROT0, "LJF Corporation", "unknown LJF Corporation poker game", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING ) diff --git a/src/mame/skeleton/iam2.cpp b/src/mame/skeleton/iam2.cpp new file mode 100644 index 00000000000..77182f7621b --- /dev/null +++ b/src/mame/skeleton/iam2.cpp @@ -0,0 +1,196 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Mahjongs running on IAM2 custom CPU + +IAMPCB0007-02 +1184003B + +The main components are: +IAM2 F99130265 custom CPU (?) +2 IS61C1024-20K RAMs (near IAM2) +N3412256P-15 SRAM (near IAM2) +UT6264PC-70LL RAM (near GFX (?) ROM) +U6295 (Oki M6295 clone) +4 banks of 8 DIP switches + +TODO: +- identify CPU arch +*/ + + +#include "emu.h" + +#include "cpu/arm7/arm7.h" +#include "sound/okim6295.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class iam2_state : public driver_device +{ +public: + iam2_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + { } + + void iam2(machine_config &config) ATTR_COLD; + +protected: + virtual void video_start() override ATTR_COLD; + +private: + required_device m_maincpu; + + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void program_map(address_map &map) ATTR_COLD; +}; + + +uint32_t iam2_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + + return 0; +} + +void iam2_state::video_start() +{ +} + + +void iam2_state::program_map(address_map &map) +{ + map(0x00000000, 0x0003ffff).rom(); +} + + +static INPUT_PORTS_START( zhonggmj ) + PORT_START("IN0") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0200, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0400, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") + + PORT_START("DSW2") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8") + + PORT_START("DSW3") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW3:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW3:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW3:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW3:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW3:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW3:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW3:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW3:8") + + PORT_START("DSW4") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW4:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW4:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW4:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW4:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW4:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW4:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW4:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW4:8") +INPUT_PORTS_END + + +static GFXDECODE_START( gfx_iam2 ) + // TODO +GFXDECODE_END + + +void iam2_state::iam2(machine_config &config) +{ + ARM7(config, m_maincpu, 24'000'000); // TODO: unidentified CPU arch and clock not verified + m_maincpu->set_addrmap(AS_PROGRAM, &iam2_state::program_map); + + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 64*8); + screen.set_visarea(0, 64*8-1, 0, 32*8-1); + screen.set_screen_update(FUNC(iam2_state::screen_update)); + + GFXDECODE(config, "gfxdecode", "palette", gfx_iam2); + + PALETTE(config, "palette").set_entries(0x100); // TODO + + // sound hardware + SPEAKER(config, "mono").front_center(); + + OKIM6295(config, "oki", 24'000'000 / 24, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // pin 7 and clock not verified +} + + +ROM_START( zhonggmj ) + ROM_REGION( 0x40000, "maincpu", 0 ) + ROM_LOAD( "zhonggmjmajiang_p28f020.u21", 0x00000, 0x40000, CRC(b6dda141) SHA1(bdaa88d5802226a252bbb222ae37cbc1a9bf0461) ) + + ROM_REGION( 0x400000, "gfx", 0 ) + ROM_LOAD( "zhonggmjmajiang_p28f020.u6", 0x000000, 0x400000, CRC(156eca53) SHA1(7b044048b23b3472a27e32aa05a604a3a4bacd7b) ) // FIXED BITS (xxxxxxxx0xxxxxxx) + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "zhonggmjmajiang_data.u15", 0x00000, 0x80000, CRC(99cb835d) SHA1(3f74e9dcfb9dfcc798fb9abb93afd865a1c6e200) ) +ROM_END + +} // anonymous namespace + + +GAME( 200?, zhonggmj, 0, iam2, zhonggmj, iam2_state, empty_init, ROT0, "I.A.M.", "Zhongguo Majiang", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )