From 47a829e30738693546378ba5fea3915b30aa280c Mon Sep 17 00:00:00 2001 From: Curt Coder Date: Thu, 11 Jun 2009 21:36:04 +0000 Subject: [PATCH] [MC6845] Refactored to use devcb and added cursor callback (for MESS). --- src/emu/video/mc6845.c | 94 +++++++++++++++++++++++++++++++------ src/emu/video/mc6845.h | 23 ++++----- src/mame/drivers/4roses.c | 8 ++-- src/mame/drivers/86lions.c | 18 +++---- src/mame/drivers/aristmk4.c | 18 +++---- src/mame/drivers/calomega.c | 8 ++-- src/mame/drivers/carrera.c | 8 ++-- src/mame/drivers/coinmstr.c | 8 ++-- src/mame/drivers/funworld.c | 8 ++-- src/mame/drivers/goldnpkr.c | 8 ++-- src/mame/drivers/jokrwild.c | 8 ++-- src/mame/drivers/kingdrby.c | 8 ++-- src/mame/drivers/magicfly.c | 8 ++-- src/mame/drivers/merit.c | 24 +++++----- src/mame/drivers/miniboy7.c | 8 ++-- src/mame/drivers/mpu4drvr.c | 22 +++++---- src/mame/drivers/murogem.c | 8 ++-- src/mame/drivers/nyny.c | 12 +++-- src/mame/drivers/peplus.c | 13 ++--- src/mame/drivers/progolf.c | 19 ++++---- src/mame/drivers/r2dtank.c | 14 +++--- src/mame/drivers/rockola.c | 8 ++-- src/mame/drivers/slotcarn.c | 24 +++++----- src/mame/drivers/spiders.c | 14 +++--- src/mame/drivers/ssingles.c | 18 +++---- src/mame/drivers/usgames.c | 8 ++-- src/mame/drivers/vcombat.c | 22 +++++---- src/mame/includes/qix.h | 2 +- src/mame/machine/qix.c | 4 +- src/mame/video/madalien.c | 18 +++---- src/mame/video/qix.c | 28 ++++++----- 31 files changed, 302 insertions(+), 189 deletions(-) diff --git a/src/emu/video/mc6845.c b/src/emu/video/mc6845.c index 513c3a69d95..a99fc164e3b 100644 --- a/src/emu/video/mc6845.c +++ b/src/emu/video/mc6845.c @@ -64,6 +64,11 @@ static const int supports_transparent[NUM_TYPES] = { FALSE, FALSE, typedef struct _mc6845_t mc6845_t; struct _mc6845_t { + devcb_resolved_write_line out_de_func; + devcb_resolved_write_line out_cur_func; + devcb_resolved_write_line out_hsync_func; + devcb_resolved_write_line out_vsync_func; + int device_type; const mc6845_interface *intf; const device_config *screen; @@ -95,6 +100,8 @@ struct _mc6845_t /* timers */ emu_timer *de_changed_timer; + emu_timer *cur_on_timer; + emu_timer *cur_off_timer; emu_timer *hsync_on_timer; emu_timer *hsync_off_timer; emu_timer *vsync_on_timer; @@ -119,6 +126,7 @@ struct _mc6845_t static STATE_POSTLOAD( mc6845_state_save_postload ); static void recompute_parameters(mc6845_t *mc6845, int postload); static void update_de_changed_timer(mc6845_t *mc6845); +static void update_cur_changed_timers(mc6845_t *mc6845); static void update_hsync_changed_timers(mc6845_t *mc6845); static void update_vsync_changed_timers(mc6845_t *mc6845); @@ -365,6 +373,7 @@ static void recompute_parameters(mc6845_t *mc6845, int postload) mc6845->vsync_off_pos = vsync_off_pos; update_de_changed_timer(mc6845); + update_cur_changed_timers(mc6845); update_hsync_changed_timers(mc6845); update_vsync_changed_timers(mc6845); } @@ -427,6 +436,27 @@ static void update_de_changed_timer(mc6845_t *mc6845) } } +static void update_cur_changed_timers(mc6845_t *mc6845) +{ + if (mc6845->has_valid_parameters && (mc6845->cur_on_timer != NULL)) + { + UINT16 cur_on_row = ((mc6845->cursor_addr - mc6845->disp_start_addr) / mc6845->horiz_disp) * (mc6845->max_ras_addr + 1); + UINT16 cur_on_y = cur_on_row + mc6845->cursor_start_ras; + UINT16 cur_off_y = cur_on_row + mc6845->cursor_end_ras; + UINT16 cur_on_pos = ((mc6845->cursor_addr - mc6845->disp_start_addr) % mc6845->horiz_disp) * mc6845->intf->hpixels_per_column; + UINT16 cur_off_pos = cur_on_pos + mc6845->intf->hpixels_per_column; + UINT16 next_y; + UINT16 y = video_screen_get_vpos(mc6845->screen); + + if ((y >= cur_on_y) && (y < cur_off_y)) + next_y = y + 1; + else + next_y = cur_on_y; + + timer_adjust_oneshot(mc6845->cur_on_timer, video_screen_get_time_until_pos(mc6845->screen, next_y, cur_on_pos) , 0); + timer_adjust_oneshot(mc6845->cur_off_timer, video_screen_get_time_until_pos(mc6845->screen, next_y, cur_off_pos), 0); + } +} static void update_hsync_changed_timers(mc6845_t *mc6845) { @@ -464,19 +494,41 @@ static TIMER_CALLBACK( de_changed_timer_cb ) mc6845_t *mc6845 = get_safe_token(device); /* call the callback function -- we know it exists */ - mc6845->intf->on_de_changed(device, is_display_enabled(mc6845)); + devcb_call_write_line(&mc6845->out_de_func, is_display_enabled(mc6845)); update_de_changed_timer(mc6845); } +static TIMER_CALLBACK( cur_on_timer_cb ) +{ + const device_config *device = (const device_config *)ptr; + mc6845_t *mc6845 = get_safe_token(device); + + /* call the callback function -- we know it exists */ + devcb_call_write_line(&mc6845->out_cur_func, TRUE); +} + + +static TIMER_CALLBACK( cur_off_timer_cb ) +{ + const device_config *device = (const device_config *)ptr; + mc6845_t *mc6845 = get_safe_token(device); + + /* call the callback function -- we know it exists */ + devcb_call_write_line(&mc6845->out_cur_func, FALSE); + + update_cur_changed_timers(mc6845); +} + + static TIMER_CALLBACK( vsync_on_timer_cb ) { const device_config *device = (const device_config *)ptr; mc6845_t *mc6845 = get_safe_token(device); /* call the callback function -- we know it exists */ - mc6845->intf->on_vsync_changed(device, TRUE); + devcb_call_write_line(&mc6845->out_vsync_func, TRUE); } @@ -486,7 +538,7 @@ static TIMER_CALLBACK( vsync_off_timer_cb ) mc6845_t *mc6845 = get_safe_token(device); /* call the callback function -- we know it exists */ - mc6845->intf->on_vsync_changed(device, FALSE); + devcb_call_write_line(&mc6845->out_vsync_func, FALSE); update_vsync_changed_timers(mc6845); } @@ -498,7 +550,7 @@ static TIMER_CALLBACK( hsync_on_timer_cb ) mc6845_t *mc6845 = get_safe_token(device); /* call the callback function -- we know it exists */ - mc6845->intf->on_hsync_changed(device, TRUE); + devcb_call_write_line(&mc6845->out_hsync_func, TRUE); } @@ -508,7 +560,7 @@ static TIMER_CALLBACK( hsync_off_timer_cb ) mc6845_t *mc6845 = get_safe_token(device); /* call the callback function -- we know it exists */ - mc6845->intf->on_hsync_changed(device, FALSE); + devcb_call_write_line(&mc6845->out_hsync_func, FALSE); update_hsync_changed_timers(mc6845); } @@ -751,6 +803,12 @@ static void common_start(const device_config *device, int device_type) assert(device->clock > 0); assert(mc6845->intf->hpixels_per_column > 0); + /* resolve callbacks */ + devcb_resolve_write_line(&mc6845->out_de_func, &mc6845->intf->out_de_func, device); + devcb_resolve_write_line(&mc6845->out_cur_func, &mc6845->intf->out_cur_func, device); + devcb_resolve_write_line(&mc6845->out_hsync_func, &mc6845->intf->out_hsync_func, device); + devcb_resolve_write_line(&mc6845->out_vsync_func, &mc6845->intf->out_vsync_func, device); + /* copy the initial parameters */ mc6845->clock = device->clock; mc6845->hpixels_per_column = mc6845->intf->hpixels_per_column; @@ -760,16 +818,24 @@ static void common_start(const device_config *device, int device_type) assert(mc6845->screen != NULL); /* create the timers */ - if (mc6845->intf->on_de_changed != NULL) + if (mc6845->out_de_func.target != NULL) + { mc6845->de_changed_timer = timer_alloc(device->machine, de_changed_timer_cb, (void *)device); + } - if (mc6845->intf->on_hsync_changed != NULL) + if (mc6845->out_cur_func.target != NULL) + { + mc6845->cur_on_timer = timer_alloc(device->machine, cur_on_timer_cb, (void *)device); + mc6845->cur_off_timer = timer_alloc(device->machine, cur_off_timer_cb, (void *)device); + } + + if (mc6845->out_hsync_func.target != NULL) { mc6845->hsync_on_timer = timer_alloc(device->machine, hsync_on_timer_cb, (void *)device); mc6845->hsync_off_timer = timer_alloc(device->machine, hsync_off_timer_cb, (void *)device); } - if (mc6845->intf->on_vsync_changed != NULL) + if (mc6845->out_vsync_func.target != NULL) { mc6845->vsync_on_timer = timer_alloc(device->machine, vsync_on_timer_cb, (void *)device); mc6845->vsync_off_timer = timer_alloc(device->machine, vsync_off_timer_cb, (void *)device); @@ -848,14 +914,14 @@ static DEVICE_RESET( mc6845 ) /* internal registers other than status remain unchanged, all outputs go low */ if (mc6845->intf != NULL) { - if (mc6845->intf->on_de_changed != NULL) - mc6845->intf->on_de_changed(device, FALSE); + if (mc6845->out_de_func.target != NULL) + devcb_call_write_line(&mc6845->out_de_func, FALSE); - if (mc6845->intf->on_hsync_changed != NULL) - mc6845->intf->on_hsync_changed(device, FALSE); + if (mc6845->out_hsync_func.target != NULL) + devcb_call_write_line(&mc6845->out_hsync_func, FALSE); - if (mc6845->intf->on_vsync_changed != NULL) - mc6845->intf->on_vsync_changed(device, FALSE); + if (mc6845->out_vsync_func.target != NULL) + devcb_call_write_line(&mc6845->out_vsync_func, FALSE); } mc6845->light_pen_latched = FALSE; diff --git a/src/emu/video/mc6845.h b/src/emu/video/mc6845.h index 33e3ae20ebe..624efbd7d43 100644 --- a/src/emu/video/mc6845.h +++ b/src/emu/video/mc6845.h @@ -10,6 +10,7 @@ #ifndef __MC6845__ #define __MC6845__ +#include "devcb.h" #define MC6845 DEVICE_GET_INFO_NAME(mc6845) #define MC6845_1 DEVICE_GET_INFO_NAME(mc6845_1) @@ -25,7 +26,6 @@ MDRV_DEVICE_CONFIG(_config) - /* callback definitions */ typedef void * (*mc6845_begin_update_func)(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect); #define MC6845_BEGIN_UPDATE(name) void *name(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect) @@ -34,21 +34,12 @@ typedef void (*mc6845_update_row_func)(const device_config *device, bitmap_t *bi const rectangle *cliprect, UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param); #define MC6845_UPDATE_ROW(name) void name(const device_config *device, bitmap_t *bitmap, \ - const rectangle *cliprect, UINT16 ma, UINT8 ra, \ + const rectangle *cliprect, UINT16 ma, UINT8 ra, \ UINT16 y, UINT8 x_count, INT8 cursor_x, void *param) typedef void (*mc6845_end_update_func)(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, void *param); #define MC6845_END_UPDATE(name) void name(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, void *param) -typedef void (*mc6845_on_de_changed_func)(const device_config *device, int display_enabled); -#define MC6845_ON_DE_CHANGED(name) void name(const device_config *device, int display_enabled) - -typedef void (*mc6845_on_hsync_changed_func)(const device_config *device, int hsync); -#define MC6845_ON_HSYNC_CHANGED(name) void name(const device_config *device, int hsync) - -typedef void (*mc6845_on_vsync_changed_func)(const device_config *device, int vsync); -#define MC6845_ON_VSYNC_CHANGED(name) void name(const device_config *device, int vsync) - typedef void (*mc6845_on_update_addr_changed_func)(const device_config *device, int address, int strobe); #define MC6845_ON_UPDATE_ADDR_CHANGED(name) void name(const device_config *device, int address, int strobe) @@ -74,13 +65,16 @@ struct _mc6845_interface mc6845_end_update_func end_update; /* if specified, this gets called for every change of the disply enable pin (pin 18) */ - mc6845_on_de_changed_func on_de_changed; + devcb_write_line out_de_func; + + /* if specified, this gets called for every change of the cursor pin (pin 19) */ + devcb_write_line out_cur_func; /* if specified, this gets called for every change of the HSYNC pin (pin 39) */ - mc6845_on_hsync_changed_func on_hsync_changed; + devcb_write_line out_hsync_func; /* if specified, this gets called for every change of the VSYNC pin (pin 40) */ - mc6845_on_vsync_changed_func on_vsync_changed; + devcb_write_line out_vsync_func; /* Called whenenever the update address changes * For vblank/hblank timing strobe indicates the physical update. @@ -133,5 +127,4 @@ void mc6845_set_hpixels_per_column(const device_config *device, int hpixels_per_ updating is complete, end_update() */ void mc6845_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect); - #endif diff --git a/src/mame/drivers/4roses.c b/src/mame/drivers/4roses.c index 8737c815054..d0ce387f79c 100644 --- a/src/mame/drivers/4roses.c +++ b/src/mame/drivers/4roses.c @@ -364,9 +364,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/86lions.c b/src/mame/drivers/86lions.c index e118b27dc2d..c2f1450bcd1 100644 --- a/src/mame/drivers/86lions.c +++ b/src/mame/drivers/86lions.c @@ -316,14 +316,16 @@ static const mc6845_interface mc6845_intf = /* in fact is a mc6845 driving 4 pixels by memory address. that's why the big horizontal parameters */ - "screen",/* screen we are acting on */ - 4, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + "screen", /* screen we are acting on */ + 4, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; /* same as Aristocrat Mark-IV HW color offset 7 */ diff --git a/src/mame/drivers/aristmk4.c b/src/mame/drivers/aristmk4.c index 0ae62fc5af3..0857dfc7d48 100644 --- a/src/mame/drivers/aristmk4.c +++ b/src/mame/drivers/aristmk4.c @@ -419,14 +419,16 @@ static const mc6845_interface mc6845_intf = /* in fact is a mc6845 driving 4 pixels by memory address. that's why the big horizontal parameters */ - "screen",/* screen we are acting on */ - 4, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + "screen", /* screen we are acting on */ + 4, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/calomega.c b/src/mame/drivers/calomega.c index f8eef898b68..9c35db55398 100644 --- a/src/mame/drivers/calomega.c +++ b/src/mame/drivers/calomega.c @@ -1906,9 +1906,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/carrera.c b/src/mame/drivers/carrera.c index 6bfeab15ae9..8fc492c5a46 100644 --- a/src/mame/drivers/carrera.c +++ b/src/mame/drivers/carrera.c @@ -304,9 +304,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/coinmstr.c b/src/mame/drivers/coinmstr.c index 4c52681cd27..bb8c919895c 100644 --- a/src/mame/drivers/coinmstr.c +++ b/src/mame/drivers/coinmstr.c @@ -972,9 +972,11 @@ static const mc6845_interface h46505_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/funworld.c b/src/mame/drivers/funworld.c index dc3ffafe7e6..bfc8d0d2c93 100644 --- a/src/mame/drivers/funworld.c +++ b/src/mame/drivers/funworld.c @@ -2000,9 +2000,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/goldnpkr.c b/src/mame/drivers/goldnpkr.c index fc479dd1f12..c3aa7d26d93 100644 --- a/src/mame/drivers/goldnpkr.c +++ b/src/mame/drivers/goldnpkr.c @@ -2154,9 +2154,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/jokrwild.c b/src/mame/drivers/jokrwild.c index 98681cc4802..93f2e4d27e9 100644 --- a/src/mame/drivers/jokrwild.c +++ b/src/mame/drivers/jokrwild.c @@ -351,9 +351,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/kingdrby.c b/src/mame/drivers/kingdrby.c index fd873f41445..dd220c67787 100644 --- a/src/mame/drivers/kingdrby.c +++ b/src/mame/drivers/kingdrby.c @@ -631,9 +631,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; /************************************* diff --git a/src/mame/drivers/magicfly.c b/src/mame/drivers/magicfly.c index cc504fad453..07b187aaac1 100644 --- a/src/mame/drivers/magicfly.c +++ b/src/mame/drivers/magicfly.c @@ -741,9 +741,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/merit.c b/src/mame/drivers/merit.c index ab59607c83f..54965eeaafc 100644 --- a/src/mame/drivers/merit.c +++ b/src/mame/drivers/merit.c @@ -240,27 +240,29 @@ static MC6845_UPDATE_ROW( update_row ) } -static MC6845_ON_HSYNC_CHANGED(hsync_changed) +static WRITE_LINE_DEVICE_HANDLER(hsync_changed) { /* update any video up to the current scanline */ video_screen_update_now(device->machine->primary_screen); } -static MC6845_ON_VSYNC_CHANGED(vsync_changed) +static WRITE_LINE_DEVICE_HANDLER(vsync_changed) { - cputag_set_input_line(device->machine, "maincpu", 0, vsync ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? ASSERT_LINE : CLEAR_LINE); } static const mc6845_interface mc6845_intf = { - "screen", /* screen we are acting on */ - 8, /* number of pixels per video memory address */ - begin_update, /* before pixel update callback */ - update_row, /* row update callback */ - 0, /* after pixel update callback */ - 0, /* callback for display state changes */ - hsync_changed, /* HSYNC callback */ - vsync_changed /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + begin_update, /* before pixel update callback */ + update_row, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_LINE(hsync_changed), /* HSYNC callback */ + DEVCB_LINE(vsync_changed), /* VSYNC callback */ + NULL /* update address callback */ }; static WRITE8_DEVICE_HANDLER( led1_w ) diff --git a/src/mame/drivers/miniboy7.c b/src/mame/drivers/miniboy7.c index 3363aa2f34d..675d12327f7 100644 --- a/src/mame/drivers/miniboy7.c +++ b/src/mame/drivers/miniboy7.c @@ -259,9 +259,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/mpu4drvr.c b/src/mame/drivers/mpu4drvr.c index 783a861a9cf..611894dcafb 100644 --- a/src/mame/drivers/mpu4drvr.c +++ b/src/mame/drivers/mpu4drvr.c @@ -1633,9 +1633,9 @@ static VIDEO_UPDATE(dealem) } -static MC6845_ON_VSYNC_CHANGED( dealem_vsync_changed ) +static WRITE_LINE_DEVICE_HANDLER( dealem_vsync_changed ) { - cputag_set_input_line(device->machine, "maincpu", INPUT_LINE_NMI, vsync); + cputag_set_input_line(device->machine, "maincpu", INPUT_LINE_NMI, state); } /************************************* @@ -1646,14 +1646,16 @@ static MC6845_ON_VSYNC_CHANGED( dealem_vsync_changed ) static const mc6845_interface hd6845_intf = { - "screen", /* screen we are acting on */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - dealem_vsync_changed /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_LINE(dealem_vsync_changed), /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/murogem.c b/src/mame/drivers/murogem.c index be4c4c8317a..7b7d895f4b5 100644 --- a/src/mame/drivers/murogem.c +++ b/src/mame/drivers/murogem.c @@ -199,9 +199,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/nyny.c b/src/mame/drivers/nyny.c index f7dfbf5d1c3..74c1fd2748a 100644 --- a/src/mame/drivers/nyny.c +++ b/src/mame/drivers/nyny.c @@ -397,9 +397,9 @@ static MC6845_END_UPDATE( end_update ) } -static MC6845_ON_DE_CHANGED( display_enable_changed ) +static WRITE_LINE_DEVICE_HANDLER( display_enable_changed ) { - ttl74123_a_w(devtag_get_device(device->machine, "ic48_1"), 0, display_enabled); + ttl74123_a_w(devtag_get_device(device->machine, "ic48_1"), 0, state); } @@ -410,9 +410,11 @@ static const mc6845_interface mc6845_intf = begin_update, /* before pixel update callback */ update_row, /* row update callback */ end_update, /* after pixel update callback */ - display_enable_changed, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_LINE(display_enable_changed), /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/peplus.c b/src/mame/drivers/peplus.c index 13c12a28bc0..cb893390a44 100644 --- a/src/mame/drivers/peplus.c +++ b/src/mame/drivers/peplus.c @@ -218,7 +218,7 @@ static int sda_dir = 0; #define eeprom_NVRAM_SIZE 0x200 // 4k Bit /* prototypes */ -static MC6845_ON_VSYNC_CHANGED(crtc_vsync); +static WRITE_LINE_DEVICE_HANDLER(crtc_vsync); static MC6845_ON_UPDATE_ADDR_CHANGED(crtc_addr); static const mc6845_interface mc6845_intf = @@ -228,9 +228,10 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - crtc_vsync, /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_LINE(crtc_vsync), /* VSYNC callback */ crtc_addr /* update address callback */ }; @@ -344,9 +345,9 @@ static void handle_lightpen( const device_config *device ) timer_set(device->machine, video_screen_get_time_until_pos(device->machine->primary_screen, yt, xt), (void *) device, 0, assert_lp_cb); } -static MC6845_ON_VSYNC_CHANGED(crtc_vsync) +static WRITE_LINE_DEVICE_HANDLER(crtc_vsync) { - cputag_set_input_line(device->machine, "maincpu", 0, vsync ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? ASSERT_LINE : CLEAR_LINE); handle_lightpen(device); } diff --git a/src/mame/drivers/progolf.c b/src/mame/drivers/progolf.c index 922a469a31d..0a41a9361ec 100644 --- a/src/mame/drivers/progolf.c +++ b/src/mame/drivers/progolf.c @@ -355,14 +355,17 @@ static INTERRUPT_GEN( progolf_interrupt ) static const mc6845_interface mc6845_intf = { - "screen",/* screen we are acting on */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ + }; static PALETTE_INIT( progolf ) diff --git a/src/mame/drivers/r2dtank.c b/src/mame/drivers/r2dtank.c index b193a0df3c7..4beff95a56c 100644 --- a/src/mame/drivers/r2dtank.c +++ b/src/mame/drivers/r2dtank.c @@ -360,9 +360,9 @@ static MC6845_UPDATE_ROW( update_row ) } -static MC6845_ON_DE_CHANGED( display_enable_changed ) +static WRITE_LINE_DEVICE_HANDLER( display_enable_changed ) { - ttl74123_a_w(devtag_get_device(device->machine, "74123"), 0, display_enabled); + ttl74123_a_w(devtag_get_device(device->machine, "74123"), 0, state); } @@ -372,10 +372,12 @@ static const mc6845_interface mc6845_intf = 8, /* number of pixels per video memory address */ begin_update, /* before pixel update callback */ update_row, /* row update callback */ - 0, /* after pixel update callback */ - display_enable_changed, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + NULL, /* after pixel update callback */ + DEVCB_LINE(display_enable_changed), /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/rockola.c b/src/mame/drivers/rockola.c index 60e8dd896d5..8eb0c24b445 100644 --- a/src/mame/drivers/rockola.c +++ b/src/mame/drivers/rockola.c @@ -768,9 +768,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/slotcarn.c b/src/mame/drivers/slotcarn.c index 734e3208f99..8d1284c1063 100644 --- a/src/mame/drivers/slotcarn.c +++ b/src/mame/drivers/slotcarn.c @@ -137,27 +137,29 @@ static MC6845_UPDATE_ROW( update_row ) } -static MC6845_ON_HSYNC_CHANGED(hsync_changed) +static WRITE_LINE_DEVICE_HANDLER(hsync_changed) { /* update any video up to the current scanline */ video_screen_update_now(device->machine->primary_screen); } -static MC6845_ON_VSYNC_CHANGED(vsync_changed) +static WRITE_LINE_DEVICE_HANDLER(vsync_changed) { - cputag_set_input_line(device->machine, "maincpu", 0, vsync ? ASSERT_LINE : CLEAR_LINE); + cputag_set_input_line(device->machine, "maincpu", 0, state ? ASSERT_LINE : CLEAR_LINE); } static const mc6845_interface mc6845_intf = { - "screen", /* screen we are acting on */ - 8, /* number of pixels per video memory address */ - begin_update, /* before pixel update callback */ - update_row, /* row update callback */ - 0, /* after pixel update callback */ - 0, /* callback for display state changes */ - hsync_changed, /* HSYNC callback */ - vsync_changed /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + begin_update, /* before pixel update callback */ + update_row, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_LINE(hsync_changed), /* HSYNC callback */ + DEVCB_LINE(vsync_changed), /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/spiders.c b/src/mame/drivers/spiders.c index e759b10f7dc..75a5a5290af 100644 --- a/src/mame/drivers/spiders.c +++ b/src/mame/drivers/spiders.c @@ -507,9 +507,9 @@ static MC6845_UPDATE_ROW( update_row ) } -static MC6845_ON_DE_CHANGED( display_enable_changed ) +static WRITE_LINE_DEVICE_HANDLER( display_enable_changed ) { - ttl74123_a_w(devtag_get_device(device->machine, "ic60"), 0, display_enabled); + ttl74123_a_w(devtag_get_device(device->machine, "ic60"), 0, state); } @@ -519,10 +519,12 @@ static const mc6845_interface mc6845_intf = 8, /* number of pixels per video memory address */ begin_update, /* before pixel update callback */ update_row, /* row update callback */ - 0, /* after pixel update callback */ - display_enable_changed, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + NULL, /* after pixel update callback */ + DEVCB_LINE(display_enable_changed), /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/ssingles.c b/src/mame/drivers/ssingles.c index 1591bf06cae..ae9e82be690 100644 --- a/src/mame/drivers/ssingles.c +++ b/src/mame/drivers/ssingles.c @@ -86,14 +86,16 @@ static MC6845_UPDATE_ROW( update_row ) static const mc6845_interface mc6845_intf = { - "screen", - 8, - NULL, - update_row, - NULL, - NULL, - NULL, - NULL + "screen", + 8, + NULL, /* before pixel update callback */ + update_row, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; static WRITE8_HANDLER(ssingles_videoram_w) diff --git a/src/mame/drivers/usgames.c b/src/mame/drivers/usgames.c index 339920a0c4f..a2f416c60d5 100644 --- a/src/mame/drivers/usgames.c +++ b/src/mame/drivers/usgames.c @@ -229,9 +229,11 @@ static const mc6845_interface mc6845_intf = NULL, /* before pixel update callback */ NULL, /* row update callback */ NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/drivers/vcombat.c b/src/mame/drivers/vcombat.c index 98814434926..8b4f5c91f35 100644 --- a/src/mame/drivers/vcombat.c +++ b/src/mame/drivers/vcombat.c @@ -528,22 +528,24 @@ static INPUT_PORTS_START( shadfgtr ) INPUT_PORTS_END -static MC6845_ON_HSYNC_CHANGED(sound_update) +static WRITE_LINE_DEVICE_HANDLER(sound_update) { /* Seems reasonable */ - cpu_set_input_line(cputag_get_cpu(device->machine, "soundcpu"), M68K_IRQ_1, hsync ? ASSERT_LINE : CLEAR_LINE); + cpu_set_input_line(cputag_get_cpu(device->machine, "soundcpu"), M68K_IRQ_1, state ? ASSERT_LINE : CLEAR_LINE); } static const mc6845_interface mc6845_intf = { - "screen", /* screen we are acting on */ - 16, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - sound_update, /* HSYNC callback */ - NULL /* VSYNC callback */ + "screen", /* screen we are acting on */ + 16, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_LINE(sound_update), /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/includes/qix.h b/src/mame/includes/qix.h index 752efaa4b1f..b3ae0b99051 100644 --- a/src/mame/includes/qix.h +++ b/src/mame/includes/qix.h @@ -72,7 +72,7 @@ WRITE8_HANDLER( qix_68705_portC_w ); WRITE8_DEVICE_HANDLER( qix_pia_w ); -MC6845_ON_VSYNC_CHANGED( qix_vsync_changed ); +WRITE_LINE_DEVICE_HANDLER( qix_vsync_changed ); /*----------- defined in video/qix.c -----------*/ diff --git a/src/mame/machine/qix.c b/src/mame/machine/qix.c index 75a6d1912cd..45ceea4a4f7 100644 --- a/src/mame/machine/qix.c +++ b/src/mame/machine/qix.c @@ -250,10 +250,10 @@ MACHINE_START( qixmcu ) * *************************************/ -MC6845_ON_VSYNC_CHANGED( qix_vsync_changed ) +WRITE_LINE_DEVICE_HANDLER( qix_vsync_changed ) { const device_config *pia = devtag_get_device(device->machine, "sndpia0"); - pia6821_cb1_w(pia, 0, vsync); + pia6821_cb1_w(pia, 0, state); } diff --git a/src/mame/video/madalien.c b/src/mame/video/madalien.c index e703b9682b0..c87d89d037a 100644 --- a/src/mame/video/madalien.c +++ b/src/mame/video/madalien.c @@ -387,14 +387,16 @@ GFXDECODE_END static const mc6845_interface mc6845_intf = { - "screen", /* screen we are acting on */ - 8, /* number of pixels per video memory address */ - NULL, /* before pixel update callback */ - NULL, /* row update callback */ - NULL, /* after pixel update callback */ - NULL, /* callback for display state changes */ - NULL, /* HSYNC callback */ - NULL /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + NULL, /* before pixel update callback */ + NULL, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_NULL, /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_NULL, /* VSYNC callback */ + NULL /* update address callback */ }; diff --git a/src/mame/video/qix.c b/src/mame/video/qix.c index 2843d2e55d7..38fd3e8c2d2 100644 --- a/src/mame/video/qix.c +++ b/src/mame/video/qix.c @@ -31,7 +31,7 @@ static MC6845_BEGIN_UPDATE( begin_update ); static MC6845_UPDATE_ROW( update_row ); -static MC6845_ON_DE_CHANGED( display_enable_changed ); +static WRITE_LINE_DEVICE_HANDLER( display_enable_changed ); @@ -63,18 +63,18 @@ static VIDEO_START( qix ) * *************************************/ -static MC6845_ON_DE_CHANGED( display_enable_changed ) +static WRITE_LINE_DEVICE_HANDLER( display_enable_changed ) { - qix_state *state = (qix_state *)device->machine->driver_data; + qix_state *driver_state = (qix_state *)device->machine->driver_data; /* on the rising edge, latch the scanline */ - if (display_enabled) + if (state) { UINT16 ma = mc6845_get_ma(device); UINT8 ra = mc6845_get_ra(device); /* RA0-RA2 goes to D0-D2 and MA5-MA9 goes to D3-D7 */ - *state->scanline_latch = ((ma >> 2) & 0xf8) | (ra & 0x07); + *driver_state->scanline_latch = ((ma >> 2) & 0xf8) | (ra & 0x07); } } @@ -427,14 +427,16 @@ ADDRESS_MAP_END static const mc6845_interface mc6845_intf = { - "screen", /* screen we are acting on */ - 8, /* number of pixels per video memory address */ - begin_update, /* before pixel update callback */ - update_row, /* row update callback */ - NULL, /* after pixel update callback */ - display_enable_changed, /* callback for display state changes */ - NULL, /* HSYNC callback */ - qix_vsync_changed /* VSYNC callback */ + "screen", /* screen we are acting on */ + 8, /* number of pixels per video memory address */ + begin_update, /* before pixel update callback */ + update_row, /* row update callback */ + NULL, /* after pixel update callback */ + DEVCB_LINE(display_enable_changed), /* callback for display state changes */ + DEVCB_NULL, /* callback for cursor state changes */ + DEVCB_NULL, /* HSYNC callback */ + DEVCB_LINE(qix_vsync_changed), /* VSYNC callback */ + NULL /* update address callback */ };