summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Fabio Priuli <etabeta78@users.noreply.github.com>2014-05-13 17:00:02 +0000
committer Fabio Priuli <etabeta78@users.noreply.github.com>2014-05-13 17:00:02 +0000
commitf5d20c68501e01c83b4c42ad001d826bb1b24370 (patch)
treee0dbebfc293777793ba65a1d03635ab817cddfb0 /src
parent41afc28498b64234680b70262a18939f94b1a051 (diff)
mc6847: converted to use devcb2, delegates and inline configs. nw.
Diffstat (limited to 'src')
-rw-r--r--src/emu/video/mc6847.c57
-rw-r--r--src/emu/video/mc6847.h85
-rw-r--r--src/mess/drivers/apf.c22
-rw-r--r--src/mess/drivers/atom.c16
-rw-r--r--src/mess/drivers/coco12.c9
-rw-r--r--src/mess/drivers/dragon.c5
-rw-r--r--src/mess/drivers/fc100.c30
-rw-r--r--src/mess/drivers/mc10.c14
-rw-r--r--src/mess/drivers/mc1000.c10
-rw-r--r--src/mess/drivers/phc25.c61
-rw-r--r--src/mess/drivers/spc1000.c34
-rw-r--r--src/mess/drivers/sv8000.c24
-rw-r--r--src/mess/drivers/vtech1.c76
-rw-r--r--src/mess/drivers/z80ne.c33
-rw-r--r--src/mess/includes/coco12.h1
-rw-r--r--src/mess/includes/phc25.h4
-rw-r--r--src/mess/machine/coco12.c12
-rw-r--r--src/mess/video/gime.c4
18 files changed, 173 insertions, 324 deletions
diff --git a/src/emu/video/mc6847.c b/src/emu/video/mc6847.c
index 8ca8fecbb99..77530513c51 100644
--- a/src/emu/video/mc6847.c
+++ b/src/emu/video/mc6847.c
@@ -567,7 +567,11 @@ const rom_entry *mc6847_base_device::device_rom_region() const
mc6847_base_device::mc6847_base_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const UINT8 *fontdata, double tpfs, const char *shortname, const char *source) :
mc6847_friend_device(mconfig, type, name, tag, owner, clock, fontdata, (type == MC6847T1_NTSC) || (type == MC6847T1_PAL), tpfs, 25+191, true, shortname, source),
- m_char_rom(*this, "chargen")
+ m_char_rom(*this, "chargen"),
+ m_input_cb(*this),
+ m_black_and_white(false),
+ m_fixed_mode(0),
+ m_fixed_mode_mask(0)
{
m_palette = s_palette;
@@ -580,41 +584,25 @@ mc6847_base_device::mc6847_base_device(const machine_config &mconfig, device_typ
//-------------------------------------------------
-// setup_fixed_mode - sets up a particular video
-// mode bit with a decb callback
+// setup_fixed_mode - sets up fixed mode mask
//-------------------------------------------------
-void mc6847_base_device::setup_fixed_mode(struct devcb_read_line callback, UINT8 mode)
+void mc6847_base_device::setup_fixed_mode()
{
- if (callback.type == DEVCB_TYPE_NULL)
+ for (int i = 0; i < 8; i++)
{
- // do nothing
- }
- else if (callback.type == DEVCB_TYPE_CONSTANT && (callback.index == 0 || callback.index == 1))
- {
- // this mode is fixed
- m_fixed_mode |= (callback.index ? mode : 0x00);
- m_fixed_mode_mask |= mode;
- }
- else
- {
- // for reasons of performance, we currently only support DEVCB_NULL,
- // DEVCB_LINE_GND and DEVCB_LINE_VCC
- emu_fatalerror("mc6847 does not support this callback type for mode bits\n");
+ if (BIT(m_fixed_mode, i))
+ m_fixed_mode_mask |= (1 << i);
}
}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void mc6847_base_device::device_start()
{
- const mc6847_interface *config = (const mc6847_interface *) static_config();
- assert(config);
-
/* inherited function */
mc6847_friend_device::device_start();
@@ -622,20 +610,11 @@ void mc6847_base_device::device_start()
memset(m_data, 0, sizeof(m_data));
/* resolve callbacks */
- m_res_input_func.resolve(config->m_input_func, *this);
- m_get_char_rom = config->m_get_char_rom;
+ m_input_cb.resolve_safe(0);
+ m_charrom_cb.bind_relative_to(*owner());
/* set up fixed mode */
- m_fixed_mode = 0x00;
- m_fixed_mode_mask = 0x00;
- setup_fixed_mode(config->m_in_gm2_func, MODE_GM2);
- setup_fixed_mode(config->m_in_gm1_func, MODE_GM1);
- setup_fixed_mode(config->m_in_gm0_func, MODE_GM0);
- setup_fixed_mode(config->m_in_intext_func, MODE_INTEXT);
- setup_fixed_mode(config->m_in_inv_func, MODE_INV);
- setup_fixed_mode(config->m_in_as_func, MODE_AS);
- setup_fixed_mode(config->m_in_ag_func, MODE_AG);
- setup_fixed_mode(config->m_in_css_func, MODE_CSS);
+ setup_fixed_mode();
m_dirty = false;
m_mode = 0;
@@ -645,7 +624,7 @@ void mc6847_base_device::device_start()
save_item(NAME(m_mode));
/* colors */
- m_palette = config->m_black_and_white ? m_bw_palette : s_palette;
+ m_palette = m_black_and_white ? m_bw_palette : s_palette;
}
@@ -668,7 +647,7 @@ void mc6847_base_device::device_reset()
UINT8 mc6847_base_device::input(UINT16 address)
{
- UINT8 data = m_res_input_func(address);
+ UINT8 data = m_input_cb(address);
if (LOG_INPUT)
logerror("%s: input: address=0x%04X data=0x%02X\n", describe_context(), address, data);
return data;
@@ -812,8 +791,8 @@ INT32 mc6847_base_device::scanline_position_from_clock(INT32 clocks_since_hsync)
void mc6847_base_device::field_sync_changed(bool line)
{
/* when field sync is on, the DA* enter the Hi-Z state */
- if (line && !m_res_input_func.isnull())
- m_res_input_func(~0);
+ if (line)
+ m_input_cb(~0);
}
@@ -902,7 +881,7 @@ UINT32 mc6847_base_device::screen_update(screen_device &screen, bitmap_rgb32 &bi
x2 - x,
pixels,
m_palette,
- m_get_char_rom,
+ m_charrom_cb,
x,
y);
diff --git a/src/emu/video/mc6847.h b/src/emu/video/mc6847.h
index aee8c845022..8feb39f0686 100644
--- a/src/emu/video/mc6847.h
+++ b/src/emu/video/mc6847.h
@@ -12,17 +12,20 @@
#define __MC6847__
+#define MC6847_MODE_AG 0x80
+#define MC6847_MODE_GM2 0x40
+#define MC6847_MODE_GM1 0x20
+#define MC6847_MODE_GM0 0x10
+#define MC6847_MODE_CSS 0x08
+#define MC6847_MODE_AS 0x04
+#define MC6847_MODE_INTEXT 0x02
+#define MC6847_MODE_INV 0x01
+
+
//**************************************************************************
// MC6847 CONFIGURATION / INTERFACE
//**************************************************************************
-#define MCFG_MC6847_REMOVE(_tag) \
- MCFG_DEVICE_REMOVE(_tag)
-
-#define MCFG_MC6847_ADD(_tag, _variant, _clock, _config) \
- MCFG_DEVICE_ADD(_tag, _variant, _clock) \
- MCFG_DEVICE_CONFIG(_config)
-
#define MCFG_SCREEN_MC6847_NTSC_ADD(_tag, _mctag) \
MCFG_SCREEN_ADD(_tag, RASTER) \
MCFG_SCREEN_UPDATE_DEVICE(_mctag, mc6847_base_device, screen_update) \
@@ -30,6 +33,7 @@
MCFG_SCREEN_SIZE(320, 243) \
MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 1, 241-1) \
MCFG_SCREEN_VBLANK_TIME(0)
+
#define MCFG_SCREEN_MC6847_PAL_ADD(_tag, _mctag) \
MCFG_SCREEN_ADD(_tag, RASTER) \
MCFG_SCREEN_UPDATE_DEVICE(_mctag, mc6847_base_device, screen_update) \
@@ -44,32 +48,22 @@
#define MCFG_MC6847_FSYNC_CALLBACK(_write) \
devcb = &mc6847_friend_device::set_fsync_wr_callback(*device, DEVCB2_##_write);
+#define MCFG_MC6847_CHARROM_CALLBACK(_class, _method) \
+ mc6847_friend_device::set_get_char_rom(*device, mc6847_get_char_rom_delegate(&_class::_method, #_class "::" #_method, downcast<_class *>(owner)));
-/* interface */
-struct mc6847_interface
-{
- /* screen we are acting on */
- const char *m_screen_tag;
+#define MCFG_MC6847_INPUT_CALLBACK(_read) \
+ devcb = &mc6847_base_device::set_input_callback(*device, DEVCB2_##_read);
- /* if specified, this gets called whenever reading a byte (offs_t ~0 specifies DA* entering the tristate mode) */
- devcb_read8 m_input_func;
-
- /* mode control lines input */
- devcb_read_line m_in_ag_func;
- devcb_read_line m_in_gm2_func;
- devcb_read_line m_in_gm1_func;
- devcb_read_line m_in_gm0_func;
- devcb_read_line m_in_css_func;
- devcb_read_line m_in_as_func;
- devcb_read_line m_in_intext_func;
- devcb_read_line m_in_inv_func;
+#define MCFG_MC6847_FIXED_MODE(_mode) \
+ mc6847_base_device::set_get_fixed_mode(*device, _mode);
- /* if specified, this reads the external char rom off of the driver state */
- UINT8 (*m_get_char_rom)(running_machine &machine, UINT8 ch, int line);
+#define MCFG_MC6847_BW(_bw) \
+ mc6847_base_device::set_black_and_white(*device, _bw);
+
+
+typedef device_delegate<UINT8 (UINT8 ch, int line)> mc6847_get_char_rom_delegate;
+#define MC6847_GET_CHARROM_MEMBER(_name) UINT8 _name(UINT8 ch, int line)
- /* if true, this is black and white */
- bool m_black_and_white;
-};
#define ARTIFACTING_TAG "artifacting"
@@ -91,6 +85,8 @@ public:
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); }
+ static void set_get_char_rom(device_t &device, mc6847_get_char_rom_delegate callback) { downcast<mc6847_friend_device &>(device).m_charrom_cb = callback; }
+
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);
@@ -273,7 +269,11 @@ protected:
// callbacks
devcb2_write_line m_write_hsync;
devcb2_write_line m_write_fsync;
-
+
+ /* if specified, this reads the external char rom off of the driver state */
+ // moved here from mc6847_base_device so to be useable in GIME
+ mc6847_get_char_rom_delegate m_charrom_cb;
+
// incidentals
character_map m_character_map;
artifacter m_artifacter;
@@ -407,7 +407,7 @@ protected:
// template function for emitting samples
template<int xscale>
UINT32 emit_mc6847_samples(UINT8 mode, const UINT8 *data, int length, pixel_t *RESTRICT pixels, const pixel_t *RESTRICT palette,
- UINT8 (*get_char_rom)(running_machine &machine, UINT8 ch, int line), int x, int y)
+ mc6847_get_char_rom_delegate get_char_rom, int x, int y)
{
UINT32 result = 0;
if (mode & MODE_AG)
@@ -445,12 +445,12 @@ protected:
break;
}
}
- else if ((get_char_rom != NULL) && ((mode & (MODE_AG|MODE_AS|MODE_INTEXT)) == MODE_INTEXT))
+ else if (!get_char_rom.isnull() && ((mode & (MODE_AG|MODE_AS|MODE_INTEXT)) == MODE_INTEXT))
{
/* external ROM */
for (int i = 0; i < length; i++)
{
- UINT8 byte = get_char_rom(machine(), data[i], y % 12) ^ (mode & MODE_INV ? 0xFF : 0x00);
+ UINT8 byte = get_char_rom(data[i], y % 12) ^ (mode & MODE_INV ? 0xFF : 0x00);
emit_extbytes<1, xscale>(&byte, 1, &pixels[i * 8], (mode & MODE_CSS) ? 14 : 12, palette);
}
result = length * 8 * xscale;
@@ -517,6 +517,11 @@ public:
// optional information overrides
virtual const rom_entry *device_rom_region() const;
+ template<class _Object> static devcb2_base &set_input_callback(device_t &device, _Object object) { return downcast<mc6847_base_device &>(device).m_input_cb.set_callback(object); }
+
+ static void set_get_fixed_mode(device_t &device, UINT8 mode) { downcast<mc6847_base_device &>(device).m_fixed_mode = mode; }
+ static void set_black_and_white(device_t &device, bool bw) { downcast<mc6847_base_device &>(device).m_black_and_white = bw; }
+
/* updates the screen -- this will call begin_update(),
followed by update_row() reapeatedly and after all row
updating is complete, end_update() */
@@ -544,7 +549,7 @@ protected:
virtual void field_sync_changed(bool line);
virtual void record_body_scanline(UINT16 physical_scanline, UINT16 scanline);
virtual void record_partial_body_scanline(UINT16 physical_scanline, UINT16 logical_scanline, INT32 start_clock, INT32 end_clock);
-
+
void set_custom_palette(const pixel_t *custom_palette)
{
if ( m_palette != m_bw_palette )
@@ -568,8 +573,12 @@ private:
static const UINT32 s_palette[PALETTE_LENGTH];
// callbacks
- devcb_resolved_read8 m_res_input_func;
- UINT8 (*m_get_char_rom)(running_machine &machine, UINT8 ch, int line);
+
+ /* if specified, this gets called whenever reading a byte (offs_t ~0 specifies DA* entering the tristate mode) */
+ devcb2_read8 m_input_cb;
+
+ /* if true, this is black and white */
+ bool m_black_and_white;
// incidentals
UINT8 m_fixed_mode;
@@ -611,8 +620,8 @@ private:
}
// setup functions
- void setup_fixed_mode(struct devcb_read_line callback, UINT8 mode);
-
+ void setup_fixed_mode();
+
// runtime functions
void record_body_scanline(UINT16 physical_scanline, UINT16 scanline, INT32 start_pos, INT32 end_pos);
pixel_t border_value(UINT8 mode, const pixel_t *palette, bool is_mc6847t1);
diff --git a/src/mess/drivers/apf.c b/src/mess/drivers/apf.c
index 1694ef06a6f..4e7a801e0ec 100644
--- a/src/mess/drivers/apf.c
+++ b/src/mess/drivers/apf.c
@@ -538,21 +538,6 @@ static const floppy_interface apfimag_floppy_interface =
NULL
};
-static const mc6847_interface apf_mc6847_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(apf_state, videoram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_VCC, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_GND, /* INTEXT */
- DEVCB_NULL, /* INV */
-};
-
static MACHINE_CONFIG_START( apfm1000, apf_state )
/* basic machine hardware */
@@ -561,8 +546,13 @@ 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_DEVICE_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_FSYNC_CALLBACK(DEVWRITELINE("pia0", pia6821_device, cb1_w))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(apf_state, videoram_r))
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM2 | MC6847_MODE_GM1)
+ // INTEXT = GND
+ // other lines not connected
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/atom.c b/src/mess/drivers/atom.c
index 95de26eec8c..cd347c7c4c7 100644
--- a/src/mess/drivers/atom.c
+++ b/src/mess/drivers/atom.c
@@ -613,7 +613,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(atom_state::cassette_output_tick)
}
/*-------------------------------------------------
- mc6847_interface vdg_intf
+ mc6847 interface
-------------------------------------------------*/
READ8_MEMBER( atom_state::vdg_videoram_r )
@@ -627,12 +627,6 @@ READ8_MEMBER( atom_state::vdg_videoram_r )
return m_video_ram[offset];
}
-static const mc6847_interface vdg_intf =
-{
- SCREEN_TAG,
- DEVCB_DRIVER_MEMBER(atom_state, vdg_videoram_r)
-};
-
/***************************************************************************
MACHINE INITIALIZATION
***************************************************************************/
@@ -780,7 +774,9 @@ static MACHINE_CONFIG_START( atom, atom_state )
/* video hardware */
MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, MC6847_TAG)
- MCFG_MC6847_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz, vdg_intf)
+
+ MCFG_DEVICE_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(atom_state, vdg_videoram_r))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -872,7 +868,9 @@ static MACHINE_CONFIG_START( atombb, atom_state )
/* video hardware */
MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, MC6847_TAG)
- MCFG_MC6847_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz, vdg_intf)
+
+ MCFG_DEVICE_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(atom_state, vdg_videoram_r))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/coco12.c b/src/mess/drivers/coco12.c
index fa8e5e7dc47..0b9b0ab0261 100644
--- a/src/mess/drivers/coco12.c
+++ b/src/mess/drivers/coco12.c
@@ -314,9 +314,11 @@ 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_DEVICE_ADD(VDG_TAG, MC6847_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(coco12_state, horizontal_sync))
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(coco12_state, field_sync))
+ MCFG_MC6847_INPUT_CALLBACK(DEVREAD8(SAM_TAG, sam6883_device, display_read))
// sound hardware
MCFG_FRAGMENT_ADD( coco_sound )
@@ -351,10 +353,11 @@ static MACHINE_CONFIG_DERIVED( coco2, coco )
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( coco2b, coco2 )
- MCFG_MC6847_REMOVE(VDG_TAG)
- MCFG_MC6847_ADD(VDG_TAG, MC6847T1_NTSC, XTAL_3_579545MHz, coco12_state::mc6847_config)
+ MCFG_DEVICE_REMOVE(VDG_TAG)
+ MCFG_DEVICE_ADD(VDG_TAG, MC6847T1_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(coco12_state, horizontal_sync))
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(coco12_state, field_sync))
+ MCFG_MC6847_INPUT_CALLBACK(DEVREAD8(SAM_TAG, sam6883_device, display_read))
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( cp400, coco )
diff --git a/src/mess/drivers/dragon.c b/src/mess/drivers/dragon.c
index 9e87f8413b4..74c02c8883c 100644
--- a/src/mess/drivers/dragon.c
+++ b/src/mess/drivers/dragon.c
@@ -164,9 +164,12 @@ static MACHINE_CONFIG_START( dragon_base, dragon_state )
// video hardware
MCFG_SCREEN_MC6847_PAL_ADD(SCREEN_TAG, VDG_TAG)
- MCFG_MC6847_ADD(VDG_TAG, MC6847_PAL, XTAL_4_433619MHz, dragon_state::mc6847_config)
+
+ MCFG_DEVICE_ADD(VDG_TAG, MC6847_PAL, XTAL_4_433619MHz)
MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(dragon_state, horizontal_sync))
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(dragon_state, field_sync))
+ MCFG_MC6847_INPUT_CALLBACK(DEVREAD8(SAM_TAG, sam6883_device, display_read))
+
// sound hardware
MCFG_FRAGMENT_ADD( coco_sound )
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/fc100.c b/src/mess/drivers/fc100.c
index 18eb722bb16..ad9211fba1d 100644
--- a/src/mess/drivers/fc100.c
+++ b/src/mess/drivers/fc100.c
@@ -74,10 +74,10 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER(timer_k);
UINT8 *m_p_chargen;
- static UINT8 get_char_rom(running_machine &machine, UINT8 ch, int line)
+
+ MC6847_GET_CHARROM_MEMBER(get_char_rom)
{
- fc100_state *state = machine.driver_data<fc100_state>();
- return state->m_p_chargen[ch*16+line];
+ return m_p_chargen[ch * 16 + line];
}
private:
virtual void machine_start();
@@ -367,23 +367,6 @@ READ8_MEMBER( fc100_state::mc6847_videoram_r )
return data;
}
-static const mc6847_interface fc100_mc6847_interface =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(fc100_state,mc6847_videoram_r), // data fetch
-
- DEVCB_NULL, /* AG */
- DEVCB_NULL, /* GM2 */
- DEVCB_NULL, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_VCC, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- &fc100_state::get_char_rom
-};
-
/* F4 Character Displayer */
static const gfx_layout u53_charlayout =
{
@@ -527,7 +510,12 @@ static MACHINE_CONFIG_START( fc100, fc100_state )
MCFG_CPU_IO_MAP(fc100_io)
/* video hardware */
- MCFG_MC6847_ADD("vdg", M5C6847P1, XTAL_7_15909MHz/3, fc100_mc6847_interface ) // Clock not verified
+ MCFG_DEVICE_ADD("vdg", M5C6847P1, XTAL_7_15909MHz/3) // Clock not verified
+ MCFG_MC6847_INPUT_CALLBACK(READ8(fc100_state, mc6847_videoram_r))
+ MCFG_MC6847_CHARROM_CALLBACK(fc100_state, get_char_rom)
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_INTEXT)
+ // other lines not connected
+
MCFG_SCREEN_MC6847_NTSC_ADD("screen", "vdg")
MCFG_GFXDECODE_ADD("gfxdecode", "f4palette", fc100)
MCFG_PALETTE_ADD_MONOCHROME_AMBER("f4palette")
diff --git a/src/mess/drivers/mc10.c b/src/mess/drivers/mc10.c
index c833ed01f69..5c0001d3021 100644
--- a/src/mess/drivers/mc10.c
+++ b/src/mess/drivers/mc10.c
@@ -72,7 +72,7 @@ public:
DECLARE_WRITE8_MEMBER( mc10_port1_w );
DECLARE_READ8_MEMBER( mc10_port2_r );
DECLARE_WRITE8_MEMBER( mc10_port2_w );
- DECLARE_READ8_MEMBER( mc10_mc6847_videoram_r );
+ DECLARE_READ8_MEMBER( mc6847_videoram_r );
DECLARE_DRIVER_INIT(mc10);
TIMER_DEVICE_CALLBACK_MEMBER(alice32_scanline);
};
@@ -214,7 +214,7 @@ WRITE8_MEMBER( mc10_state::mc10_port2_w )
VIDEO EMULATION
***************************************************************************/
-READ8_MEMBER( mc10_state::mc10_mc6847_videoram_r )
+READ8_MEMBER( mc10_state::mc6847_videoram_r )
{
if (offset == ~0) return 0xff;
m_mc6847->inv_w(BIT(m_ram_base[offset], 6));
@@ -477,12 +477,6 @@ INPUT_PORTS_END
MACHINE DRIVERS
***************************************************************************/
-static const mc6847_interface mc10_mc6847_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(mc10_state, mc10_mc6847_videoram_r)
-};
-
static MACHINE_CONFIG_START( mc10, mc10_state )
/* basic machine hardware */
@@ -492,7 +486,9 @@ static MACHINE_CONFIG_START( mc10, mc10_state )
/* video hardware */
MCFG_SCREEN_MC6847_NTSC_ADD("screen", "mc6847")
- MCFG_MC6847_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz, mc10_mc6847_intf)
+
+ MCFG_DEVICE_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(mc10_state, mc6847_videoram_r))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/mc1000.c b/src/mess/drivers/mc1000.c
index e386d570c3e..0dd3fcdd0f5 100644
--- a/src/mess/drivers/mc1000.c
+++ b/src/mess/drivers/mc1000.c
@@ -414,12 +414,6 @@ TIMER_DEVICE_CALLBACK_MEMBER(mc1000_state::ne555_tick)
m_maincpu->set_input_line(INPUT_LINE_IRQ0, param);
}
-static const mc6847_interface mc1000_mc6847_intf =
-{
- SCREEN_TAG,
- DEVCB_DRIVER_MEMBER(mc1000_state, videoram_r)
-};
-
static MACHINE_CONFIG_START( mc1000, mc1000_state )
/* basic machine hardware */
@@ -437,9 +431,11 @@ 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_DEVICE_ADD(MC6847_TAG, MC6847_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_HSYNC_CALLBACK(WRITELINE(mc1000_state, hs_w))
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(mc1000_state, fs_w))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(mc1000_state, videoram_r))
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
diff --git a/src/mess/drivers/phc25.c b/src/mess/drivers/phc25.c
index 1c5bf2ff16d..2a499295312 100644
--- a/src/mess/drivers/phc25.c
+++ b/src/mess/drivers/phc25.c
@@ -277,11 +277,9 @@ READ8_MEMBER( phc25_state::video_ram_r )
}
}
-UINT8 phc25_state::pal_char_rom_r(running_machine &machine, UINT8 ch, int line)
+MC6847_GET_CHARROM_MEMBER(phc25_state::pal_char_rom_r)
{
- phc25_state *state = machine.driver_data<phc25_state>();
-
- return state->m_char_rom[((ch - 2) * 12) + line + 4];
+ return m_char_rom[((ch - 2) * 12) + line + 4];
}
// irq is inverted in emulation, so we need this trampoline
@@ -290,48 +288,11 @@ WRITE_LINE_MEMBER( phc25_state::irq_w )
m_maincpu->set_input_line(0, state ? CLEAR_LINE : ASSERT_LINE);
}
-UINT8 phc25_state::ntsc_char_rom_r(running_machine &machine, UINT8 ch, int line)
+MC6847_GET_CHARROM_MEMBER(phc25_state::ntsc_char_rom_r)
{
- phc25_state *state = machine.driver_data<phc25_state>();
-
- return state->m_char_rom[(ch * 16) + line];
+ return m_char_rom[(ch * 16) + line];
}
-static const mc6847_interface ntsc_vdg_intf =
-{
- SCREEN_TAG,
- DEVCB_DRIVER_MEMBER(phc25_state, video_ram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_VCC, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_VCC, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- &phc25_state::ntsc_char_rom_r
-};
-
-static const mc6847_interface pal_vdg_intf =
-{
- SCREEN_TAG,
- DEVCB_DRIVER_MEMBER(phc25_state, video_ram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_VCC, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_VCC, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- &phc25_state::pal_char_rom_r
-};
-
-
void phc25_state::video_start()
{
/* find memory regions */
@@ -374,15 +335,25 @@ MACHINE_CONFIG_END
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_DEVICE_ADD(MC6847_TAG, MC6847_PAL, XTAL_4_433619MHz)
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(phc25_state, irq_w))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(phc25_state, video_ram_r))
+ MCFG_MC6847_CHARROM_CALLBACK(phc25_state, ntsc_char_rom_r)
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM2 | MC6847_MODE_GM1 | MC6847_MODE_INTEXT)
+ // other lines not connected
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_DEVICE_ADD(MC6847_TAG, MC6847_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(phc25_state, irq_w))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(phc25_state, video_ram_r))
+ MCFG_MC6847_CHARROM_CALLBACK(phc25_state, pal_char_rom_r)
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM2 | MC6847_MODE_GM1 | MC6847_MODE_INTEXT)
+ // other lines not connected
MACHINE_CONFIG_END
/* ROMs */
diff --git a/src/mess/drivers/spc1000.c b/src/mess/drivers/spc1000.c
index 430ae561043..006a3343b7e 100644
--- a/src/mess/drivers/spc1000.c
+++ b/src/mess/drivers/spc1000.c
@@ -42,13 +42,12 @@ public:
DECLARE_WRITE8_MEMBER(spc1000_gmode_w);
DECLARE_READ8_MEMBER(spc1000_gmode_r);
DECLARE_READ8_MEMBER(porta_r);
- DECLARE_READ8_MEMBER(spc1000_mc6847_videoram_r);
+ DECLARE_READ8_MEMBER(mc6847_videoram_r);
DECLARE_WRITE8_MEMBER(cass_w);
- static UINT8 get_char_rom(running_machine &machine, UINT8 ch, int line)
+ MC6847_GET_CHARROM_MEMBER(get_char_rom)
{
- spc1000_state *state = machine.driver_data<spc1000_state>();
- return state->m_p_videoram[0x1000+(ch&0x7F)*16+line];
+ return m_p_videoram[0x1000 + (ch & 0x7f) * 16 + line];
}
required_shared_ptr<UINT8> m_p_videoram;
@@ -258,7 +257,7 @@ void spc1000_state::machine_reset()
m_IPLK = 1;
}
-READ8_MEMBER(spc1000_state::spc1000_mc6847_videoram_r)
+READ8_MEMBER(spc1000_state::mc6847_videoram_r)
{
if (offset == ~0) return 0xff;
@@ -293,23 +292,6 @@ WRITE_LINE_MEMBER( spc1000_state::irq_w )
m_maincpu->set_input_line(0, state ? CLEAR_LINE : HOLD_LINE);
}
-static const mc6847_interface spc1000_mc6847_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(spc1000_state,spc1000_mc6847_videoram_r), // data fetch
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_VCC, /* GM2 */
- DEVCB_NULL, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_NULL, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- &spc1000_state::get_char_rom
-};
-
static MACHINE_CONFIG_START( spc1000, spc1000_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_4MHz)
@@ -318,8 +300,14 @@ 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_DEVICE_ADD("mc6847", MC6847_NTSC, XTAL_3_579545MHz)
MCFG_MC6847_FSYNC_CALLBACK(WRITELINE(spc1000_state, irq_w))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(spc1000_state, mc6847_videoram_r))
+ MCFG_MC6847_CHARROM_CALLBACK(spc1000_state, get_char_rom)
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM2)
+ // other lines not connected
+
/* 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 3783110db01..8ee62b23aa6 100644
--- a/src/mess/drivers/sv8000.c
+++ b/src/mess/drivers/sv8000.c
@@ -372,26 +372,6 @@ READ8_MEMBER( sv8000_state::mc6847_videoram_r )
return data;
}
-
-static const mc6847_interface sv8000_mc6847_interface =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(sv8000_state,mc6847_videoram_r), // data fetch
-
- DEVCB_NULL, /* AG */
- DEVCB_NULL, /* GM2 */
- DEVCB_NULL, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_NULL, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- NULL,
- false
-};
-
-
static MACHINE_CONFIG_START( sv8000, sv8000_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu",Z80, XTAL_10_738635MHz/3) /* Not verified */
@@ -409,7 +389,9 @@ static MACHINE_CONFIG_START( sv8000, sv8000_state )
/* video hardware */
// S68047P - Unknown whether the internal or an external character rom is used
- MCFG_MC6847_ADD("s68047p", S68047, XTAL_10_738635MHz/3, sv8000_mc6847_interface ) // Clock not verified
+ MCFG_DEVICE_ADD("s68047p", S68047, XTAL_10_738635MHz/3 ) // Clock not verified
+ MCFG_MC6847_INPUT_CALLBACK(READ8(sv8000_state, mc6847_videoram_r))
+
MCFG_SCREEN_MC6847_NTSC_ADD("screen", "s68047p")
/* sound hardware */
diff --git a/src/mess/drivers/vtech1.c b/src/mess/drivers/vtech1.c
index 497b3af1ba6..d37c5423348 100644
--- a/src/mess/drivers/vtech1.c
+++ b/src/mess/drivers/vtech1.c
@@ -190,7 +190,7 @@ public:
DECLARE_DRIVER_INIT(vtech1);
DECLARE_READ8_MEMBER(vtech1_printer_r);
DECLARE_WRITE8_MEMBER(vtech1_strobe_w);
- DECLARE_READ8_MEMBER(vtech1_mc6847_videoram_r);
+ DECLARE_READ8_MEMBER(mc6847_videoram_r);
DECLARE_SNAPSHOT_LOAD_MEMBER( vtech1 );
void vtech1_get_track();
void vtech1_put_track();
@@ -600,7 +600,7 @@ WRITE8_MEMBER(vtech1_state::vtech1_video_bank_w)
VIDEO EMULATION
***************************************************************************/
-READ8_MEMBER(vtech1_state::vtech1_mc6847_videoram_r)
+READ8_MEMBER(vtech1_state::mc6847_videoram_r)
{
if (offset == ~0) return 0xff;
m_mc6847->inv_w(BIT(m_videoram[offset], 6));
@@ -887,57 +887,6 @@ static const speaker_interface vtech1_speaker_interface =
speaker_levels
};
-static const mc6847_interface vtech1_mc6847_bw_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_GND, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_LINE_GND, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_GND, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- NULL, /* m_get_char_rom */
- true // monochrome
-};
-
-static const mc6847_interface vtech1_mc6847_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_LINE_GND, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_LINE_GND, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_GND, /* INTEXT */
- DEVCB_NULL, /* INV */
-
- NULL, /* m_get_char_rom */
- false // colour
-};
-
-static const mc6847_interface vtech1_shrg_mc6847_intf =
-{
- "screen",
- DEVCB_DRIVER_MEMBER(vtech1_state,vtech1_mc6847_videoram_r),
-
- DEVCB_NULL, /* AG */
- DEVCB_NULL, /* GM2 */
- DEVCB_LINE_VCC, /* GM1 */
- DEVCB_NULL, /* GM0 */
- DEVCB_NULL, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_LINE_GND, /* INTEXT */
- DEVCB_NULL, /* INV */
-};
-
static MACHINE_CONFIG_START( laser110, vtech1_state )
/* basic machine hardware */
@@ -947,8 +896,14 @@ 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_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(vtech1_state, mc6847_videoram_r))
+ MCFG_MC6847_BW(true)
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM1)
+ // GM2 = GND, GM0 = GND, INTEXT = GND
+ // other lines not connected
/* sound hardware */
MCFG_SPEAKER_STANDARD_MONO("mono")
@@ -985,8 +940,12 @@ 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_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(vtech1_state, mc6847_videoram_r))
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM1)
+ // GM2 = GND, GM0 = GND, INTEXT = GND
+ // other lines not connected
MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( laser210, laser200 )
@@ -1013,9 +972,14 @@ MACHINE_CONFIG_END
static MACHINE_CONFIG_DERIVED( laser310h, laser310 )
MCFG_CPU_MODIFY("maincpu")
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_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
MCFG_MC6847_FSYNC_CALLBACK(INPUTLINE("maincpu", 0))
+ MCFG_MC6847_INPUT_CALLBACK(READ8(vtech1_state, mc6847_videoram_r))
+ MCFG_MC6847_FIXED_MODE(MC6847_MODE_GM1)
+ // INTEXT = GND
+ // other lines not connected
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/z80ne.c b/src/mess/drivers/z80ne.c
index 97306ee0ca8..af48a454ee0 100644
--- a/src/mess/drivers/z80ne.c
+++ b/src/mess/drivers/z80ne.c
@@ -407,21 +407,6 @@ static const floppy_interface z80netf_floppy_interface =
NULL
};
-static const mc6847_interface z80net_mc6847_intf =
-{
- "lx388",
- DEVCB_DRIVER_MEMBER(z80ne_state, lx388_mc6847_videoram_r),
-
- DEVCB_LINE_GND, /* AG */
- DEVCB_LINE_GND, /* GM2 */
- DEVCB_LINE_GND, /* GM1 */
- DEVCB_LINE_GND, /* GM0 */
- DEVCB_LINE_GND, /* CSS */
- DEVCB_NULL, /* AS */
- DEVCB_NULL, /* INTEXT */
- DEVCB_NULL, /* INV */
-};
-
static MACHINE_CONFIG_START( z80ne, z80ne_state )
/* basic machine hardware */
MCFG_CPU_ADD("z80ne", Z80, Z80NE_CPU_SPEED_HZ)
@@ -461,7 +446,11 @@ static MACHINE_CONFIG_DERIVED( z80net, z80ne )
/* video hardware */
MCFG_SCREEN_MC6847_PAL_ADD("lx388", "mc6847")
- MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, z80net_mc6847_intf)
+
+ MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(z80ne_state, lx388_mc6847_videoram_r))
+ // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND
+ // other lines not connected
MCFG_DEFAULT_LAYOUT(layout_z80net)
@@ -494,7 +483,11 @@ static MACHINE_CONFIG_START( z80netb, z80ne_state )
/* video hardware */
MCFG_SCREEN_MC6847_PAL_ADD("lx388", "mc6847")
- MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, z80net_mc6847_intf)
+
+ MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(z80ne_state, lx388_mc6847_videoram_r))
+ // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND
+ // other lines not connected
MCFG_DEFAULT_LAYOUT(layout_z80netb)
@@ -527,7 +520,11 @@ static MACHINE_CONFIG_START( z80netf, z80ne_state )
/* video hardware */
MCFG_SCREEN_MC6847_PAL_ADD("lx388", "mc6847")
- MCFG_MC6847_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz, z80net_mc6847_intf)
+
+ MCFG_DEVICE_ADD("mc6847", MC6847_PAL, XTAL_4_433619MHz)
+ MCFG_MC6847_INPUT_CALLBACK(READ8(z80ne_state, lx388_mc6847_videoram_r))
+ // AG = GND, GM2 = GND, GM1 = GND, GM0 = GND, CSS = GND
+ // other lines not connected
MCFG_FD1771_ADD("wd1771", default_wd17xx_interface)
MCFG_LEGACY_FLOPPY_4_DRIVES_ADD(z80netf_floppy_interface)
diff --git a/src/mess/includes/coco12.h b/src/mess/includes/coco12.h
index a25a74f2caa..98f2a86ae17 100644
--- a/src/mess/includes/coco12.h
+++ b/src/mess/includes/coco12.h
@@ -45,7 +45,6 @@ public:
required_device<sam6883_device> m_sam;
required_device<mc6847_base_device> m_vdg;
- static const mc6847_interface mc6847_config;
static const sam6883_interface sam6883_config;
DECLARE_READ8_MEMBER( sam_read );
diff --git a/src/mess/includes/phc25.h b/src/mess/includes/phc25.h
index a90412821d1..649bbf548ed 100644
--- a/src/mess/includes/phc25.h
+++ b/src/mess/includes/phc25.h
@@ -41,8 +41,8 @@ public:
DECLARE_WRITE8_MEMBER( port40_w );
DECLARE_WRITE_LINE_MEMBER(irq_w);
DECLARE_READ8_MEMBER( video_ram_r );
- static UINT8 ntsc_char_rom_r(running_machine &machine, UINT8 ch, int line);
- static UINT8 pal_char_rom_r(running_machine &machine, UINT8 ch, int line);
+ MC6847_GET_CHARROM_MEMBER(ntsc_char_rom_r);
+ MC6847_GET_CHARROM_MEMBER(pal_char_rom_r);
private:
virtual void video_start();
diff --git a/src/mess/machine/coco12.c b/src/mess/machine/coco12.c
index 9691c6cf000..49c6bf17ae6 100644
--- a/src/mess/machine/coco12.c
+++ b/src/mess/machine/coco12.c
@@ -120,18 +120,6 @@ void coco12_state::update_cart_base(UINT8 *cart_base)
//-------------------------------------------------
-// mc6847_config
-//-------------------------------------------------
-
-const mc6847_interface coco12_state::mc6847_config =
-{
- SCREEN_TAG,
- DEVCB_DEVICE_MEMBER(SAM_TAG, sam6883_device, display_read)
-};
-
-
-
-//-------------------------------------------------
// sam6883_config
//-------------------------------------------------
diff --git a/src/mess/video/gime.c b/src/mess/video/gime.c
index 18d94a2fd7f..265e7b5fbaa 100644
--- a/src/mess/video/gime.c
+++ b/src/mess/video/gime.c
@@ -1643,8 +1643,6 @@ UINT32 gime_base_device::emit_dummy_samples(const scanline_record *scanline, int
return 0;
}
-
-
//-------------------------------------------------
// emit_mc6847_samples
//-------------------------------------------------
@@ -1657,7 +1655,7 @@ ATTR_FORCE_INLINE UINT32 gime_base_device::emit_mc6847_samples(const scanline_re
sample_count,
pixels,
palette,
- NULL,
+ super::m_charrom_cb,
sample_start,
scanline->m_line_in_row);
}