[MC6845] Refactored to use devcb and added cursor callback (for MESS).

This commit is contained in:
Curt Coder 2009-06-11 21:36:04 +00:00
parent 7239f70508
commit 47a829e307
31 changed files with 302 additions and 189 deletions

View File

@ -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;

View File

@ -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

View File

@ -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 */
};

View File

@ -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 */

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};
/*************************************

View File

@ -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 */
};

View File

@ -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 )

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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);
}

View File

@ -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 )

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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)

View File

@ -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 */
};

View File

@ -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 */
};

View File

@ -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 -----------*/

View File

@ -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);
}

View File

@ -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 */
};

View File

@ -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 */
};