mirror of
https://github.com/holub/mame
synced 2025-06-06 12:53:46 +03:00
- MC6845 - Added HSYNC and VSYNC callbacks -- I actually tested this :)
- Added macros and typedefs for callback function types - Updated all users for the new macros
This commit is contained in:
parent
b96aa2fb5c
commit
0516bab238
@ -52,7 +52,9 @@ struct _mc6845_t
|
|||||||
UINT16 cursor;
|
UINT16 cursor;
|
||||||
UINT16 light_pen;
|
UINT16 light_pen;
|
||||||
|
|
||||||
emu_timer *display_enable_changed_timer;
|
emu_timer *de_changed_timer;
|
||||||
|
emu_timer *hsync_timer;
|
||||||
|
emu_timer *vsync_timer;
|
||||||
UINT8 cursor_state; /* 0 = off, 1 = on */
|
UINT8 cursor_state; /* 0 = off, 1 = on */
|
||||||
UINT8 cursor_blink_count;
|
UINT8 cursor_blink_count;
|
||||||
|
|
||||||
@ -63,6 +65,8 @@ struct _mc6845_t
|
|||||||
UINT16 last_vert_total;
|
UINT16 last_vert_total;
|
||||||
UINT16 last_max_x;
|
UINT16 last_max_x;
|
||||||
UINT16 last_max_y;
|
UINT16 last_max_y;
|
||||||
|
UINT16 last_hsync_pos;
|
||||||
|
UINT16 last_vsync_pos;
|
||||||
UINT16 current_ma; /* the MA address currently drawn */
|
UINT16 current_ma; /* the MA address currently drawn */
|
||||||
int has_valid_parameters;
|
int has_valid_parameters;
|
||||||
};
|
};
|
||||||
@ -70,8 +74,12 @@ struct _mc6845_t
|
|||||||
|
|
||||||
static void mc6845_state_save_postload(void *param);
|
static void mc6845_state_save_postload(void *param);
|
||||||
static void configure_screen(mc6845_t *mc6845, int postload);
|
static void configure_screen(mc6845_t *mc6845, int postload);
|
||||||
static void update_timer(mc6845_t *mc6845);
|
static void update_de_changed_timer(mc6845_t *mc6845);
|
||||||
static TIMER_CALLBACK( display_enable_changed_timer_cb );
|
static void update_hsync_timer(mc6845_t *mc6845);
|
||||||
|
static void update_vsync_timer(mc6845_t *mc6845);
|
||||||
|
static TIMER_CALLBACK( de_changed_timer_cb );
|
||||||
|
static TIMER_CALLBACK( vsync_timer_cb );
|
||||||
|
static TIMER_CALLBACK( hsync_timer_cb );
|
||||||
|
|
||||||
|
|
||||||
static void mc6845_state_save_postload(void *param)
|
static void mc6845_state_save_postload(void *param)
|
||||||
@ -140,6 +148,7 @@ void mc6845_register_w(mc6845_t *mc6845, UINT8 data)
|
|||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
mc6845->horiz_sync_pos = data;
|
mc6845->horiz_sync_pos = data;
|
||||||
|
call_configure_screen = TRUE;
|
||||||
break;
|
break;
|
||||||
case 3:
|
case 3:
|
||||||
mc6845->sync_width = data & 0x0f;
|
mc6845->sync_width = data & 0x0f;
|
||||||
@ -158,6 +167,7 @@ void mc6845_register_w(mc6845_t *mc6845, UINT8 data)
|
|||||||
break;
|
break;
|
||||||
case 7:
|
case 7:
|
||||||
mc6845->vert_sync_pos = data & 0x7f;
|
mc6845->vert_sync_pos = data & 0x7f;
|
||||||
|
call_configure_screen = TRUE;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
mc6845->intl_skew = data & 0x03;
|
mc6845->intl_skew = data & 0x03;
|
||||||
@ -215,13 +225,20 @@ static void configure_screen(mc6845_t *mc6845, int postload)
|
|||||||
UINT16 max_x = mc6845->horiz_disp * mc6845->intf->hpixels_per_column - 1;
|
UINT16 max_x = mc6845->horiz_disp * mc6845->intf->hpixels_per_column - 1;
|
||||||
UINT16 max_y = mc6845->vert_disp * (mc6845->max_ras_addr + 1) - 1;
|
UINT16 max_y = mc6845->vert_disp * (mc6845->max_ras_addr + 1) - 1;
|
||||||
|
|
||||||
|
/* determine the syncing positions */
|
||||||
|
UINT16 hsync_pos = mc6845->horiz_sync_pos * mc6845->intf->hpixels_per_column;
|
||||||
|
UINT16 vsync_pos = mc6845->vert_sync_pos * (mc6845->max_ras_addr + 1);
|
||||||
|
|
||||||
/* update only if screen parameters changed, unless we are coming here after loading the saved state */
|
/* update only if screen parameters changed, unless we are coming here after loading the saved state */
|
||||||
if (postload ||
|
if (postload ||
|
||||||
(horiz_total != mc6845->last_horiz_total) || (vert_total != mc6845->last_vert_total) ||
|
(horiz_total != mc6845->last_horiz_total) || (vert_total != mc6845->last_vert_total) ||
|
||||||
(max_x != mc6845->last_max_x) || (max_y != mc6845->last_max_y))
|
(max_x != mc6845->last_max_x) || (max_y != mc6845->last_max_y) ||
|
||||||
|
(hsync_pos != mc6845->last_hsync_pos) || (vsync_pos != mc6845->last_vsync_pos))
|
||||||
{
|
{
|
||||||
/* update the screen only if we have valid data */
|
/* update the screen only if we have valid data */
|
||||||
if ((mc6845->horiz_total > 0) && (max_x < horiz_total) && (mc6845->vert_total > 0) && (max_y < vert_total))
|
if ((horiz_total > 0) && (max_x < horiz_total) &&
|
||||||
|
(vert_total > 0) && (max_y < vert_total) &&
|
||||||
|
(hsync_pos < horiz_total) && (vsync_pos < vert_total))
|
||||||
{
|
{
|
||||||
rectangle visarea;
|
rectangle visarea;
|
||||||
|
|
||||||
@ -232,8 +249,8 @@ static void configure_screen(mc6845_t *mc6845, int postload)
|
|||||||
visarea.max_x = max_x;
|
visarea.max_x = max_x;
|
||||||
visarea.max_y = max_y;
|
visarea.max_y = max_y;
|
||||||
|
|
||||||
if (LOG) logerror("M6845 config screen: HTOTAL: %x VTOTAL: %x MAX_X: %x MAX_Y: %x FPS: %f\n",
|
if (LOG) logerror("M6845 config screen: HTOTAL: %x VTOTAL: %x MAX_X: %x MAX_Y: %x HSYNC: %x VSYNC: %x FPS: %f\n",
|
||||||
horiz_total, vert_total, max_x, max_y, 1 / ATTOSECONDS_TO_DOUBLE(refresh));
|
horiz_total, vert_total, max_x, max_y, hsync_pos, vsync_pos, 1 / ATTOSECONDS_TO_DOUBLE(refresh));
|
||||||
|
|
||||||
video_screen_configure(mc6845->intf->scrnum, horiz_total, vert_total, &visarea, refresh);
|
video_screen_configure(mc6845->intf->scrnum, horiz_total, vert_total, &visarea, refresh);
|
||||||
|
|
||||||
@ -246,8 +263,12 @@ static void configure_screen(mc6845_t *mc6845, int postload)
|
|||||||
mc6845->last_vert_total = vert_total;
|
mc6845->last_vert_total = vert_total;
|
||||||
mc6845->last_max_x = max_x;
|
mc6845->last_max_x = max_x;
|
||||||
mc6845->last_max_y = max_y;
|
mc6845->last_max_y = max_y;
|
||||||
|
mc6845->last_hsync_pos = hsync_pos;
|
||||||
|
mc6845->last_vsync_pos = vsync_pos;
|
||||||
|
|
||||||
update_timer(mc6845);
|
update_de_changed_timer(mc6845);
|
||||||
|
update_hsync_timer(mc6845);
|
||||||
|
update_vsync_timer(mc6845);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -262,19 +283,17 @@ static int is_display_enabled(mc6845_t *mc6845)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void update_timer(mc6845_t *mc6845)
|
static void update_de_changed_timer(mc6845_t *mc6845)
|
||||||
{
|
{
|
||||||
INT16 next_y;
|
if (mc6845->has_valid_parameters && (mc6845->de_changed_timer != NULL))
|
||||||
UINT16 next_x;
|
|
||||||
attotime duration;
|
|
||||||
|
|
||||||
if (mc6845->has_valid_parameters && (mc6845->display_enable_changed_timer != 0))
|
|
||||||
{
|
{
|
||||||
|
INT16 next_y;
|
||||||
|
UINT16 next_x;
|
||||||
|
attotime duration;
|
||||||
|
|
||||||
|
/* we are in a display region, get the location of the next blanking start */
|
||||||
if (is_display_enabled(mc6845))
|
if (is_display_enabled(mc6845))
|
||||||
{
|
{
|
||||||
/* we are in a display region,
|
|
||||||
get the location of the next blanking start */
|
|
||||||
|
|
||||||
/* normally, it's at end the current raster line */
|
/* normally, it's at end the current raster line */
|
||||||
next_y = video_screen_get_vpos(mc6845->intf->scrnum);
|
next_y = video_screen_get_vpos(mc6845->intf->scrnum);
|
||||||
next_x = mc6845->last_max_x + 1;
|
next_x = mc6845->last_max_x + 1;
|
||||||
@ -291,10 +310,10 @@ static void update_timer(mc6845_t *mc6845)
|
|||||||
next_y = -1;
|
next_y = -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* we are in a blanking region, get the location of the next display start */
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* we are in a blanking region,
|
|
||||||
get the location of the next display start */
|
|
||||||
next_x = 0;
|
next_x = 0;
|
||||||
next_y = (video_screen_get_vpos(mc6845->intf->scrnum) + 1) % mc6845->last_vert_total;
|
next_y = (video_screen_get_vpos(mc6845->intf->scrnum) + 1) % mc6845->last_vert_total;
|
||||||
|
|
||||||
@ -309,19 +328,71 @@ static void update_timer(mc6845_t *mc6845)
|
|||||||
else
|
else
|
||||||
duration = attotime_never;
|
duration = attotime_never;
|
||||||
|
|
||||||
timer_adjust_oneshot(mc6845->display_enable_changed_timer, duration, 0);
|
timer_adjust_oneshot(mc6845->de_changed_timer, duration, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static TIMER_CALLBACK( display_enable_changed_timer_cb )
|
static void update_hsync_timer(mc6845_t *mc6845)
|
||||||
|
{
|
||||||
|
if (mc6845->has_valid_parameters && (mc6845->hsync_timer != NULL))
|
||||||
|
{
|
||||||
|
UINT16 next_y;
|
||||||
|
|
||||||
|
/* we are before the HSYNC position, we trigger on the current line */
|
||||||
|
if (video_screen_get_hpos(mc6845->intf->scrnum) < mc6845->last_hsync_pos)
|
||||||
|
next_y = video_screen_get_vpos(mc6845->intf->scrnum);
|
||||||
|
|
||||||
|
/* trigger on the next line */
|
||||||
|
else
|
||||||
|
next_y = (video_screen_get_vpos(mc6845->intf->scrnum) + 1) % mc6845->last_vert_total;
|
||||||
|
|
||||||
|
/* if the next line is not in the visible region, go to the beginning of the screen */
|
||||||
|
if (next_y > mc6845->last_max_y)
|
||||||
|
next_y = 0;
|
||||||
|
|
||||||
|
timer_adjust_oneshot(mc6845->hsync_timer, video_screen_get_time_until_pos(mc6845->intf->scrnum, next_y, mc6845->last_hsync_pos), 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void update_vsync_timer(mc6845_t *mc6845)
|
||||||
|
{
|
||||||
|
if (mc6845->has_valid_parameters && (mc6845->vsync_timer != NULL))
|
||||||
|
timer_adjust_oneshot(mc6845->vsync_timer, video_screen_get_time_until_pos(mc6845->intf->scrnum, mc6845->last_vsync_pos, 0), 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static TIMER_CALLBACK( de_changed_timer_cb )
|
||||||
{
|
{
|
||||||
mc6845_t *mc6845 = ptr;
|
mc6845_t *mc6845 = ptr;
|
||||||
|
|
||||||
/* call the callback function -- we know it exists */
|
/* call the callback function -- we know it exists */
|
||||||
mc6845->intf->display_enable_changed(mc6845->machine, mc6845, is_display_enabled(mc6845));
|
mc6845->intf->on_de_changed(mc6845->machine, mc6845, is_display_enabled(mc6845));
|
||||||
|
|
||||||
update_timer(mc6845);
|
update_de_changed_timer(mc6845);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static TIMER_CALLBACK( vsync_timer_cb )
|
||||||
|
{
|
||||||
|
mc6845_t *mc6845 = ptr;
|
||||||
|
|
||||||
|
/* call the callback function -- we know it exists */
|
||||||
|
mc6845->intf->on_vsync(mc6845->machine, mc6845);
|
||||||
|
|
||||||
|
update_vsync_timer(mc6845);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static TIMER_CALLBACK( hsync_timer_cb )
|
||||||
|
{
|
||||||
|
mc6845_t *mc6845 = ptr;
|
||||||
|
|
||||||
|
/* call the callback function -- we know it exists */
|
||||||
|
mc6845->intf->on_hsync(mc6845->machine, mc6845);
|
||||||
|
|
||||||
|
update_hsync_timer(mc6845);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -477,10 +548,18 @@ static void *mc6845_start(running_machine *machine, const char *tag, const void
|
|||||||
mc6845->machine = machine;
|
mc6845->machine = machine;
|
||||||
mc6845->intf = static_config;
|
mc6845->intf = static_config;
|
||||||
|
|
||||||
/* create the timer if the user is interested in getting display enable
|
/* create the timers for the various pin notifications */
|
||||||
notifications */
|
if (mc6845->intf)
|
||||||
if (mc6845->intf && mc6845->intf->display_enable_changed)
|
{
|
||||||
mc6845->display_enable_changed_timer = timer_alloc(display_enable_changed_timer_cb, mc6845);
|
if (mc6845->intf->on_de_changed)
|
||||||
|
mc6845->de_changed_timer = timer_alloc(de_changed_timer_cb, mc6845);
|
||||||
|
|
||||||
|
if (mc6845->intf->on_hsync)
|
||||||
|
mc6845->hsync_timer = timer_alloc(hsync_timer_cb, mc6845);
|
||||||
|
|
||||||
|
if (mc6845->intf->on_vsync)
|
||||||
|
mc6845->vsync_timer = timer_alloc(vsync_timer_cb, mc6845);
|
||||||
|
}
|
||||||
|
|
||||||
/* register for state saving */
|
/* register for state saving */
|
||||||
state_save_combine_module_and_tag(unique_tag, "mc6845", tag);
|
state_save_combine_module_and_tag(unique_tag, "mc6845", tag);
|
||||||
|
@ -28,6 +28,33 @@ typedef struct _mc6845_interface mc6845_interface;
|
|||||||
#define R6545 r6545_get_info
|
#define R6545 r6545_get_info
|
||||||
|
|
||||||
|
|
||||||
|
/* callback definitions */
|
||||||
|
typedef void * (*mc6845_begin_update_func)(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect);
|
||||||
|
#define MC6845_BEGIN_UPDATE(name) void *name(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect)
|
||||||
|
|
||||||
|
typedef void (*mc6845_update_row_func)(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap,
|
||||||
|
const rectangle *cliprect, UINT16 ma, UINT8 ra,
|
||||||
|
UINT16 y, UINT8 x_count, INT8 cursor_x, void *param);
|
||||||
|
#define MC6845_UPDATE_ROW(name) void name(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, \
|
||||||
|
const rectangle *cliprect, UINT16 ma, UINT8 ra, \
|
||||||
|
UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
||||||
|
|
||||||
|
typedef void (*mc6845_end_update_func)(running_machine *machine, mc6845_t *mc6845,
|
||||||
|
mame_bitmap *bitmap, const rectangle *cliprect, void *param);
|
||||||
|
#define MC6845_END_UPDATE(name) void name(running_machine *machine, mc6845_t *mc6845, \
|
||||||
|
mame_bitmap *bitmap, const rectangle *cliprect, void *param)
|
||||||
|
|
||||||
|
typedef void (*mc6845_on_de_changed_func)(running_machine *machine, mc6845_t *mc6845, int display_enabled);
|
||||||
|
#define MC6845_ON_DE_CHANGED(name) void name(running_machine *machine, mc6845_t *mc6845, int display_enabled)
|
||||||
|
|
||||||
|
typedef void (*mc6845_on_hsync_func)(running_machine *machine, mc6845_t *mc6845);
|
||||||
|
#define MC6845_ON_HSYNC(name) void name(running_machine *machine, mc6845_t *mc6845)
|
||||||
|
|
||||||
|
typedef void (*mc6845_on_vsync_func)(running_machine *machine, mc6845_t *mc6845);
|
||||||
|
#define MC6845_ON_VSYNC(name) void name(running_machine *machine, mc6845_t *mc6845)
|
||||||
|
|
||||||
|
|
||||||
|
/* interface */
|
||||||
struct _mc6845_interface
|
struct _mc6845_interface
|
||||||
{
|
{
|
||||||
int scrnum; /* screen we are acting on */
|
int scrnum; /* screen we are acting on */
|
||||||
@ -37,23 +64,25 @@ struct _mc6845_interface
|
|||||||
/* if specified, this gets called before any pixel update,
|
/* if specified, this gets called before any pixel update,
|
||||||
optionally return a pointer that will be passed to the
|
optionally return a pointer that will be passed to the
|
||||||
update and tear down callbacks */
|
update and tear down callbacks */
|
||||||
void * (*begin_update)(running_machine *machine, mc6845_t *mc6845,
|
mc6845_begin_update_func begin_update;
|
||||||
mame_bitmap *bitmap, const rectangle *cliprect);
|
|
||||||
|
|
||||||
/* this gets called for every row, the driver must output
|
/* this gets called for every row, the driver must output
|
||||||
x_count * hpixels_per_column pixels.
|
x_count * hpixels_per_column pixels.
|
||||||
cursor_x indicates the character position where the cursor is, or -1
|
cursor_x indicates the character position where the cursor is, or -1
|
||||||
if there is no cursor on this row */
|
if there is no cursor on this row */
|
||||||
void (*update_row)(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap,
|
mc6845_update_row_func update_row;
|
||||||
const rectangle *cliprect, UINT16 ma, UINT8 ra,
|
|
||||||
UINT16 y, UINT8 x_count, INT8 cursor_x, void *param);
|
|
||||||
|
|
||||||
/* if specified, this gets called after all row updating is complete */
|
/* if specified, this gets called after all row updating is complete */
|
||||||
void (*end_update)(running_machine *machine, mc6845_t *mc6845,
|
mc6845_end_update_func end_update;
|
||||||
mame_bitmap *bitmap, const rectangle *cliprect, void *param);
|
|
||||||
|
|
||||||
/* if specified, this gets called for every change of the disply enable (DT pin 18) */
|
/* if specified, this gets called for every change of the disply enable pin (pin 18) */
|
||||||
void (*display_enable_changed)(running_machine *machine, mc6845_t *mc6845, int display_enabled);
|
mc6845_on_de_changed_func on_de_changed;
|
||||||
|
|
||||||
|
/* if specified, this gets called when the HSYNC pin is asserted (pin 39) */
|
||||||
|
mc6845_on_hsync_func on_hsync;
|
||||||
|
|
||||||
|
/* if specified, this gets called when the VSYNC pin is asserted (pin 40) */
|
||||||
|
mc6845_on_vsync_func on_vsync;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -288,7 +288,7 @@ static WRITE8_HANDLER( flipscreen_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *nyny_begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect)
|
static MC6845_BEGIN_UPDATE( begin_update )
|
||||||
{
|
{
|
||||||
/* create the pens */
|
/* create the pens */
|
||||||
offs_t i;
|
offs_t i;
|
||||||
@ -303,8 +303,7 @@ static void *nyny_begin_update(running_machine *machine, mc6845_t *mc6845, mame_
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void nyny_update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect,
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
|
||||||
{
|
{
|
||||||
UINT8 cx;
|
UINT8 cx;
|
||||||
|
|
||||||
@ -373,7 +372,7 @@ INLINE void shift_star_generator(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void nyny_end_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect, void *param)
|
static MC6845_END_UPDATE( end_update )
|
||||||
{
|
{
|
||||||
/* draw the star field into the bitmap */
|
/* draw the star field into the bitmap */
|
||||||
int y;
|
int y;
|
||||||
@ -409,7 +408,7 @@ static void nyny_end_update(running_machine *machine, mc6845_t *mc6845, mame_bit
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void nyny_display_enable_changed(running_machine *machine, mc6845_t *mc6845, int display_enabled)
|
static MC6845_ON_DE_CHANGED( display_enable_changed )
|
||||||
{
|
{
|
||||||
TTL74123_A_w(0, display_enabled);
|
TTL74123_A_w(0, display_enabled);
|
||||||
}
|
}
|
||||||
@ -417,13 +416,15 @@ static void nyny_display_enable_changed(running_machine *machine, mc6845_t *mc68
|
|||||||
|
|
||||||
static const mc6845_interface mc6845_intf =
|
static const mc6845_interface mc6845_intf =
|
||||||
{
|
{
|
||||||
0, /* screen we are acting on */
|
0, /* screen we are acting on */
|
||||||
CRTC_CLOCK, /* the clock (pin 21) of the chip */
|
CRTC_CLOCK, /* the clock (pin 21) of the chip */
|
||||||
8, /* number of pixels per video memory address */
|
8, /* number of pixels per video memory address */
|
||||||
nyny_begin_update, /* before pixel update callback */
|
begin_update, /* before pixel update callback */
|
||||||
nyny_update_row, /* row update callback */
|
update_row, /* row update callback */
|
||||||
nyny_end_update, /* after pixel update callback */
|
end_update, /* after pixel update callback */
|
||||||
nyny_display_enable_changed /* call back for display state changes */
|
display_enable_changed, /* callback for display state changes */
|
||||||
|
NULL, /* HSYNC callback */
|
||||||
|
NULL /* VSYNC callback */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -322,7 +322,7 @@ static WRITE8_HANDLER( flipscreen_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect)
|
static MC6845_BEGIN_UPDATE( begin_update )
|
||||||
{
|
{
|
||||||
/* create the pens */
|
/* create the pens */
|
||||||
offs_t i;
|
offs_t i;
|
||||||
@ -337,8 +337,7 @@ static void *begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitma
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect,
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
|
||||||
{
|
{
|
||||||
UINT8 cx;
|
UINT8 cx;
|
||||||
|
|
||||||
@ -387,7 +386,7 @@ static void update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void display_enable_changed(running_machine *machine, mc6845_t *mc6845, int display_enabled)
|
static MC6845_ON_DE_CHANGED( display_enable_changed )
|
||||||
{
|
{
|
||||||
TTL74123_A_w(0, display_enabled);
|
TTL74123_A_w(0, display_enabled);
|
||||||
}
|
}
|
||||||
@ -401,7 +400,9 @@ static const mc6845_interface mc6845_intf =
|
|||||||
begin_update, /* before pixel update callback */
|
begin_update, /* before pixel update callback */
|
||||||
update_row, /* row update callback */
|
update_row, /* row update callback */
|
||||||
0, /* after pixel update callback */
|
0, /* after pixel update callback */
|
||||||
display_enable_changed /* call back for display state changes */
|
display_enable_changed, /* callback for display state changes */
|
||||||
|
NULL, /* HSYNC callback */
|
||||||
|
NULL /* VSYNC callback */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -434,7 +434,7 @@ static WRITE8_HANDLER( flipscreen_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void *begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect)
|
static MC6845_BEGIN_UPDATE( begin_update )
|
||||||
{
|
{
|
||||||
/* create the pens */
|
/* create the pens */
|
||||||
offs_t i;
|
offs_t i;
|
||||||
@ -449,8 +449,7 @@ static void *begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitma
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect,
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
|
||||||
{
|
{
|
||||||
UINT8 cx;
|
UINT8 cx;
|
||||||
|
|
||||||
@ -509,7 +508,7 @@ static void update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void display_enable_changed(running_machine *machine, mc6845_t *mc6845, int display_enabled)
|
static MC6845_ON_DE_CHANGED( display_enable_changed )
|
||||||
{
|
{
|
||||||
TTL74123_A_w(0, display_enabled);
|
TTL74123_A_w(0, display_enabled);
|
||||||
}
|
}
|
||||||
@ -523,7 +522,9 @@ static const mc6845_interface mc6845_intf =
|
|||||||
begin_update, /* before pixel update callback */
|
begin_update, /* before pixel update callback */
|
||||||
update_row, /* row update callback */
|
update_row, /* row update callback */
|
||||||
0, /* after pixel update callback */
|
0, /* after pixel update callback */
|
||||||
display_enable_changed /* call back for display state changes */
|
display_enable_changed, /* callback for display state changes */
|
||||||
|
NULL, /* HSYNC callback */
|
||||||
|
NULL /* VSYNC callback */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -47,8 +47,7 @@ static const UINT8 ssingles_colors[NUM_PENS*3]=
|
|||||||
0x00,0x00,0x00, 0xff,0x00,0xff, 0x80,0x00,0x80, 0x40,0x00,0x40
|
0x00,0x00,0x00, 0xff,0x00,0xff, 0x80,0x00,0x80, 0x40,0x00,0x40
|
||||||
};
|
};
|
||||||
|
|
||||||
static void update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect,
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
|
||||||
{
|
{
|
||||||
int cx,x;
|
int cx,x;
|
||||||
UINT32 tile_address;
|
UINT32 tile_address;
|
||||||
@ -92,6 +91,8 @@ static const mc6845_interface mc6845_intf =
|
|||||||
NULL,
|
NULL,
|
||||||
update_row,
|
update_row,
|
||||||
NULL,
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
NULL
|
NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -404,7 +404,9 @@ static const mc6845_interface mc6845_intf =
|
|||||||
NULL, /* before pixel update callback */
|
NULL, /* before pixel update callback */
|
||||||
NULL, /* row update callback */
|
NULL, /* row update callback */
|
||||||
NULL, /* after pixel update callback */
|
NULL, /* after pixel update callback */
|
||||||
NULL /* call back for display state changes */
|
NULL, /* callback for display state changes */
|
||||||
|
NULL, /* HSYNC callback */
|
||||||
|
NULL /* VSYNC callback */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,20 +19,9 @@
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static void qix_display_enable_changed(running_machine *machine, mc6845_t *mc6845, int display_enabled);
|
static MC6845_BEGIN_UPDATE( begin_update );
|
||||||
|
static MC6845_UPDATE_ROW( update_row );
|
||||||
static void *qix_begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect);
|
static MC6845_ON_DE_CHANGED( display_enable_changed );
|
||||||
|
|
||||||
static void qix_update_row(running_machine *machine,
|
|
||||||
mc6845_t *mc6845,
|
|
||||||
mame_bitmap *bitmap,
|
|
||||||
const rectangle *cliprect,
|
|
||||||
UINT16 ma,
|
|
||||||
UINT8 ra,
|
|
||||||
UINT16 y,
|
|
||||||
UINT8 x_count,
|
|
||||||
INT8 cursor_x,
|
|
||||||
void *param);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +56,7 @@ static VIDEO_START( qix )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static void qix_display_enable_changed(running_machine *machine, mc6845_t *mc6845, int display_enabled)
|
static MC6845_ON_DE_CHANGED( display_enable_changed )
|
||||||
{
|
{
|
||||||
qix_state *state = machine->driver_data;
|
qix_state *state = machine->driver_data;
|
||||||
|
|
||||||
@ -335,7 +324,7 @@ static WRITE8_HANDLER( qix_mc6845_register_w )
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static void *qix_begin_update(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect)
|
static MC6845_BEGIN_UPDATE( begin_update )
|
||||||
{
|
{
|
||||||
qix_state *state = machine->driver_data;
|
qix_state *state = machine->driver_data;
|
||||||
|
|
||||||
@ -353,8 +342,8 @@ static void *qix_begin_update(running_machine *machine, mc6845_t *mc6845, mame_b
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void qix_update_row(running_machine *machine, mc6845_t *mc6845, mame_bitmap *bitmap, const rectangle *cliprect,
|
static MC6845_UPDATE_ROW( update_row )
|
||||||
UINT16 ma, UINT8 ra, UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
|
|
||||||
{
|
{
|
||||||
qix_state *state = machine->driver_data;
|
qix_state *state = machine->driver_data;
|
||||||
UINT16 x;
|
UINT16 x;
|
||||||
@ -460,13 +449,15 @@ ADDRESS_MAP_END
|
|||||||
|
|
||||||
static const mc6845_interface mc6845_intf =
|
static const mc6845_interface mc6845_intf =
|
||||||
{
|
{
|
||||||
0, /* screen we are acting on */
|
0, /* screen we are acting on */
|
||||||
QIX_CHARACTER_CLOCK, /* the clock (pin 21) of the chip */
|
QIX_CHARACTER_CLOCK, /* the clock (pin 21) of the chip */
|
||||||
8, /* number of pixels per video memory address */
|
8, /* number of pixels per video memory address */
|
||||||
qix_begin_update, /* before pixel update callback */
|
begin_update, /* before pixel update callback */
|
||||||
qix_update_row, /* row update callback */
|
update_row, /* row update callback */
|
||||||
0, /* after pixel update callback */
|
NULL, /* after pixel update callback */
|
||||||
qix_display_enable_changed /* call back for display state changes */
|
display_enable_changed, /* callback for display state changes */
|
||||||
|
NULL, /* HSYNC callback */
|
||||||
|
NULL /* VSYNC callback */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user