From bff500d67700980042430324f7584bf08c78f884 Mon Sep 17 00:00:00 2001 From: mooglyguy Date: Sat, 17 Nov 2018 13:07:26 +0100 Subject: -screen.cpp: Added a devcb for easier hooking of the scanline timer. [Ryan Holtz] -zerozone, zexall, zr107, zrt80, zt8802, zwackery, zx: Removed MACHINE_CONFIG_START/_END. [Ryan Holtz] --- src/devices/sound/k054539.h | 2 +- src/emu/screen.cpp | 16 ++- src/emu/screen.h | 2 + src/mame/drivers/zerozone.cpp | 46 ++++--- src/mame/drivers/zexall.cpp | 11 +- src/mame/drivers/zr107.cpp | 310 +++++++++++++++++++----------------------- src/mame/drivers/zrt80.cpp | 48 ++++--- src/mame/drivers/zt8802.cpp | 5 +- src/mame/drivers/zwackery.cpp | 54 ++++---- src/mame/drivers/zx.cpp | 82 ++++++----- src/mame/includes/zerozone.h | 13 +- src/mame/includes/zx.h | 4 +- 12 files changed, 291 insertions(+), 302 deletions(-) diff --git a/src/devices/sound/k054539.h b/src/devices/sound/k054539.h index 0b79173f205..3dfb22f4583 100644 --- a/src/devices/sound/k054539.h +++ b/src/devices/sound/k054539.h @@ -44,7 +44,7 @@ public: // configuration helpers template void set_analog_callback(Object &&cb) { m_apan_cb = std::forward(cb); } template devcb_base &set_timer_handler(Object &&cb) { return m_timer_handler.set_callback(std::forward(cb)); } - + auto timer_handler() { return m_timer_handler.bind(); } DECLARE_WRITE8_MEMBER(write); DECLARE_READ8_MEMBER(read); diff --git a/src/emu/screen.cpp b/src/emu/screen.cpp index dcaa008f410..204e375c454 100644 --- a/src/emu/screen.cpp +++ b/src/emu/screen.cpp @@ -558,6 +558,7 @@ screen_device::screen_device(const machine_config &mconfig, const char *tag, dev , m_xscale(1.0f) , m_yscale(1.0f) , m_screen_vblank(*this) + , m_scanline_cb(*this) , m_palette(*this, finder_base::DUMMY_TAG) , m_video_attributes(0) , m_svg_region(nullptr) @@ -715,6 +716,7 @@ void screen_device::device_resolve_objects() m_screen_update_ind16.bind_relative_to(*owner()); m_screen_update_rgb32.bind_relative_to(*owner()); m_screen_vblank.resolve_safe(); + m_scanline_cb.resolve(); // assign our format to the palette before it starts if (m_palette) @@ -785,7 +787,7 @@ void screen_device::device_start() m_scanline0_timer = timer_alloc(TID_SCANLINE0); // allocate a timer to generate per-scanline updates - if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) + if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0 || m_scanline_cb) m_scanline_timer = timer_alloc(TID_SCANLINE); // configure the screen with the default parameters @@ -796,7 +798,7 @@ void screen_device::device_start() m_vblank_end_time = attotime(0, m_vblank_period); // start the timer to generate per-scanline updates - if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0) + if ((m_video_attributes & VIDEO_UPDATE_SCANLINE) != 0 || m_scanline_cb) m_scanline_timer->adjust(time_until_pos(0)); // create burn-in bitmap @@ -899,9 +901,13 @@ void screen_device::device_timer(emu_timer &timer, device_timer_id id, int param // subsequent scanlines when scanline updates are enabled case TID_SCANLINE: - - // force a partial update to the current scanline - update_partial(param); + if (m_video_attributes & VIDEO_UPDATE_SCANLINE) + { + // force a partial update to the current scanline + update_partial(param); + } + if (m_scanline_cb) + m_scanline_cb(param); // compute the next visible scanline param++; diff --git a/src/emu/screen.h b/src/emu/screen.h index e21b7d97fda..bb9d5e3f75c 100644 --- a/src/emu/screen.h +++ b/src/emu/screen.h @@ -258,6 +258,7 @@ public: template devcb_base &set_screen_vblank(Object &&object) { return m_screen_vblank.set_callback(std::forward(object)); } auto screen_vblank() { return m_screen_vblank.bind(); } + auto scanline() { m_video_attributes |= VIDEO_UPDATE_SCANLINE; return m_scanline_cb.bind(); } template void set_palette(T &&tag) { m_palette.set_tag(std::forward(tag)); } void set_video_attributes(u32 flags) { m_video_attributes = flags; } void set_color(rgb_t color) { m_color = color; } @@ -355,6 +356,7 @@ private: screen_update_ind16_delegate m_screen_update_ind16; // screen update callback (16-bit palette) screen_update_rgb32_delegate m_screen_update_rgb32; // screen update callback (32-bit RGB) devcb_write_line m_screen_vblank; // screen vblank line callback + devcb_write32 m_scanline_cb; // screen scanline callback optional_device m_palette; // our palette u32 m_video_attributes; // flags describing the video system const char * m_svg_region; // the region in which the svg data is in diff --git a/src/mame/drivers/zerozone.cpp b/src/mame/drivers/zerozone.cpp index 4e6f5690d15..8020d85a7f7 100644 --- a/src/mame/drivers/zerozone.cpp +++ b/src/mame/drivers/zerozone.cpp @@ -171,40 +171,46 @@ void zerozone_state::machine_reset() m_tilebank = 0; } -MACHINE_CONFIG_START(zerozone_state::zerozone) +WRITE_LINE_MEMBER(zerozone_state::vblank_w) +{ + // TODO: Not accurate, find vblank acknowledge + if (state) + m_maincpu->set_input_line(1, HOLD_LINE); +} +void zerozone_state::zerozone(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", M68000, 10000000) /* 10 MHz */ - MCFG_DEVICE_PROGRAM_MAP(main_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", zerozone_state, irq1_line_hold) + M68000(config, m_maincpu, 10000000); /* 10 MHz */ + m_maincpu->set_addrmap(AS_PROGRAM, &zerozone_state::main_map); - MCFG_DEVICE_ADD("audiocpu", Z80, 1000000) /* 1 MHz ??? */ - MCFG_DEVICE_PROGRAM_MAP(sound_map) + Z80(config, m_audiocpu, 1000000); /* 1 MHz ??? */ + m_audiocpu->set_addrmap(AS_PROGRAM, &zerozone_state::sound_map); - MCFG_QUANTUM_TIME(attotime::from_hz(600)) + config.m_minimum_quantum = attotime::from_hz(600); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) - MCFG_SCREEN_UPDATE_DRIVER(zerozone_state, screen_update) - MCFG_SCREEN_SIZE(64*8, 32*8) - MCFG_SCREEN_VISIBLE_AREA(1*8, 47*8-1, 2*8, 30*8-1) - MCFG_SCREEN_PALETTE("palette") + 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(64*8, 32*8); + screen.set_visarea(1*8, 47*8-1, 2*8, 30*8-1); + screen.set_palette("palette"); + screen.set_screen_update(FUNC(zerozone_state::screen_update)); + screen.screen_vblank().set(FUNC(zerozone_state::vblank_w)); - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_zerozone) + GFXDECODE(config, m_gfxdecode, "palette", gfx_zerozone); - MCFG_PALETTE_ADD("palette", 256) - MCFG_PALETTE_FORMAT(RRRRGGGGBBBBRGBx) + PALETTE(config, "palette", 256).set_format(PALETTE_FORMAT_RRRRGGGGBBBBRGBx); /* sound hardware */ SPEAKER(config, "mono").front_center(); GENERIC_LATCH_8(config, m_soundlatch); - MCFG_DEVICE_ADD("oki", OKIM6295, 1056000, okim6295_device::PIN7_HIGH) // clock frequency & pin 7 not verified - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0) -MACHINE_CONFIG_END + okim6295_device &oki(OKIM6295(config, "oki", 1056000, okim6295_device::PIN7_HIGH)); // clock frequency & pin 7 not verified + oki.add_route(ALL_OUTPUTS, "mono", 1.0); +} diff --git a/src/mame/drivers/zexall.cpp b/src/mame/drivers/zexall.cpp index 40d49c73bc3..b6c9b60defc 100644 --- a/src/mame/drivers/zexall.cpp +++ b/src/mame/drivers/zexall.cpp @@ -158,14 +158,15 @@ INPUT_PORTS_END Machine Drivers ******************************************************************************/ -MACHINE_CONFIG_START(zexall_state::zexall) +void zexall_state::zexall(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(3'579'545)) - MCFG_DEVICE_PROGRAM_MAP(mem_map) + Z80(config, m_maincpu, XTAL(3'579'545)); + m_maincpu->set_addrmap(AS_PROGRAM, &zexall_state::mem_map); /* video hardware */ - MCFG_DEVICE_ADD(m_terminal, GENERIC_TERMINAL, 0) -MACHINE_CONFIG_END + GENERIC_TERMINAL(config, m_terminal, 0); +} /****************************************************************************** diff --git a/src/mame/drivers/zr107.cpp b/src/mame/drivers/zr107.cpp index 379172b5bda..87593db9b81 100644 --- a/src/mame/drivers/zr107.cpp +++ b/src/mame/drivers/zr107.cpp @@ -194,10 +194,10 @@ public: m_audiocpu(*this, "audiocpu"), m_dsp(*this, "dsp"), m_watchdog(*this, "watchdog"), - m_k001604(*this, "k001604"), m_k056800(*this, "k056800"), - m_k056832(*this, "k056832"), m_workram(*this, "workram"), + m_k001005(*this, "k001005"), + m_k001006_1(*this, "k001006_1"), m_in0(*this, "IN0"), m_in1(*this, "IN1"), m_in2(*this, "IN2"), @@ -208,34 +208,27 @@ public: m_analog1(*this, "ANALOG1"), m_analog2(*this, "ANALOG2"), m_analog3(*this, "ANALOG3"), + m_screen(*this, "screen"), m_palette(*this, "palette"), - m_k001005(*this, "k001005"), - m_k001006_1(*this, "k001006_1"), - m_k001006_2(*this, "k001006_2"), m_generic_paletteram_32(*this, "paletteram"), m_konppc(*this, "konppc") { } void zr107(machine_config &config); - void jetwave(machine_config &config); - void init_common(); - void init_zr107(); - void init_jetwave(); + virtual void driver_init() override; -private: +protected: required_device m_maincpu; required_device m_audiocpu; required_device m_dsp; required_device m_watchdog; - optional_device m_k001604; required_device m_k056800; - optional_device m_k056832; - optional_shared_ptr m_workram; + required_shared_ptr m_workram; + required_device m_k001005; + required_device m_k001006_1; required_ioport m_in0, m_in1, m_in2, m_in3, m_in4, m_out4, m_eepromout, m_analog1, m_analog2, m_analog3; + required_device m_screen; required_device m_palette; - optional_device m_k001005; - optional_device m_k001006_1; - optional_device m_k001006_2; required_shared_ptr m_generic_paletteram_32; required_device m_konppc; @@ -252,40 +245,67 @@ private: DECLARE_WRITE8_MEMBER(sysreg_w); DECLARE_READ32_MEMBER(ccu_r); DECLARE_WRITE32_MEMBER(ccu_w); - DECLARE_WRITE32_MEMBER(jetwave_palette_w); DECLARE_READ32_MEMBER(dsp_dataram_r); DECLARE_WRITE32_MEMBER(dsp_dataram_w); DECLARE_WRITE16_MEMBER(sound_ctrl_w); - DECLARE_VIDEO_START(zr107); - DECLARE_VIDEO_START(jetwave); - uint32_t screen_update_zr107(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - uint32_t screen_update_jetwave(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(zr107_vblank); + WRITE_LINE_MEMBER(vblank); WRITE_LINE_MEMBER(k054539_irq_gen); double adc0838_callback(uint8_t input); - K056832_CB_MEMBER(tile_callback); - void jetwave_map(address_map &map); void k054539_map(address_map &map); - void sharc_map(address_map &map); + void sharc_memmap(address_map &map); void sound_memmap(address_map &map); - void zr107_map(address_map &map); virtual void machine_start() override; virtual void machine_reset() override; }; +class midnrun_state : public zr107_state +{ +public: + midnrun_state(const machine_config &mconfig, device_type type, const char *tag) + : zr107_state(mconfig, type, tag), + m_k056832(*this, "k056832") + { } + + void midnrun(machine_config &config); + +private: + virtual void video_start() override; + + void main_memmap(address_map &map); + K056832_CB_MEMBER(tile_callback); + required_device m_k056832; + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); +}; -VIDEO_START_MEMBER(zr107_state,jetwave) +class jetwave_state : public zr107_state { -} +public: + jetwave_state(const machine_config &mconfig, device_type type, const char *tag) + : zr107_state(mconfig, type, tag), + m_k001604(*this, "k001604"), + m_k001006_2(*this, "k001006_2") + { } + + void jetwave(machine_config &config); + +private: + DECLARE_WRITE32_MEMBER(palette_w); + + void main_memmap(address_map &map); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); -uint32_t zr107_state::screen_update_jetwave(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) + required_device m_k001604; + required_device m_k001006_2; +}; + +uint32_t jetwave_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->pen(0), cliprect); @@ -313,12 +333,12 @@ WRITE32_MEMBER(zr107_state::paletteram32_w) #define NUM_LAYERS 2 -K056832_CB_MEMBER(zr107_state::tile_callback) +K056832_CB_MEMBER(midnrun_state::tile_callback) { *color += layer * 0x40; } -VIDEO_START_MEMBER(zr107_state,zr107) +void midnrun_state::video_start() { m_k056832->set_layer_offs(0, -29, -27); m_k056832->set_layer_offs(1, -29, -27); @@ -330,7 +350,7 @@ VIDEO_START_MEMBER(zr107_state,zr107) m_k056832->set_layer_offs(7, -29, -27); } -uint32_t zr107_state::screen_update_zr107(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +uint32_t midnrun_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap.fill(m_palette->pen(0), cliprect); @@ -477,19 +497,19 @@ void zr107_state::machine_start() m_maincpu->ppcdrc_add_fastram(0x00000000, 0x000fffff, false, m_workram); } -void zr107_state::zr107_map(address_map &map) +void midnrun_state::main_memmap(address_map &map) { map(0x00000000, 0x000fffff).ram().share("workram"); /* Work RAM */ map(0x74000000, 0x74003fff).rw(m_k056832, FUNC(k056832_device::ram_long_r), FUNC(k056832_device::ram_long_w)); map(0x74020000, 0x7402003f).rw(m_k056832, FUNC(k056832_device::long_r), FUNC(k056832_device::long_w)); - map(0x74060000, 0x7406003f).rw(FUNC(zr107_state::ccu_r), FUNC(zr107_state::ccu_w)); - map(0x74080000, 0x74081fff).ram().w(FUNC(zr107_state::paletteram32_w)).share("paletteram"); + map(0x74060000, 0x7406003f).rw(FUNC(midnrun_state::ccu_r), FUNC(midnrun_state::ccu_w)); + map(0x74080000, 0x74081fff).ram().w(FUNC(midnrun_state::paletteram32_w)).share("paletteram"); map(0x740a0000, 0x740a3fff).r(m_k056832, FUNC(k056832_device::rom_long_r)); map(0x78000000, 0x7800ffff).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_r_ppc), FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); /* 21N 21K 23N 23K */ map(0x78010000, 0x7801ffff).w(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); map(0x78040000, 0x7804000f).rw(m_k001006_1, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x780c0000, 0x780c0007).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_comm_r_ppc), FUNC(konppc_device::cgboard_dsp_comm_w_ppc)); - map(0x7e000000, 0x7e003fff).rw(FUNC(zr107_state::sysreg_r), FUNC(zr107_state::sysreg_w)); + map(0x7e000000, 0x7e003fff).rw(FUNC(midnrun_state::sysreg_r), FUNC(midnrun_state::sysreg_w)); map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */ map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); @@ -498,18 +518,18 @@ void zr107_state::zr107_map(address_map &map) } -WRITE32_MEMBER(zr107_state::jetwave_palette_w) +WRITE32_MEMBER(jetwave_state::palette_w) { COMBINE_DATA(&m_generic_paletteram_32[offset]); data = m_generic_paletteram_32[offset]; m_palette->set_pen_color(offset, pal5bit(data >> 10), pal5bit(data >> 5), pal5bit(data >> 0)); } -void zr107_state::jetwave_map(address_map &map) +void jetwave_state::main_memmap(address_map &map) { - map(0x00000000, 0x000fffff).ram(); /* Work RAM */ + map(0x00000000, 0x000fffff).ram().share("workram"); /* Work RAM */ map(0x74000000, 0x740000ff).rw(m_k001604, FUNC(k001604_device::reg_r), FUNC(k001604_device::reg_w)); - map(0x74010000, 0x7401ffff).ram().w(FUNC(zr107_state::jetwave_palette_w)).share("paletteram"); + map(0x74010000, 0x7401ffff).ram().w(FUNC(jetwave_state::palette_w)).share("paletteram"); map(0x74020000, 0x7403ffff).rw(m_k001604, FUNC(k001604_device::tile_r), FUNC(k001604_device::tile_w)); map(0x74040000, 0x7407ffff).rw(m_k001604, FUNC(k001604_device::char_r), FUNC(k001604_device::char_w)); map(0x78000000, 0x7800ffff).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_shared_r_ppc), FUNC(konppc_device::cgboard_dsp_shared_w_ppc)); /* 21N 21K 23N 23K */ @@ -517,7 +537,7 @@ void zr107_state::jetwave_map(address_map &map) map(0x78040000, 0x7804000f).rw(m_k001006_1, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x78080000, 0x7808000f).rw(m_k001006_2, FUNC(k001006_device::read), FUNC(k001006_device::write)); map(0x780c0000, 0x780c0007).rw(m_konppc, FUNC(konppc_device::cgboard_dsp_comm_r_ppc), FUNC(konppc_device::cgboard_dsp_comm_w_ppc)); - map(0x7e000000, 0x7e003fff).rw(FUNC(zr107_state::sysreg_r), FUNC(zr107_state::sysreg_w)); + map(0x7e000000, 0x7e003fff).rw(FUNC(jetwave_state::sysreg_r), FUNC(jetwave_state::sysreg_w)); map(0x7e008000, 0x7e009fff).rw("k056230", FUNC(k056230_device::read), FUNC(k056230_device::write)); /* LANC registers */ map(0x7e00a000, 0x7e00bfff).rw("k056230", FUNC(k056230_device::lanc_ram_r), FUNC(k056230_device::lanc_ram_w)); /* LANC Buffer RAM (27E) */ map(0x7e00c000, 0x7e00c00f).rw(m_k056800, FUNC(k056800_device::host_r), FUNC(k056800_device::host_w)); @@ -570,7 +590,7 @@ WRITE32_MEMBER(zr107_state::dsp_dataram_w) m_sharc_dataram[offset] = data; } -void zr107_state::sharc_map(address_map &map) +void zr107_state::sharc_memmap(address_map &map) { map(0x400000, 0x41ffff).rw(m_konppc, FUNC(konppc_device::cgboard_0_shared_sharc_r), FUNC(konppc_device::cgboard_0_shared_sharc_w)); map(0x500000, 0x5fffff).rw(FUNC(zr107_state::dsp_dataram_r), FUNC(zr107_state::dsp_dataram_w)); @@ -758,9 +778,10 @@ WRITE_LINE_MEMBER(zr107_state::k054539_irq_gen) DMA0 */ -INTERRUPT_GEN_MEMBER(zr107_state::zr107_vblank) +WRITE_LINE_MEMBER(zr107_state::vblank) { - device.execute().set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); + if (state) + m_maincpu->set_input_line(INPUT_LINE_IRQ0, ASSERT_LINE); } void zr107_state::machine_reset() @@ -768,49 +789,38 @@ void zr107_state::machine_reset() m_dsp->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } -MACHINE_CONFIG_START(zr107_state::zr107) - +void zr107_state::zr107(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PPC403GA, XTAL(64'000'000)/2) /* PowerPC 403GA 32MHz */ - MCFG_DEVICE_PROGRAM_MAP(zr107_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", zr107_state, zr107_vblank) + PPC403GA(config, m_maincpu, XTAL(64'000'000)/2); /* PowerPC 403GA 32MHz */ - MCFG_DEVICE_ADD("audiocpu", M68000, XTAL(64'000'000)/8) /* 8MHz */ - MCFG_DEVICE_PROGRAM_MAP(sound_memmap) + M68000(config, m_audiocpu, XTAL(64'000'000)/8); /* 8MHz */ + m_audiocpu->set_addrmap(AS_PROGRAM, &zr107_state::sound_memmap); - MCFG_DEVICE_ADD("dsp", ADSP21062, XTAL(36'000'000)) - MCFG_SHARC_BOOT_MODE(BOOT_MODE_EPROM) - MCFG_DEVICE_DATA_MAP(sharc_map) - - MCFG_QUANTUM_TIME(attotime::from_hz(750000))// Very high sync needed to prevent lockups - why? + ADSP21062(config, m_dsp, XTAL(36'000'000)); + m_dsp->set_boot_mode(adsp21062_device::BOOT_MODE_EPROM); + m_dsp->set_addrmap(AS_DATA, &zr107_state::sharc_memmap); EEPROM_93C46_16BIT(config, "eeprom"); - K056230(config, "k056230", "maincpu"); + K056230(config, "k056230", m_maincpu); WATCHDOG_TIMER(config, m_watchdog); /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 48*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 48*8-1) - MCFG_SCREEN_UPDATE_DRIVER(zr107_state, screen_update_zr107) - - MCFG_PALETTE_ADD("palette", 65536) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_size(64*8, 48*8); + m_screen->set_visarea(0*8, 64*8-1, 0*8, 48*8-1); + m_screen->screen_vblank().set(FUNC(zr107_state::vblank)); - MCFG_VIDEO_START_OVERRIDE(zr107_state,zr107) + PALETTE(config, m_palette, 65536); - MCFG_DEVICE_ADD("k056832", K056832, 0) - MCFG_K056832_CB(zr107_state, tile_callback) - MCFG_K056832_CONFIG("gfx2", K056832_BPP_8, 1, 0) - MCFG_K056832_PALETTE("palette") + K001005(config, m_k001005, 0, m_k001006_1); - MCFG_DEVICE_ADD("k001005", K001005, 0, "k001006_1") - - MCFG_DEVICE_ADD("k001006_1", K001006, 0) - MCFG_K001006_GFX_REGION("gfx1") - MCFG_K001006_TEX_LAYOUT(0) + K001006(config, m_k001006_1, 0); + m_k001006_1->set_gfx_region("gfx1"); + m_k001006_1->set_tex_layout(0); K056800(config, m_k056800, XTAL(18'432'000)); m_k056800->int_callback().set_inputline(m_audiocpu, M68K_IRQ_1); @@ -818,106 +828,70 @@ MACHINE_CONFIG_START(zr107_state::zr107) SPEAKER(config, "lspeaker").front_left(); SPEAKER(config, "rspeaker").front_right(); - MCFG_DEVICE_ADD("k054539_1", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_K054539_TIMER_HANDLER(WRITELINE(*this, zr107_state, k054539_irq_gen)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) + k054539_device &k054539_1(K054539(config, "k054539_1", XTAL(18'432'000))); + k054539_1.set_addrmap(0, &zr107_state::k054539_map); + k054539_1.timer_handler().set(FUNC(zr107_state::k054539_irq_gen)); + k054539_1.add_route(0, "lspeaker", 0.75); + k054539_1.add_route(1, "rspeaker", 0.75); - MCFG_DEVICE_ADD("k054539_2", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) + k054539_device &k054539_2(K054539(config, "k054539_2", XTAL(18'432'000))); + k054539_2.set_addrmap(0, &zr107_state::k054539_map); + k054539_2.add_route(0, "lspeaker", 0.75); + k054539_2.add_route(1, "rspeaker", 0.75); adc0838_device &adc(ADC0838(config, "adc0838", 0)); adc.set_input_callback(FUNC(zr107_state::adc0838_callback)); - MCFG_DEVICE_ADD("konppc", KONPPC, 0) - MCFG_KONPPC_CGBOARD_NUMBER(1) - MCFG_KONPPC_CGBOARD_TYPE(ZR107) -MACHINE_CONFIG_END - - -MACHINE_CONFIG_START(zr107_state::jetwave) - - /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", PPC403GA, XTAL(64'000'000)/2) /* PowerPC 403GA 32MHz */ - MCFG_DEVICE_PROGRAM_MAP(jetwave_map) - MCFG_DEVICE_VBLANK_INT_DRIVER("screen", zr107_state, zr107_vblank) - - MCFG_DEVICE_ADD("audiocpu", M68000, XTAL(64'000'000)/8) /* 8MHz */ - MCFG_DEVICE_PROGRAM_MAP(sound_memmap) - - MCFG_DEVICE_ADD("dsp", ADSP21062, XTAL(36'000'000)) - MCFG_SHARC_BOOT_MODE(BOOT_MODE_EPROM) - MCFG_DEVICE_DATA_MAP(sharc_map) - - MCFG_QUANTUM_TIME(attotime::from_hz(2000000)) // Very high sync needed to prevent lockups - why? - - EEPROM_93C46_16BIT(config, "eeprom"); + KONPPC(config, m_konppc, 0); + m_konppc->set_num_boards(1); + m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_ZR107); +} - K056230(config, "k056230", "maincpu"); +void midnrun_state::midnrun(machine_config &config) +{ + zr107(config); + m_maincpu->set_addrmap(AS_PROGRAM, &midnrun_state::main_memmap); - WATCHDOG_TIMER(config, m_watchdog); + config.m_minimum_quantum = attotime::from_hz(750000); // Very high sync needed to prevent lockups - why? /* video hardware */ - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_SIZE(64*8, 48*8) - MCFG_SCREEN_VISIBLE_AREA(0*8, 64*8-1, 0*8, 48*8-1) - MCFG_SCREEN_UPDATE_DRIVER(zr107_state, screen_update_jetwave) + m_screen->set_screen_update(FUNC(midnrun_state::screen_update)); - MCFG_PALETTE_ADD("palette", 65536) + K056832(config, m_k056832, 0); + m_k056832->set_k056832_callback(k056832_cb_delegate(FUNC(midnrun_state::tile_callback), this)); + m_k056832->set_config("gfx2", K056832_BPP_8, 1, 0); + m_k056832->set_palette(m_palette); +} - MCFG_VIDEO_START_OVERRIDE(zr107_state,jetwave) +void jetwave_state::jetwave(machine_config &config) +{ + zr107(config); + m_maincpu->set_addrmap(AS_PROGRAM, &jetwave_state::main_memmap); - MCFG_DEVICE_ADD("k001604", K001604, 0) - MCFG_K001604_LAYER_SIZE(0) - MCFG_K001604_ROZ_SIZE(0) - MCFG_K001604_TXT_OFFSET(0) - MCFG_K001604_ROZ_OFFSET(16384) - MCFG_K001604_PALETTE("palette") + config.m_minimum_quantum = attotime::from_hz(2000000); // Very high sync needed to prevent lockups - why? - MCFG_DEVICE_ADD("k001005", K001005, 0, "k001006_1") + /* video hardware */ + m_screen->set_screen_update(FUNC(jetwave_state::screen_update)); - MCFG_DEVICE_ADD("k001006_1", K001006, 0) - MCFG_K001006_GFX_REGION("gfx1") - MCFG_K001006_TEX_LAYOUT(0) + K001604(config, m_k001604, 0); + m_k001604->set_layer_size(0); + m_k001604->set_roz_size(0); + m_k001604->set_txt_mem_offset(0); + m_k001604->set_roz_mem_offset(0x4000); + m_k001604->set_palette(m_palette); // The second K001006 chip connects to the second K001005 chip. // Hook this up when the K001005 separation is understood (seems the load balancing is done on hardware). - MCFG_DEVICE_ADD("k001006_2", K001006, 0) - MCFG_K001006_GFX_REGION("gfx1") - MCFG_K001006_TEX_LAYOUT(0) - - K056800(config, m_k056800, XTAL(18'432'000)); - m_k056800->int_callback().set_inputline(m_audiocpu, M68K_IRQ_1); - - SPEAKER(config, "lspeaker").front_left(); - SPEAKER(config, "rspeaker").front_right(); - - MCFG_DEVICE_ADD("k054539_1", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_K054539_TIMER_HANDLER(WRITELINE(*this, zr107_state, k054539_irq_gen)) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) - - MCFG_DEVICE_ADD("k054539_2", K054539, XTAL(18'432'000)) - MCFG_DEVICE_ADDRESS_MAP(0, k054539_map) - MCFG_SOUND_ROUTE(0, "lspeaker", 0.75) - MCFG_SOUND_ROUTE(1, "rspeaker", 0.75) - - adc0838_device &adc(ADC0838(config, "adc0838", 0)); - adc.set_input_callback(FUNC(zr107_state::adc0838_callback)); + K001006(config, m_k001006_2, 0); + m_k001006_2->set_gfx_region("gfx1"); + m_k001006_2->set_tex_layout(0); - MCFG_DEVICE_ADD("konppc", KONPPC, 0) - MCFG_KONPPC_CGBOARD_NUMBER(1) - MCFG_KONPPC_CGBOARD_TYPE(GTICLUB) -MACHINE_CONFIG_END + m_konppc->set_cbboard_type(konppc_device::CGBOARD_TYPE_GTICLUB); +} /*****************************************************************************/ -void zr107_state::init_common() +void zr107_state::driver_init() { m_sharc_dataram = std::make_unique(0x100000/4); m_led_reg0 = m_led_reg1 = 0x7f; @@ -926,16 +900,6 @@ void zr107_state::init_common() m_dsp->enable_recompiler(); } -void zr107_state::init_zr107() -{ - init_common(); -} - -void zr107_state::init_jetwave() -{ - init_common(); -} - /*****************************************************************************/ ROM_START( midnrun ) @@ -1200,13 +1164,13 @@ ROM_END /*****************************************************************************/ -GAME( 1995, midnrun, 0, zr107, midnrun, zr107_state, init_zr107, ROT0, "Konami", "Midnight Run: Road Fighters 2 (EAA, Euro v1.11)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1995, midnrunj, midnrun, zr107, midnrun, zr107_state, init_zr107, ROT0, "Konami", "Midnight Run: Road Fighters 2 (JAD, Japan v1.10)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1995, midnruna, midnrun, zr107, midnrun, zr107_state, init_zr107, ROT0, "Konami", "Midnight Run: Road Fighters 2 (AAA, Asia v1.10)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, windheat, 0, zr107, windheat, zr107_state, init_zr107, ROT0, "Konami", "Winding Heat (EAA, Euro v2.11)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, windheatu,windheat, zr107, windheat, zr107_state, init_zr107, ROT0, "Konami", "Winding Heat (UBC, USA v2.22)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, windheatj,windheat, zr107, windheat, zr107_state, init_zr107, ROT0, "Konami", "Winding Heat (JAA, Japan v2.11)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, windheata,windheat, zr107, windheat, zr107_state, init_zr107, ROT0, "Konami", "Winding Heat (AAA, Asia v2.11)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, jetwave, 0, jetwave, jetwave, zr107_state, init_jetwave, ROT0, "Konami", "Jet Wave (EAB, Euro v1.04)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, waveshrk, jetwave, jetwave, jetwave, zr107_state, init_jetwave, ROT0, "Konami", "Wave Shark (UAB, USA v1.04)", MACHINE_IMPERFECT_GRAPHICS ) -GAME( 1996, jetwavej, jetwave, jetwave, jetwave, zr107_state, init_jetwave, ROT0, "Konami", "Jet Wave (JAB, Japan v1.04)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, midnrun, 0, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighters 2 (EAA, Euro v1.11)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, midnrunj, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighters 2 (JAD, Japan v1.10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1995, midnruna, midnrun, midnrun, midnrun, midnrun_state, driver_init, ROT0, "Konami", "Midnight Run: Road Fighters 2 (AAA, Asia v1.10)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, windheat, 0, midnrun, windheat, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (EAA, Euro v2.11)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, windheatu,windheat, midnrun, windheat, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (UBC, USA v2.22)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, windheatj,windheat, midnrun, windheat, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (JAA, Japan v2.11)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, windheata,windheat, midnrun, windheat, midnrun_state, driver_init, ROT0, "Konami", "Winding Heat (AAA, Asia v2.11)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, jetwave, 0, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (EAB, Euro v1.04)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, waveshrk, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Wave Shark (UAB, USA v1.04)", MACHINE_IMPERFECT_GRAPHICS ) +GAME( 1996, jetwavej, jetwave, jetwave, jetwave, jetwave_state, driver_init, ROT0, "Konami", "Jet Wave (JAB, Japan v1.04)", MACHINE_IMPERFECT_GRAPHICS ) diff --git a/src/mame/drivers/zrt80.cpp b/src/mame/drivers/zrt80.cpp index e1290b76fea..c1df58bb97d 100644 --- a/src/mame/drivers/zrt80.cpp +++ b/src/mame/drivers/zrt80.cpp @@ -275,39 +275,45 @@ static GFXDECODE_START( gfx_zrt80 ) GFXDECODE_ENTRY( "chargen", 0x0000, zrt80_charlayout, 0, 1 ) GFXDECODE_END -MACHINE_CONFIG_START(zrt80_state::zrt80) +void zrt80_state::zrt80(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu",Z80, XTAL(2'457'600)) - MCFG_DEVICE_PROGRAM_MAP(mem_map) - MCFG_DEVICE_IO_MAP(io_map) + Z80(config, m_maincpu, XTAL(2'457'600)); + m_maincpu->set_addrmap(AS_PROGRAM, &zrt80_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &zrt80_state::io_map); /* video hardware */ - MCFG_SCREEN_ADD_MONOCHROME("screen", RASTER, rgb_t::green()) - MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE("crtc", mc6845_device, screen_update) - MCFG_SCREEN_SIZE(640, 200) - MCFG_SCREEN_VISIBLE_AREA(0, 640 - 1, 0, 200 - 1) - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_zrt80) - MCFG_PALETTE_ADD_MONOCHROME("palette") + screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); + screen.set_color(rgb_t::green()); + screen.set_refresh_hz(60); + screen.set_vblank_time(ATTOSECONDS_IN_USEC(2500)); /* not accurate */ + screen.set_size(640, 200); + screen.set_visarea(0, 640-1, 0, 200-1); + screen.set_screen_update("crtc", FUNC(mc6845_device::screen_update)); + + GFXDECODE(config, "gfxdecode", m_palette, gfx_zrt80); + + PALETTE(config, m_palette, 2); + m_palette->set_init("palette", FUNC(palette_device::palette_init_monochrome)); /* sound hardware */ SPEAKER(config, "mono").front_center(); - MCFG_DEVICE_ADD("beeper", BEEP, 800) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) + BEEP(config, m_beep, 800); + m_beep->add_route(ALL_OUTPUTS, "mono", 0.50); /* Devices */ - MCFG_MC6845_ADD("crtc", MC6845, "screen", XTAL(20'000'000) / 8) - MCFG_MC6845_SHOW_BORDER_AREA(false) - MCFG_MC6845_CHAR_WIDTH(8) /*?*/ - MCFG_MC6845_UPDATE_ROW_CB(zrt80_state, crtc_update_row) + MC6845(config, m_crtc, XTAL(20'000'000) / 8); + m_crtc->set_screen("screen"); + m_crtc->set_show_border_area(false); + m_crtc->set_char_width(8); /*?*/ + m_crtc->set_update_row_callback(FUNC(zrt80_state::crtc_update_row), this); INS8250(config, m_8250, 2457600); m_8250->out_int_callback().set_inputline("maincpu", INPUT_LINE_IRQ0); - MCFG_DEVICE_ADD("keyboard", GENERIC_KEYBOARD, 0) - MCFG_GENERIC_KEYBOARD_CB(PUT(zrt80_state, kbd_put)) -MACHINE_CONFIG_END + generic_keyboard_device &keyboard(GENERIC_KEYBOARD(config, "keyboard", 0)); + keyboard.set_keyboard_callback(KEYBOARDCB_PUT(zrt80_state, kbd_put)); +} /* ROM definition */ ROM_START( zrt80 ) diff --git a/src/mame/drivers/zt8802.cpp b/src/mame/drivers/zt8802.cpp index 6521a49cb8d..3d32d81be2c 100644 --- a/src/mame/drivers/zt8802.cpp +++ b/src/mame/drivers/zt8802.cpp @@ -33,8 +33,9 @@ private: static INPUT_PORTS_START( zt8802 ) INPUT_PORTS_END -MACHINE_CONFIG_START(zt8802_state::zt8802) -MACHINE_CONFIG_END +void zt8802_state::zt8802(machine_config &config) +{ +} ROM_START( zt8802 ) ROM_REGION( 0x80000, "roms", 0 ) diff --git a/src/mame/drivers/zwackery.cpp b/src/mame/drivers/zwackery.cpp index 17a368531e0..2c6239768a8 100644 --- a/src/mame/drivers/zwackery.cpp +++ b/src/mame/drivers/zwackery.cpp @@ -47,6 +47,7 @@ public: m_watchdog(*this, "watchdog"), m_screen(*this, "screen"), m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), m_videoram(*this, "videoram"), m_cheap_squeak_deluxe(*this, "csd"), m_bg_tilemap(nullptr), @@ -56,8 +57,8 @@ public: void zwackery(machine_config &config); private: - DECLARE_VIDEO_START(zwackery); - TIMER_DEVICE_CALLBACK_MEMBER(scanline_cb); + virtual void video_start() override; + DECLARE_WRITE32_MEMBER(scanline_cb); DECLARE_WRITE16_MEMBER(videoram_w); DECLARE_READ8_MEMBER(spriteram_r); DECLARE_WRITE8_MEMBER(spriteram_w); @@ -87,6 +88,7 @@ private: required_device m_watchdog; required_device m_screen; required_device m_gfxdecode; + required_device m_palette; required_shared_ptr m_videoram; required_device m_cheap_squeak_deluxe; @@ -115,7 +117,7 @@ void zwackery_state::zwackery_map(address_map &map) map(0x108000, 0x108007).rw(m_pia1, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0x00ff); map(0x10c000, 0x10c007).rw(m_pia2, FUNC(pia6821_device::read), FUNC(pia6821_device::write)).umask16(0x00ff); map(0x800000, 0x800fff).ram().w(FUNC(zwackery_state::videoram_w)).share("videoram"); - map(0x802000, 0x803fff).ram().w("palette", FUNC(palette_device::write16)).share("palette"); + map(0x802000, 0x803fff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0xc00000, 0xc00fff).rw(FUNC(zwackery_state::spriteram_r), FUNC(zwackery_state::spriteram_w)).umask16(0x00ff); } @@ -185,7 +187,7 @@ INPUT_PORTS_END // VIDEO EMULATION //************************************************************************** -VIDEO_START_MEMBER( zwackery_state, zwackery ) +void zwackery_state::video_start() { const uint8_t *colordatabase = (const uint8_t *)memregion("bg_color")->base(); gfx_element *gfx0 = m_gfxdecode->gfx(0); @@ -245,9 +247,9 @@ VIDEO_START_MEMBER( zwackery_state, zwackery ) gfx2->set_raw_layout(m_srcdata2.get(), gfx2->width(), gfx2->height(), gfx2->elements(), 8 * gfx2->width(), 8 * gfx2->width() * gfx2->height()); } -TIMER_DEVICE_CALLBACK_MEMBER( zwackery_state::scanline_cb ) +WRITE32_MEMBER(zwackery_state::scanline_cb) { - switch (param) + switch (data) { case 0: // VSYNC @@ -494,10 +496,11 @@ void zwackery_state::machine_start() // MACHINE DEFINTIONS //************************************************************************** -MACHINE_CONFIG_START(zwackery_state::zwackery) +void zwackery_state::zwackery(machine_config &config) +{ // basic machine hardware - MCFG_DEVICE_ADD("maincpu", M68000, 7652400) // based on counter usage, should be XTAL(16'000'000)/2 - MCFG_DEVICE_PROGRAM_MAP(zwackery_map) + M68000(config, m_maincpu, 7652400); // based on counter usage, should be XTAL(16'000'000)/2 + m_maincpu->set_addrmap(AS_PROGRAM, zwackery_state::zwackery_map); WATCHDOG_TIMER(config, m_watchdog); @@ -514,34 +517,33 @@ MACHINE_CONFIG_START(zwackery_state::zwackery) m_pia1->readpa_handler().set(FUNC(zwackery_state::pia1_porta_r)); m_pia1->writepa_handler().set(FUNC(zwackery_state::pia1_porta_w)); m_pia1->readpb_handler().set(FUNC(zwackery_state::pia1_portb_r)); - m_pia1->ca2_handler().set("csd", FUNC(midway_cheap_squeak_deluxe_device::sirq_w)); + m_pia1->ca2_handler().set(m_cheap_squeak_deluxe, FUNC(midway_cheap_squeak_deluxe_device::sirq_w)); PIA6821(config, m_pia2, 0); m_pia2->readpa_handler().set(FUNC(zwackery_state::pia2_porta_r)); m_pia2->readpb_handler().set_ioport("DSW"); // video hardware - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(30) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // not accurate - MCFG_SCREEN_SIZE(32*16, 30*16) - MCFG_SCREEN_VISIBLE_AREA(0, 32*16-1, 0, 30*16-1) - MCFG_SCREEN_UPDATE_DRIVER(zwackery_state, screen_update) - MCFG_SCREEN_PALETTE("palette") - - MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", zwackery_state, scanline_cb, "screen", 0, 1) + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(30); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate + m_screen->set_size(32*16, 30*16); + m_screen->set_visarea(0, 32*16-1, 0, 30*16-1); + m_screen->set_screen_update(FUNC(zwackery_state::screen_update)); + m_screen->set_palette(m_palette); + m_screen->scanline().set(FUNC(zwackery_state::scanline_cb)); - MCFG_DEVICE_ADD("gfxdecode", GFXDECODE, "palette", gfx_zwackery) - MCFG_PALETTE_ADD("palette", 4096) - MCFG_PALETTE_FORMAT(xRRRRRBBBBBGGGGG_inverted) + GFXDECODE(config, "gfxdecode", "palette", gfx_zwackery); - MCFG_VIDEO_START_OVERRIDE(zwackery_state, zwackery) + PALETTE(config, m_palette, 4096); + m_palette->set_format(PALETTE_FORMAT_xRRRRRBBBBBGGGGG_inverted); // sound hardware SPEAKER(config, "speaker").front_center(); - MCFG_DEVICE_ADD("csd", MIDWAY_CHEAP_SQUEAK_DELUXE) - MCFG_SOUND_ROUTE(ALL_OUTPUTS, "speaker", 1.0) -MACHINE_CONFIG_END + + MIDWAY_CHEAP_SQUEAK_DELUXE(config, m_cheap_squeak_deluxe); + m_cheap_squeak_deluxe->add_route(ALL_OUTPUTS, "speaker", 1.0); +} //************************************************************************** diff --git a/src/mame/drivers/zx.cpp b/src/mame/drivers/zx.cpp index 824882ac1df..228bba9bebc 100644 --- a/src/mame/drivers/zx.cpp +++ b/src/mame/drivers/zx.cpp @@ -325,54 +325,52 @@ PALETTE_INIT_MEMBER(zx_state, zx) /* Machine Configs */ -MACHINE_CONFIG_START(zx_state::zx80) +void zx_state::zx80(machine_config &config) +{ /* basic machine hardware */ - MCFG_DEVICE_ADD("maincpu", Z80, XTAL(6'500'000)/2) - MCFG_DEVICE_PROGRAM_MAP(zx80_map) - MCFG_DEVICE_IO_MAP(zx80_io_map) - MCFG_DEVICE_OPCODES_MAP(ula_map) - MCFG_Z80_SET_REFRESH_CALLBACK(WRITE8(*this, zx_state, refresh_w)) - - MCFG_SCREEN_ADD("screen", RASTER) - MCFG_SCREEN_REFRESH_RATE(XTAL(6'500'000)/2/64159.0) // 54223 for NTSC - - /* video hardware */ - MCFG_SCREEN_UPDATE_DRIVER(zx_state, screen_update) - MCFG_SCREEN_SIZE(384, 311) - MCFG_SCREEN_VISIBLE_AREA(0, 383, 0, 310) - MCFG_SCREEN_PALETTE("palette") - - MCFG_PALETTE_ADD("palette", 2) - MCFG_PALETTE_INIT_OWNER(zx_state,zx) - - MCFG_CASSETTE_ADD( "cassette" ) - MCFG_CASSETTE_FORMATS(zx80_o_format) - MCFG_CASSETTE_DEFAULT_STATE(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED) - MCFG_CASSETTE_INTERFACE("zx80_cass") + Z80(config, m_maincpu, XTAL(6'500'000)/2); + m_maincpu->set_addrmap(AS_PROGRAM, &zx_state::zx80_map); + m_maincpu->set_addrmap(AS_IO, &zx_state::zx80_io_map); + m_maincpu->set_addrmap(AS_OPCODES, &zx_state::ula_map); + m_maincpu->refresh_cb().set(FUNC(zx_state::refresh_w)); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(XTAL(6'500'000)/2/64159.0); // 54223 for NTSC + m_screen->set_size(384, 311); + m_screen->set_visarea(0, 383, 0, 310); + m_screen->set_palette("palette"); + m_screen->set_screen_update(FUNC(zx_state::screen_update)); + + palette_device &palette(PALETTE(config, "palette", 2)); + palette.set_init(palette_init_delegate(FUNC(zx_state::palette_init_zx), this)); + + CASSETTE(config, m_cassette); + m_cassette->set_formats(zx80_o_format); + m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_SPEAKER_ENABLED); + m_cassette->set_interface("zx80_cass"); /* software lists */ - MCFG_SOFTWARE_LIST_ADD("cass_list", "zx80_cass") + SOFTWARE_LIST(config, m_softlist).set_original("zx80_cass"); /* internal ram */ RAM(config, m_ram).set_default_size("1K").set_extra_options("1K,2K,3K,16K"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(zx_state::zx81) +void zx_state::zx81(machine_config &config) +{ zx80(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_PROGRAM_MAP(zx81_map) - MCFG_DEVICE_IO_MAP(zx81_io_map) + m_maincpu->set_addrmap(AS_PROGRAM, &zx_state::zx81_map); + m_maincpu->set_addrmap(AS_IO, &zx_state::zx81_io_map); - MCFG_CASSETTE_MODIFY( "cassette" ) - MCFG_CASSETTE_FORMATS(zx81_cassette_formats) - MCFG_CASSETTE_INTERFACE("zx81_cass") + m_cassette->set_formats(zx81_cassette_formats); + m_cassette->set_interface("zx81_cass"); /* software lists */ - MCFG_SOFTWARE_LIST_MODIFY("cass_list", "zx81_cass") + m_softlist->set_original("zx81_cass"); /* internal ram */ m_ram->set_default_size("16K").set_extra_options("1K,32K,48K"); -MACHINE_CONFIG_END +} void zx_state::zx81_spk(machine_config &config) { @@ -398,23 +396,23 @@ void zx_state::ts1500(machine_config &config) m_ram->set_default_size("16K"); } -MACHINE_CONFIG_START(zx_state::pc8300) +void zx_state::pc8300(machine_config &config) +{ zx81_spk(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(pc8300_io_map) + m_maincpu->set_addrmap(AS_IO, &zx_state::pc8300_io_map); /* internal ram */ m_ram->set_default_size("16K"); -MACHINE_CONFIG_END +} -MACHINE_CONFIG_START(zx_state::pow3000) +void zx_state::pow3000(machine_config &config) +{ zx81_spk(config); - MCFG_DEVICE_MODIFY("maincpu") - MCFG_DEVICE_IO_MAP(pow3000_io_map) + m_maincpu->set_addrmap(AS_IO, &zx_state::pow3000_io_map); /* internal ram */ m_ram->set_default_size("2K").set_extra_options("16K"); -MACHINE_CONFIG_END +} /* ROMs */ diff --git a/src/mame/includes/zerozone.h b/src/mame/includes/zerozone.h index cf77992507b..799f43e8469 100644 --- a/src/mame/includes/zerozone.h +++ b/src/mame/includes/zerozone.h @@ -13,12 +13,12 @@ class zerozone_state : public driver_device { public: zerozone_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_audiocpu(*this, "audiocpu"), - m_soundlatch(*this, "soundlatch"), - m_vram(*this, "videoram"), - m_gfxdecode(*this, "gfxdecode") + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_audiocpu(*this, "audiocpu") + , m_soundlatch(*this, "soundlatch") + , m_vram(*this, "videoram") + , m_gfxdecode(*this, "gfxdecode") { } void zerozone(machine_config &config); @@ -26,6 +26,7 @@ public: private: // in drivers/zerozone.c DECLARE_WRITE16_MEMBER(sound_w); + DECLARE_WRITE_LINE_MEMBER(vblank_w); // in video/zerozone.c DECLARE_WRITE16_MEMBER(tilemap_w); diff --git a/src/mame/includes/zx.h b/src/mame/includes/zx.h index aa0409069dc..456e70891b7 100644 --- a/src/mame/includes/zx.h +++ b/src/mame/includes/zx.h @@ -32,6 +32,7 @@ public: m_maincpu(*this, "maincpu"), m_ram(*this, RAM_TAG), m_cassette(*this, "cassette"), + m_softlist(*this, "cass_list"), m_speaker(*this, "speaker"), m_region_maincpu(*this, "maincpu"), m_region_gfx1(*this, "gfx1"), @@ -90,9 +91,10 @@ private: TIMER_ULA_HSYNC }; - required_device m_maincpu; + required_device m_maincpu; required_device m_ram; required_device m_cassette; + required_device m_softlist; optional_device m_speaker; required_memory_region m_region_maincpu; optional_memory_region m_region_gfx1; -- cgit v1.2.3