diff options
author | 2014-03-28 13:18:42 +0000 | |
---|---|---|
committer | 2014-03-28 13:18:42 +0000 | |
commit | a820b91964898ccfee0a296a05aba287c4ec5609 (patch) | |
tree | aea91c894f3d2a777dd0597a93f2e488893ba7b5 /src | |
parent | b4a432d51faa740a3699aea7c66a3cc1d725fb78 (diff) |
hsync and fsync are part of mc6847 so devcb2 conversion was needed there not in gime, this fixes coco3 issue (nw)
Diffstat (limited to 'src')
-rw-r--r-- | src/emu/video/mc6847.c | 13 | ||||
-rw-r--r-- | src/emu/video/mc6847.h | 21 | ||||
-rw-r--r-- | src/mess/drivers/apf.c | 3 | ||||
-rw-r--r-- | src/mess/drivers/coco12.c | 4 | ||||
-rw-r--r-- | src/mess/drivers/mc1000.c | 6 | ||||
-rw-r--r-- | src/mess/drivers/phc25.c | 8 | ||||
-rw-r--r-- | src/mess/drivers/spc1000.c | 4 | ||||
-rw-r--r-- | src/mess/drivers/sv8000.c | 2 | ||||
-rw-r--r-- | src/mess/drivers/vtech1.c | 11 | ||||
-rw-r--r-- | src/mess/drivers/z80ne.c | 2 | ||||
-rw-r--r-- | src/mess/includes/coco12.h | 4 | ||||
-rw-r--r-- | src/mess/machine/coco12.c | 4 | ||||
-rw-r--r-- | src/mess/video/gime.c | 4 | ||||
-rw-r--r-- | src/mess/video/gime.h | 10 |
14 files changed, 39 insertions, 57 deletions
diff --git a/src/emu/video/mc6847.c b/src/emu/video/mc6847.c index 9f89f4ae353..4b08868e7c8 100644 --- a/src/emu/video/mc6847.c +++ b/src/emu/video/mc6847.c @@ -130,6 +130,8 @@ const UINT32 mc6847_base_device::s_palette[mc6847_base_device::PALETTE_LENGTH] = mc6847_friend_device::mc6847_friend_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const UINT8 *fontdata, bool is_mc6847t1, double tpfs, int field_sync_falling_edge_scanline, bool supports_partial_body_scanlines, const char *shortname, const char *source) : device_t(mconfig, type, name, tag, owner, clock, shortname, source), + m_write_hsync(*this), + m_write_fsync(*this), m_character_map(fontdata, is_mc6847t1) { m_tpfs = tpfs; @@ -164,6 +166,9 @@ ATTR_FORCE_INLINE emu_timer *mc6847_friend_device::setup_timer(device_timer_id i void mc6847_friend_device::device_start(void) { + m_write_hsync.resolve_safe(); + m_write_fsync.resolve_safe(); + /* create the timers */ m_frame_timer = setup_timer( TIMER_FRAME, 0, m_tpfs * TIMER_HSYNC_PERIOD); m_hsync_on_timer = setup_timer( TIMER_HSYNC_ON, TIMER_HSYNC_ON_TIME, TIMER_HSYNC_PERIOD); @@ -351,8 +356,7 @@ ATTR_FORCE_INLINE void mc6847_friend_device::change_horizontal_sync(bool line) logerror("%s: change_horizontal_sync(): line=%d\n", describe_context(), line ? 1 : 0); // invoke callback - if (!m_res_out_hsync_func.isnull()) - m_res_out_hsync_func(line); + m_write_hsync(line); // call virtual function horizontal_sync_changed(m_horizontal_sync); @@ -379,8 +383,7 @@ ATTR_FORCE_INLINE void mc6847_friend_device::change_field_sync(bool line) logerror("%s: change_field_sync(): line=%d\n", describe_context(), line ? 1 : 0); /* invoke callback */ - if (!m_res_out_fsync_func.isnull()) - m_res_out_fsync_func(line); + m_write_fsync(line); /* call virtual function */ field_sync_changed(m_field_sync); @@ -599,8 +602,6 @@ void mc6847_base_device::device_start() /* resolve callbacks */ m_res_input_func.resolve(config->m_input_func, *this); - m_res_out_hsync_func.resolve(config->m_out_hsync_func, *this); - m_res_out_fsync_func.resolve(config->m_out_fsync_func, *this); m_get_char_rom = config->m_get_char_rom; /* set up fixed mode */ diff --git a/src/emu/video/mc6847.h b/src/emu/video/mc6847.h index b8251a1f89d..63f84873194 100644 --- a/src/emu/video/mc6847.h +++ b/src/emu/video/mc6847.h @@ -37,6 +37,14 @@ MCFG_SCREEN_SIZE(320, 243) \ MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 1, 241-1) \ MCFG_SCREEN_VBLANK_TIME(0) + +#define MCFG_MC6847_HSYNC_CALLBACK(_write) \ + devcb = &mc6847_friend_device::set_hsync_wr_callback(*device, DEVCB2_##_write); + +#define MCFG_MC6847_FSYNC_CALLBACK(_write) \ + devcb = &mc6847_friend_device::set_fsync_wr_callback(*device, DEVCB2_##_write); + + /* interface */ struct mc6847_interface { @@ -46,12 +54,6 @@ struct mc6847_interface /* if specified, this gets called whenever reading a byte (offs_t ~0 specifies DA* entering the tristate mode) */ devcb_read8 m_input_func; - /* if specified, this gets called for every change of the HS pin (pin 38) */ - devcb_write_line m_out_hsync_func; - - /* if specified, this gets called for every change of the FS pin (pin 37) */ - devcb_write_line m_out_fsync_func; - /* mode control lines input */ devcb_read_line m_in_ag_func; devcb_read_line m_in_gm2_func; @@ -86,6 +88,9 @@ public: bool hs_r(void) { return m_horizontal_sync; } bool fs_r(void) { return m_field_sync; } + template<class _Object> static devcb2_base &set_hsync_wr_callback(device_t &device, _Object object) { return downcast<mc6847_friend_device &>(device).m_write_hsync.set_callback(object); } + template<class _Object> static devcb2_base &set_fsync_wr_callback(device_t &device, _Object object) { return downcast<mc6847_friend_device &>(device).m_write_fsync.set_callback(object); } + protected: mc6847_friend_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const UINT8 *fontdata, bool is_mc6847t1, double tpfs, int field_sync_falling_edge_scanline, bool supports_partial_body_scanlines, const char *shortname, const char *source); @@ -266,8 +271,8 @@ protected: }; // callbacks - devcb_resolved_write_line m_res_out_hsync_func; - devcb_resolved_write_line m_res_out_fsync_func; + devcb2_write_line m_write_hsync; + devcb2_write_line m_write_fsync; // incidentals character_map m_character_map; diff --git a/src/mess/drivers/apf.c b/src/mess/drivers/apf.c index f8f7a521b5a..60d92fdceeb 100644 --- a/src/mess/drivers/apf.c +++ b/src/mess/drivers/apf.c @@ -513,8 +513,6 @@ static const mc6847_interface apf_mc6847_intf = { "screen", DEVCB_DRIVER_MEMBER(apf_state, videoram_r), - DEVCB_NULL, - DEVCB_DEVICE_LINE_MEMBER("pia0", pia6821_device, cb1_w), DEVCB_NULL, /* AG */ DEVCB_LINE_VCC, /* GM2 */ @@ -535,6 +533,7 @@ static MACHINE_CONFIG_START( apfm1000, apf_state ) /* video hardware */ MCFG_SCREEN_MC6847_NTSC_ADD("screen", "mc6847") MCFG_MC6847_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz, apf_mc6847_intf) + MCFG_MC6847_FSYNC_CALLBACK(DEVWRITELINE("pia0", pia6821_device, cb1_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/coco12.c b/src/mess/drivers/coco12.c index a63e244316d..f3896028f64 100644 --- a/src/mess/drivers/coco12.c +++ b/src/mess/drivers/coco12.c @@ -299,7 +299,9 @@ static MACHINE_CONFIG_START( coco, coco12_state ) // video hardware MCFG_SCREEN_MC6847_NTSC_ADD(SCREEN_TAG, VDG_TAG) MCFG_MC6847_ADD(VDG_TAG, MC6847_NTSC, XTAL_3_579545MHz, coco12_state::mc6847_config) - + MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(coco12_state, horizontal_sync)) + MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(coco12_state, field_sync)) + // sound hardware MCFG_FRAGMENT_ADD( coco_sound ) diff --git a/src/mess/drivers/mc1000.c b/src/mess/drivers/mc1000.c index 1b849617dcb..96f27d6ad50 100644 --- a/src/mess/drivers/mc1000.c +++ b/src/mess/drivers/mc1000.c @@ -436,9 +436,7 @@ static const cassette_interface mc1000_cassette_interface = static const mc6847_interface mc1000_mc6847_intf = { SCREEN_TAG, - DEVCB_DRIVER_MEMBER(mc1000_state, videoram_r), - DEVCB_DRIVER_LINE_MEMBER(mc1000_state, hs_w), - DEVCB_DRIVER_LINE_MEMBER(mc1000_state, fs_w), + DEVCB_DRIVER_MEMBER(mc1000_state, videoram_r) }; static MACHINE_CONFIG_START( mc1000, mc1000_state ) @@ -459,6 +457,8 @@ static MACHINE_CONFIG_START( mc1000, mc1000_state ) /* video hardware */ MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, MC6847_TAG) MCFG_MC6847_ADD(MC6847_TAG, MC6847_NTSC, XTAL_3_579545MHz, mc1000_mc6847_intf) + MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(mc1000_state, hs_w)) + MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(mc1000_state, fs_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") diff --git a/src/mess/drivers/phc25.c b/src/mess/drivers/phc25.c index 685182e5273..8d6542a8521 100644 --- a/src/mess/drivers/phc25.c +++ b/src/mess/drivers/phc25.c @@ -302,9 +302,6 @@ static const mc6847_interface ntsc_vdg_intf = SCREEN_TAG, DEVCB_DRIVER_MEMBER(phc25_state, video_ram_r), - DEVCB_NULL, /* horizontal sync */ - DEVCB_DRIVER_LINE_MEMBER(phc25_state, irq_w), /* field sync */ - DEVCB_NULL, /* AG */ DEVCB_LINE_VCC, /* GM2 */ DEVCB_LINE_VCC, /* GM1 */ @@ -322,9 +319,6 @@ static const mc6847_interface pal_vdg_intf = SCREEN_TAG, DEVCB_DRIVER_MEMBER(phc25_state, video_ram_r), - DEVCB_NULL, /* horizontal sync */ - DEVCB_DRIVER_LINE_MEMBER(phc25_state, irq_w), /* field sync */ - DEVCB_NULL, /* AG */ DEVCB_LINE_VCC, /* GM2 */ DEVCB_LINE_VCC, /* GM1 */ @@ -400,12 +394,14 @@ static MACHINE_CONFIG_DERIVED( pal, phc25 ) /* video hardware */ MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, MC6847_TAG) MCFG_MC6847_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz, pal_vdg_intf) + MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(phc25_state, irq_w)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( ntsc, phc25 ) /* video hardware */ MCFG_SCREEN_MC6847_NTSC_ADD(SCREEN_TAG, MC6847_TAG) MCFG_MC6847_ADD(MC6847_TAG, MC6847_NTSC, XTAL_3_579545MHz, ntsc_vdg_intf) + MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(phc25_state, irq_w)) MACHINE_CONFIG_END /* ROMs */ diff --git a/src/mess/drivers/spc1000.c b/src/mess/drivers/spc1000.c index 1075957d15f..21ad4f2cb6e 100644 --- a/src/mess/drivers/spc1000.c +++ b/src/mess/drivers/spc1000.c @@ -316,8 +316,6 @@ static const mc6847_interface spc1000_mc6847_intf = { "screen", DEVCB_DRIVER_MEMBER(spc1000_state,spc1000_mc6847_videoram_r), // data fetch - DEVCB_NULL, - DEVCB_DRIVER_LINE_MEMBER(spc1000_state, irq_w), /* field sync */ DEVCB_NULL, /* AG */ DEVCB_LINE_VCC, /* GM2 */ @@ -340,7 +338,7 @@ static MACHINE_CONFIG_START( spc1000, spc1000_state ) /* video hardware */ MCFG_SCREEN_MC6847_NTSC_ADD("screen", "mc6847") MCFG_MC6847_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz, spc1000_mc6847_intf) - + MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(spc1000_state, irq_w)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ay8910", AY8910, XTAL_4MHz / 1) diff --git a/src/mess/drivers/sv8000.c b/src/mess/drivers/sv8000.c index 8e13c6d8cd7..ab6d81a03b6 100644 --- a/src/mess/drivers/sv8000.c +++ b/src/mess/drivers/sv8000.c @@ -400,8 +400,6 @@ static const mc6847_interface sv8000_mc6847_interface = { "screen", DEVCB_DRIVER_MEMBER(sv8000_state,mc6847_videoram_r), // data fetch - DEVCB_NULL, - DEVCB_NULL, DEVCB_NULL, /* AG */ DEVCB_NULL, /* GM2 */ diff --git a/src/mess/drivers/vtech1.c b/src/mess/drivers/vtech1.c index 69bd5648d53..5bb0f676869 100644 --- a/src/mess/drivers/vtech1.c +++ b/src/mess/drivers/vtech1.c @@ -906,8 +906,6 @@ static const mc6847_interface vtech1_mc6847_bw_intf = { "screen", DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r), - DEVCB_NULL, /* horz sync */ - DEVCB_CPU_INPUT_LINE("maincpu", 0), /* field sync */ DEVCB_NULL, /* AG */ DEVCB_LINE_GND, /* GM2 */ @@ -925,9 +923,7 @@ static const mc6847_interface vtech1_mc6847_bw_intf = static const mc6847_interface vtech1_mc6847_intf = { "screen", - DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r), - DEVCB_NULL, /* horz sync */ - DEVCB_CPU_INPUT_LINE("maincpu", 0), /* field sync */ + DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r), DEVCB_NULL, /* AG */ DEVCB_LINE_GND, /* GM2 */ @@ -946,8 +942,6 @@ static const mc6847_interface vtech1_shrg_mc6847_intf = { "screen", DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r), - DEVCB_NULL, /* horz sync */ - DEVCB_CPU_INPUT_LINE("maincpu", 0), /* field sync */ DEVCB_NULL, /* AG */ DEVCB_NULL, /* GM2 */ @@ -969,6 +963,7 @@ static MACHINE_CONFIG_START( laser110, vtech1_state ) /* video hardware */ MCFG_SCREEN_MC6847_PAL_ADD("screen", "mc6847") MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, vtech1_mc6847_bw_intf) + MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) /* sound hardware */ MCFG_SPEAKER_STANDARD_MONO("mono") @@ -1004,6 +999,7 @@ MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( laser200, laser110 ) MCFG_DEVICE_REMOVE("mc6847") MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, vtech1_mc6847_intf) + MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( laser210, laser200 ) @@ -1032,6 +1028,7 @@ static MACHINE_CONFIG_DERIVED( laser310h, laser310 ) MCFG_CPU_IO_MAP(vtech1_shrg_io) MCFG_DEVICE_REMOVE("mc6847") MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, vtech1_shrg_mc6847_intf) + MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0)) MACHINE_CONFIG_END diff --git a/src/mess/drivers/z80ne.c b/src/mess/drivers/z80ne.c index bb41741bbb9..68f2aabf6af 100644 --- a/src/mess/drivers/z80ne.c +++ b/src/mess/drivers/z80ne.c @@ -444,8 +444,6 @@ static const mc6847_interface z80net_mc6847_intf = { "lx388", DEVCB_DRIVER_MEMBER(z80ne_state, lx388_mc6847_videoram_r), - DEVCB_NULL, - DEVCB_NULL, DEVCB_LINE_GND, /* AG */ DEVCB_LINE_GND, /* GM2 */ diff --git a/src/mess/includes/coco12.h b/src/mess/includes/coco12.h index a1b3e36495a..a25a74f2caa 100644 --- a/src/mess/includes/coco12.h +++ b/src/mess/includes/coco12.h @@ -50,6 +50,8 @@ public: DECLARE_READ8_MEMBER( sam_read ); + DECLARE_WRITE_LINE_MEMBER( horizontal_sync ); + DECLARE_WRITE_LINE_MEMBER( field_sync ); protected: virtual void device_start(); virtual void update_cart_base(UINT8 *cart_base); @@ -58,8 +60,6 @@ protected: virtual void pia1_pb_changed(void); private: - DECLARE_WRITE_LINE_MEMBER( horizontal_sync ); - DECLARE_WRITE_LINE_MEMBER( field_sync ); void configure_sam(void); }; diff --git a/src/mess/machine/coco12.c b/src/mess/machine/coco12.c index 299ae5e10c8..9691c6cf000 100644 --- a/src/mess/machine/coco12.c +++ b/src/mess/machine/coco12.c @@ -126,9 +126,7 @@ void coco12_state::update_cart_base(UINT8 *cart_base) const mc6847_interface coco12_state::mc6847_config = { SCREEN_TAG, - DEVCB_DEVICE_MEMBER(SAM_TAG, sam6883_device, display_read), - DEVCB_DRIVER_LINE_MEMBER(coco12_state, horizontal_sync), - DEVCB_DRIVER_LINE_MEMBER(coco12_state, field_sync) + DEVCB_DEVICE_MEMBER(SAM_TAG, sam6883_device, display_read) }; diff --git a/src/mess/video/gime.c b/src/mess/video/gime.c index 45e3cdbb7cf..2bd9d60deea 100644 --- a/src/mess/video/gime.c +++ b/src/mess/video/gime.c @@ -108,8 +108,6 @@ gime_base_device::gime_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const UINT8 *fontdata, const char *shortname, const char *source) : mc6847_friend_device(mconfig, type, name, tag, owner, clock, fontdata, true, 263, 25+192+26+3, false, shortname, source), - m_write_hsync(*this), - m_write_fsync(*this), m_write_irq(*this), m_write_firq(*this), m_read_floating_bus(*this) @@ -167,8 +165,6 @@ void gime_base_device::device_start(void) } // resolve callbacks - m_write_hsync.resolve_safe(); - m_write_fsync.resolve_safe(); m_write_irq.resolve_safe(); m_write_firq.resolve_safe(); m_read_floating_bus.resolve_safe(0); diff --git a/src/mess/video/gime.h b/src/mess/video/gime.h index 2ef3313b6ad..e1fc02a07b8 100644 --- a/src/mess/video/gime.h +++ b/src/mess/video/gime.h @@ -21,11 +21,9 @@ // GIME CONFIG/INTERFACE //************************************************************************** -#define MCFG_GIME_HSYNC_CALLBACK(_write) \ - devcb = &gime_base_device::set_hsync_wr_callback(*device, DEVCB2_##_write); +#define MCFG_GIME_HSYNC_CALLBACK MCFG_MC6847_HSYNC_CALLBACK -#define MCFG_GIME_FSYNC_CALLBACK(_write) \ - devcb = &gime_base_device::set_fsync_wr_callback(*device, DEVCB2_##_write); +#define MCFG_GIME_FSYNC_CALLBACK MCFG_MC6847_FSYNC_CALLBACK #define MCFG_GIME_IRQ_CALLBACK(_write) \ devcb = &gime_base_device::set_irq_wr_callback(*device, DEVCB2_##_write); @@ -56,8 +54,6 @@ class cococart_slot_device; class gime_base_device : public mc6847_friend_device, public sam6883_friend_device { public: - template<class _Object> static devcb2_base &set_hsync_wr_callback(device_t &device, _Object object) { return downcast<gime_base_device &>(device).m_write_hsync.set_callback(object); } - template<class _Object> static devcb2_base &set_fsync_wr_callback(device_t &device, _Object object) { return downcast<gime_base_device &>(device).m_write_fsync.set_callback(object); } template<class _Object> static devcb2_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<gime_base_device &>(device).m_write_irq.set_callback(object); } template<class _Object> static devcb2_base &set_firq_wr_callback(device_t &device, _Object object) { return downcast<gime_base_device &>(device).m_write_firq.set_callback(object); } template<class _Object> static devcb2_base &set_floating_bus_rd_callback(device_t &device, _Object object) { return downcast<gime_base_device &>(device).m_read_floating_bus.set_callback(object); } @@ -162,8 +158,6 @@ private: static const UINT8 hires_font[128][12]; // callbacks - devcb2_write_line m_write_hsync; - devcb2_write_line m_write_fsync; devcb2_write_line m_write_irq; devcb2_write_line m_write_firq; devcb2_read8 m_read_floating_bus; |