diff --git a/src/devices/bus/a2bus/ezcgi.cpp b/src/devices/bus/a2bus/ezcgi.cpp index 44550a7a83a..ec9dce1cad4 100644 --- a/src/devices/bus/a2bus/ezcgi.cpp +++ b/src/devices/bus/a2bus/ezcgi.cpp @@ -49,27 +49,29 @@ void a2bus_ezcgi_device::device_add_mconfig(machine_config &config) } MACHINE_CONFIG_START(a2bus_ezcgi_9938_device::device_add_mconfig) - MCFG_V9938_ADD(TMS_TAG, SCREEN_TAG, 0x30000, XTAL(21'477'272)) // 192K of VRAM / typical 9938 clock, not verified - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, a2bus_ezcgi_9938_device, tms_irq_w)) + V9938(config, m_tms, XTAL(21'477'272)); // typical 9938 clock, not verified + m_tms->set_vram_size(0x30000); // 192K of VRAM + m_tms->set_screen(SCREEN_TAG); + m_tms->int_cb().set(FUNC(a2bus_ezcgi_9938_device::tms_irq_w)); MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE(TMS_TAG, v9938_device, screen_update) MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2) MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1) MACHINE_CONFIG_END MACHINE_CONFIG_START(a2bus_ezcgi_9958_device::device_add_mconfig) - MCFG_V9958_ADD(TMS_TAG, SCREEN_TAG, 0x30000, XTAL(21'477'272)) // 192K of VRAM / typcial 9938/9958 clock, not verified - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, a2bus_ezcgi_9958_device, tms_irq_w)) + V9958(config, m_tms, XTAL(21'477'272)); // typical 9938/9958 clock, not verified + m_tms->set_vram_size(0x30000); // 192K of VRAM + m_tms->set_screen(SCREEN_TAG); + m_tms->int_cb().set(FUNC(a2bus_ezcgi_9958_device::tms_irq_w)); MCFG_SCREEN_ADD(SCREEN_TAG, RASTER) MCFG_SCREEN_VIDEO_ATTRIBUTES(VIDEO_UPDATE_BEFORE_VBLANK) MCFG_SCREEN_REFRESH_RATE(60) MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) /* not accurate */ - MCFG_SCREEN_UPDATE_DEVICE(TMS_TAG, v9938_device, screen_update) MCFG_SCREEN_SIZE(MSX2_TOTAL_XRES_PIXELS, 262*2) MCFG_SCREEN_VISIBLE_AREA(MSX2_XBORDER_PIXELS - MSX2_VISIBLE_XBORDER_PIXELS, MSX2_TOTAL_XRES_PIXELS - MSX2_XBORDER_PIXELS + MSX2_VISIBLE_XBORDER_PIXELS - 1, MSX2_YBORDER_PIXELS - MSX2_VISIBLE_YBORDER_PIXELS, MSX2_TOTAL_YRES_PIXELS - MSX2_YBORDER_PIXELS + MSX2_VISIBLE_YBORDER_PIXELS - 1) MACHINE_CONFIG_END diff --git a/src/devices/video/v9938.cpp b/src/devices/video/v9938.cpp index 5b628aa5817..a77ce812446 100644 --- a/src/devices/video/v9938.cpp +++ b/src/devices/video/v9938.cpp @@ -108,6 +108,7 @@ v99x8_device::v99x8_device(const machine_config &mconfig, device_type type, cons device_video_interface(mconfig, *this), m_space_config("vram", ENDIANNESS_BIG, 8, 18), m_model(model), + m_pal_config(false), m_offset_x(0), m_offset_y(0), m_visible_y(0), @@ -153,6 +154,25 @@ device_memory_interface::space_config_vector v99x8_device::memory_space_config() } +void v99x8_device::device_config_complete() +{ + if (!has_screen()) + return; + + if (!screen().refresh_attoseconds()) + screen().set_raw(clock(), + HTOTAL, + 0, + HVISIBLE - 1, + (m_pal_config ? VTOTAL_PAL : VTOTAL_NTSC) * 2, + VERTICAL_ADJUST * 2, + (m_pal_config ? VVISIBLE_PAL : VVISIBLE_NTSC) * 2 - 1 - VERTICAL_ADJUST * 2); + + if (!screen().has_screen_update()) + screen().set_screen_update(screen_update_rgb32_delegate(FUNC(v99x8_device::screen_update), this)); +} + + void v99x8_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) { int scanline = (m_scanline - (m_scanline_start + m_offset_y)); diff --git a/src/devices/video/v9938.h b/src/devices/video/v9938.h index cdf07dced31..0e1a3640cb9 100644 --- a/src/devices/video/v9938.h +++ b/src/devices/video/v9938.h @@ -14,45 +14,6 @@ #include "screen.h" -//************************************************************************** -// DEVICE CONFIGURATION MACROS -//************************************************************************** - -#define MCFG_V9938_ADD(_tag, _screen, _vramsize, _clock) \ - MCFG_DEVICE_ADD(_tag, V9938, _clock) \ - MCFG_VIDEO_SET_SCREEN(_screen) \ - downcast(*device).set_vram_size(_vramsize); -#define MCFG_V9958_ADD(_tag, _screen, _vramsize, _clock) \ - MCFG_DEVICE_ADD(_tag, V9958, _clock) \ - MCFG_VIDEO_SET_SCREEN(_screen) \ - downcast(*device).set_vram_size(_vramsize); - -#define MCFG_V99X8_SCREEN_ADD_NTSC(_screen_tag, _v9938_tag, _clock) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_RAW_PARAMS(_clock, \ - v99x8_device::HTOTAL, \ - 0, \ - v99x8_device::HVISIBLE - 1, \ - v99x8_device::VTOTAL_NTSC * 2, \ - v99x8_device::VERTICAL_ADJUST * 2, \ - v99x8_device::VVISIBLE_NTSC * 2 - 1 - v99x8_device::VERTICAL_ADJUST * 2) \ - MCFG_SCREEN_UPDATE_DEVICE(_v9938_tag, v9938_device, screen_update) - -#define MCFG_V99X8_SCREEN_ADD_PAL(_screen_tag, _v9938_tag, _clock) \ - MCFG_SCREEN_ADD(_screen_tag, RASTER) \ - MCFG_SCREEN_RAW_PARAMS(_clock, \ - v99x8_device::HTOTAL, \ - 0, \ - v99x8_device::HVISIBLE - 1, \ - v99x8_device::VTOTAL_PAL * 2, \ - v99x8_device::VERTICAL_ADJUST * 2, \ - v99x8_device::VVISIBLE_PAL * 2 - 1 - v99x8_device::VERTICAL_ADJUST * 2) \ - MCFG_SCREEN_UPDATE_DEVICE(_v9938_tag, v9938_device, screen_update) - -#define MCFG_V99X8_INTERRUPT_CALLBACK(_irq) \ - downcast(device)->set_interrupt_callback(DEVCB_##_irq); - - //************************************************************************** // GLOBAL VARIABLES //************************************************************************** @@ -75,6 +36,18 @@ class v99x8_device : public device_t, public device_video_interface { public: + auto int_cb() { return m_int_callback.bind(); } + template void set_screen_ntsc(T &&screen) + { + set_screen(std::forward(screen)); + m_pal_config = false; + } + template void set_screen_pal(T &&screen) + { + set_screen(std::forward(screen)); + m_pal_config = true; + } + template devcb_base &set_interrupt_callback(Object &&irq) { return m_int_callback.set_callback(std::forward(irq)); } bitmap_rgb32 &get_bitmap() { return m_bitmap; } void update_mouse_state(int mx_delta, int my_delta, int button_state); @@ -84,8 +57,6 @@ public: DECLARE_READ8_MEMBER( read ); DECLARE_WRITE8_MEMBER( write ); - auto int_cb() { return m_int_callback.bind(); } - uint8_t vram_r(); uint8_t status_r(); void palette_w(uint8_t data); @@ -122,7 +93,10 @@ protected: const int m_model; + bool m_pal_config; + // device overrides + virtual void device_config_complete() override; virtual void device_start() override; virtual void device_reset() override; virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; diff --git a/src/mame/drivers/big10.cpp b/src/mame/drivers/big10.cpp index 3cda33f6458..b201abee938 100644 --- a/src/mame/drivers/big10.cpp +++ b/src/mame/drivers/big10.cpp @@ -69,7 +69,6 @@ class big10_state : public driver_device public: big10_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_v9938(*this, "v9938") , m_maincpu(*this, "maincpu") , m_hopper(*this, "hopper") , m_in(*this, "IN%u", 1) @@ -87,7 +86,6 @@ protected: DECLARE_WRITE8_MEMBER(mux_w); private: - required_device m_v9938; uint8_t m_mux_data; required_device m_maincpu; required_device m_hopper; @@ -139,7 +137,7 @@ void big10_state::main_io(address_map &map) map.global_mask(0xff); map(0x00, 0x00).r(FUNC(big10_state::mux_r)); /* present in test mode */ map(0x02, 0x02).portr("SYSTEM"); /* coins and service */ - map(0x98, 0x9b).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x98, 0x9b).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); map(0xa0, 0xa1).w("aysnd", FUNC(ay8910_device::address_data_w)); map(0xa2, 0xa2).r("aysnd", FUNC(ay8910_device::data_r)); /* Dip-Switches routes here. */ } @@ -240,9 +238,11 @@ MACHINE_CONFIG_START(big10_state::big10) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, MASTER_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MASTER_CLOCK) + v9938_device &v9938(V9938(config, "v9938", MASTER_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(VDP_MEM); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/csplayh5.cpp b/src/mame/drivers/csplayh5.cpp index b5c43f9c7f5..f233c1b8dd6 100644 --- a/src/mame/drivers/csplayh5.cpp +++ b/src/mame/drivers/csplayh5.cpp @@ -50,7 +50,6 @@ public: : driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_tmp68301(*this, "tmp68301"), - m_v9958(*this, "v9958"), m_nichisnd(*this, "nichisnd"), m_key(*this, "KEY.%u", 0), m_region_maincpu(*this, "maincpu") @@ -58,7 +57,6 @@ public: required_device m_maincpu; required_device m_tmp68301; - required_device m_v9958; required_device m_nichisnd; required_ioport_array<5> m_key; required_memory_region m_region_maincpu; @@ -139,7 +137,7 @@ void csplayh5_state::csplayh5_map(address_map &map) map(0x200200, 0x200201).rw(FUNC(csplayh5_state::csplayh5_mux_r), FUNC(csplayh5_state::csplayh5_mux_w)); map(0x200400, 0x200401).portr("SYSTEM"); - map(0x200600, 0x200607).rw(m_v9958, FUNC(v9958_device::read), FUNC(v9958_device::write)).umask16(0x00ff); + map(0x200600, 0x200607).rw("v9958", FUNC(v9958_device::read), FUNC(v9958_device::write)).umask16(0x00ff); map(0x800000, 0xbfffff).rom().region("blit_gfx", 0); // GFX ROM routes here @@ -385,9 +383,11 @@ MACHINE_CONFIG_START(csplayh5_state::csplayh5) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_V9958_ADD("v9958", "screen", 0x20000, XTAL(21'477'272)) // typical 9958 clock, not verified - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, csplayh5_state, csplayh5_vdp0_interrupt)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9958", XTAL(21'477'272)) + v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); // typical 9958 clock, not verified + v9958.set_screen_ntsc("screen"); + v9958.set_vram_size(0x20000); + v9958.int_cb().set(FUNC(csplayh5_state::csplayh5_vdp0_interrupt)); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ MCFG_NICHISND_ADD("nichisnd") diff --git a/src/mame/drivers/kas89.cpp b/src/mame/drivers/kas89.cpp index 618d7f842aa..97237377dde 100644 --- a/src/mame/drivers/kas89.cpp +++ b/src/mame/drivers/kas89.cpp @@ -212,7 +212,6 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_v9938(*this, "v9938"), m_soundlatch(*this, "soundlatch"), m_pl1(*this, "PL1"), m_pl2(*this, "PL2"), @@ -257,7 +256,6 @@ private: required_device m_maincpu; required_device m_audiocpu; - required_device m_v9938; required_device m_soundlatch; required_ioport m_pl1; required_ioport m_pl2; @@ -537,7 +535,7 @@ void kas89_state::kas89_map(address_map &map) void kas89_state::kas89_io(address_map &map) { map.global_mask(0xff); - map(0x40, 0x43).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x40, 0x43).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); map(0x80, 0x80).w(FUNC(kas89_state::mux_w)); map(0x81, 0x81).r(FUNC(kas89_state::mux_r)); map(0x82, 0x82).w(FUNC(kas89_state::control_w)); /* Bit6 trigger the 138Hz osc. tied to main Z80's NMI.*/ @@ -785,9 +783,11 @@ MACHINE_CONFIG_START(kas89_state::kas89) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, MASTER_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MASTER_CLOCK) + v9938_device &v9938(V9938(config, "v9938", MASTER_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(VDP_MEM); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/kurukuru.cpp b/src/mame/drivers/kurukuru.cpp index 5b328728b64..a9d6e5a692c 100644 --- a/src/mame/drivers/kurukuru.cpp +++ b/src/mame/drivers/kurukuru.cpp @@ -403,7 +403,6 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_v9938(*this, "v9938"), m_adpcm(*this, "adpcm"), m_soundirq(*this, "soundirq"), m_hopper(*this, "hopper"), @@ -416,7 +415,6 @@ public: private: required_device m_maincpu; required_device m_audiocpu; - required_device m_v9938; required_device m_adpcm; required_device m_soundirq; required_device m_hopper; @@ -531,7 +529,7 @@ void kurukuru_state::kurukuru_io(address_map &map) map(0x00, 0x00).mirror(0x0f).w(FUNC(kurukuru_state::kurukuru_out_latch_w)); map(0x10, 0x10).mirror(0x0f).portr("DSW1"); map(0x20, 0x20).mirror(0x0f).w("soundlatch", FUNC(generic_latch_8_device::write)); - map(0x80, 0x83).mirror(0x0c).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x80, 0x83).mirror(0x0c).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); map(0x90, 0x90).mirror(0x0f).w(FUNC(kurukuru_state::kurukuru_bankswitch_w)); map(0xa0, 0xa0).mirror(0x0f).portr("IN0"); map(0xb0, 0xb0).mirror(0x0f).portr("IN1"); @@ -550,7 +548,7 @@ void kurukuru_state::ppj_io(address_map &map) { map.global_mask(0xff); map(0x00, 0x00).mirror(0x0f).w(FUNC(kurukuru_state::kurukuru_bankswitch_w)); - map(0x10, 0x13).mirror(0x0c).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x10, 0x13).mirror(0x0c).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); map(0x30, 0x30).mirror(0x0f).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0x40, 0x40).mirror(0x0f).portr("DSW1"); map(0x50, 0x50).mirror(0x0f).w(FUNC(kurukuru_state::kurukuru_out_latch_w)); @@ -857,9 +855,11 @@ MACHINE_CONFIG_START(kurukuru_state::kurukuru) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, MAIN_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MAIN_CLOCK) + v9938_device &v9938(V9938(config, "v9938", MAIN_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(VDP_MEM); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH ) diff --git a/src/mame/drivers/luckybal.cpp b/src/mame/drivers/luckybal.cpp index 4a4b5219ac9..463af27eda1 100644 --- a/src/mame/drivers/luckybal.cpp +++ b/src/mame/drivers/luckybal.cpp @@ -588,9 +588,11 @@ MACHINE_CONFIG_START(luckybal_state::luckybal) NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, VID_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", VID_CLOCK) + v9938_device &v9938(V9938(config, "v9938", VID_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(VDP_MEM); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "speaker").front_center(); diff --git a/src/mame/drivers/meritm.cpp b/src/mame/drivers/meritm.cpp index 36d9d259c9b..c3fb5db404a 100644 --- a/src/mame/drivers/meritm.cpp +++ b/src/mame/drivers/meritm.cpp @@ -1133,14 +1133,17 @@ MACHINE_CONFIG_START(meritm_state::crt250) MCFG_DS1204_ADD(m_ds1204) - MCFG_V9938_ADD(m_v9938[0], "screen", 0x20000, SYSTEM_CLK) - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, meritm_state, vdp0_interrupt)) + V9938(config, m_v9938[0], SYSTEM_CLK); + m_v9938[0]->set_screen_ntsc("screen"); + m_v9938[0]->set_vram_size(0x20000); + m_v9938[0]->int_cb().set(FUNC(meritm_state::vdp0_interrupt)); - MCFG_V9938_ADD(m_v9938[1], "screen", 0x20000, SYSTEM_CLK) - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, meritm_state, vdp1_interrupt)) + V9938(config, m_v9938[1], SYSTEM_CLK); + m_v9938[1]->set_screen_ntsc("screen"); + m_v9938[1]->set_vram_size(0x20000); + m_v9938[1]->int_cb().set(FUNC(meritm_state::vdp0_interrupt)); - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938_0", SYSTEM_CLK) - MCFG_SCREEN_UPDATE_DRIVER(meritm_state, screen_update) + SCREEN(config, "screen", SCREEN_TYPE_RASTER).set_screen_update(FUNC(meritm_state::screen_update)); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/msx.cpp b/src/mame/drivers/msx.cpp index eeb74bc3311..d9b2a5f5fdb 100644 --- a/src/mame/drivers/msx.cpp +++ b/src/mame/drivers/msx.cpp @@ -1425,9 +1425,11 @@ MACHINE_CONFIG_START(msx_state::msx2) ppi.out_pc_callback().set(FUNC(msx_state::msx_ppi_port_c_w)); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", 0x20000, 21.477272_MHz_XTAL) - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, msx_state,msx_irq_source0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", 21.477272_MHz_XTAL) + V9938(config, m_v9938, 21.477272_MHz_XTAL); + m_v9938->set_screen_ntsc("screen"); + m_v9938->set_vram_size(0x20000); + m_v9938->int_cb().set(FUNC(msx_state::msx_irq_source0)); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -1482,9 +1484,11 @@ MACHINE_CONFIG_START(msx_state::msx2p) ppi.out_pc_callback().set(FUNC(msx_state::msx_ppi_port_c_w)); /* video hardware */ - MCFG_V9958_ADD("v9958", "screen", 0x20000, 21.477272_MHz_XTAL) - MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, msx_state,msx_irq_source0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9958", 21.477272_MHz_XTAL) + V9958(config, m_v9958, 21.477272_MHz_XTAL); + m_v9958->set_screen_ntsc("screen"); + m_v9958->set_vram_size(0x20000); + m_v9958->int_cb().set(FUNC(msx_state::msx_irq_source0)); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "speaker").front_center(); @@ -1526,11 +1530,11 @@ MACHINE_CONFIG_START(msx_state::msx2p) MACHINE_CONFIG_END -MACHINE_CONFIG_START(msx_state::msx2_pal) +void msx_state::msx2_pal(machine_config &config) +{ msx2(config); - MCFG_DEVICE_REMOVE("screen") - MCFG_V99X8_SCREEN_ADD_PAL("screen", "v9938", 21.477272_MHz_XTAL) -MACHINE_CONFIG_END + m_v9938->set_screen_pal("screen"); +} /*************************************************************************** diff --git a/src/mame/drivers/nichild.cpp b/src/mame/drivers/nichild.cpp index 91aeed4f902..9728da99c64 100644 --- a/src/mame/drivers/nichild.cpp +++ b/src/mame/drivers/nichild.cpp @@ -246,10 +246,12 @@ MACHINE_CONFIG_START(nichild_state::nichild) m_maincpu->out_pe_callback().set(FUNC(nichild_state::gfxbank_w)); /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", 0x40000, MAIN_CLOCK) -// MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) -// MCFG_V99X8_INTERRUPT_CALLBACK(WRITELINE(*this, nichild_state, vdp_irq)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MAIN_CLOCK) + V9938(config, m_v9938, MAIN_CLOCK); + m_v9938->set_screen_ntsc("screen"); + m_v9938->set_vram_size(0x40000); +// m_v9938->int_cb().set_inputline("maincpu", 0); +// m_v9938->int_cb().set(FUNC(nichild_state::vdp_irq)); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/sangho.cpp b/src/mame/drivers/sangho.cpp index 5431e9cd676..bd6e859f44d 100644 --- a/src/mame/drivers/sangho.cpp +++ b/src/mame/drivers/sangho.cpp @@ -59,7 +59,6 @@ class sangho_state : public driver_device public: sangho_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag) - , m_v9958(*this, "v9958") , m_maincpu(*this, "maincpu") , m_region_user1(*this, "user1") , m_banks(*this, "bank%u", 1U) @@ -71,7 +70,6 @@ protected: void sangho_map(address_map &map); std::unique_ptr m_ram; - required_device m_v9958; required_device m_maincpu; required_memory_region m_region_user1; required_memory_bank_array<8> m_banks; @@ -315,7 +313,7 @@ void pzlestar_state::pzlestar_io_map(address_map &map) map.global_mask(0xff); map(0x7c, 0x7d).w("ymsnd", FUNC(ym2413_device::write)); map(0x91, 0x91).w(FUNC(pzlestar_state::pzlestar_bank_w)); - map(0x98, 0x9b).rw(m_v9958, FUNC(v9958_device::read), FUNC(v9958_device::write)); + map(0x98, 0x9b).rw("v9958", FUNC(v9958_device::read), FUNC(v9958_device::write)); map(0xa0, 0xa0).portr("P1"); map(0xa1, 0xa1).portr("P2"); map(0xa8, 0xa8).rw(FUNC(pzlestar_state::pzlestar_mem_bank_r), FUNC(pzlestar_state::pzlestar_mem_bank_w)); @@ -330,7 +328,7 @@ void sexyboom_state::sexyboom_io_map(address_map &map) map(0x7c, 0x7d).w("ymsnd", FUNC(ym2413_device::write)); map(0xa0, 0xa0).portr("P1"); map(0xa1, 0xa1).portr("P2"); - map(0xf0, 0xf3).rw(m_v9958, FUNC(v9958_device::read), FUNC(v9958_device::write)); + map(0xf0, 0xf3).rw("v9958", FUNC(v9958_device::read), FUNC(v9958_device::write)); map(0xf7, 0xf7).portr("DSW"); map(0xf8, 0xff).w(FUNC(sexyboom_state::sexyboom_bank_w)); } @@ -484,9 +482,11 @@ MACHINE_CONFIG_START(pzlestar_state::pzlestar) MCFG_DEVICE_PROGRAM_MAP(sangho_map) MCFG_DEVICE_IO_MAP(pzlestar_io_map) - MCFG_V9958_ADD("v9958", "screen", 0x20000, XTAL(21'477'272)) // typical 9958 clock, not verified - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9958", XTAL(21'477'272)) + v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); // typical 9958 clock, not verified + v9958.set_screen_ntsc("screen"); + v9958.set_vram_size(0x20000); + v9958.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); SPEAKER(config, "mono").front_center(); MCFG_DEVICE_ADD("ymsnd", YM2413, XTAL(21'477'272)/6) @@ -500,9 +500,11 @@ MACHINE_CONFIG_START(sexyboom_state::sexyboom) MCFG_DEVICE_PROGRAM_MAP(sangho_map) MCFG_DEVICE_IO_MAP(sexyboom_io_map) - MCFG_V9958_ADD("v9958", "screen", 0x20000, XTAL(21'477'272)) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9958", XTAL(21'477'272)) + v9958_device &v9958(V9958(config, "v9958", XTAL(21'477'272))); + v9958.set_screen_ntsc("screen"); + v9958.set_vram_size(0x20000); + v9958.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); MCFG_PALETTE_ADD("palette", 19780) diff --git a/src/mame/drivers/sfkick.cpp b/src/mame/drivers/sfkick.cpp index 1e2eda5929e..2cc22422e4c 100644 --- a/src/mame/drivers/sfkick.cpp +++ b/src/mame/drivers/sfkick.cpp @@ -167,7 +167,6 @@ class sfkick_state : public driver_device public: sfkick_state(const machine_config &mconfig, device_type type, const char *tag) : driver_device(mconfig, type, tag), - m_v9938(*this, "v9938"), m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_region_bios(*this, "bios"), @@ -215,7 +214,6 @@ private: int m_bank[8]; int m_input_mux; - required_device m_v9938; required_device m_maincpu; required_device m_soundcpu; required_memory_region m_region_bios; @@ -486,7 +484,7 @@ void sfkick_state::sfkick_io_map(address_map &map) map.unmap_value_high(); map.global_mask(0xff); map(0xa0, 0xa7).w("soundlatch", FUNC(generic_latch_8_device::write)); - map(0x98, 0x9b).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x98, 0x9b).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); map(0xa8, 0xab).rw("ppi8255", FUNC(i8255_device::read), FUNC(i8255_device::write)); map(0xb4, 0xb5).ram(); /* loopback ? req by sfkicka (MSX Bios leftover)*/ } @@ -605,9 +603,11 @@ MACHINE_CONFIG_START(sfkick_state::sfkick) MCFG_DEVICE_PROGRAM_MAP(sfkick_sound_map) MCFG_DEVICE_IO_MAP(sfkick_sound_io_map) - MCFG_V9938_ADD("v9938", "screen", 0x80000, MASTER_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MASTER_CLOCK) + v9938_device &v9938(V9938(config, "screen", MASTER_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(0x80000); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); i8255_device &ppi(I8255A(config, "ppi8255")); ppi.out_pa_callback().set(FUNC(sfkick_state::ppi_port_a_w)); diff --git a/src/mame/drivers/sothello.cpp b/src/mame/drivers/sothello.cpp index 684a253c610..2c1d6a33211 100644 --- a/src/mame/drivers/sothello.cpp +++ b/src/mame/drivers/sothello.cpp @@ -54,7 +54,6 @@ public: m_maincpu(*this, "maincpu"), m_soundcpu(*this, "soundcpu"), m_subcpu(*this, "subcpu"), - m_v9938(*this, "v9938"), m_msm(*this, "msm"), m_mainbank(*this, "mainbank") { } @@ -96,7 +95,6 @@ private: required_device m_maincpu; required_device m_soundcpu; required_device m_subcpu; - required_device m_v9938; required_device m_msm; required_memory_bank m_mainbank; }; @@ -189,7 +187,7 @@ void sothello_state::maincpu_io_map(address_map &map) map(0x50, 0x50).w(FUNC(sothello_state::bank_w)); map(0x60, 0x61).mirror(0x02).rw("ymsnd", FUNC(ym2203_device::read), FUNC(ym2203_device::write)); /* not sure, but the A1 line is ignored, code @ $8b8 */ - map(0x70, 0x73).rw(m_v9938, FUNC(v9938_device::read), FUNC(v9938_device::write)); + map(0x70, 0x73).rw("v9938", FUNC(v9938_device::read), FUNC(v9938_device::write)); } /* sound Z80 */ @@ -373,9 +371,11 @@ MACHINE_CONFIG_START(sothello_state::sothello) MCFG_QUANTUM_TIME(attotime::from_hz(600)) /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, XTAL(21'477'272)) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", XTAL(21'477'272)) + v9938_device &v9938(V9938(config, "v9938", XTAL(21'477'272))); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(VDP_MEM); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); /* sound hardware */ SPEAKER(config, "mono").front_center(); diff --git a/src/mame/drivers/tonton.cpp b/src/mame/drivers/tonton.cpp index a00e66a7782..189f9c409b4 100644 --- a/src/mame/drivers/tonton.cpp +++ b/src/mame/drivers/tonton.cpp @@ -233,9 +233,11 @@ MACHINE_CONFIG_START(tonton_state::tonton) /* video hardware */ - MCFG_V9938_ADD("v9938", "screen", VDP_MEM, MAIN_CLOCK) - MCFG_V99X8_INTERRUPT_CALLBACK(INPUTLINE("maincpu", 0)) - MCFG_V99X8_SCREEN_ADD_NTSC("screen", "v9938", MAIN_CLOCK) + v9938_device &v9938(V9938(config, "v9938", MAIN_CLOCK)); + v9938.set_screen_ntsc("screen"); + v9938.set_vram_size(0x20000); + v9938.int_cb().set_inputline("maincpu", 0); + SCREEN(config, "screen", SCREEN_TYPE_RASTER); MCFG_TICKET_DISPENSER_ADD("hopper", attotime::from_msec(HOPPER_PULSE), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )