diff options
Diffstat (limited to 'src/mame/igs/igs_m036.cpp')
-rw-r--r-- | src/mame/igs/igs_m036.cpp | 715 |
1 files changed, 715 insertions, 0 deletions
diff --git a/src/mame/igs/igs_m036.cpp b/src/mame/igs/igs_m036.cpp new file mode 100644 index 00000000000..81575003673 --- /dev/null +++ b/src/mame/igs/igs_m036.cpp @@ -0,0 +1,715 @@ +// license:BSD-3-Clause +// copyright-holders: David Haywood + +/* IGS Gambling games using IGS036 CPU + pgm2.cpp also uses this CPU + +<Chao Ji Da Heng 2> +cjdh2.zip +--------------------------------------------------- +CPU: IGS036 +GFX: IGS036 +SND: 6295 +============================================== +a IGS game use IGS036 chip +IGS036 could be a upgraded version of IGS027A +but with GFX processor integrated + +I don't know the CPU core (should be ARM based due to fail test) +the chip has internal rom built-in +the FLASH(u33, EV29LV160AB-90PCR) is external rom and encrypted +if the external rom is decrypted then we can +try to trojan the internal rom +here we offer several revisions of the same game to see +if anyone could find any clue, these 4 revision can +be programmed and running on a same PCB. +=================================================== +filename | +--------------------------------------------------- +cjdh2_s215cn.u33 | PRG (Ver S215CN) +cjdh2_s311cn.rom | PRG (Ver S311CN) +cjdh2_s311cna.rom | PRG (Ver S311CNA) +cjdh2_s311cnb.rom | PRG (Ver S311CNB) +cjdh2_cg1.u8 | GFX ROM +cjdh2_cg2.u24 | GFX ROM +cjdh2_sp.u20 | SND ROM +DSC00257.JPG | PCB Photo +--------------------------------------------------- + +(dump by XingXing) + + +<Super Dou Di Zhu Special> +cjddzsp.zip +--------------------------------------------------- +CPU: IGS036 +GFX: IGS036 +SND: TT5665 +---------------------------------------------------------------------------- +Filename TYPE CRC32 SHA1 +cjddzsp_s122cn.u27 GFX 797e5ba3 784fae513ac8cfd1143f0d0ce0936f74e2e64e48 +cjddzsp_s122cn.u28 GFX d0441a6b e1c948f94472398aa5887963cf8e87be28dd66e0 +cjddzsp_s122cn.u30 SND e0e02a57 96074a5226dd24d0bc150adff7324b5349cb5dc2 +cjddzsp_s122cn.u18 PRG 4a42aad6 96805e5bfbd50686177fe50020229ea8787ade17 +---------------------------------------------------------------------------- +check more info and photo from cjdh2.zip!!! + +(dump by XingXing) + +*/ + +#include "emu.h" + +#include "igs036crypt.h" + +#include "cpu/arm7/arm7.h" +#include "sound/okim6295.h" +#include "sound/tt5665.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + + +namespace { + +class igs_m036_state : public driver_device +{ +public: + igs_m036_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") { } + + void igs_m036_tt(machine_config &config) ATTR_COLD; + void igs_m036(machine_config &config) ATTR_COLD; + + void init_igs_m036() ATTR_COLD; + void init_cjdh2() ATTR_COLD; + void init_cjddzsp() ATTR_COLD; + void init_igsm312() ATTR_COLD; + +private: + uint32_t screen_update_igs_m036(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + + required_device<cpu_device> m_maincpu; + + void pgm_create_dummy_internal_arm_region() ATTR_COLD; + + void igs_m036_map(address_map &map) ATTR_COLD; +}; + + + + +uint32_t igs_m036_state::screen_update_igs_m036(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void igs_m036_state::igs_m036_map(address_map &map) +{ + map(0x00000000, 0x00003fff).rom(); // Internal ROM + map(0x08000000, 0x081fffff).rom().region("user1", 0); // not 100% sure it maps here. + +} + +static INPUT_PORTS_START( igs_m036 ) +INPUT_PORTS_END + + + +ROM_START( cjdh2 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "chaohen2_igs036", 0x00000, 0x4000, NO_DUMP ) + + // there is also a square socketed chip like the one on Haunted House (igs_m027) probably in need of dumping + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjdh2_s311cn.u33", 0x000000, 0x200000, CRC(a6fb72f0) SHA1(1d9583eafaea21d5ec078b7f2e3dc426571a9550) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "cjdh2_sp.u20", 0x000000, 0x200000, CRC(14a20112) SHA1(de49ecbc6ffd89e8d2e0a4cf1f4cba1a78810d42) ) + + ROM_REGION( 0x800100*2, "gfx", 0 ) + ROM_LOAD( "cjdh2_cg1.u8", 0x000000, 0x800100, CRC(c14bf4b2) SHA1(32bdd7c498b75f3444bb6a6ccf0981d5dd46028c) ) + ROM_LOAD( "cjdh2_cg2.u24", 0x800100, 0x800100, CRC(f9c747c3) SHA1(c4ff67e9da1322536841b8a9e9d9cfea6d7ebc4a) ) +ROM_END + +ROM_START( cjdh2a ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "chaohen2_igs036", 0x00000, 0x4000, NO_DUMP ) + + // there is also a square socketed chip like the one on Haunted House (igs_m027) probably in need of dumping + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjdh2_s311cna.u33", 0x000000, 0x200000, CRC(0bc6bc1b) SHA1(c891a7051cda1fd250d9380d7f33b47c375db74d) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "cjdh2_sp.u20", 0x000000, 0x200000, CRC(14a20112) SHA1(de49ecbc6ffd89e8d2e0a4cf1f4cba1a78810d42) ) + + ROM_REGION( 0x800100*2, "gfx", 0 ) + ROM_LOAD( "cjdh2_cg1.u8", 0x000000, 0x800100, CRC(c14bf4b2) SHA1(32bdd7c498b75f3444bb6a6ccf0981d5dd46028c) ) + ROM_LOAD( "cjdh2_cg2.u24", 0x800100, 0x800100, CRC(f9c747c3) SHA1(c4ff67e9da1322536841b8a9e9d9cfea6d7ebc4a) ) +ROM_END + +ROM_START( cjdh2b ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "chaohen2_igs036", 0x00000, 0x4000, NO_DUMP ) + + // there is also a square socketed chip like the one on Haunted House (igs_m027) probably in need of dumping + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjdh2_s311cnb.u33", 0x000000, 0x200000, CRC(ddcf50bd) SHA1(39a3ed728be5894a2fec5cf0858f6f40be5ccae1) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "cjdh2_sp.u20", 0x000000, 0x200000, CRC(14a20112) SHA1(de49ecbc6ffd89e8d2e0a4cf1f4cba1a78810d42) ) + + ROM_REGION( 0x800100*2, "gfx", 0 ) + ROM_LOAD( "cjdh2_cg1.u8", 0x000000, 0x800100, CRC(c14bf4b2) SHA1(32bdd7c498b75f3444bb6a6ccf0981d5dd46028c) ) + ROM_LOAD( "cjdh2_cg2.u24", 0x800100, 0x800100, CRC(f9c747c3) SHA1(c4ff67e9da1322536841b8a9e9d9cfea6d7ebc4a) ) +ROM_END + +ROM_START( cjdh2c ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "chaohen2_igs036", 0x00000, 0x4000, NO_DUMP ) + + // there is also a square socketed chip like the one on Haunted House (igs_m027) probably in need of dumping + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjdh2_s215cn.u33", 0x000000, 0x200000, CRC(ebe35131) SHA1(1f167e70a80b39e0658fd97c249982a0aa622683) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "cjdh2_sp.u20", 0x000000, 0x200000, CRC(14a20112) SHA1(de49ecbc6ffd89e8d2e0a4cf1f4cba1a78810d42) ) + + ROM_REGION( 0x800100*2, "gfx", 0 ) + ROM_LOAD( "cjdh2_cg1.u8", 0x000000, 0x800100, CRC(c14bf4b2) SHA1(32bdd7c498b75f3444bb6a6ccf0981d5dd46028c) ) + ROM_LOAD( "cjdh2_cg2.u24", 0x800100, 0x800100, CRC(f9c747c3) SHA1(c4ff67e9da1322536841b8a9e9d9cfea6d7ebc4a) ) +ROM_END + +ROM_START( cjdh2d ) // PCB-0674-03-IK. IGS036 + M6295 compatible + Altera EPM3032ALC44-10N + 2 banks of 8 DIP switches + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "d7_igs036.u18", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjdh2_s311cn.u33", 0x000000, 0x200000, CRC(a6fb72f0) SHA1(1d9583eafaea21d5ec078b7f2e3dc426571a9550) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "ik_sp_u20.u20", 0x000000, 0x200000, CRC(14a20112) SHA1(de49ecbc6ffd89e8d2e0a4cf1f4cba1a78810d42) ) + + ROM_REGION( 0x1400000, "gfx", 0 ) + ROM_LOAD( "ik-cg_u5.u5", 0x0000000, 0x0800000, CRC(701b4197) SHA1(e84d9d79db5eb8641b196f95b260079abaf12572) ) + ROM_LOAD( "ik-cg_u9.u9", 0x0800000, 0x0200000, CRC(ca402fa0) SHA1(058fc76dd712535e7c2f7851604b4c561cc5494b) ) + ROM_LOAD( "ik-cg_u24.u24", 0x0a00000, 0x0800000, CRC(6699d712) SHA1(812a4aa43066a78c1691317005099ffc4526696b) ) + ROM_LOAD( "ik-cg_u28.u28", 0x1200000, 0x0200000, CRC(53226179) SHA1(59cdb1762416c593dd00aa6ab9c3bbdbd80479f4) ) +ROM_END + + +ROM_START( cjddzsp ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "cjddzsp_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "cjddzsp_s122cn.u18", 0x000000, 0x200000, CRC(4a42aad6) SHA1(96805e5bfbd50686177fe50020229ea8787ade17) ) + + ROM_REGION( 0x800100, "tt5665", 0 ) // samples + ROM_LOAD( "cjddzsp_s122cn.u27", 0x000000, 0x800100, CRC(797e5ba3) SHA1(784fae513ac8cfd1143f0d0ce0936f74e2e64e48)) + + ROM_REGION( 0x800100*2, "gfx", 0 ) + ROM_LOAD( "cjddzsp_s122cn.u28", 0x000000, 0x800100, CRC(d0441a6b) SHA1(e1c948f94472398aa5887963cf8e87be28dd66e0) ) + ROM_LOAD( "cjddzsp_s122cn.u30", 0x800100, 0x800100, CRC(e0e02a57) SHA1(96074a5226dd24d0bc150adff7324b5349cb5dc2) ) +ROM_END + + +/******************************************************************* +Long Hu Zheng Ba Te Bie Ban, IGS, 2009 +Que Huang Zheng Ba, IGS, 2007 +(Year not shown on title screens but date shown on error screen when program ROM removed) +Hardware Info by Guru +--------------------- + +PCB-0701-01-IU (Que Huang Zheng Ba) +PCB-0799-02-IU-1 (Long Hu Zheng Ba Te Bie Ban) +|----| |-------------------------------| |------| +| |--| JAMMA |--| | +| ULN2004 TDA1519 | +|-| 7407 ULN2004 VOL | + | LV245 LV245 4.952MHz | +|-| LV245 LV245 EPM3032 |------| UPC844| +| 20MHz |TT5665| U43| +|1 |------| |------| QS3257 | +|8 |IGS036| QS3257 | +|W | | | +|A |------| U27 CON3| +|Y 7404 32.768kHz | +| 7404 U28 | +|-| HC132 U18 | + | SW4 16LV1024 U29 | + | LV245 JP8| +|-| BATT U30 | +| 1117-18 SW1 | +|10 TYN408G SW2 U31 | +|WAY 1084-33 SW3 | +| JP7| +|-------------------------------------------------| +Notes: + IGS036 - Custom SOC in BGA package with internal ROM. SOC is possibly ARM-based. Clock input 20.000MHz + TT5665 - Tontek Design Technology TT5665 8-Channel (or 4-Channel L/R Stereo) ADPCM Voice Synthesis LSI + Clock input 4.952MHz, pin 25 (SS) high, S0 and S1 low. Game sound is very low quality. + EPM3032 - Altera EPM3032 CPLD in PLCC44 package + Sticker on Que Huang Zheng Ba: "IU U23" + Sticker on Long Hu Zheng Ba Te Bie Ban: "IU-1 U23" + TDA1519 - NXP TDA1519 6W Stereo Power Amplifier IC + UPC844 - NEC uPC844 Quad Operational Amplifier + QS3257 - IDT QS3257 Mux/Demux (=74LS257) + ULN2004 - Texas Instruments ULN2004 Darlington Array + LV245 - 74LV245A Octal Bus Transceiver + 7407 - 7407D Hex Buffer + 7404 - 7404D Hex Inverter + HC132 - 74HC132D Quadruple 2-Input Positive-NAND Schmitt Trigger + 16LV1024 - Chiplus CS16LV10243GCR70 64kBx16-bit SRAM + U43 - PS/2 Port (not populated on PCB-0799) + CON3 - DB9 Port (not populated on PCB-0799) + JP7 - 4-pin power connector + JP8 - 10-pin connector (not populated, might be for JTAG programming) + BATT - 3V Coin Battery + SW1-3 - 8-position DIP Switch + SW4 - SPDT Switch (clears high scores/NVRAM) + 1117-18 - 1.8V 800mA LDO Regulator + 1084-33 - 3.3V 5A LDO Regulator + TYN408G - ST TYN408G SCR + U18 - EV29LV160AB 2Mx8-bit/1Mx16-bit DIP42 3.3V Flash ROM. ROM data is 16-bit. + The ROM is not pin compatible with 27C160 and must be dumped using a custom adapter. + This ROM is the game-specific program code. There is common code inside the IGS036 SOC because + if the program ROM is removed and booted the screen shows 'PROGRAM ROM ERROR' + - Que Huang Zheng Ba: V100CN_U18.U18 + - Long Hu Zheng Ba Te Bie Ban: S101CN_U18.U18 + U27-U31 - EV29LV640MT 8Mx8-bit/4Mx16-bit DIP48 Flash ROM (U29 & U31 not populated). ROM data is 16-bit. + U27 - Audio Samples for TT5665 + Other ROMs - Graphics + +*******************************************************************/ + +ROM_START( lhtb ) // PCB-0799-02-IU-1, every ROM label starts with 龍虎特別版 + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "cn1012_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "s-101cn.u18", 0x000000, 0x200000, CRC(1020f4b5) SHA1(953bb776a804738c624a1dca336e42beb10238f7) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "s101cn_u27.u27", 0x000000, 0x800000, CRC(8db377ae) SHA1(769c146104d8577b337d5aa8b388b9c8b726dd21) ) + + ROM_REGION( 0x800000*2, "gfx", 0 ) + ROM_LOAD( "s101cn_u28.u28", 0x000000, 0x800000, CRC(75029040) SHA1(d1d0fd696a6c2819034b089e5d2e97b6d5ccc5f9) ) + // u29 not populated + ROM_LOAD( "s101cn_u30.u30", 0x800000, 0x800000, CRC(4024bd96) SHA1(c3f1c616c9783560a5ea0f8727e39c20c64d46f2) ) + // u31 not populated, etched CG1-L on PCB +ROM_END + +ROM_START( qhzb ) // PCB-0701-01-IU + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "qhzb_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v100cn_u18.u18", 0x000000, 0x200000, CRC(8c2733b7) SHA1(226768eead8d7754b2468384e5e691812d0ac96d) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "sp_u27.u27", 0x000000, 0x800000, CRC(624ff81a) SHA1(99f06f725b761418e88198493276982e367bd432) ) // 1xxxxxxxxxxxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x800000*2, "gfx", 0 ) + ROM_LOAD( "cg_u28.u28", 0x000000, 0x800000, CRC(04105f6f) SHA1(e917825c2304bba3362aecbfab73d2e2b340478e) ) // FIXED BITS (xxxxxxxx0000xxxx) + // u29 not populated + ROM_LOAD( "cg_u30.u30", 0x800000, 0x800000, CRC(37c7d442) SHA1(81682aa1ba6912919c85ee8f68c2e9821f4a3171) ) + // u31 not populated, etched CG1-L on PCB +ROM_END + + +ROM_START( lhzb3in1 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "lhzb3in1_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "lhzb3in1_v100cn.u17", 0x000000, 0x200000, CRC(03caaba4) SHA1(701b97d791e9329bad2ddc4d365748e65c430758) ) + + ROM_REGION( 0x1000000, "tt5665", 0 ) // samples + ROM_LOAD( "lhzb3in1_v100cn.u29", 0x000000, 0x800000, CRC(d8c160a9) SHA1(4b567571764db679a265ae075136128db495acdd) ) + ROM_LOAD( "lhzb3in1_v100cn.u28", 0x800000, 0x800000, CRC(68624630) SHA1(56e638d59c4533136f69db22f562b39120b516c1) ) // 11xxxxxxxxxxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x2000000, "gfx", 0 ) + ROM_LOAD( "lhzb3in1_v100cn.u30", 0x0000000, 0x800000, CRC(fb4124d7) SHA1(324fe2ade17b0ee9833decf2cab9dd4654a04cec) ) + ROM_LOAD( "lhzb3in1_v100cn.u31", 0x0800000, 0x800000, CRC(4572ff90) SHA1(5d4a40ddec1505edc8a1e35130abd7f2c97b1094) ) // FIXED BITS (xxxxxxxx0000xxxx) + ROM_LOAD( "lhzb3in1_v100cn.u32", 0x1000000, 0x800000, CRC(04fe8ca2) SHA1(039009dd535e1388236bd0fd699eeaf593ae5323) ) + ROM_LOAD( "lhzb3in1_v100cn.u33", 0x1800000, 0x800000, CRC(9afa55d1) SHA1(0a19e1c54b271b21fb9931e7c81a9e7d9e77295a) ) +ROM_END + + +ROM_START( igsm312 ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "igsunk_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "m312cn.rom", 0x000000, 0x200000, CRC(5069c310) SHA1(d53a2e8acddfbb7afc27c68c0b3167419a3ec3e6) ) + + ROM_REGION( 0x800100, "tt5665", ROMREGION_ERASE00 ) // samples + // missing + + ROM_REGION( 0x800100*2, "gfx", ROMREGION_ERASE00 ) + // missing +ROM_END + + +// PCB-0999-00-KO main with PCB-0634-02-IN riser board for GFX ROMs + PCB-0998-01-KO-C for I/O +ROM_START( mghammer ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036E ARM based MCU (1119 0T7643 IGS036E) + ROM_LOAD( "mghammer_igs036e", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v_100jp.u26", 0x000000, 0x200000, CRC(d78a4dbb) SHA1(149e68c1294b31f4b039d2cd36d36f17873c247e) ) + + ROM_REGION( 0x1000000, "tt5665", ROMREGION_ERASE00 ) // samples + ROM_LOAD( "sp_u17.u17", 0x000000, 0x800000, CRC(dd9b43b6) SHA1(5fa3191a2ebb0ea7fb737e44b1f651987c6c1bbb) ) + ROM_LOAD( "sp_u18.u18", 0x800000, 0x800000, CRC(0998e0c6) SHA1(bfa2b42248dc52f83682bbdec7bb7aaa53b4ac29) ) + + ROM_REGION( 0x4000400, "gfx", 0 ) + ROM_LOAD( "cg_v_100jp.u1", 0x0000000, 0x1000100, CRC(6800418e) SHA1(81eb23f8d5c6d4eeac6bf7b06897d88d744b9681) ) + ROM_LOAD( "cg_v_100jp.u2", 0x1000100, 0x1000100, CRC(decffe69) SHA1(6161208eb399a8f418244c19e0236b4db79d0300) ) + ROM_LOAD( "cg_v_100jp.u3", 0x2000200, 0x1000100, CRC(6b6df061) SHA1(ba1e020626ce50a7fc5859f41ec717b0b39229cb) ) + ROM_LOAD( "cg_v_100jp.u4", 0x3000300, 0x1000100, CRC(5813401d) SHA1(7675a691ce0f6b99fa15a7c0004a733121772c3c) ) + + ROM_REGION( 0x04000, "iocpu", 0 ) + // Internal ROM of IGS036E ARM based MCU (1119 0T7643 IGS036E), on I/O board (yes, same IGS036 code as main) + ROM_LOAD( "io_mghammer_igs036e", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "io", 0 ) // external ARM data / prg + ROM_LOAD( "io_v_100jp.u1", 0x000000, 0x200000, CRC(cf6c7440) SHA1(53d7b8240b153045569cac72683670df45c6ed32) ) +ROM_END + + +ROM_START( lhfy ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "lhfy_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v-206cn.u11", 0x000000, 0x200000, CRC(45bd9c9f) SHA1(3a9b06bf9c66520136522d67ed12f800569580f5) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "v-206cn.u19", 0x000000, 0x800000, CRC(f7990ed4) SHA1(e8a72bc0926911ba5c079b02dd324ac060e8c768) ) // same as lhzbgqb + + ROM_REGION( 0x10000000, "gfx", ROMREGION_ERASE00 ) + // 4x 64MB flash ROMs (U1, U2, U3, U4) mounted onto a custom SODIMM at CN1 with a sticker "CG V206CN" + ROM_LOAD( "cg_v206cn.u1", 0x0000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v206cn.u2", 0x4000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v206cn.u3", 0x8000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v206cn.u4", 0xc000000, 0x4000000, NO_DUMP ) +ROM_END + + +ROM_START( lhzbgqb ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "lhzbgqb_igs036", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v-105cn.u11", 0x000000, 0x200000, CRC(cecbb560) SHA1(262d7df19b57e57aa50cc241ddc25090411d6b74) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "v105cn_u19.u19", 0x000000, 0x800000, CRC(f7990ed4) SHA1(e8a72bc0926911ba5c079b02dd324ac060e8c768) ) // same as lhfy + + ROM_REGION( 0x10000000, "gfx", ROMREGION_ERASE00 ) + // 4x 64MB flash ROMs (U1, U2, U3, U4) mounted onto a custom SODIMM at CN1 with a sticker "CG V105CN" + ROM_LOAD( "cg_v105cn.u1", 0x0000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v105cn.u2", 0x4000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v105cn.u3", 0x8000000, 0x4000000, NO_DUMP ) + ROM_LOAD( "cg_v105cn.u4", 0xc000000, 0x4000000, NO_DUMP ) +ROM_END + + +// this PCB has IGS036 MCU, R5F21256SN MCU, TT5665, ALTERA EPM3032ALC44-10N (stickered IS U15) +// ROM labels actually are written "super 70's..." +ROM_START( super70s ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "f9_igs036.u28", 0x00000, 0x4000, NO_DUMP ) + + ROM_REGION( 0x8000, "mcu", 0 ) + ROM_LOAD( "r5f21256sn.u32", 0x0000, 0x8000, NO_DUMP ) + + // this seems to be dumped half sized if compared to other dumps in the driver of this same kind of ROM + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "super_70s_v-100us.u31", 0x000000, 0x100000, BAD_DUMP CRC(60020aa3) SHA1(f6be4f9588192ef1e57182e5a61228440e5cfa64) ) // EV29LV160, BADADDR xxxxxxxxxxxxxxxxxx-x + + // this seems to be dumped half sized if compared to other dumps in the driver of this same kind of ROM + ROM_REGION( 0x400000, "tt5665", 0 ) // samples + ROM_LOAD( "super_70s_v100us_u27.u27", 0x000000, 0x400000, BAD_DUMP CRC(a57fbc1c) SHA1(c7b0c72e678cd4120f576283eca8d718c058994c) ) // EV29LV640, 11xxxxxxxxxxxxxxxxxxxx = 0x00 + + // these seem to be dumped half sized if compared to other dumps in the driver of this same kind of ROM + ROM_REGION( 0x800000, "gfx", 0 ) + ROM_LOAD( "super_70s_v100us_u25.u25", 0x000000, 0x400000, BAD_DUMP CRC(41baefa5) SHA1(1817bf43b3f72df35d50ef1ceb151d77ecfb988b) ) // EV29LV640 + ROM_LOAD( "super_70s_v100us_u26.u26", 0x400000, 0x400000, BAD_DUMP CRC(39bb6c75) SHA1(bc52e51f1ad3588253cb42eb61baa11d0720c5a5) ) // EV29LV640 +ROM_END + + +// 金花争霸 (Jīn Huā Zhēngbà) +ROM_START( jhzb ) + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "jhzb_igs036", 0x0000, 0x4000, NO_DUMP ) // stickered K7 + + ROM_REGION( 0x10000, "xa:mcu", 0 ) // MX10EXAQC (80C51 XA based MCU) + ROM_LOAD( "xa", 0x00000, 0x10000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v113cn.u17", 0x000000, 0x200000, CRC(1c08099b) SHA1(125a5302935e8bef8d4a4d8a6db748110bcab692) ) // 11xxxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "v113cn.u26", 0x000000, 0x200000, CRC(99fc5dcd) SHA1(e737299d770b0fc3606085a566ad9fbbaca15ff5) ) + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROM_LOAD( "v113cn-cg0-h.u27", 0x000000, 0x800000, CRC(a8fb40e4) SHA1(074ab61158a0baa5811f7d33792bc71051faeb62) ) // FIXED BITS (xxxxxxxx0000xxxx) + ROM_LOAD( "v113cn-cg0-l.u29", 0x800000, 0x800000, CRC(a5f1952c) SHA1(3ae52eb604974414b6b97ff1e0156c39aa05a0cb) ) +ROM_END + + +// 吉祥如意 (Jíxiáng Rúyì) +ROM_START( jxry ) + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "jhzb_igs036", 0x0000, 0x4000, NO_DUMP ) // stickered A3 + + ROM_REGION( 0x10000, "xa:mcu", 0 ) // MX10EXAQC (80C51 XA based MCU) stickered IL U14 + ROM_LOAD( "xa", 0x00000, 0x10000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v-116cn.u20", 0x000000, 0x200000, CRC(a8cd3431) SHA1(b978b2e27fc106a02213b6aa42620fbf287a4d24) ) + + ROM_REGION( 0x200000, "oki", 0 ) // samples + ROM_LOAD( "sp.u18", 0x000000, 0x200000, CRC(725950e1) SHA1(7226d3e9c2cb149dae598479cddeb12446944a1e) ) + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROM_LOAD( "cg1.u22", 0x000000, 0x800000, CRC(bfbedd8c) SHA1(f4d97e9633de6dd87f11eade5752881d61a28a38) ) // FIXED BITS (xxxxxxxx0000xxxx) + ROM_LOAD( "cg2.u24", 0x800000, 0x800000, CRC(c40627e5) SHA1(795217425533c569bad868b16e5b31ba29c587fb) ) +ROM_END + + +// 双龙抢珠特别版 (Shuāng Lóng Qiǎng Zhū Tèbié Bǎn) +ROM_START( slqzsp ) + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "jhzb_igs036", 0x0000, 0x4000, NO_DUMP ) // stickered F8 + + ROM_REGION( 0x10000, "xa:mcu", 0 ) // MX10EXAQC (80C51 XA based MCU) stickered IU U23 + ROM_LOAD( "xa", 0x00000, 0x10000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v104cn.u18", 0x000000, 0x200000, CRC(7819aa1a) SHA1(c63b375916d0009e065b6239bcc752a56d2ee127) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "v104cn.u27", 0x000000, 0x800000, CRC(440617cc) SHA1(87019bde5f0cf2215b6e28434a0593d0b910cbed) ) + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROM_LOAD( "v104cn.u28", 0x000000, 0x800000, CRC(e102b951) SHA1(619cf2aa77996e1831d6ff2116d6ae8045b9066c) ) + ROM_LOAD( "v104cn.u30", 0x800000, 0x800000, CRC(eecf61c6) SHA1(59d330508482dcc0971c5255c6c70c83ba72323c) ) +ROM_END + + +// 鲨鱼大亨 (Shāyú Dàhēng) +ROM_START( sydh ) // PCB-0802-03-JL + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "jhzb_igs036", 0x0000, 0x4000, NO_DUMP ) // stickered C3 + + ROM_REGION( 0x10000, "xa:mcu", 0 ) // MX10EXAQC (80C51 XA based MCU) + ROM_LOAD( "xa", 0x00000, 0x10000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "v-104cn.u20", 0x000000, 0x200000, CRC(43219633) SHA1(0f709c700c661f20a3f47c6df5a35aff9eb05bc6) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "v-104cn.u31", 0x000000, 0x800000, CRC(794a4ebf) SHA1(b6ea2228fc943dc65514d113c36a1e9d69564e9a) ) // 1xxxxxxxxxxxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROM_LOAD( "v-104cn.u33", 0x000000, 0x800000, CRC(cd8a1633) SHA1(2f63167fe282fc648d9e22c6a32d593f41546ba3) ) + ROM_LOAD( "v-104cn.u34", 0x800000, 0x800000, CRC(cb33469a) SHA1(cf2c52ccc688880574452bc806b80519eeff0298) ) +ROM_END + + +// 逍遥斗地主 (Xiāoyáo Dòu Dìzhǔ) +ROM_START( xyddz ) + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal ROM of IGS036 ARM based MCU + ROM_LOAD( "jhzb_igs036", 0x0000, 0x4000, NO_DUMP ) // stickered K8 + + ROM_REGION( 0x10000, "xa:mcu", 0 ) // MX10EXAQC (80C51 XA based MCU) + ROM_LOAD( "xa", 0x00000, 0x10000, NO_DUMP ) + + ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "xyddz.u18", 0x000000, 0x200000, CRC(5c569b88) SHA1(760bb48bb4739ae6f34921b8ed499174a8960001) ) + + ROM_REGION( 0x800000, "tt5665", 0 ) // samples + ROM_LOAD( "m2401.u27", 0x000000, 0x800000, CRC(cfaa177a) SHA1(b1ba246a51c6ec451bcd04392460f7a7ccb75cda) ) + + ROM_REGION( 0x1000000, "gfx", 0 ) + ROM_LOAD( "m2403-cg0-l.u30", 0x000000, 0x800000, CRC(3065ee91) SHA1(9bb1a0a739c244513f7785305aff13c9314a5d16) ) + ROM_LOAD( "s2402-cg0-h.u28", 0x800000, 0x800000, CRC(b0f43dd4) SHA1(5d82fdf3bd5eef1791e7204a040ede06c6028187) ) +ROM_END + + +void igs_m036_state::pgm_create_dummy_internal_arm_region() +{ + uint16_t *temp16 = (uint16_t *)memregion("maincpu")->base(); + for (int i = 0; i < 0x4000 / 2; i += 2) + { + temp16[i] = 0xfffe; + temp16[i + 1] = 0xeaff; + + } + int base = 0; + + // jump straight to where we've mapped the external ROM for testing (should really set up a fake stack etc. too) + + + temp16[(base) / 2] = 0x0004; base += 2; + temp16[(base) / 2] = 0xe59f; base += 2; + temp16[(base) / 2] = 0x0000; base += 2; + temp16[(base) / 2] = 0xe590; base += 2; + temp16[(base) / 2] = 0xff10; base += 2; + temp16[(base) / 2] = 0xe12f; base += 2; + temp16[(base) / 2] = 0x0010; base += 2; + temp16[(base) / 2] = 0x0000; base += 2; + +#if 0 + temp16[(base) / 2] = 0x03c9; base += 2; + temp16[(base) / 2] = 0x0800; base += 2; +#else + temp16[(base) / 2] = 0x0000; base += 2; + temp16[(base) / 2] = 0x0800; base += 2; +#endif + +} + + + +void igs_m036_state::igs_m036(machine_config &config) +{ + IGS036(config, m_maincpu, 20_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &igs_m036_state::igs_m036_map); + + 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(512, 256); + screen.set_visarea(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(igs_m036_state::screen_update_igs_m036)); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(0x200); + + SPEAKER(config, "speaker").front_center(); + OKIM6295(config, "oki", 1'000'000, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "speaker", 1.0); // clock and pin 7 not verified +} + + +void igs_m036_state::igs_m036_tt(machine_config &config) +{ + IGS036(config, m_maincpu, 20_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &igs_m036_state::igs_m036_map); + + 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(512, 256); + screen.set_visarea(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(igs_m036_state::screen_update_igs_m036)); + screen.set_palette("palette"); + + PALETTE(config, "palette").set_entries(0x200); + + SPEAKER(config, "speaker").front_center(); + TT5665(config, "tt5665", 4.952_MHz_XTAL, tt5665_device::ss_state::SS_HIGH, 0).add_route(1, "speaker", 1.0); +} + + + +void igs_m036_state::init_igs_m036() +{ + pgm_create_dummy_internal_arm_region(); +} + +void igs_m036_state::init_cjdh2() +{ + init_igs_m036(); + + igs036_decryptor decrypter(cjdh2_key); + decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0); +} + +void igs_m036_state::init_cjddzsp() +{ + init_igs_m036(); + + igs036_decryptor decrypter(cjddzsp_key); + decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0); +} + +void igs_m036_state::init_igsm312() +{ + init_igs_m036(); + + igs036_decryptor decrypter(m312cn_key); + decrypter.decrypter_rom((uint16_t*)memregion("user1")->base(), memregion("user1")->bytes(), 0); +} + +} // anonymous namespace + + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +GAME( 200?, cjdh2, 0, igs_m036, igs_m036, igs_m036_state, init_cjdh2, ROT0, "IGS", "Chao Ji Da Heng 2 (V311CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, cjdh2a, cjdh2, igs_m036, igs_m036, igs_m036_state, init_cjdh2, ROT0, "IGS", "Chao Ji Da Heng 2 (V311CNA)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, cjdh2b, cjdh2, igs_m036, igs_m036, igs_m036_state, init_cjdh2, ROT0, "IGS", "Chao Ji Da Heng 2 (V311CNB)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, cjdh2c, cjdh2, igs_m036, igs_m036, igs_m036_state, init_cjdh2, ROT0, "IGS", "Chao Ji Da Heng 2 (V215CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 200?, cjdh2d, cjdh2, igs_m036, igs_m036, igs_m036_state, init_cjdh2, ROT0, "IGS", "Chao Ji Da Heng 2 (V311CN, alternate GFX ROMs)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, cjddzsp, 0, igs_m036_tt, igs_m036, igs_m036_state, init_cjddzsp, ROT0, "IGS", "Super Dou Di Zhu Special (V122CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 2007, qhzb, 0, igs_m036_tt, igs_m036, igs_m036_state, init_cjddzsp, ROT0, "IGS", "Que Huang Zheng Ba (V100CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 2009, lhtb, 0, igs_m036_tt, igs_m036, igs_m036_state, init_cjddzsp, ROT0, "IGS", "Long Hu Tebie Ban (V101CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // 龍虎特別版 - Lónghǔ tèbié bǎn + +GAME( 200?, lhzb3in1, 0, igs_m036_tt, igs_m036, igs_m036_state, init_cjddzsp, ROT0, "IGS", "Long Hu Zhengba San He Yi (V100CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // 龙虎争霸三合一 + +GAME( 200?, igsm312, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igsm312, ROT0, "IGS", "unknown 'IGS 6POKER2' game (V312CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // there's very little code and no gfx ROMs, might be a 'set/clear' chip for a gambling game. + +GAME( 200?, super70s, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igsm312, ROT0, "IGS", "Super 70's (V100US)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, jhzb, 0, igs_m036, igs_m036, igs_m036_state, init_igs_m036, ROT0, "IGS", "Jin Hua Zhengba (V113CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, jxry, 0, igs_m036, igs_m036, igs_m036_state, init_igs_m036, ROT0, "IGS", "Jixiang Ruyi (V116CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, slqzsp, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igs_m036, ROT0, "IGS", "Shuang Long Qiang Zhu Tebie Ban (V104CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, sydh, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igs_m036, ROT0, "IGS", "Shayu Daheng (V104CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 200?, xyddz, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igs_m036, ROT0, "IGS", "Xiaoyao Dou Dizhu", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 2010, lhfy, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igsm312, ROT0, "IGS", "Long Hu Feng Yun Gao Qing Ban (V206CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 2010, lhzbgqb, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igsm312, ROT0, "IGS", "Long Hu Zheng Ba Gao Qing Ban (V105CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) + +GAME( 2015, mghammer, 0, igs_m036_tt, igs_m036, igs_m036_state, init_igsm312, ROT0, "IGS / Enheart", "Medal Get Hammer (V100JP)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) |