New systems marked not working

------------------------------
Zhongguo Majiang [little0]

- misc/norautp.cpp: updated decryption tables for norautua / norautub. Also srccleaned
This commit is contained in:
Ivan Vangelista 2025-03-31 20:27:59 +02:00
parent a4bfb636b4
commit b6e44ca5e6
3 changed files with 253 additions and 68 deletions

View File

@ -42860,6 +42860,9 @@ poemzet2
@source:skeleton/i7000.cpp @source:skeleton/i7000.cpp
i7000 i7000
@source:skeleton/iam2.cpp
zhonggmj
@source:skeleton/icatel.cpp @source:skeleton/icatel.cpp
icatel icatel

View File

@ -226,7 +226,7 @@
noraut type 60h-63h A0h-A3h C0h-C3h noraut type 60h-63h A0h-A3h C0h-C3h
DPHL type 7Ch-7Fh BCh-BFh DCh-DFh DPHL type 7Ch-7Fh BCh-BFh DCh-DFh
(*) Confirmed lines. (*) Confirmed lines.
@ -362,9 +362,9 @@
- the following sets have direct credits to play (no bet), - the following sets have direct credits to play (no bet),
and show paytable when coin-up through dynamic size change and show paytable when coin-up through dynamic size change
of the lines 5 and 6: of the lines 5 and 6:
dphl, dphljp, dphlunkb, sureshoto, smshilo dphl, dphljp, dphlunkb, sureshoto, smshilo
******************************************************************************* *******************************************************************************
@ -623,11 +623,11 @@
- Derivated inputs for fasdrwp. - Derivated inputs for fasdrwp.
- Added buttons-lamps layout for fastdrwp. - Added buttons-lamps layout for fastdrwp.
- Promoted fastdrwp set to working. - Promoted fastdrwp set to working.
- Added support for dynamic size chars lines. - Added support for dynamic size chars lines.
That fixes the paytable shown in different games That fixes the paytable shown in different games
such as dphl, dphljp, dphlunkb, sureshoto, smshilo, such as dphl, dphljp, dphlunkb, sureshoto, smshilo,
etc, allowing to remove the imperfect graphics flags. etc, allowing to remove the imperfect graphics flags.
- norautua: fixed the overflow when drawing cards - norautua: fixed the overflow when drawing cards
in the possible straight case. in the possible straight case.
- Rewrote the screen update to save a big number of lines. - Rewrote the screen update to save a big number of lines.
@ -661,12 +661,12 @@
[2025-04] [2025-04]
- Decoded color palettes from bipolar PROMs - 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. - Implemented dynamic palette per line.
- Unified sureshoto and dphl machine config. - Unified sureshoto and dphl machine config.
- Real colors for dphl, dphljp, newhilop, pkii_dm, - Real colors for dphl, dphljp, newhilop, pkii_dm,
pma, gtipoker, smshilo, fastdrwp, sureshoto, pma, gtipoker, smshilo, fastdrwp, sureshoto,
and dphlunkb. and dphlunkb.
- Fixed more ASCII PCB layouts. - Fixed more ASCII PCB layouts.
- Improved edge connector / pinout diagram. - Improved edge connector / pinout diagram.
- Fixed documentation about the 3x PPI 8255 devices - 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) uint32_t norautp_state::screen_update_norautp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
bitmap.fill(0, cliprect); bitmap.fill(0, cliprect);
for (int y = 0, c = 0; y < 8; y++) for (int y = 0, c = 0; y < 8; y++)
{ {
bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); 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++) for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++)
{ {
int t = m_np_vram[c] & 0x3f; int t = m_np_vram[c] & 0x3f;
int col = ((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3; 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, m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0,
double_w ? (x << 5) + 8 : x << 4, y << 5); double_w ? (x << 5) + 8 : x << 4, y << 5);
} }
} }
return 0; return 0;
} }
uint32_t norautp_state::screen_update_dphl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) uint32_t norautp_state::screen_update_dphl(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{ {
bitmap.fill(0, cliprect); bitmap.fill(0, cliprect);
for (int y = 0, c = 0; y < 8; y++) for (int y = 0, c = 0; y < 8; y++)
{ {
bool double_w = y == 2 || ((y == 4 || y == 5) && !(m_display_line_control && m_vreg)); 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++) for (int x = 0; x < (double_w ? 16 : 32); c += double_w ? 2 : 1, x++)
{ {
int t = m_np_vram[c] & 0x3f; int t = m_np_vram[c] & 0x3f;
int col = (((m_np_vram[c] >> 6) + (double_w && y >= 4 ? 4 : 0)) & 3 ) + (y * 4); 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, m_gfxdecode->gfx(double_w ? 1 : 0)->opaque(bitmap, cliprect, t, col, 0, 0,
double_w ? (x << 5) + 8 : x << 4, y << 5); double_w ? (x << 5) + 8 : x << 4, y << 5);
} }
} }
return 0; return 0;
} }
@ -1035,14 +1035,14 @@ void norautp_state::ppi2_b_w(uint8_t data)
Unknow: Unknow:
7654 3210 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); 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.global_mask(0x7fff); // A15 not connected
map(0x0000, 0x3fff).rom(); map(0x0000, 0x3fff).rom();
map(0xc000, 0xc3ff).ram().share("nvram"); map(0xc000, 0xc3ff).ram().share("nvram");
map(0xd000, 0xd3ff).ram().share("nvram"); map(0xd000, 0xd3ff).ram().share("nvram");
} }
void norautp_state::dphla_map(address_map &map) void norautp_state::dphla_map(address_map &map)
@ -3046,7 +3046,7 @@ ROM_END
PCB silksceened: PCB silksceened:
DELLFERN U.K. LTD. DELLFERN U.K. LTD.
MADE IN ENGLAND. MADE IN ENGLAND.
PCB REDESIGNED BY M.A.BROWN. PCB REDESIGNED BY M.A.BROWN.
@ -3103,7 +3103,7 @@ ROM_END
| '--------------------' U5 U4 U3 U2 U1 | | '--------------------' U5 U4 U3 U2 U1 |
| U5 | | U5 |
'----------------------------------------------------------------------------------------------' '----------------------------------------------------------------------------------------------'
*/ */
ROM_START( df_djpkr ) ROM_START( df_djpkr )
@ -3117,7 +3117,7 @@ ROM_START( df_djpkr )
ROM_END ROM_END
// Same as above, but with different graphics ROM. // 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_START( df_djpkra )
ROM_REGION( 0x10000, "maincpu", 0 ) // Program ROM is 0000-1fff, copied along the 64K of the ROM 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) ) 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] = 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 {// 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, 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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; 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(); uint8_t *ROM = memregion("maincpu")->base();
// ROM[0x07a6] = 0xaf; // xor a (no checksum) // ROM[0x07a6] = 0xaf; // xor a (no checksum)
ROM[0x1ffe] = 0xff; 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 // 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 ) GAME( 1989, unkljfpk, 0, nortest1, norautp, norautp_state, empty_init, ROT0, "LJF Corporation", "unknown LJF Corporation poker game", MACHINE_UNEMULATED_PROTECTION | MACHINE_NOT_WORKING )

196
src/mame/skeleton/iam2.cpp Normal file
View File

@ -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<cpu_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 )