diff --git a/src/devices/video/hd63484.cpp b/src/devices/video/hd63484.cpp index cc0f577d11f..da7fc87d1b6 100644 --- a/src/devices/video/hd63484.cpp +++ b/src/devices/video/hd63484.cpp @@ -423,7 +423,7 @@ inline void hd63484_device::queue_w(uint8_t data) else { // TODO what happen? somebody set us up the bomb - printf("FIFO?\n"); + logerror("FIFO?\n"); } } @@ -479,7 +479,7 @@ inline void hd63484_device::queue_r(uint8_t data) else { // TODO what happen? somebody set us up the bomb - printf("FIFO?\n"); + logerror("FIFO?\n"); } } @@ -516,13 +516,13 @@ inline void hd63484_device::recompute_parameters() if (LOG) { - printf("HC %d HSW %d HDS %d HDW %d HWS %d HWW %d\n",m_hc,m_hsw,m_hds,m_hdw,m_hws,m_hww); - printf("VC %d VDS %d VSW %d VWS %d VWW %d\n",m_vc,m_vds,m_vsw,m_vws,m_vww); - printf("SP0 %d SP1 %d SP2 %d\n",m_sp[0],m_sp[1],m_sp[2]); + logerror("HC %d HSW %d HDS %d HDW %d HWS %d HWW %d\n",m_hc,m_hsw,m_hds,m_hdw,m_hws,m_hww); + logerror("VC %d VDS %d VSW %d VWS %d VWW %d\n",m_vc,m_vds,m_vsw,m_vws,m_vww); + logerror("SP0 %d SP1 %d SP2 %d\n",m_sp[0],m_sp[1],m_sp[2]); } int gai = (m_omr>>4) & 0x07; - if (gai > 3) printf("unsupported GAI=%d\n", gai); + if (gai > 3) logerror("unsupported GAI=%d\n", gai); int acm = (m_omr & 0x08) ? 2 : 1; int ppw = 16 / get_bpp(); int ppmc = ppw * (1 << gai) / acm; // TODO: GAI > 3 @@ -923,7 +923,7 @@ uint16_t hd63484_device::command_rpr_exec() case 0x0d: // Read Write Pointer L return (m_rwp[m_rwp_dn] & 0x0fff) << 4; default: - if(LOG) printf("Read %sx\n", wpr_regnames[m_cr & 0x1f]); + if(LOG) logerror("Read %sx\n", wpr_regnames[m_cr & 0x1f]); return 0; } } @@ -983,7 +983,7 @@ void hd63484_device::command_wpr_exec() m_rwp[m_rwp_dn] = (m_rwp[m_rwp_dn] & 0xff000) | ((m_pr[0] & 0xfff0) >> 4); break; default: - if(LOG) printf("%s -> %02x\n",wpr_regnames[m_cr & 0x1f],m_pr[0]); + if(LOG) logerror("%s -> %02x\n",wpr_regnames[m_cr & 0x1f],m_pr[0]); break; } } @@ -1430,7 +1430,7 @@ void hd63484_device::process_fifo() { case COMMAND_INVALID: if (CMD_LOG) logerror("HD63484 '%s': \n", tag(), m_cr); - printf("HD63484 '%s' Invalid Command Byte %02x\n", tag(), m_cr); + logerror("HD63484 '%s' Invalid Command Byte %02x\n", tag(), m_cr); m_sr |= HD63484_SR_CER; // command error command_end_seq(); break; @@ -1767,7 +1767,7 @@ void hd63484_device::process_fifo() break; default: - printf("%04x\n",m_cr); + logerror("%04x\n",m_cr); fatalerror("stop!\n"); } } @@ -1794,7 +1794,7 @@ uint16_t hd63484_device::video_registers_r(int offset) break; default: - if(LOG) printf("%s R\n",acrtc_regnames[m_ar/2]); + if(LOG) logerror("%s R\n",acrtc_regnames[m_ar/2]); break; } @@ -1812,7 +1812,7 @@ void hd63484_device::video_registers_w(int offset) case 0x00: // FIFO entry queue_w((vreg_data & 0xff00) >> 8); queue_w((vreg_data & 0x00ff) >> 0); - if(FIFO_LOG) printf("%s -> %04x\n",acrtc_regnames[m_ar/2],vreg_data); + if(FIFO_LOG) logerror("%s -> %04x\n",acrtc_regnames[m_ar/2],vreg_data); process_fifo(); break; @@ -1911,7 +1911,7 @@ void hd63484_device::video_registers_w(int offset) break; default: - if(LOG) printf("%s -> %04x\n",acrtc_regnames[m_ar/2],vreg_data); + if(LOG) logerror("%s -> %04x\n",acrtc_regnames[m_ar/2],vreg_data); break; } } diff --git a/src/devices/video/hd63484.h b/src/devices/video/hd63484.h index e88f019b54d..63161b5373f 100644 --- a/src/devices/video/hd63484.h +++ b/src/devices/video/hd63484.h @@ -13,8 +13,6 @@ #pragma once -#define HD63484_DISPLAY_PIXELS_MEMBER(_name) void _name(bitmap_ind16 &bitmap, const rectangle &cliprect, int y, int x, uint16_t data) - // ======================> hd63484_device class hd63484_device : public device_t, diff --git a/src/mame/skeleton/huangyeh_m68k.cpp b/src/mame/skeleton/huangyeh_m68k.cpp index d2dbeb1f35e..415ad86e1f1 100644 --- a/src/mame/skeleton/huangyeh_m68k.cpp +++ b/src/mame/skeleton/huangyeh_m68k.cpp @@ -1,7 +1,14 @@ // license:BSD-3-Clause // copyright-holders: +/************************************************************************************************** + +TODO: +- Crashes strong with ACRTC, plenty of unsupported features (starting with COMMAND_DWT); +- OKI bank (standard 0/0x40000 layout); +- I/Os; + +=================================================================================================== -/* Wu Lin Zhengba, Huang Yeh, 1999? Hardware Info by Guru --------------------- @@ -57,13 +64,15 @@ Notes: 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 "machine/gen_latch.h" #include "sound/okim6295.h" #include "sound/ymopl.h" #include "video/hd63484.h" @@ -80,9 +89,11 @@ 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") + huangyeh_m68k_state(const machine_config &mconfig, device_type type, const char *tag) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_acrtc(*this, "acrtc") + , m_soundlatch(*this, "soundlatch") { } void wlzb(machine_config &config) ATTR_COLD; @@ -90,6 +101,8 @@ public: private: required_device m_maincpu; + required_device m_acrtc; + required_device m_soundlatch; void main_program_map(address_map &map) ATTR_COLD; void audio_program_map(address_map &map) ATTR_COLD; @@ -102,10 +115,16 @@ 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(0x100000, 0x100001).portr("DSW1"); + map(0x100020, 0x100021).portr("IN0"); + map(0x100051, 0x100051).w(m_soundlatch, FUNC(generic_latch_8_device::write)); + map(0x100060, 0x100061).nopw(); // key matrix at $100061 + map(0x130000, 0x130001).portr("DSW2"); + map(0x1d0000, 0x1d0001).rw("acrtc", FUNC(hd63484_device::read16), FUNC(hd63484_device::write16)); + map(0x1d0002, 0x1d0003).noprw(); // TODO: A0 of acrtc + 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(); } @@ -114,6 +133,10 @@ 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)); + map(0xf8a0, 0xf8a0).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); + map(0xf8d0, 0xf8d0).r(m_soundlatch, FUNC(generic_latch_8_device::read)); +// map(0xf8e0, 0xf8e0).w soundlatch acknowledge or NMI ack + map(0xf8e0, 0xf8e0).lw8(NAME([this] (offs_t offset, u8 data) { m_soundlatch->acknowledge_w(); })); } void huangyeh_m68k_state::ramdac_map(address_map &map) @@ -123,7 +146,8 @@ void huangyeh_m68k_state::ramdac_map(address_map &map) void huangyeh_m68k_state::hd63484_map(address_map &map) { - //map(0x00000, 0x7ffff).ram(); + // TODO: likely banked, also writes + map(0x00000, 0xfffff).rom().region("tiles", 0); } @@ -149,7 +173,7 @@ static INPUT_PORTS_START( wlzb ) PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) PORT_START("DSW1") - PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") // service? PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") @@ -180,7 +204,8 @@ 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)); + // delay loops at $1f1712 + m_maincpu->set_vblank_int("screen", FUNC(huangyeh_m68k_state::irq3_line_hold)); z80_device &audiocpu(Z80(config, "audiocpu", 8.448_MHz_XTAL / 2)); audiocpu.set_addrmap(AS_PROGRAM, &huangyeh_m68k_state::audio_program_map); @@ -200,12 +225,17 @@ void huangyeh_m68k_state::wlzb(machine_config &config) 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); + HD63484(config, m_acrtc, 22_MHz_XTAL / 4).set_addrmap(0, &huangyeh_m68k_state::hd63484_map); + + GENERIC_LATCH_8(config, m_soundlatch); + m_soundlatch->data_pending_callback().set_inputline("audiocpu", INPUT_LINE_NMI); // sound hardware SPEAKER(config, "mono").front_center(); - YM3812(config, "ymsnd", 3.579545_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); + ym3812_device &ymsnd(YM3812(config, "ymsnd", 3.579545_MHz_XTAL)); + ymsnd.irq_handler().set_inputline("audiocpu", 0); + ymsnd.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); } @@ -219,7 +249,7 @@ ROM_START( wlzb ) ROM_REGION( 0x8000, "audiocpu", 0 ) ROM_LOAD( "w7.u34", 0x0000, 0x8000, CRC(c00786b3) SHA1(a8b3ddf3dd1b702d8719eace1b65f42c727b9473) ) - ROM_REGION( 0x200000, "tiles", 0 ) + ROM_REGION16_BE( 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) )