From 7990fa744f3d6e7a3210a93b7f449acf1682a978 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Sat, 29 Mar 2014 14:07:48 +0000 Subject: [PATCH] 315_5124.c: converted to devcb2 (nw) --- src/emu/video/315_5124.c | 48 +++++++++++++------------------ src/emu/video/315_5124.h | 57 +++++++++++++++++++++++-------------- src/mame/drivers/megaplay.c | 15 ++-------- src/mame/drivers/megatech.c | 28 ++++-------------- src/mame/drivers/segac2.c | 9 ++---- src/mame/drivers/segae.c | 24 ++++------------ src/mame/drivers/segas18.c | 10 ++----- src/mame/machine/megadriv.c | 23 +++------------ src/mame/machine/megavdp.h | 12 ++++++-- src/mess/drivers/sms.c | 53 ++++++++++++++++------------------ 10 files changed, 109 insertions(+), 170 deletions(-) diff --git a/src/emu/video/315_5124.c b/src/emu/video/315_5124.c index 748e46caa90..4a22afd4e6f 100644 --- a/src/emu/video/315_5124.c +++ b/src/emu/video/315_5124.c @@ -158,6 +158,9 @@ sega315_5124_device::sega315_5124_device(const machine_config &mconfig, const ch , m_cram_size( SEGA315_5124_CRAM_SIZE ) , m_palette_offset( 0 ) , m_supports_224_240( false ) + , m_is_pal(false) + , m_int_cb(*this) + , m_pause_cb(*this) , m_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(sega315_5124)) , m_palette(*this, "palette") { @@ -171,6 +174,9 @@ sega315_5124_device::sega315_5124_device(const machine_config &mconfig, device_t , m_cram_size( cram_size ) , m_palette_offset( palette_offset ) , m_supports_224_240( supports_224_240 ) + , m_is_pal(false) + , m_int_cb(*this) + , m_pause_cb(*this) , m_space_config("videoram", ENDIANNESS_LITTLE, 8, 14, 0, NULL, *ADDRESS_MAP_NAME(sega315_5124)) , m_palette(*this, "palette") { @@ -328,8 +334,8 @@ void sega315_5124_device::device_timer(emu_timer &timer, device_timer_id id, int { m_irq_state = 1; - if ( !m_cb_int.isnull() ) - m_cb_int(ASSERT_LINE); + if ( !m_int_cb.isnull() ) + m_int_cb(ASSERT_LINE); } } break; @@ -341,8 +347,8 @@ void sega315_5124_device::device_timer(emu_timer &timer, device_timer_id id, int { m_irq_state = 1; - if ( !m_cb_int.isnull() ) - m_cb_int(ASSERT_LINE); + if ( !m_int_cb.isnull() ) + m_int_cb(ASSERT_LINE); } } break; @@ -369,8 +375,8 @@ void sega315_5124_device::process_line_timer() if (vpos == vpos_limit - 1) { m_line_counter = m_reg[0x0a]; - if ( !m_cb_pause.isnull() ) - m_cb_pause(0); + if ( !m_pause_cb.isnull() ) + m_pause_cb(0); return; } @@ -584,8 +590,8 @@ READ8_MEMBER( sega315_5124_device::register_read ) { m_irq_state = 0; - if ( !m_cb_int.isnull() ) - m_cb_int(CLEAR_LINE); + if ( !m_int_cb.isnull() ) + m_int_cb(CLEAR_LINE); } } @@ -690,9 +696,9 @@ WRITE8_MEMBER( sega315_5124_device::register_write ) { m_irq_state = 0; - if ( !m_cb_int.isnull() ) + if ( !m_int_cb.isnull() ) { - m_cb_int(CLEAR_LINE); + m_int_cb(CLEAR_LINE); } } } @@ -706,8 +712,8 @@ WRITE8_MEMBER( sega315_5124_device::register_write ) // m_irq_state = 1; - if ( !m_cb_int.isnull() ) - m_cb_int(ASSERT_LINE); + if ( !m_int_cb.isnull() ) + m_int_cb(ASSERT_LINE); } } m_addrmode = 0; @@ -1717,20 +1723,6 @@ void sega315_5124_device::stop_timers() DEVICE INTERFACE *****************************************************************************/ -void sega315_5124_device::device_config_complete() -{ - const sega315_5124_interface *intf = reinterpret_cast(static_config()); - - if ( intf != NULL ) - { - *static_cast(this) = *intf; - } - else - { - fatalerror("No sega315_5124_interface supplied\n"); - } -} - void sega315_5124_device::vdp_postload() { switch (m_y_pixels) @@ -1752,8 +1744,8 @@ void sega315_5124_device::vdp_postload() void sega315_5124_device::device_start() { /* Resolve callbacks */ - m_cb_int.resolve( m_int_callback, *this ); - m_cb_pause.resolve( m_pause_callback, *this ); + m_int_cb.resolve(); + m_pause_cb.resolve(); /* Allocate video RAM */ astring tempstring; diff --git a/src/emu/video/315_5124.h b/src/emu/video/315_5124.h index 109f48099f3..02d5531dee4 100644 --- a/src/emu/video/315_5124.h +++ b/src/emu/video/315_5124.h @@ -47,21 +47,12 @@ TYPE DEFINITIONS ***************************************************************************/ -struct sega315_5124_interface -{ - bool m_is_pal; /* false = NTSC, true = PAL */ - devcb_write_line m_int_callback; /* Interrupt callback function */ - devcb_write_line m_pause_callback; /* Pause callback function */ -}; - - extern const device_type SEGA315_5124; /* aka SMS1 vdp */ extern const device_type SEGA315_5246; /* aka SMS2 vdp */ extern const device_type SEGA315_5378; /* aka Gamegear vdp */ class sega315_5124_device : public device_t, - public sega315_5124_interface, public device_memory_interface, public device_video_interface { @@ -70,6 +61,10 @@ public: sega315_5124_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); sega315_5124_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT8 cram_size, UINT8 palette_offset, bool supports_224_240, const char *shortname, const char *source); + static void set_signal_type(device_t &device, bool is_pal) { downcast(device).m_is_pal = is_pal; } + template static devcb2_base &set_int_callback(device_t &device, _Object object) { return downcast(device).m_int_cb.set_callback(object); } + template static devcb2_base &set_pause_callback(device_t &device, _Object object) { return downcast(device).m_pause_cb.set_callback(object); } + DECLARE_READ8_MEMBER( vram_read ); DECLARE_WRITE8_MEMBER( vram_write ); DECLARE_READ8_MEMBER( register_read ); @@ -106,7 +101,6 @@ protected: void check_pending_flags( int hpos ); // device-level overrides - virtual void device_config_complete(); virtual void device_start(); virtual void device_reset(); virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); @@ -155,8 +149,9 @@ protected: sms compatibility mode. */ int *m_line_buffer; int m_current_palette[32]; - devcb_resolved_write_line m_cb_int; - devcb_resolved_write_line m_cb_pause; + bool m_is_pal; /* false = NTSC, true = PAL */ + devcb2_write_line m_int_cb; /* Interrupt callback function */ + devcb2_write_line m_pause_cb; /* Pause callback function */ emu_timer *m_display_timer; emu_timer *m_check_hint_timer; emu_timer *m_check_vint_timer; @@ -207,22 +202,40 @@ protected: DEVICE CONFIGURATION MACROS ***************************************************************************/ -#define MCFG_SEGA315_5124_ADD(_tag, _interface) \ - MCFG_DEVICE_ADD(_tag, SEGA315_5124, 0) \ - MCFG_DEVICE_CONFIG(_interface) - #define MCFG_SEGA315_5124_SET_SCREEN MCFG_VIDEO_SET_SCREEN -#define MCFG_SEGA315_5246_ADD(_tag, _interface) \ - MCFG_DEVICE_ADD(_tag, SEGA315_5246, 0) \ - MCFG_DEVICE_CONFIG(_interface) +#define MCFG_SEGA315_5124_IS_PAL(_bool) \ + sega315_5124_device::set_signal_type(*device, _bool); + +#define MCFG_SEGA315_5124_INT_CB(_devcb) \ + devcb = &sega315_5124_device::set_int_callback(*device, DEVCB2_##_devcb); + +#define MCFG_SEGA315_5124_PAUSE_CB(_devcb) \ + devcb = &sega315_5124_device::set_pause_callback(*device, DEVCB2_##_devcb); + #define MCFG_SEGA315_5246_SET_SCREEN MCFG_VIDEO_SET_SCREEN + +#define MCFG_SEGA315_5246_IS_PAL(_bool) \ + sega315_5246_device::set_signal_type(*device, _bool); + +#define MCFG_SEGA315_5246_INT_CB(_devcb) \ + devcb = &sega315_5246_device::set_int_callback(*device, DEVCB2_##_devcb); + +#define MCFG_SEGA315_5246_PAUSE_CB(_devcb) \ + devcb = &sega315_5246_device::set_pause_callback(*device, DEVCB2_##_devcb); -#define MCFG_SEGA315_5378_ADD(_tag, _interface) \ - MCFG_DEVICE_ADD(_tag, SEGA315_5378, 0) \ - MCFG_DEVICE_CONFIG(_interface) #define MCFG_SEGA315_5378_SET_SCREEN MCFG_VIDEO_SET_SCREEN + +#define MCFG_SEGA315_5378_IS_PAL(_bool) \ + sega315_5378_device::set_signal_type(*device, _bool); + +#define MCFG_SEGA315_5378_INT_CB(_devcb) \ + devcb = &sega315_5378_device::set_int_callback(*device, DEVCB2_##_devcb); + +#define MCFG_SEGA315_5378_PAUSE_CB(_devcb) \ + devcb = &sega315_5378_device::set_pause_callback(*device, DEVCB2_##_devcb); + #endif /* __SEGA315_5124_H__ */ diff --git a/src/mame/drivers/megaplay.c b/src/mame/drivers/megaplay.c index 4592561c857..c4a1f5701f7 100644 --- a/src/mame/drivers/megaplay.c +++ b/src/mame/drivers/megaplay.c @@ -586,13 +586,6 @@ WRITE_LINE_MEMBER( mplay_state::bios_int_callback ) m_bioscpu->set_input_line(0, state); } -static const sega315_5124_interface bios_vdp_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(mplay_state, bios_int_callback), - DEVCB_NULL, -}; - static MACHINE_CONFIG_START( megaplay, mplay_state ) /* basic machine hardware */ MCFG_FRAGMENT_ADD(md_ntsc) @@ -616,12 +609,8 @@ static MACHINE_CONFIG_START( megaplay, mplay_state ) SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT + 224) MCFG_SCREEN_UPDATE_DRIVER(mplay_state, screen_update_megplay) - MCFG_DEVICE_REMOVE("gen_vdp") - MCFG_SEGAGEN_VDP_ADD("gen_vdp", bios_vdp_intf) - MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_sndirqline_callback_genesis_z80)); - MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv6irqline_callback_genesis_68k)); - MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv4irqline_callback_genesis_68k)); - MCFG_VIDEO_SET_SCREEN("megadriv") + MCFG_DEVICE_MODIFY("gen_vdp") + MCFG_SEGAGEN_VDP_INT_CB(WRITELINE(mplay_state, bios_int_callback)) MACHINE_CONFIG_END diff --git a/src/mame/drivers/megatech.c b/src/mame/drivers/megatech.c index e70383bf23b..3807d15dd04 100644 --- a/src/mame/drivers/megatech.c +++ b/src/mame/drivers/megatech.c @@ -598,27 +598,11 @@ WRITE_LINE_MEMBER( mtech_state::bios_int_callback ) m_bioscpu->set_input_line(0, state); } -static const sega315_5124_interface bios_vdp_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(mtech_state, bios_int_callback), - DEVCB_NULL, -}; - - WRITE_LINE_MEMBER( mtech_state::snd_int_callback ) { m_z80snd->set_input_line(0, state); } -static const sega315_5124_interface main_vdp_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(mtech_state, snd_int_callback), - DEVCB_NULL, -}; - - static MACHINE_CONFIG_START( megatech, mtech_state ) /* basic machine hardware */ MCFG_FRAGMENT_ADD(md_ntsc) @@ -639,12 +623,8 @@ static MACHINE_CONFIG_START( megatech, mtech_state ) MCFG_SCREEN_UPDATE_DRIVER(mtech_state, screen_update_main) MCFG_SCREEN_VBLANK_DRIVER(mtech_state, screen_eof_main) - MCFG_DEVICE_REMOVE("gen_vdp") - MCFG_SEGAGEN_VDP_ADD("gen_vdp", main_vdp_intf ) - MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_sndirqline_callback_genesis_z80)); - MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv6irqline_callback_genesis_68k)); - MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv4irqline_callback_genesis_68k)); - MCFG_VIDEO_SET_SCREEN("megadriv") + MCFG_DEVICE_MODIFY("gen_vdp") + MCFG_SEGAGEN_VDP_INT_CB(WRITELINE(mtech_state, snd_int_callback)) MCFG_SCREEN_ADD("menu", RASTER) // check frq @@ -653,8 +633,10 @@ static MACHINE_CONFIG_START( megatech, mtech_state ) SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT + 224) MCFG_SCREEN_UPDATE_DRIVER(mtech_state, screen_update_menu) - MCFG_SEGA315_5246_ADD("vdp1", bios_vdp_intf) + MCFG_DEVICE_ADD("vdp1", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("menu") + MCFG_SEGA315_5246_IS_PAL(false) + MCFG_SEGA315_5246_INT_CB(WRITELINE(mtech_state, bios_int_callback)) /* sound hardware */ MCFG_SOUND_ADD("sn2", SN76496, MASTER_CLOCK/15) diff --git a/src/mame/drivers/segac2.c b/src/mame/drivers/segac2.c index 9e99dab82f0..410987437df 100644 --- a/src/mame/drivers/segac2.c +++ b/src/mame/drivers/segac2.c @@ -1337,12 +1337,6 @@ WRITE_LINE_MEMBER(segac2_state::vdp_lv4irqline_callback_c2) m_maincpu->set_input_line(4, CLEAR_LINE); } -static const sega315_5124_interface sms_vdp_ntsc_intf = -{ - false, - DEVCB_NULL, - DEVCB_NULL, -}; static MACHINE_CONFIG_START( segac, segac2_state ) @@ -1354,7 +1348,8 @@ static MACHINE_CONFIG_START( segac, segac2_state ) MCFG_MACHINE_RESET_OVERRIDE(segac2_state,segac2) MCFG_NVRAM_ADD_RANDOM_FILL("nvram") - MCFG_SEGAGEN_VDP_ADD("gen_vdp", sms_vdp_ntsc_intf) + MCFG_DEVICE_ADD("gen_vdp", SEGA_GEN_VDP, 0) + MCFG_SEGAGEN_VDP_IS_PAL(false) MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(segac2_state, vdp_sndirqline_callback_c2)); MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(segac2_state, vdp_lv6irqline_callback_c2)); MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(segac2_state, vdp_lv4irqline_callback_c2)); diff --git a/src/mame/drivers/segae.c b/src/mame/drivers/segae.c index 8a5c134091d..2605c038aa0 100644 --- a/src/mame/drivers/segae.c +++ b/src/mame/drivers/segae.c @@ -941,22 +941,6 @@ WRITE_LINE_MEMBER( systeme_state::int_callback ) } -static const sega315_5124_interface _315_5124_1_intf = -{ - false, - DEVCB_NULL, - DEVCB_NULL, -}; - - -static const sega315_5124_interface _315_5124_2_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(systeme_state, int_callback), - DEVCB_NULL, -}; - - UINT32 systeme_state::screen_update_systeme(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { bitmap_rgb32 &vdp1_bitmap = m_vdp1->get_bitmap(); @@ -980,7 +964,6 @@ UINT32 systeme_state::screen_update_systeme(screen_device &screen, bitmap_rgb32 return 0; } - static MACHINE_CONFIG_START( systeme, systeme_state ) MCFG_CPU_ADD("maincpu", Z80, XTAL_10_738635MHz/2) /* Z80B @ 5.3693Mhz */ MCFG_CPU_PROGRAM_MAP(systeme_map) @@ -992,10 +975,13 @@ static MACHINE_CONFIG_START( systeme, systeme_state ) SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_192_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_192_TBORDER_HEIGHT + 192) MCFG_SCREEN_UPDATE_DRIVER(systeme_state, screen_update_systeme) - MCFG_SEGA315_5124_ADD("vdp1", _315_5124_1_intf) + MCFG_DEVICE_ADD("vdp1", SEGA315_5124, 0) + MCFG_SEGA315_5124_IS_PAL(false) MCFG_DEVICE_ADDRESS_MAP(AS_0, vdp1_map) - MCFG_SEGA315_5124_ADD("vdp2", _315_5124_2_intf) + MCFG_DEVICE_ADD("vdp2", SEGA315_5124, 0) + MCFG_SEGA315_5124_IS_PAL(false) + MCFG_SEGA315_5124_INT_CB(WRITELINE(systeme_state, int_callback)) MCFG_DEVICE_ADDRESS_MAP(AS_0, vdp2_map) /* sound hardware */ diff --git a/src/mame/drivers/segas18.c b/src/mame/drivers/segas18.c index d7b149fc93d..3fe9c72262a 100644 --- a/src/mame/drivers/segas18.c +++ b/src/mame/drivers/segas18.c @@ -1210,13 +1210,6 @@ WRITE_LINE_MEMBER(segas18_state::vdp_lv4irqline_callback_s18) * *************************************/ -static const sega315_5124_interface sms_vdp_ntsc_intf = -{ - false, - DEVCB_NULL, - DEVCB_NULL, -}; - static MACHINE_CONFIG_START( system18, segas18_state ) // basic machine hardware @@ -1233,7 +1226,8 @@ static MACHINE_CONFIG_START( system18, segas18_state ) MCFG_SEGA_315_5195_MAPPER_ADD("mapper", "maincpu", segas18_state, memory_mapper, mapper_sound_r, mapper_sound_w) - MCFG_SEGAGEN_VDP_ADD("gen_vdp", sms_vdp_ntsc_intf ) + MCFG_DEVICE_ADD("gen_vdp", SEGA_GEN_VDP, 0) + MCFG_SEGAGEN_VDP_IS_PAL(false) MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(segas18_state, vdp_sndirqline_callback_s18)); MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(segas18_state, vdp_lv6irqline_callback_s18)); MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(segas18_state, vdp_lv4irqline_callback_s18)); diff --git a/src/mame/machine/megadriv.c b/src/mame/machine/megadriv.c index 34dd8a7c140..fa81379fdef 100644 --- a/src/mame/machine/megadriv.c +++ b/src/mame/machine/megadriv.c @@ -935,23 +935,6 @@ MACHINE_CONFIG_FRAGMENT( megadriv_timers ) MACHINE_CONFIG_END - - -static const sega315_5124_interface sms_vdp_ntsc_intf = -{ - false, - DEVCB_NULL, - DEVCB_NULL, -}; - -static const sega315_5124_interface sms_vdp_pal_intf = -{ - true, - DEVCB_NULL, - DEVCB_NULL, -}; - - MACHINE_CONFIG_FRAGMENT( md_ntsc ) MCFG_CPU_ADD("maincpu", M68000, MASTER_CLOCK_NTSC / 7) /* 7.67 MHz */ MCFG_CPU_PROGRAM_MAP(megadriv_map) @@ -967,7 +950,8 @@ MACHINE_CONFIG_FRAGMENT( md_ntsc ) MCFG_FRAGMENT_ADD(megadriv_timers) - MCFG_SEGAGEN_VDP_ADD("gen_vdp", sms_vdp_ntsc_intf ) + MCFG_DEVICE_ADD("gen_vdp", SEGA_GEN_VDP, 0) + MCFG_SEGAGEN_VDP_IS_PAL(false) MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_sndirqline_callback_genesis_z80)); MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv6irqline_callback_genesis_68k)); MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv4irqline_callback_genesis_68k)); @@ -1013,7 +997,8 @@ MACHINE_CONFIG_FRAGMENT( md_pal ) MCFG_FRAGMENT_ADD(megadriv_timers) - MCFG_SEGAGEN_VDP_ADD("gen_vdp", sms_vdp_pal_intf ) + MCFG_DEVICE_ADD("gen_vdp", SEGA_GEN_VDP, 0) + MCFG_SEGAGEN_VDP_IS_PAL(true) MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_sndirqline_callback_genesis_z80)); MCFG_SEGAGEN_VDP_LV6_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv6irqline_callback_genesis_68k)); MCFG_SEGAGEN_VDP_LV4_IRQ_CALLBACK(WRITELINE(md_base_state, vdp_lv4irqline_callback_genesis_68k)); diff --git a/src/mame/machine/megavdp.h b/src/mame/machine/megavdp.h index 9b1c2ae417c..fa6da496b9a 100644 --- a/src/mame/machine/megavdp.h +++ b/src/mame/machine/megavdp.h @@ -143,9 +143,15 @@ #define MEGADRIVE_REG17_DMATYPE ((m_vdp_regs[0x17]&0xc0)>>6) #define MEGADRIVE_REG17_UNUSED ((m_vdp_regs[0x17]&0x3f)>>0) -#define MCFG_SEGAGEN_VDP_ADD(_tag, _intrf) \ - MCFG_DEVICE_ADD(_tag, SEGA_GEN_VDP, 0) \ - MCFG_DEVICE_CONFIG(_intrf) + +#define MCFG_SEGAGEN_VDP_IS_PAL(_bool) \ + sega_genesis_vdp_device::set_signal_type(*device, _bool); + +#define MCFG_SEGAGEN_VDP_INT_CB(_devcb) \ + devcb = &sega_genesis_vdp_device::set_int_callback(*device, DEVCB2_##_devcb); + +#define MCFG_SEGAGEN_VDP_PAUSE_CB(_devcb) \ + devcb = &sega_genesis_vdp_device::set_pause_callback(*device, DEVCB2_##_devcb); #define MCFG_SEGAGEN_VDP_SND_IRQ_CALLBACK(_write) \ devcb = &sega_genesis_vdp_device::set_sndirqline_callback(*device, DEVCB2_##_write); diff --git a/src/mess/drivers/sms.c b/src/mess/drivers/sms.c index ebfd027d63b..c8dcb21ca1b 100644 --- a/src/mess/drivers/sms.c +++ b/src/mess/drivers/sms.c @@ -410,28 +410,6 @@ WRITE_LINE_MEMBER(sms_state::sms_int_callback) m_maincpu->set_input_line(0, state); } -static const sega315_5124_interface _315_5124_ntsc_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(sms_state,sms_int_callback), - DEVCB_DRIVER_LINE_MEMBER(sms_state,sms_pause_callback) -}; - -static const sega315_5124_interface _315_5124_pal_intf = -{ - true, - DEVCB_DRIVER_LINE_MEMBER(sms_state,sms_int_callback), - DEVCB_DRIVER_LINE_MEMBER(sms_state,sms_pause_callback) -}; - -static const sega315_5124_interface sms_store_intf = -{ - false, - DEVCB_DRIVER_LINE_MEMBER(smssdisp_state,sms_store_int_callback), - DEVCB_DRIVER_LINE_MEMBER(sms_state,sms_pause_callback) -}; - - static SLOT_INTERFACE_START(sms_cart) SLOT_INTERFACE_INTERNAL("rom", SEGA8_ROM_STD) SLOT_INTERFACE_INTERNAL("codemasters", SEGA8_ROM_CODEMASTERS) @@ -530,10 +508,14 @@ static MACHINE_CONFIG_DERIVED( sms2_ntsc, sms_ntsc_base ) SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT + 224) MCFG_SCREEN_UPDATE_DRIVER(sms_state, screen_update_sms) - MCFG_SEGA315_5246_ADD("sms_vdp", _315_5124_ntsc_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") + MCFG_SEGA315_5246_IS_PAL(false) + MCFG_SEGA315_5246_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MACHINE_CONFIG_END + static MACHINE_CONFIG_DERIVED( sms1_ntsc, sms_ntsc_base ) MCFG_CPU_MODIFY("maincpu") @@ -566,8 +548,11 @@ static MACHINE_CONFIG_DERIVED( sms1_ntsc, sms_ntsc_base ) MCFG_VIDEO_START_OVERRIDE(sms_state,sms1) MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1) - MCFG_SEGA315_5124_ADD("sms_vdp", _315_5124_ntsc_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5124, 0) MCFG_SEGA315_5124_SET_SCREEN("screen") + MCFG_SEGA315_5124_IS_PAL(false) + MCFG_SEGA315_5124_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5124_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) // card and expansion slots, not present in Master System II MCFG_SMS_CARD_ADD("mycard", sms_cart, NULL) @@ -598,8 +583,11 @@ static MACHINE_CONFIG_START( sms_sdisp, smssdisp_state ) SEGA315_5124_HEIGHT_NTSC, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_NTSC_224_TBORDER_HEIGHT + 224) MCFG_SCREEN_UPDATE_DRIVER(sms_state, screen_update_sms) - MCFG_SEGA315_5246_ADD("sms_vdp", sms_store_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") + MCFG_SEGA315_5246_IS_PAL(false) + MCFG_SEGA315_5246_INT_CB(WRITELINE(smssdisp_state, sms_store_int_callback)) + MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MCFG_CPU_ADD("control", Z80, XTAL_53_693175MHz/15) MCFG_CPU_PROGRAM_MAP(sms_store_mem) @@ -690,8 +678,11 @@ static MACHINE_CONFIG_DERIVED( sms2_pal, sms_pal_base ) SEGA315_5124_HEIGHT_PAL, SEGA315_5124_TBORDER_START + SEGA315_5124_PAL_240_TBORDER_HEIGHT, SEGA315_5124_TBORDER_START + SEGA315_5124_PAL_240_TBORDER_HEIGHT + 240) MCFG_SCREEN_UPDATE_DRIVER(sms_state, screen_update_sms) - MCFG_SEGA315_5246_ADD("sms_vdp", _315_5124_pal_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5246, 0) MCFG_SEGA315_5246_SET_SCREEN("screen") + MCFG_SEGA315_5246_IS_PAL(true) + MCFG_SEGA315_5246_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5246_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sms1_pal, sms_pal_base ) @@ -726,8 +717,11 @@ static MACHINE_CONFIG_DERIVED( sms1_pal, sms_pal_base ) MCFG_VIDEO_START_OVERRIDE(sms_state,sms1) MCFG_VIDEO_RESET_OVERRIDE(sms_state,sms1) - MCFG_SEGA315_5124_ADD("sms_vdp", _315_5124_pal_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5124, 0) MCFG_SEGA315_5124_SET_SCREEN("screen") + MCFG_SEGA315_5124_IS_PAL(true) + MCFG_SEGA315_5124_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5124_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) // card and expansion slots, not present in Master System II MCFG_SMS_CARD_ADD("mycard", sms_cart, NULL) @@ -793,8 +787,11 @@ static MACHINE_CONFIG_START( gamegear, sms_state ) MCFG_VIDEO_START_OVERRIDE(sms_state,gamegear) - MCFG_SEGA315_5378_ADD("sms_vdp", _315_5124_ntsc_intf) + MCFG_DEVICE_ADD("sms_vdp", SEGA315_5378, 0) MCFG_SEGA315_5378_SET_SCREEN("screen") + MCFG_SEGA315_5378_IS_PAL(false) + MCFG_SEGA315_5378_INT_CB(WRITELINE(sms_state, sms_int_callback)) + MCFG_SEGA315_5378_PAUSE_CB(WRITELINE(sms_state, sms_pause_callback)) /* sound hardware */ MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker")