This changes the MC6845 to take and pass device_config's only

The following shook out from this that are applicable to other devices as well:

- running_machine is no longer taken, passed or stored
- mc6845_t is now private
- since passing device_config's is not device type safe, I added a
  get_safe_token() to mc6845.c to check the device passed in for the valid type.
  I think something like this should be added to the core.

- As a side note, I really don't think that device_config is a good name,
  naming it simply device_t or something like that might be better.
This commit is contained in:
Zsolt Vasvari 2008-03-07 02:45:35 +00:00
parent 8b444900ca
commit 6302df116d
10 changed files with 98 additions and 117 deletions

View File

@ -39,6 +39,7 @@ enum
NUM_TYPES NUM_TYPES
}; };
/* tags for state saving */ /* tags for state saving */
const char * const device_tags[NUM_TYPES] = { "mc6845", "c6545-1", "r6545-1" }; const char * const device_tags[NUM_TYPES] = { "mc6845", "c6545-1", "r6545-1" };
@ -49,10 +50,10 @@ static const int supports_status_reg_d5[NUM_TYPES] = { FALSE, TRUE, TRUE }
static const int supports_status_reg_d6[NUM_TYPES] = { FALSE, TRUE, TRUE }; static const int supports_status_reg_d6[NUM_TYPES] = { FALSE, TRUE, TRUE };
typedef struct _mc6845_t mc6845_t;
struct _mc6845_t struct _mc6845_t
{ {
int device_type; int device_type;
running_machine *machine;
const mc6845_interface *intf; const mc6845_interface *intf;
/* register file */ /* register file */
@ -107,6 +108,19 @@ static void update_hsync_changed_timers(mc6845_t *mc6845);
static void update_vsync_changed_timers(mc6845_t *mc6845); static void update_vsync_changed_timers(mc6845_t *mc6845);
/* makes sure that the passed in device is the right type */
INLINE mc6845_t *get_safe_token(const device_config *device)
{
assert(device != NULL);
assert(device->token != NULL);
assert((device->type == DEVICE_GET_INFO_NAME(mc6845)) ||
(device->type == DEVICE_GET_INFO_NAME(c6545_1)) ||
(device->type == DEVICE_GET_INFO_NAME(r6545_1)));
return (mc6845_t *)device->token;
}
static void mc6845_state_save_postload(void *param) static void mc6845_state_save_postload(void *param)
{ {
recompute_parameters(param, TRUE); recompute_parameters(param, TRUE);
@ -115,9 +129,7 @@ static void mc6845_state_save_postload(void *param)
WRITE8_DEVICE_HANDLER( mc6845_address_w ) WRITE8_DEVICE_HANDLER( mc6845_address_w )
{ {
mc6845_t *mc6845 = device->token; mc6845_t *mc6845 = get_safe_token(device);
assert(mc6845 != NULL);
mc6845->register_address_latch = data & 0x1f; mc6845->register_address_latch = data & 0x1f;
} }
@ -125,11 +137,9 @@ WRITE8_DEVICE_HANDLER( mc6845_address_w )
READ8_DEVICE_HANDLER( mc6845_status_r ) READ8_DEVICE_HANDLER( mc6845_status_r )
{ {
mc6845_t *mc6845 = device->token; mc6845_t *mc6845 = get_safe_token(device);
UINT8 ret = 0; UINT8 ret = 0;
assert(mc6845 != NULL);
/* VBLANK bit */ /* VBLANK bit */
if (supports_status_reg_d5[mc6845->device_type] && if (supports_status_reg_d5[mc6845->device_type] &&
(video_screen_get_vpos(mc6845->intf->scrnum) > mc6845->max_visible_y)) (video_screen_get_vpos(mc6845->intf->scrnum) > mc6845->max_visible_y))
@ -145,11 +155,9 @@ READ8_DEVICE_HANDLER( mc6845_status_r )
READ8_DEVICE_HANDLER( mc6845_register_r ) READ8_DEVICE_HANDLER( mc6845_register_r )
{ {
mc6845_t *mc6845 = device->token; mc6845_t *mc6845 = get_safe_token(device);
UINT8 ret = 0; UINT8 ret = 0;
assert(mc6845 != NULL);
switch (mc6845->register_address_latch) switch (mc6845->register_address_latch)
{ {
case 0x0c: ret = supports_disp_start_addr_r[mc6845->device_type] ? (mc6845->disp_start_addr >> 8) & 0xff : 0; break; case 0x0c: ret = supports_disp_start_addr_r[mc6845->device_type] ? (mc6845->disp_start_addr >> 8) & 0xff : 0; break;
@ -169,9 +177,7 @@ READ8_DEVICE_HANDLER( mc6845_register_r )
WRITE8_DEVICE_HANDLER( mc6845_register_w ) WRITE8_DEVICE_HANDLER( mc6845_register_w )
{ {
mc6845_t *mc6845 = device->token; mc6845_t *mc6845 = get_safe_token(device);
assert(mc6845 != NULL);
if (LOG) logerror("M6845 PC %04x: reg 0x%02x = 0x%02x\n", activecpu_get_pc(), mc6845->register_address_latch, data); if (LOG) logerror("M6845 PC %04x: reg 0x%02x = 0x%02x\n", activecpu_get_pc(), mc6845->register_address_latch, data);
@ -387,10 +393,11 @@ static void update_vsync_changed_timers(mc6845_t *mc6845)
static TIMER_CALLBACK( de_changed_timer_cb ) static TIMER_CALLBACK( de_changed_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
/* call the callback function -- we know it exists */ /* call the callback function -- we know it exists */
mc6845->intf->on_de_changed(mc6845->machine, mc6845, is_display_enabled(mc6845)); mc6845->intf->on_de_changed(device, is_display_enabled(mc6845));
update_de_changed_timer(mc6845); update_de_changed_timer(mc6845);
} }
@ -398,19 +405,21 @@ static TIMER_CALLBACK( de_changed_timer_cb )
static TIMER_CALLBACK( vsync_on_timer_cb ) static TIMER_CALLBACK( vsync_on_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
/* call the callback function -- we know it exists */ /* call the callback function -- we know it exists */
mc6845->intf->on_vsync_changed(mc6845->machine, mc6845, TRUE); mc6845->intf->on_vsync_changed(device, TRUE);
} }
static TIMER_CALLBACK( vsync_off_timer_cb ) static TIMER_CALLBACK( vsync_off_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
/* call the callback function -- we know it exists */ /* call the callback function -- we know it exists */
mc6845->intf->on_vsync_changed(mc6845->machine, mc6845, FALSE); mc6845->intf->on_vsync_changed(device, FALSE);
update_vsync_changed_timers(mc6845); update_vsync_changed_timers(mc6845);
} }
@ -418,30 +427,31 @@ static TIMER_CALLBACK( vsync_off_timer_cb )
static TIMER_CALLBACK( hsync_on_timer_cb ) static TIMER_CALLBACK( hsync_on_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
/* call the callback function -- we know it exists */ /* call the callback function -- we know it exists */
mc6845->intf->on_hsync_changed(mc6845->machine, mc6845, TRUE); mc6845->intf->on_hsync_changed(device, TRUE);
} }
static TIMER_CALLBACK( hsync_off_timer_cb ) static TIMER_CALLBACK( hsync_off_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
/* call the callback function -- we know it exists */ /* call the callback function -- we know it exists */
mc6845->intf->on_hsync_changed(mc6845->machine, mc6845, FALSE); mc6845->intf->on_hsync_changed(device, FALSE);
update_hsync_changed_timers(mc6845); update_hsync_changed_timers(mc6845);
} }
UINT16 mc6845_get_ma(mc6845_t *mc6845) UINT16 mc6845_get_ma(const device_config *device)
{ {
UINT16 ret; UINT16 ret;
mc6845_t *mc6845 = get_safe_token(device);
assert(mc6845 != NULL);
if (mc6845->has_valid_parameters) if (mc6845->has_valid_parameters)
{ {
@ -468,11 +478,10 @@ UINT16 mc6845_get_ma(mc6845_t *mc6845)
} }
UINT8 mc6845_get_ra(mc6845_t *mc6845) UINT8 mc6845_get_ra(const device_config *device)
{ {
UINT8 ret; UINT8 ret;
mc6845_t *mc6845 = get_safe_token(device);
assert(mc6845 != NULL);
if (mc6845->has_valid_parameters) if (mc6845->has_valid_parameters)
{ {
@ -493,19 +502,20 @@ UINT8 mc6845_get_ra(mc6845_t *mc6845)
static TIMER_CALLBACK( light_pen_latch_timer_cb ) static TIMER_CALLBACK( light_pen_latch_timer_cb )
{ {
mc6845_t *mc6845 = ptr; const device_config *device = ptr;
mc6845_t *mc6845 = get_safe_token(device);
mc6845->light_pen_addr = mc6845_get_ma(mc6845); mc6845->light_pen_addr = mc6845_get_ma(device);
mc6845->light_pen_latched = TRUE; mc6845->light_pen_latched = TRUE;
} }
void mc6845_assert_light_pen_input(mc6845_t *mc6845) void mc6845_assert_light_pen_input(const device_config *device)
{ {
int y, x; int y, x;
int char_x; int char_x;
assert(mc6845 != NULL); mc6845_t *mc6845 = get_safe_token(device);
if (mc6845->has_valid_parameters) if (mc6845->has_valid_parameters)
{ {
@ -564,9 +574,9 @@ static void update_cursor_state(mc6845_t *mc6845)
} }
void mc6845_update(mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect) void mc6845_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect)
{ {
assert(mc6845 != NULL); mc6845_t *mc6845 = get_safe_token(device);
assert(bitmap != NULL); assert(bitmap != NULL);
assert(cliprect != NULL); assert(cliprect != NULL);
@ -581,7 +591,7 @@ void mc6845_update(mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect
/* call the set up function if any */ /* call the set up function if any */
if (mc6845->intf->begin_update != NULL) if (mc6845->intf->begin_update != NULL)
param = mc6845->intf->begin_update(mc6845->machine, mc6845, bitmap, cliprect); param = mc6845->intf->begin_update(device, bitmap, cliprect);
if (cliprect->min_y == 0) if (cliprect->min_y == 0)
{ {
@ -609,7 +619,7 @@ void mc6845_update(mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect
INT8 cursor_x = cursor_visible ? (mc6845->cursor_addr - mc6845->current_disp_addr) : -1; INT8 cursor_x = cursor_visible ? (mc6845->cursor_addr - mc6845->current_disp_addr) : -1;
/* call the external system to draw it */ /* call the external system to draw it */
mc6845->intf->update_row(mc6845->machine, mc6845, bitmap, cliprect, mc6845->current_disp_addr, ra, y, mc6845->horiz_disp, cursor_x, param); mc6845->intf->update_row(device, bitmap, cliprect, mc6845->current_disp_addr, ra, y, mc6845->horiz_disp, cursor_x, param);
/* update MA if the last raster address */ /* update MA if the last raster address */
if (ra == mc6845->max_ras_addr) if (ra == mc6845->max_ras_addr)
@ -618,7 +628,7 @@ void mc6845_update(mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect
/* call the tear down function if any */ /* call the tear down function if any */
if (mc6845->intf->end_update != NULL) if (mc6845->intf->end_update != NULL)
mc6845->intf->end_update(mc6845->machine, mc6845, bitmap, cliprect, param); mc6845->intf->end_update(device, bitmap, cliprect, param);
popmessage(NULL); popmessage(NULL);
} }
@ -643,29 +653,28 @@ static void *common_start(const device_config *device, int device_type)
memset(mc6845, 0, sizeof(*mc6845)); memset(mc6845, 0, sizeof(*mc6845));
mc6845->device_type = device_type; mc6845->device_type = device_type;
mc6845->machine = device->machine;
mc6845->intf = device->static_config; mc6845->intf = device->static_config;
/* create the timers */ /* create the timers */
if (mc6845->intf != NULL) if (mc6845->intf != NULL)
{ {
if (mc6845->intf->on_de_changed != NULL) if (mc6845->intf->on_de_changed != NULL)
mc6845->de_changed_timer = timer_alloc(de_changed_timer_cb, mc6845); mc6845->de_changed_timer = timer_alloc(de_changed_timer_cb, (void *)device);
if (mc6845->intf->on_hsync_changed != NULL) if (mc6845->intf->on_hsync_changed != NULL)
{ {
mc6845->hsync_on_timer = timer_alloc(hsync_on_timer_cb, mc6845); mc6845->hsync_on_timer = timer_alloc(hsync_on_timer_cb, (void *)device);
mc6845->hsync_off_timer = timer_alloc(hsync_off_timer_cb, mc6845); mc6845->hsync_off_timer = timer_alloc(hsync_off_timer_cb, (void *)device);
} }
if (mc6845->intf->on_vsync_changed != NULL) if (mc6845->intf->on_vsync_changed != NULL)
{ {
mc6845->vsync_on_timer = timer_alloc(vsync_on_timer_cb, mc6845); mc6845->vsync_on_timer = timer_alloc(vsync_on_timer_cb, (void *)device);
mc6845->vsync_off_timer = timer_alloc(vsync_off_timer_cb, mc6845); mc6845->vsync_off_timer = timer_alloc(vsync_off_timer_cb, (void *)device);
} }
} }
mc6845->light_pen_latch_timer = timer_alloc(light_pen_latch_timer_cb, mc6845); mc6845->light_pen_latch_timer = timer_alloc(light_pen_latch_timer_cb, (void *)device);
/* register for state saving */ /* register for state saving */
state_save_combine_module_and_tag(unique_tag, device_tags[device_type], device->tag); state_save_combine_module_and_tag(unique_tag, device_tags[device_type], device->tag);
@ -713,19 +722,19 @@ static DEVICE_START( r6545_1 )
static DEVICE_RESET( mc6845 ) static DEVICE_RESET( mc6845 )
{ {
mc6845_t *mc6845 = device->token; mc6845_t *mc6845 = get_safe_token(device);
/* internal registers other than status remain unchanged, all outputs go low */ /* internal registers other than status remain unchanged, all outputs go low */
if (mc6845->intf != NULL) if (mc6845->intf != NULL)
{ {
if (mc6845->intf->on_de_changed != NULL) if (mc6845->intf->on_de_changed != NULL)
mc6845->intf->on_de_changed(device->machine, mc6845, FALSE); mc6845->intf->on_de_changed(device, FALSE);
if (mc6845->intf->on_hsync_changed != NULL) if (mc6845->intf->on_hsync_changed != NULL)
mc6845->intf->on_hsync_changed(device->machine, mc6845, FALSE); mc6845->intf->on_hsync_changed(device, FALSE);
if (mc6845->intf->on_vsync_changed != NULL) if (mc6845->intf->on_vsync_changed != NULL)
mc6845->intf->on_vsync_changed(device->machine, mc6845, FALSE); mc6845->intf->on_vsync_changed(device, FALSE);
} }
mc6845->light_pen_latched = FALSE; mc6845->light_pen_latched = FALSE;

View File

@ -11,41 +11,37 @@
#define __MC6845__ #define __MC6845__
typedef struct _mc6845_t mc6845_t;
typedef struct _mc6845_interface mc6845_interface;
#define MC6845 DEVICE_GET_INFO_NAME(mc6845) #define MC6845 DEVICE_GET_INFO_NAME(mc6845)
#define R6545_1 DEVICE_GET_INFO_NAME(r6545_1) #define R6545_1 DEVICE_GET_INFO_NAME(r6545_1)
#define C6545_1 DEVICE_GET_INFO_NAME(c6545_1) #define C6545_1 DEVICE_GET_INFO_NAME(c6545_1)
/* callback definitions */ /* callback definitions */
typedef void * (*mc6845_begin_update_func)(running_machine *machine, mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect); typedef void * (*mc6845_begin_update_func)(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect);
#define MC6845_BEGIN_UPDATE(name) void *name(running_machine *machine, mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect) #define MC6845_BEGIN_UPDATE(name) void *name(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect)
typedef void (*mc6845_update_row_func)(running_machine *machine, mc6845_t *mc6845, bitmap_t *bitmap, typedef void (*mc6845_update_row_func)(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); UINT16 y, UINT8 x_count, INT8 cursor_x, void *param);
#define MC6845_UPDATE_ROW(name) void name(running_machine *machine, mc6845_t *mc6845, bitmap_t *bitmap, \ #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) UINT16 y, UINT8 x_count, INT8 cursor_x, void *param)
typedef void (*mc6845_end_update_func)(running_machine *machine, mc6845_t *mc6845, typedef void (*mc6845_end_update_func)(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect, void *param);
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)
#define MC6845_END_UPDATE(name) void name(running_machine *machine, mc6845_t *mc6845, \
bitmap_t *bitmap, const rectangle *cliprect, void *param)
typedef void (*mc6845_on_de_changed_func)(running_machine *machine, mc6845_t *mc6845, int display_enabled); typedef void (*mc6845_on_de_changed_func)(const device_config *device, int display_enabled);
#define MC6845_ON_DE_CHANGED(name) void name(running_machine *machine, mc6845_t *mc6845, 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)(running_machine *machine, mc6845_t *mc6845, int hsync); typedef void (*mc6845_on_hsync_changed_func)(const device_config *device, int hsync);
#define MC6845_ON_HSYNC_CHANGED(name) void name(running_machine *machine, mc6845_t *mc6845, int hsync) #define MC6845_ON_HSYNC_CHANGED(name) void name(const device_config *device, int hsync)
typedef void (*mc6845_on_vsync_changed_func)(running_machine *machine, mc6845_t *mc6845, int vsync); typedef void (*mc6845_on_vsync_changed_func)(const device_config *device, int vsync);
#define MC6845_ON_VSYNC_CHANGED(name) void name(running_machine *machine, mc6845_t *mc6845, int vsync) #define MC6845_ON_VSYNC_CHANGED(name) void name(const device_config *device, int vsync)
/* interface */ /* interface */
typedef struct _mc6845_interface mc6845_interface;
struct _mc6845_interface struct _mc6845_interface
{ {
int scrnum; /* screen we are acting on */ int scrnum; /* screen we are acting on */
@ -95,18 +91,18 @@ READ8_DEVICE_HANDLER( mc6845_register_r );
WRITE8_DEVICE_HANDLER( mc6845_register_w ); WRITE8_DEVICE_HANDLER( mc6845_register_w );
/* return the current value on the MA0-MA13 pins */ /* return the current value on the MA0-MA13 pins */
UINT16 mc6845_get_ma(mc6845_t *mc6845); UINT16 mc6845_get_ma(const device_config *device);
/* return the current value on the RA0-RA4 pins */ /* return the current value on the RA0-RA4 pins */
UINT8 mc6845_get_ra(mc6845_t *mc6845); UINT8 mc6845_get_ra(const device_config *device);
/* simulates the LO->HI clocking of the light pen pin (pin 3) */ /* simulates the LO->HI clocking of the light pen pin (pin 3) */
void mc6845_assert_light_pen_input(mc6845_t *mc6845); void mc6845_assert_light_pen_input(const device_config *device);
/* updates the screen -- this will call begin_update(), /* updates the screen -- this will call begin_update(),
followed by update_row() reapeatedly and after all row followed by update_row() reapeatedly and after all row
updating is complete, end_update() */ updating is complete, end_update() */
void mc6845_update(mc6845_t *mc6845, bitmap_t *bitmap, const rectangle *cliprect); void mc6845_update(const device_config *device, bitmap_t *bitmap, const rectangle *cliprect);
#endif #endif

View File

@ -83,7 +83,6 @@
#define AUDIO_CPU_2_CLOCK (AUDIO_2_MASTER_CLOCK) #define AUDIO_CPU_2_CLOCK (AUDIO_2_MASTER_CLOCK)
static mc6845_t *mc6845;
static UINT8 *nyny_videoram_1; static UINT8 *nyny_videoram_1;
static UINT8 *nyny_videoram_2; static UINT8 *nyny_videoram_2;
static UINT8 *nyny_colorram_1; static UINT8 *nyny_colorram_1;
@ -416,14 +415,9 @@ static const mc6845_interface mc6845_intf =
}; };
static VIDEO_START( nyny )
{
mc6845 = devtag_get_token(machine, MC6845, "crtc");
}
static VIDEO_UPDATE( nyny ) static VIDEO_UPDATE( nyny )
{ {
const device_config *mc6845 = device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
mc6845_update(mc6845, bitmap, cliprect); mc6845_update(mc6845, bitmap, cliprect);
return 0; return 0;
@ -680,7 +674,6 @@ static MACHINE_DRIVER_START( nyny )
MDRV_NVRAM_HANDLER(generic_0fill) MDRV_NVRAM_HANDLER(generic_0fill)
/* video hardware */ /* video hardware */
MDRV_VIDEO_START(nyny)
MDRV_VIDEO_UPDATE(nyny) MDRV_VIDEO_UPDATE(nyny)
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)

View File

@ -48,7 +48,6 @@ RAM = 4116 (x11)
#define CRTC_CLOCK (MAIN_CPU_MASTER_CLOCK / 16) #define CRTC_CLOCK (MAIN_CPU_MASTER_CLOCK / 16)
static mc6845_t *mc6845;
static UINT8 *r2dtank_videoram; static UINT8 *r2dtank_videoram;
static UINT8 *r2dtank_colorram; static UINT8 *r2dtank_colorram;
static UINT8 flipscreen; static UINT8 flipscreen;
@ -394,14 +393,9 @@ static const mc6845_interface mc6845_intf =
}; };
static VIDEO_START( r2dtank )
{
mc6845 = devtag_get_token(machine, MC6845, "crtc");
}
static VIDEO_UPDATE( r2dtank ) static VIDEO_UPDATE( r2dtank )
{ {
const device_config *mc6845 = device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
mc6845_update(mc6845, bitmap, cliprect); mc6845_update(mc6845, bitmap, cliprect);
return 0; return 0;
@ -546,7 +540,6 @@ static MACHINE_DRIVER_START( r2dtank )
MDRV_NVRAM_HANDLER(generic_0fill) MDRV_NVRAM_HANDLER(generic_0fill)
/* video hardware */ /* video hardware */
MDRV_VIDEO_START(r2dtank)
MDRV_VIDEO_UPDATE(r2dtank) MDRV_VIDEO_UPDATE(r2dtank)
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)

View File

@ -203,7 +203,6 @@
#define CRTC_CLOCK (MAIN_CPU_MASTER_CLOCK / 16) #define CRTC_CLOCK (MAIN_CPU_MASTER_CLOCK / 16)
static mc6845_t *mc6845;
static UINT8 *spiders_ram; static UINT8 *spiders_ram;
static UINT8 flipscreen; static UINT8 flipscreen;
static UINT16 gfx_rom_address; static UINT16 gfx_rom_address;
@ -510,14 +509,9 @@ static const mc6845_interface mc6845_intf =
}; };
static VIDEO_START( spiders )
{
mc6845 = devtag_get_token(machine, MC6845, "crtc");
}
static VIDEO_UPDATE( spiders ) static VIDEO_UPDATE( spiders )
{ {
const device_config *mc6845 = device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
mc6845_update(mc6845, bitmap, cliprect); mc6845_update(mc6845, bitmap, cliprect);
return 0; return 0;
@ -708,7 +702,6 @@ static MACHINE_DRIVER_START( spiders )
MDRV_NVRAM_HANDLER(generic_0fill) MDRV_NVRAM_HANDLER(generic_0fill)
/* video hardware */ /* video hardware */
MDRV_VIDEO_START(spiders)
MDRV_VIDEO_UPDATE(spiders) MDRV_VIDEO_UPDATE(spiders)
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)

View File

@ -25,7 +25,6 @@
#include "sound/ay8910.h" #include "sound/ay8910.h"
#include "video/mc6845.h" #include "video/mc6845.h"
static mc6845_t *mc6845;
static UINT8 *ssingles_videoram; static UINT8 *ssingles_videoram;
static UINT8 *ssingles_colorram; static UINT8 *ssingles_colorram;
static UINT8 prot_data; static UINT8 prot_data;
@ -109,8 +108,6 @@ static WRITE8_HANDLER(ssingles_colorram_w)
static VIDEO_START(ssingles) static VIDEO_START(ssingles)
{ {
mc6845 = devtag_get_token(machine, MC6845, "crtc");
{ {
int i; int i;
for(i=0;i<NUM_PENS;++i) for(i=0;i<NUM_PENS;++i)
@ -123,6 +120,7 @@ static VIDEO_START(ssingles)
static VIDEO_UPDATE( ssingles ) static VIDEO_UPDATE( ssingles )
{ {
const device_config *mc6845 = device_list_find_by_tag(machine->config->devicelist, MC6845, "crtc");
mc6845_update(mc6845, bitmap, cliprect); mc6845_update(mc6845, bitmap, cliprect);
return 0; return 0;

View File

@ -26,7 +26,6 @@ struct _qix_state
UINT8 coinctrl; UINT8 coinctrl;
/* video state */ /* video state */
mc6845_t *mc6845;
UINT8 *videoram; UINT8 *videoram;
UINT8 *videoram_address; UINT8 *videoram_address;
UINT8 *videoram_mask; UINT8 *videoram_mask;

View File

@ -263,7 +263,7 @@ MACHINE_START( slither )
MC6845_ON_VSYNC_CHANGED( qix_vsync_changed ) MC6845_ON_VSYNC_CHANGED( qix_vsync_changed )
{ {
pia_3_cb1_w(machine, 0, vsync); pia_3_cb1_w(device->machine, 0, vsync);
} }

View File

@ -24,8 +24,6 @@ UINT8 *madalien_edge1_pos;
UINT8 *madalien_edge2_pos; UINT8 *madalien_edge2_pos;
UINT8 *madalien_headlight_pos; UINT8 *madalien_headlight_pos;
static mc6845_t *mc6845;
static tilemap *tilemap_fg; static tilemap *tilemap_fg;
static tilemap *tilemap_edge1[4]; static tilemap *tilemap_edge1[4];
@ -144,8 +142,6 @@ static VIDEO_START( madalien )
16, 16, 32, 32 16, 16, 32, 32
}; };
mc6845 = devtag_get_token(machine, MC6845, "crtc");
tilemap_fg = tilemap_create(get_tile_info_FG, tilemap_scan_cols_flip_x, 8, 8, 32, 32); tilemap_fg = tilemap_create(get_tile_info_FG, tilemap_scan_cols_flip_x, 8, 8, 32, 32);
tilemap_set_transparent_pen(tilemap_fg, 0); tilemap_set_transparent_pen(tilemap_fg, 0);
tilemap_set_scrolldx(tilemap_fg, 0, 0x50); tilemap_set_scrolldx(tilemap_fg, 0, 0x50);
@ -395,8 +391,6 @@ static const mc6845_interface mc6845_intf =
MACHINE_DRIVER_START( madalien_video ) MACHINE_DRIVER_START( madalien_video )
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 336, 0, 256, 288, 0, 256) MDRV_SCREEN_RAW_PARAMS(PIXEL_CLOCK, 336, 0, 256, 288, 0, 256)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16) MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)

View File

@ -12,6 +12,16 @@
/*************************************
*
* Device tag
*
*************************************/
#define MC6845_TAG ("vid-u18")
/************************************* /*************************************
* *
* Static function prototypes * Static function prototypes
@ -34,9 +44,6 @@ static VIDEO_START( qix )
{ {
qix_state *state = machine->driver_data; qix_state *state = machine->driver_data;
/* get the pointer to the mc6845 object */
state->mc6845 = devtag_get_token(machine, MC6845, "vid-u18");
/* allocate memory for the full video RAM */ /* allocate memory for the full video RAM */
state->videoram = auto_malloc(256 * 256); state->videoram = auto_malloc(256 * 256);
@ -57,13 +64,13 @@ static VIDEO_START( qix )
static MC6845_ON_DE_CHANGED( display_enable_changed ) static MC6845_ON_DE_CHANGED( display_enable_changed )
{ {
qix_state *state = machine->driver_data; qix_state *state = device->machine->driver_data;
/* on the rising edge, latch the scanline */ /* on the rising edge, latch the scanline */
if (display_enabled) if (display_enabled)
{ {
UINT16 ma = mc6845_get_ma(mc6845); UINT16 ma = mc6845_get_ma(device);
UINT8 ra = mc6845_get_ra(mc6845); UINT8 ra = mc6845_get_ra(device);
/* RA0-RA2 goes to D0-D2 and MA5-MA9 goes to D3-D7 */ /* RA0-RA2 goes to D0-D2 and MA5-MA9 goes to D3-D7 */
*state->scanline_latch = ((ma >> 2) & 0xf8) | (ra & 0x07); *state->scanline_latch = ((ma >> 2) & 0xf8) | (ra & 0x07);
@ -300,7 +307,7 @@ static void get_pens(qix_state *state, pen_t *pens)
static MC6845_BEGIN_UPDATE( begin_update ) static MC6845_BEGIN_UPDATE( begin_update )
{ {
qix_state *state = machine->driver_data; qix_state *state = device->machine->driver_data;
#if 0 #if 0
// note the confusing bit order! // note the confusing bit order!
@ -318,7 +325,7 @@ static MC6845_BEGIN_UPDATE( begin_update )
static MC6845_UPDATE_ROW( update_row ) static MC6845_UPDATE_ROW( update_row )
{ {
qix_state *state = machine->driver_data; qix_state *state = device->machine->driver_data;
UINT16 x; UINT16 x;
UINT8 scanline[256]; UINT8 scanline[256];
@ -344,9 +351,8 @@ static MC6845_UPDATE_ROW( update_row )
static VIDEO_UPDATE( qix ) static VIDEO_UPDATE( qix )
{ {
qix_state *state = machine->driver_data; const device_config *mc6845 = device_list_find_by_tag(machine->config->devicelist, MC6845, MC6845_TAG);
mc6845_update(mc6845, bitmap, cliprect);
mc6845_update(state->mc6845, bitmap, cliprect);
return 0; return 0;
} }
@ -441,7 +447,7 @@ MACHINE_DRIVER_START( qix_video )
MDRV_VIDEO_START(qix) MDRV_VIDEO_START(qix)
MDRV_VIDEO_UPDATE(qix) MDRV_VIDEO_UPDATE(qix)
MDRV_DEVICE_ADD("vid-u18", MC6845) MDRV_DEVICE_ADD(MC6845_TAG, MC6845)
MDRV_DEVICE_CONFIG(mc6845_intf) MDRV_DEVICE_CONFIG(mc6845_intf)
MDRV_SCREEN_ADD("main", RASTER) MDRV_SCREEN_ADD("main", RASTER)