diff --git a/src/mame/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index 80f8ec61694..428343eef50 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -18,6 +18,7 @@ TODO: dispensed" than the number of coins/tickets the games are supposed to pay out. * xyddzhh: Hook up mahjong-style inputs and improve DSW definitions + * xyddzhh: Add Oki banking ***************************************************************************/ @@ -471,6 +472,7 @@ void bmcpokr_state::xyddzhh_map(address_map &map) { bmcpokr_mem(map); + map(0x00eec6, 0x00eec9).nopw(); // bug in the code? map(0x330000, 0x330001).r(FUNC(bmcpokr_state::xyddzhh_prot_r)); map(0x340009, 0x340009).lr8(NAME([] () -> uint8_t { return 0xff; })); // andi.b #$7f, so returning 0x00 stops it from working map(0x360000, 0x360001).r(FUNC(bmcpokr_state::xyddzhh_dsw_r)); @@ -1633,4 +1635,4 @@ GAME( 1998, fengyunh, 0, fengyunh, fengyunh, bmcpokr_state, empty_init, R GAME( 1998, shendeng, mjmaglmp, shendeng, shendeng, bmcpokr_state, empty_init, ROT0, "BMC", "Pili Shen Deng", MACHINE_SUPPORTS_SAVE ) GAME( 1999, bmcpokr, 0, bmcpokr, bmcpokr, bmcpokr_state, empty_init, ROT0, "BMC", "Dongfang Shenlong", MACHINE_SUPPORTS_SAVE ) GAME( 2000, mjmaglmp, 0, mjmaglmp, mjmaglmp, bmcpokr_state, empty_init, ROT0, "BMC", "Mahou no Lamp (v. JAA02)", MACHINE_SUPPORTS_SAVE ) -GAME( 2006, xyddzhh, 0, xyddzhh, xyddzhh, bmcpokr_state, empty_init, ROT0, "Herb Home", "Xingyun Dou Dizhu", MACHINE_SUPPORTS_SAVE ) +GAME( 2006, xyddzhh, 0, xyddzhh, xyddzhh, bmcpokr_state, empty_init, ROT0, "Herb Home", "Xingyun Dou Dizhu", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/bordun/att.cpp b/src/mame/bordun/att.cpp index a9ef393b3de..c66d5a12e35 100644 --- a/src/mame/bordun/att.cpp +++ b/src/mame/bordun/att.cpp @@ -6,7 +6,7 @@ Bordun poker games on ATT / ATT III PCBs TODO: -* this is basically misc/skylncr.cpp without reels and PPIs and with more advanced sound. Merge? +* this is basically bordun/skylncr.cpp without reels and PPIs and with more advanced sound. Merge? * outputs * lianhp3: title screen says 2003TM but PCB is from 2010? Was this really released in 2003? diff --git a/src/mame/igs/goldstar.cpp b/src/mame/igs/goldstar.cpp index 158e914f4fa..6b4cd32de6e 100644 --- a/src/mame/igs/goldstar.cpp +++ b/src/mame/igs/goldstar.cpp @@ -12289,7 +12289,7 @@ RAMs 1x D4016C-1 u23 PLDs -1x unknowun Cl-001 (QFP144) CY144A read protected +1x unknown Cl-001 (QFP144) CY144A read protected 4x GAL20V8A-15LNC pl1, pl4, pl5, pl6 read protected 2x PALCE20V8H-25PC/4 u2,u? read protected 1x PALCE22V10H-25PC/4 u? read protected diff --git a/src/mame/igs/igs_68k_023vid.cpp b/src/mame/igs/igs_68k_023vid.cpp new file mode 100644 index 00000000000..7cf8f3ee0c8 --- /dev/null +++ b/src/mame/igs/igs_68k_023vid.cpp @@ -0,0 +1,273 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +IGS games based on M68000 + IGS023 for video. +PGM-like but with different sound hardware. + +TODO: +* currently stuck at ACK 2 error during boot (IGS025?) +* identify sound hardware +* identify where the M6502 core is contained +*/ + + +#include "emu.h" + +#include "igs023_video.h" + +#include "cpu/m6502/m6502.h" +#include "cpu/m68000/m68000.h" +#include "machine/timer.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class igs_68k_023vid_state : public driver_device +{ +public: + igs_68k_023vid_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu"), + m_video(*this, "igs023"), + m_mainram(*this, "sram") + { } + + void xypmd(machine_config &config) ATTR_COLD; + + +private: + required_device m_maincpu; + required_device m_video; + + required_shared_ptr m_mainram; + + void screen_vblank(int state); + + TIMER_DEVICE_CALLBACK_MEMBER(interrupt); + + void main_program_map(address_map &map) ATTR_COLD; + void sub_program_map(address_map &map) ATTR_COLD; +}; + + +TIMER_DEVICE_CALLBACK_MEMBER(igs_68k_023vid_state::interrupt) +{ + int const scanline = param; + + if (scanline == 0) + m_maincpu->set_input_line(4, HOLD_LINE); +} + + +void igs_68k_023vid_state::screen_vblank(int state) +{ + // rising edge + if (state) + { + m_video->get_sprites(); + + // vblank start interrupt + m_maincpu->set_input_line(M68K_IRQ_6, HOLD_LINE); + } +} + + +void igs_68k_023vid_state::main_program_map(address_map &map) +{ + map(0x000000, 0x07ffff).rom(); + map(0x090000, 0x090001).portr("IN0"); + //map(0x0c0000, 0x0c0001).nopr().w(m_igs_mux, FUNC(igs_mux_device::address_w)).umask16(0x00ff); // TODO: IGS025 here + //map(0x0c0002, 0x0c0003).rw(m_igs_mux, FUNC(igs_mux_device::data_r), FUNC(igs_mux_device::data_w)).umask16(0x00ff); + map(0x800000, 0x81ffff).ram().mirror(0x0e0000).share(m_mainram); + map(0x900000, 0x907fff).mirror(0x0f8000).rw(m_video, FUNC(igs023_video_device::videoram_r), FUNC(igs023_video_device::videoram_w)); + map(0xa00000, 0xa011ff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); + map(0xb00000, 0xb0ffff).rw(m_video, FUNC(igs023_video_device::videoregs_r), FUNC(igs023_video_device::videoregs_w)); +} + +void igs_68k_023vid_state::sub_program_map(address_map &map) +{ + map(0xe000, 0xffff).rom().region("subcpu", 0x0000); +} + + +static INPUT_PORTS_START( xypmd ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, 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") +INPUT_PORTS_END + + +void igs_68k_023vid_state::xypmd(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 20_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &igs_68k_023vid_state::main_program_map); + TIMER(config, "scantimer").configure_scanline(FUNC(igs_68k_023vid_state::interrupt), "screen", 0, 1); + + m6502_device &subcpu(M6502(config, "subcpu", 8_MHz_XTAL)); // TODO: something M6502 derived (data.u13 is M6502 derived code) + subcpu.set_addrmap(AS_PROGRAM, &igs_68k_023vid_state::sub_program_map); + + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: verify everything once emulation works + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(1000)); + screen.set_size(512, 256); + screen.set_visarea(0, 448-1, 0, 224-1); + screen.set_screen_update("igs023", FUNC(igs023_video_device::screen_update)); + screen.screen_vblank().set(FUNC(igs_68k_023vid_state::screen_vblank)); + screen.set_palette("palette"); + + + PALETTE(config, "palette").set_format(palette_device::xRGB_555, 0x1200 / 2); + + IGS023_VIDEO(config, m_video, 0); + m_video->set_palette("palette"); + m_video->read_spriteram_callback().set([this](offs_t offset) { return m_mainram[offset]; }); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + // TODO: is sound provided by the two Novatek chips? +} + + +/* +Xing Yun Pao Ma Di, IGS, 2003 +Hardware Info By Guru +--------------------- + +IGS PCB NO-0255-1 + |----------------------------------------------| + | IDC34 SOCKET.U11 |------| TL082 VOL | +|-| |NOVATEK OM8383S| +|1 TLF521(x23) 8MHz |NT3570F TL082 | +|8 DATA.U13 |------| | +|W | +|A |------| 7805 | +|Y 24257 |NOVATEK | +|-| |NT3580F | + | 24257 24257 |------| T518B| + | TEXT.U5 |---------| | +|-| | IGS023 | PAL V-401CN.U26 | +|1 CG.U6 | | PAL 68000 24258 | +|0 | | PAL | +|W CG.U7 | | |-----| 24258 | +|A |---------| |IGS025 20MHz BATT| +|Y DSW1 50MHz| S8 | SW3 | +|-|ULN2004 DSW2 |-----| TLF521(x17) | + | TLF521(x6) |--| JAMMA |--| | + |-------------| |----------------------| |---| +Notes: + 68000 - Clock 20MHz + 24257 - 32kB x8-bit SRAM + 24258 - 32kB x8-bit SRAM + IGS023 - Custom IGS023 Graphics Chip (also used on IGS PGM) + IGS025 - Custom IGS025 Chip with Sticker 'S8' +*/ + +ROM_START( xypmd ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "v-401cn.u26", 0x00000, 0x80000, CRC(84f4f46c) SHA1(c04d3aaf531caba6cdf8296570ce24964bd7a077) ) // version string at 0x360dc + + ROM_REGION( 0x10000, "subcpu", 0 ) // TODO: sound related? almost empty + ROM_LOAD( "data.u13", 0x00000, 0x10000, CRC(7c0d8c8f) SHA1(d36ae4749fd248c399741f2024f2f44cf22536b8) ) // 111xxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x200000, "igs023", 0 ) + ROM_LOAD( "text.u5", 0x000000, 0x200000, CRC(253b8517) SHA1(3f583410ab7083d5f45a5e23f73bddd18b000260) ) + + ROM_REGION16_LE( 0x200000, "igs023:sprcol", 0 ) + ROM_LOAD( "cg.u6", 0x00000, 0x80000, CRC(20ff0cb3) SHA1(4562996675fe62563f393817f40395c8bce37c5f) ) + + ROM_REGION16_LE( 0x200000, "igs023:sprmask", 0 ) + ROM_LOAD( "cg.u7", 0x000000, 0x200000, CRC(1c6764f2) SHA1(ed1efcab927bdc439247d422df5dedc72fce5682) ) // 1xxxxxxxxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x100000, "samples", 0 ) + ROM_LOAD( "u11", 0x000000, 0x100000, NO_DUMP ) // probably removed from this PCB, possibly or even probably the same as xypmda +ROM_END + +/* +Unknown IGS +Hardware Info By Guru +--------------------- + +IGS PCB NO-0198-2 +Basically the same PCB as IGS PCB No-0255-1 with parts shuffled. +IGS did **MANY** board re-designs with no additional functionality. + +Notes: + 68000 - Clock 20MHz + 2x 61256 - 32kB x8-bit SRAM (Main Work RAM) + 3x 61256 - 32kB x8-bit SRAM (VRAM) + IGS023 - Custom IGS023 Graphics Chip (also used on IGS PGM) + IGS025 - Custom IGS025 Chip with Sticker 'T2' + CG/TEXT - vs 0255-1 PCB, this board has EPROMs replaced with SOP40 and SOP44 mask ROMs +*/ + +ROM_START( xypmda ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD16_WORD_SWAP( "prg.u36", 0x00000, 0x80000, CRC(99d6c58c) SHA1(c8db8689c18ef05ad52ef0476033b62f778e6abf) ) // no version string + + ROM_REGION( 0x10000, "subcpu", 0 ) // TODO: sound related? almost empty + ROM_LOAD( "data.u33", 0x00000, 0x10000, CRC(5e3e3558) SHA1(ca9cdb4e8d124b4a7341ef6597c7ccdbbe124138) ) // 111xxxxxxxxxxxxx = 0x00 + + ROM_REGION( 0x200000, "igs023", 0 ) + ROM_LOAD( "igs_t1801.u30", 0x000000, 0x200000, CRC(253b8517) SHA1(3f583410ab7083d5f45a5e23f73bddd18b000260) ) + + ROM_REGION16_LE( 0x200000, "igs023:sprcol", 0 ) + ROM_LOAD( "igs_a1803.u39", 0x00000, 0x80000, CRC(20ff0cb3) SHA1(4562996675fe62563f393817f40395c8bce37c5f) ) + + ROM_REGION16_LE( 0x100000, "igs023:sprmask", 0 ) + ROM_LOAD( "igs_a1802.u40", 0x000000, 0x100000, CRC(5bf791cc) SHA1(df23c8a25a26410ec4021948403bb4111810d7af) ) + + ROM_REGION( 0x100000, "samples", 0 ) + ROM_LOAD( "igs_s1804_speech_v100.u32", 0x000000, 0x100000, CRC(d95220ee) SHA1(72259856bc2a12059ff481f7aab5ecc3118edd18) ) +ROM_END + +} // anonymous namespace + + +GAME( 2003, xypmd, 0, xypmd, xypmd, igs_68k_023vid_state, empty_init, ROT0, "IGS", "Xing Yun Pao Ma Di (V401CN)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) +GAME( 2003, xypmda, xypmd, xypmd, xypmd, igs_68k_023vid_state, empty_init, ROT0, "IGS", "Xing Yun Pao Ma Di (unknown ver)", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 4fd27afc062..191c6b4cc81 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -20514,6 +20514,10 @@ tarzanb tarzanc tjsb +@source:igs/igs_68k_023vid.cpp +xypmd +xypmda + @source:igs/igs_fear.cpp fearless icescape @@ -42760,6 +42764,9 @@ hprotr8a @source:skeleton/ht68k.cpp ht68k +@source:skeleton/huangyeh_m68k.cpp +wlzb + @source:skeleton/hudson_poems.cpp marimba poembase @@ -43072,6 +43079,9 @@ semcrossw @source:skeleton/seoul88.cpp seoul88 +@source:skeleton/sgm.cpp +wpddz + @source:skeleton/sh4robot.cpp sh4robot diff --git a/src/mame/misc/gms.cpp b/src/mame/misc/gms.cpp index 8ed4822cfb9..8083bf53827 100644 --- a/src/mame/misc/gms.cpp +++ b/src/mame/misc/gms.cpp @@ -2772,7 +2772,7 @@ Notes: to be a microcontroller with internal ROM. When identically marked chips are swapped between these two games the POST reports an error with this chip. When the chip is swapped back to the correct board it works fine. The same chip was also swapped from San Se Caishen and also - shows this chip with a POST error. + shows this chip with a POST error. This has been verified not to be an 8x51 or MX10EXA. */ ROM_START( hgly ) diff --git a/src/mame/skeleton/huangyeh_m68k.cpp b/src/mame/skeleton/huangyeh_m68k.cpp new file mode 100644 index 00000000000..d7385d32dc6 --- /dev/null +++ b/src/mame/skeleton/huangyeh_m68k.cpp @@ -0,0 +1,235 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Wu Lin Zheng Ba, Huang Yeh, 1999? +Hardware Info by Guru +--------------------- + +HY-9802 +|--------------------------------------------------------------| +| SW5 EPM7032 M5M482128 M5M482128 T518B| +| M5M482128 M5M482128 | +| | +|-| BATT | + | EPM7032 | +|-| |---------| | +| |HUANG YEH| | +| 22MHz | | PAL22V10 | +|J 68000 63484 | HY9920 | PAL16V8 | +|A | | | +|M |---------| | +|M 6116 | +|A Z80 U6612 | +| U34 | +| 6264 U9 U8 U41 U45 U42 U46 | +| 6264 M6295 U28 | +|-| 86171 | + | | +|-| 3.579545MHz U6614 | +| 8.448MHz | +| SW1 SW2 SW3* SW4* T518B LM324 TL084| +| ULN2003 1242H | +|----| 22WAY |-----------------| 10WAY |----| + |----------------------| |-----------| +Notes: + 68000 - Motorola MC68000P8 CPU. Clock Input 8.448MHz + 63484 - Hitachi HD63484P8 Advanced CRT Controller (ACRTC). Clock Input Pin 2CLK = 5.5MHz [22/4] + Z80 - Zilog Z84C0004 Z80 CPU. Clock Input 4.224MHz [8.448/2] + U6612 - Clone of YM3812 FM Operator Type-LII (OPLII) Sound Chip. Clock Input 3.579545MHz + U6614 - Clone of YM3014 Serial Input Floating D/A Converter + M6295 - OKI M6295 4-Channel ADPCM Voice Synthesis LSI. Clock Input 2.112MHz [8.448/4]. Pin 7 LOW + M5M482128 - Mitsubishi M5M482128AJ-8 1Mbit Dual Port RAM with 128kB x8-bit DRAM and 256 x8-bit Serial Port + 6116 - 6116 2kB x8-bit SRAM + 6264 - 6264 8kB x8-bit SRAM (both chips battery-backed) + HY9920 - Custom QFP160 Graphics Chip + 86171 - HMC HM86171-80 Color Palette With Triple 6-Bit DAC + TL084 - Texas Instruments TL084 Quad JFET-Input Operational Amplifier + LM324 - Texas Instruments LM324 Quad Operational Amplifier + 1242H - NEC uPC1242H Audio Power Amplifier + SW1-4 - 8-Position DIP Switch. * = SW3 and SW4 Not Populated. + SW5 - Reset Switch and Clear NVRAM + T518B - Mitsumi T518B Reset Chip (TO92) + BATT - 3.6V Ni-Cad Battery. Powers 2x 6264 SRAMs when power is off. + ULN2003 - ULN2003 7-Channel Darlington Transistor Array + EPM7032 - Altera EPM7032 CPLD + U8,U9 - 27C040 EPROM (68000 Program) + U4x - 27C040 EPROM (Graphics) + U34 - 27C256 EPROM (Z80 Program) + U28 - 27C040 EPROM (Oki Samples) +*/ + + +#include "emu.h" + +#include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" +#include "sound/okim6295.h" +#include "sound/ymopl.h" +#include "video/hd63484.h" +#include "video/ramdac.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class huangyeh_m68k_state : public driver_device +{ +public: + huangyeh_m68k_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + { } + + void wlzb(machine_config &config) ATTR_COLD; + + +private: + required_device m_maincpu; + + void main_program_map(address_map &map) ATTR_COLD; + void audio_program_map(address_map &map) ATTR_COLD; + void ramdac_map(address_map &map) ATTR_COLD; + void hd63484_map(address_map &map) ATTR_COLD; +}; + + +void huangyeh_m68k_state::main_program_map(address_map &map) +{ + map.unmap_value_high(); + map(0x000000, 0x0fffff).rom(); + //map(0x1d0000, 0x1d0003).rw("acrtc", FUNC(hd63484_device::read16), FUNC(hd63484_device::write16)); + //map(0x1d0009, 0x1d0009).w("ramdac", FUNC(ramdac_device::index_w)); + //map(0x1d000b, 0x1d000b).w("ramdac", FUNC(ramdac_device::pal_w)); + //map(0x1d000d, 0x1d000d).w("ramdac", FUNC(ramdac_device::mask_w)); + map(0x1f0000, 0x1f3fff).ram(); +} + +void huangyeh_m68k_state::audio_program_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0xf000, 0xf7ff).ram(); + map(0xf880, 0xf881).w("ymsnd", FUNC(ym3812_device::write)); +} + +void huangyeh_m68k_state::ramdac_map(address_map &map) +{ + map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); +} + +void huangyeh_m68k_state::hd63484_map(address_map &map) +{ + //map(0x00000, 0x7ffff).ram(); +} + + +static INPUT_PORTS_START( wlzb ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, 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") +INPUT_PORTS_END + + +// TODO +static GFXDECODE_START( gfx ) +GFXDECODE_END + + +void huangyeh_m68k_state::wlzb(machine_config &config) +{ + // basic machine hardware + M68000(config, m_maincpu, 8.448_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &huangyeh_m68k_state::main_program_map); + m_maincpu->set_vblank_int("screen", FUNC(huangyeh_m68k_state::irq0_line_hold)); + + z80_device &audiocpu(Z80(config, "audiocpu", 8.448_MHz_XTAL / 2)); + audiocpu.set_addrmap(AS_PROGRAM, &huangyeh_m68k_state::audio_program_map); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: verify everything once emulation works + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update("acrtc", FUNC(hd63484_device::update_screen)); + screen.set_palette("palette"); + + GFXDECODE(config, "gfxdecode", "palette", gfx); + + PALETTE(config, "palette").set_entries(0x100); // TODO + + RAMDAC(config, "ramdac", 0, "palette").set_addrmap(0, &huangyeh_m68k_state::ramdac_map); + + HD63484(config, "acrtc", 22_MHz_XTAL / 4).set_addrmap(0, &huangyeh_m68k_state::hd63484_map); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + YM3812(config, "ymsnd", 3.579545_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); + + OKIM6295(config, "oki", 8.448_MHz_XTAL / 4, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); +} + + +ROM_START( wlzb ) + ROM_REGION( 0x100000, "maincpu", 0 ) + ROM_LOAD16_BYTE( "w1-a.u9", 0x00000, 0x80000, CRC(2b6cd511) SHA1(0abfe24d83964eb45f348c5cbfd2ad50474db3c6) ) + ROM_LOAD16_BYTE( "w2-a.u8", 0x00001, 0x80000, CRC(df068584) SHA1(de051d56b9d64027f1b6dee609272186c3575bef) ) + + ROM_REGION( 0x8000, "audiocpu", 0 ) + ROM_LOAD( "w7.u34", 0x0000, 0x8000, CRC(c00786b3) SHA1(a8b3ddf3dd1b702d8719eace1b65f42c727b9473) ) + + ROM_REGION( 0x200000, "tiles", 0 ) + ROM_LOAD( "w3.u41", 0x000000, 0x080000, CRC(58e57d87) SHA1(f870d0729528b2fda495da059f110e466ea58de5) ) + ROM_LOAD( "w4.u45", 0x080000, 0x080000, CRC(5e993a35) SHA1(ed39dbc89cafebc8348f05a6327efa1ea26ff466) ) + ROM_LOAD( "w5.u42", 0x100000, 0x080000, CRC(e728751d) SHA1(00bc65793a65ede318e5412d06eb85259015a5c1) ) + ROM_LOAD( "w6.u46", 0x180000, 0x080000, CRC(a0ea7f31) SHA1(ef985de34485cb65ac59f7938583a0607213c81a) ) + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "w8.u28", 0x00000, 0x80000, CRC(aad9367b) SHA1(e0b20087a8eab9d16e5cb1ed6415ca5373a43da7) ) +ROM_END + +} // anonymous namespace + + +GAME( 1999, wlzb, 0, wlzb, wlzb, huangyeh_m68k_state, empty_init, ROT0, "Huang Yeh", "Wu Lin Zheng Ba", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) diff --git a/src/mame/skeleton/sgm.cpp b/src/mame/skeleton/sgm.cpp new file mode 100644 index 00000000000..c095e0e2cca --- /dev/null +++ b/src/mame/skeleton/sgm.cpp @@ -0,0 +1,177 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Wang Pai Dou Dizhu, S.G.M., 2004? +Hardware Info by Guru +--------------------- + +SGM-0509L-1 +|--------------------------------------| +| S2 JAMMA TA7252 | +| 6295 VOL | +|1 ULN2803 | +|8 | +|W |----| FLASH.U21 | +|A |CPU | 24MHz 6264 | +|Y FLASH.U15 | | | +| |----| 708SEN | +| FLASH.U16 | +| | +| BUTTON 22MHz | +| A3.3 |----------| | +|1 A1.8 | | | +|0 A5.0 | | 62LV12816 | +|W EPCS1N.U39 | ALTERA | | +|A | CYCLONE | | +|Y BATT | | 62LV12816 | +| JTAG |----------| | +|--------------------------------------| +Notes: + CPU - Unknown QFP144 CPU, looks like Hyperstone or ARM? Clock input 24.000MHz + ALTERA - Altera Cyclone (unknown model, surface scratched) QFP240 FPGA (Graphics Chip) + EPCS1N - Altera EPCS1N-9530B 128kB Serial Configuration Device for FPGA + JTAG - 10 pin JTAG Header + BATT - CR2032 Coin Battery + BUTTON - Push button, does nothing when pressed. + A3.3 - AMS1117-3.3 3.3V Linear Regulator + A1.8 - AMS1117-1.8 1.8V Linear Regulator + A5.0 - AMS1117-5.0 5.0V Linear Regulator + S2 - 8-Position DIP Switch + 708SEN - Sipex 708SEN System Reset IC + ULN2803 - ULN2803 8-Channel Darlington Transistor Array + TA7252 - Toshiba TA7252 5.9W Audio Power Amplifier + 6295 - Oki M6295 ADPCM Sample Player. Clock 1.100MHz [22/20]. Pin 7 HIGH. + Note title screen music is ripped off from cjddz! + FLASH.U21 - Macronix MX29F1615 1MB x16-bit DIP42 Flash ROM +FLASH.U15/U16 - Sharp LH28F320BJD-TTL80 2MB x16-bit DIP42 Flash ROM + 6264 - 8kB x8-bit SRAM (battery-backed by CR2032 Coin Cell) + 62LV12816 - ISSI IS62LV12816 128kB x16-bit SRAM + +TODO: +- identify CPU arch. There is no obvious code in external ROMs. Encrypted or does it have + internal ROM? With either of the larger ROMs removed from PCB it doesn't boot. +*/ + + +#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 sgm_state : public driver_device +{ +public: + sgm_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_maincpu(*this, "maincpu") + { } + + void wpddz(machine_config &config) 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 sgm_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(rgb_t::black(), cliprect); + + return 0; +} + + +void sgm_state::program_map(address_map &map) +{ + map(0x00000000, 0x0001ffff).rom(); +} + + +static INPUT_PORTS_START( wpddz ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + // no DIP switches on PCB +INPUT_PORTS_END + + +// TODO +static GFXDECODE_START( gfx ) +GFXDECODE_END + + +void sgm_state::wpddz(machine_config &config) +{ + // basic machine hardware + ARM7(config, m_maincpu, 24_MHz_XTAL); // actual CPU arch unknown + m_maincpu->set_addrmap(AS_PROGRAM, &sgm_state::program_map); + + // video hardware + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // TODO: verify everything once emulation works + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(0)); + screen.set_size(64*8, 32*8); + screen.set_visarea(0*8, 64*8-1, 2*8, 30*8-1); + screen.set_screen_update(FUNC(sgm_state::screen_update)); + + GFXDECODE(config, "gfxdecode", "palette", gfx); + + PALETTE(config, "palette").set_entries(0x100); // TODO + + // sound hardware + SPEAKER(config, "mono").front_center(); + + OKIM6295(config, "oki", 22_MHz_XTAL / 20, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); +} + + +ROM_START( wpddz ) + ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "internal_rom", 0x00000, 0x20000, NO_DUMP ) // TODO: verify this theory + + ROM_REGION( 0x20000, "cyclone_config", 0 ) + ROM_LOAD( "epcs1n.u39", 0x000000, 0x20000, CRC(874f9122) SHA1(f9f5f721065cdb91416f611da987f2edece1237c) ) + + ROM_REGION( 0x800000, "gfx", 0 ) + ROM_LOAD( "flash.u15", 0x000000, 0x400000, CRC(60a6bb59) SHA1(3f0e7e650643901ebbafd2ac195ad1a99cc645d9) ) + ROM_LOAD( "flash.u16", 0x400000, 0x400000, CRC(429b4938) SHA1(4497ed85f6cbfb03b420ea68427f6a24d092f6b1) ) + + ROM_REGION( 0x200000, "oki", 0 ) + ROM_LOAD( "flash.u21", 0x000000, 0x200000, CRC(e0813bdb) SHA1(41b487da6bfbfb231a0c7297d5a4955a5d4019ff) ) +ROM_END + +} // anonymous namespace + + +GAME( 2004?, wpddz, 0, wpddz, wpddz, sgm_state, empty_init, ROT0, "SGM", "Wang Pai Dou Dizhou", MACHINE_NO_SOUND | MACHINE_NOT_WORKING )