mirror of
https://github.com/holub/mame
synced 2025-05-23 06:08:48 +03:00
VIA6522: Refactored interface to use READ/WRITE_LINE.
This commit is contained in:
parent
10b94ff0a7
commit
a37b9332fa
@ -931,7 +931,7 @@ WRITE8_DEVICE_HANDLER(via_porta_w)
|
||||
CA1 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_DEVICE_HANDLER(via_ca1_r)
|
||||
READ_LINE_DEVICE_HANDLER(via_ca1_r)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
return v->in_ca1;
|
||||
@ -943,20 +943,17 @@ READ8_DEVICE_HANDLER(via_ca1_r)
|
||||
CA1 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_DEVICE_HANDLER(via_ca1_w)
|
||||
WRITE_LINE_DEVICE_HANDLER(via_ca1_w)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
|
||||
/* limit the data to 0 or 1 */
|
||||
data = data ? 1 : 0;
|
||||
|
||||
/* handle the active transition */
|
||||
if (data != v->in_ca1)
|
||||
if (state != v->in_ca1)
|
||||
{
|
||||
if (TRACE_VIA)
|
||||
logerror("%s:6522VIA chip %s: CA1 = %02X\n", cpuexec_describe_context(device->machine), device->tag, data);
|
||||
logerror("%s:6522VIA chip %s: CA1 = %02X\n", cpuexec_describe_context(device->machine), device->tag, state);
|
||||
|
||||
if ((CA1_LOW_TO_HIGH(v->pcr) && data) || (CA1_HIGH_TO_LOW(v->pcr) && !data))
|
||||
if ((CA1_LOW_TO_HIGH(v->pcr) && state) || (CA1_HIGH_TO_LOW(v->pcr) && !state))
|
||||
{
|
||||
if (PA_LATCH_ENABLE(v->acr))
|
||||
{
|
||||
@ -983,7 +980,7 @@ WRITE8_DEVICE_HANDLER(via_ca1_w)
|
||||
}
|
||||
}
|
||||
|
||||
v->in_ca1 = data;
|
||||
v->in_ca1 = state;
|
||||
}
|
||||
}
|
||||
|
||||
@ -993,7 +990,7 @@ WRITE8_DEVICE_HANDLER(via_ca1_w)
|
||||
CA2 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_DEVICE_HANDLER(via_ca2_r)
|
||||
READ_LINE_DEVICE_HANDLER(via_ca2_r)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
return v->in_ca2;
|
||||
@ -1005,27 +1002,24 @@ READ8_DEVICE_HANDLER(via_ca2_r)
|
||||
CA2 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_DEVICE_HANDLER(via_ca2_w)
|
||||
WRITE_LINE_DEVICE_HANDLER(via_ca2_w)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
|
||||
/* limit the data to 0 or 1 */
|
||||
data = data ? 1 : 0;
|
||||
|
||||
/* CA2 is in input mode */
|
||||
if (CA2_INPUT(v->pcr))
|
||||
{
|
||||
/* the new state has caused a transition */
|
||||
if (v->in_ca2 != data)
|
||||
if (v->in_ca2 != state)
|
||||
{
|
||||
/* handle the active transition */
|
||||
if ((data && CA2_LOW_TO_HIGH(v->pcr)) || (!data && CA2_HIGH_TO_LOW(v->pcr)))
|
||||
if ((state && CA2_LOW_TO_HIGH(v->pcr)) || (!state && CA2_HIGH_TO_LOW(v->pcr)))
|
||||
{
|
||||
/* mark the IRQ */
|
||||
via_set_int (device, INT_CA2);
|
||||
}
|
||||
/* set the new value for CA2 */
|
||||
v->in_ca2 = data;
|
||||
v->in_ca2 = state;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1064,7 +1058,7 @@ WRITE8_DEVICE_HANDLER(via_portb_w)
|
||||
CB1 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_DEVICE_HANDLER(via_cb1_r)
|
||||
READ_LINE_DEVICE_HANDLER(via_cb1_r)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
return v->in_cb1;
|
||||
@ -1076,17 +1070,14 @@ READ8_DEVICE_HANDLER(via_cb1_r)
|
||||
CB1 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_DEVICE_HANDLER(via_cb1_w)
|
||||
WRITE_LINE_DEVICE_HANDLER(via_cb1_w)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
|
||||
/* limit the data to 0 or 1 */
|
||||
data = data ? 1 : 0;
|
||||
|
||||
/* handle the active transition */
|
||||
if (data != v->in_cb1)
|
||||
if (state != v->in_cb1)
|
||||
{
|
||||
if ((CB1_LOW_TO_HIGH(v->pcr) && data) || (CB1_HIGH_TO_LOW(v->pcr) && !data))
|
||||
if ((CB1_LOW_TO_HIGH(v->pcr) && state) || (CB1_HIGH_TO_LOW(v->pcr) && !state))
|
||||
{
|
||||
if (PB_LATCH_ENABLE(v->acr))
|
||||
{
|
||||
@ -1114,7 +1105,7 @@ WRITE8_DEVICE_HANDLER(via_cb1_w)
|
||||
}
|
||||
}
|
||||
}
|
||||
v->in_cb1 = data;
|
||||
v->in_cb1 = state;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1124,7 +1115,7 @@ WRITE8_DEVICE_HANDLER(via_cb1_w)
|
||||
CB2 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
READ8_DEVICE_HANDLER(via_cb2_r)
|
||||
READ_LINE_DEVICE_HANDLER(via_cb2_r)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
return v->in_cb2;
|
||||
@ -1136,27 +1127,24 @@ READ8_DEVICE_HANDLER(via_cb2_r)
|
||||
CB2 input
|
||||
-------------------------------------------------*/
|
||||
|
||||
WRITE8_DEVICE_HANDLER(via_cb2_w)
|
||||
WRITE_LINE_DEVICE_HANDLER(via_cb2_w)
|
||||
{
|
||||
via6522_t *v = get_token(device);
|
||||
|
||||
/* limit the data to 0 or 1 */
|
||||
data = data ? 1 : 0;
|
||||
|
||||
/* CB2 is in input mode */
|
||||
if (CB2_INPUT(v->pcr))
|
||||
{
|
||||
/* the new state has caused a transition */
|
||||
if (v->in_cb2 != data)
|
||||
if (v->in_cb2 != state)
|
||||
{
|
||||
/* handle the active transition */
|
||||
if ((data && CB2_LOW_TO_HIGH(v->pcr)) || (!data && CB2_HIGH_TO_LOW(v->pcr)))
|
||||
if ((state && CB2_LOW_TO_HIGH(v->pcr)) || (!state && CB2_HIGH_TO_LOW(v->pcr)))
|
||||
{
|
||||
/* mark the IRQ */
|
||||
via_set_int (device, INT_CB2);
|
||||
}
|
||||
/* set the new value for CB2 */
|
||||
v->in_cb2 = data;
|
||||
v->in_cb2 = state;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -82,16 +82,16 @@ WRITE8_DEVICE_HANDLER(via_porta_w);
|
||||
READ8_DEVICE_HANDLER(via_portb_r);
|
||||
WRITE8_DEVICE_HANDLER(via_portb_w);
|
||||
|
||||
READ8_DEVICE_HANDLER(via_ca1_r);
|
||||
WRITE8_DEVICE_HANDLER(via_ca1_w);
|
||||
READ_LINE_DEVICE_HANDLER(via_ca1_r);
|
||||
WRITE_LINE_DEVICE_HANDLER(via_ca1_w);
|
||||
|
||||
READ8_DEVICE_HANDLER(via_ca2_r);
|
||||
WRITE8_DEVICE_HANDLER(via_ca2_w);
|
||||
READ_LINE_DEVICE_HANDLER(via_ca2_r);
|
||||
WRITE_LINE_DEVICE_HANDLER(via_ca2_w);
|
||||
|
||||
READ8_DEVICE_HANDLER(via_cb1_r);
|
||||
WRITE8_DEVICE_HANDLER(via_cb1_w);
|
||||
READ_LINE_DEVICE_HANDLER(via_cb1_r);
|
||||
WRITE_LINE_DEVICE_HANDLER(via_cb1_w);
|
||||
|
||||
READ8_DEVICE_HANDLER(via_cb2_r);
|
||||
WRITE8_DEVICE_HANDLER(via_cb2_w);
|
||||
READ_LINE_DEVICE_HANDLER(via_cb2_r);
|
||||
WRITE_LINE_DEVICE_HANDLER(via_cb2_w);
|
||||
|
||||
#endif /* __6522VIA_H__ */
|
||||
|
@ -211,8 +211,8 @@ static MACHINE_RESET( trvquest )
|
||||
static INTERRUPT_GEN( trvquest_interrupt )
|
||||
{
|
||||
gameplan_state *state = (gameplan_state *)device->machine->driver_data;
|
||||
via_ca1_w(state->via_2, 0, 1);
|
||||
via_ca1_w(state->via_2, 0, 0);
|
||||
via_ca1_w(state->via_2, 1);
|
||||
via_ca1_w(state->via_2, 0);
|
||||
}
|
||||
|
||||
static MACHINE_DRIVER_START( trvquest )
|
||||
|
@ -8,8 +8,8 @@ static int pbus;
|
||||
static READ8_DEVICE_HANDLER( b_via_0_pb_r );
|
||||
static WRITE8_DEVICE_HANDLER( b_via_0_pa_w );
|
||||
static WRITE8_DEVICE_HANDLER( b_via_0_pb_w );
|
||||
static READ8_DEVICE_HANDLER( b_via_0_ca2_r );
|
||||
static WRITE8_DEVICE_HANDLER( b_via_0_ca2_w );
|
||||
static READ_LINE_DEVICE_HANDLER( b_via_0_ca2_r );
|
||||
static WRITE_LINE_DEVICE_HANDLER( b_via_0_ca2_w );
|
||||
|
||||
static READ8_DEVICE_HANDLER( b_via_1_pa_r );
|
||||
static READ8_DEVICE_HANDLER( b_via_1_pb_r );
|
||||
@ -19,27 +19,27 @@ static WRITE8_DEVICE_HANDLER( b_via_1_pb_w );
|
||||
const via6522_interface b_via_0_interface =
|
||||
{
|
||||
/*inputs : A/B */ DEVCB_NULL, DEVCB_HANDLER(b_via_0_pb_r),
|
||||
/*inputs : CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_DEVICE_HANDLER("via6522_1", via_ca2_r), DEVCB_HANDLER(b_via_0_ca2_r), DEVCB_DEVICE_HANDLER("via6522_1", via_ca1_r),
|
||||
/*inputs : CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_DEVICE_LINE("via6522_1", via_ca2_r), DEVCB_LINE(b_via_0_ca2_r), DEVCB_DEVICE_LINE("via6522_1", via_ca1_r),
|
||||
/*outputs: A/B */ DEVCB_HANDLER(b_via_0_pa_w), DEVCB_HANDLER(b_via_0_pb_w),
|
||||
/*outputs: CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(b_via_0_ca2_w), DEVCB_DEVICE_HANDLER("via6522_1", via_ca1_w),
|
||||
/*outputs: CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_NULL, DEVCB_LINE(b_via_0_ca2_w), DEVCB_DEVICE_LINE("via6522_1", via_ca1_w),
|
||||
/*irq */ DEVCB_CPU_INPUT_LINE("maincpu", M6809_IRQ_LINE)
|
||||
};
|
||||
|
||||
const via6522_interface b_via_1_interface =
|
||||
{
|
||||
/*inputs : A/B */ DEVCB_HANDLER(b_via_1_pa_r), DEVCB_HANDLER(b_via_1_pb_r),
|
||||
/*inputs : CA/B1,CA/B2 */ DEVCB_DEVICE_HANDLER("via6522_0", via_cb2_r), DEVCB_NULL, DEVCB_DEVICE_HANDLER("via6522_0", via_cb1_r), DEVCB_NULL,
|
||||
/*inputs : CA/B1,CA/B2 */ DEVCB_DEVICE_LINE("via6522_0", via_cb2_r), DEVCB_NULL, DEVCB_DEVICE_LINE("via6522_0", via_cb1_r), DEVCB_NULL,
|
||||
/*outputs: A/B */ DEVCB_HANDLER(b_via_1_pa_w), DEVCB_HANDLER(b_via_1_pb_w),
|
||||
/*outputs: CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_NULL, DEVCB_DEVICE_HANDLER("via6522_0", via_cb1_w), DEVCB_NULL,
|
||||
/*outputs: CA/B1,CA/B2 */ DEVCB_NULL, DEVCB_NULL, DEVCB_DEVICE_LINE("via6522_0", via_cb1_w), DEVCB_NULL,
|
||||
/*irq */ DEVCB_CPU_INPUT_LINE("audiocpu", M6809_IRQ_LINE)
|
||||
};
|
||||
|
||||
static READ8_DEVICE_HANDLER( b_via_0_ca2_r )
|
||||
static READ_LINE_DEVICE_HANDLER( b_via_0_ca2_r )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( b_via_0_ca2_w )
|
||||
static WRITE_LINE_DEVICE_HANDLER( b_via_0_ca2_w )
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ INTERRUPT_GEN( beezer_interrupt )
|
||||
const device_config *via_0 = devtag_get_device(device->machine, "via6522_0");
|
||||
|
||||
scanline = (scanline + 1) % 0x80;
|
||||
via_ca2_w (via_0, 0, scanline & 0x10);
|
||||
via_ca2_w(via_0, (scanline & 0x10) ? 1 : 0);
|
||||
if ((scanline & 0x78) == 0x78)
|
||||
cpu_set_input_line(device, M6809_FIRQ_LINE, ASSERT_LINE);
|
||||
else
|
||||
|
@ -145,60 +145,60 @@ static TIMER_CALLBACK( clear_screen_done_callback )
|
||||
gameplan_state *state = (gameplan_state *)machine->driver_data;
|
||||
|
||||
/* indicate that the we are done clearing the screen */
|
||||
via_ca1_w(state->via_0, 0, 0);
|
||||
via_ca1_w(state->via_0, 0);
|
||||
}
|
||||
|
||||
|
||||
static WRITE8_DEVICE_HANDLER( video_command_trigger_w )
|
||||
static WRITE_LINE_DEVICE_HANDLER( video_command_trigger_w )
|
||||
{
|
||||
gameplan_state *state = (gameplan_state *)device->machine->driver_data;
|
||||
gameplan_state *driver_state = (gameplan_state *)device->machine->driver_data;
|
||||
|
||||
if (data == 0)
|
||||
if (state == 0)
|
||||
{
|
||||
switch (state->video_command)
|
||||
switch (driver_state->video_command)
|
||||
{
|
||||
/* draw pixel */
|
||||
case 0:
|
||||
/* auto-adjust X? */
|
||||
if (state->video_data & 0x10)
|
||||
if (driver_state->video_data & 0x10)
|
||||
{
|
||||
if (state->video_data & 0x40)
|
||||
state->video_x = state->video_x - 1;
|
||||
if (driver_state->video_data & 0x40)
|
||||
driver_state->video_x = driver_state->video_x - 1;
|
||||
else
|
||||
state->video_x = state->video_x + 1;
|
||||
driver_state->video_x = driver_state->video_x + 1;
|
||||
}
|
||||
|
||||
/* auto-adjust Y? */
|
||||
if (state->video_data & 0x20)
|
||||
if (driver_state->video_data & 0x20)
|
||||
{
|
||||
if (state->video_data & 0x80)
|
||||
state->video_y = state->video_y - 1;
|
||||
if (driver_state->video_data & 0x80)
|
||||
driver_state->video_y = driver_state->video_y - 1;
|
||||
else
|
||||
state->video_y = state->video_y + 1;
|
||||
driver_state->video_y = driver_state->video_y + 1;
|
||||
}
|
||||
|
||||
state->videoram[state->video_y * (HBSTART - HBEND) + state->video_x] = state->video_data & 0x0f;
|
||||
driver_state->videoram[driver_state->video_y * (HBSTART - HBEND) + driver_state->video_x] = driver_state->video_data & 0x0f;
|
||||
|
||||
break;
|
||||
|
||||
/* load X register */
|
||||
case 1:
|
||||
state->video_x = state->video_data;
|
||||
driver_state->video_x = driver_state->video_data;
|
||||
break;
|
||||
|
||||
/* load Y register */
|
||||
case 2:
|
||||
state->video_y = state->video_data;
|
||||
driver_state->video_y = driver_state->video_data;
|
||||
break;
|
||||
|
||||
/* clear screen */
|
||||
case 3:
|
||||
/* indicate that the we are busy */
|
||||
{
|
||||
via_ca1_w(state->via_0, 0, 1);
|
||||
via_ca1_w(driver_state->via_0, 1);
|
||||
}
|
||||
|
||||
memset(state->videoram, state->video_data & 0x0f, state->videoram_size);
|
||||
memset(driver_state->videoram, driver_state->video_data & 0x0f, driver_state->videoram_size);
|
||||
|
||||
/* set a timer for an arbitrarily short period.
|
||||
The real time it takes to clear to screen is not
|
||||
@ -236,31 +236,31 @@ static READ8_DEVICE_HANDLER( vblank_r )
|
||||
|
||||
const via6522_interface gameplan_via_0_interface =
|
||||
{
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, /*inputs : CA/B1,CA/B2 */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(gameplan_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_LINE(via_irq) /*irq */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(gameplan_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_LINE(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_LINE(via_irq) /*irq */
|
||||
};
|
||||
|
||||
|
||||
const via6522_interface leprechn_via_0_interface =
|
||||
{
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, /*inputs : CA/B1,CA/B2 */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(leprechn_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_LINE(via_irq) /*irq */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(leprechn_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_LINE(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_LINE(via_irq) /*irq */
|
||||
};
|
||||
|
||||
|
||||
const via6522_interface trvquest_via_0_interface =
|
||||
{
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_HANDLER(vblank_r), /*inputs : A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, DEVCB_NULL, /*inputs : CA/B1,CA/B2 */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(gameplan_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_HANDLER(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_NULL /*irq */
|
||||
DEVCB_HANDLER(video_data_w), DEVCB_HANDLER(gameplan_video_command_w), /*outputs: A/B */
|
||||
DEVCB_NULL, DEVCB_NULL, DEVCB_LINE(video_command_trigger_w), DEVCB_NULL, /*outputs: CA/B1,CA/B2 */
|
||||
DEVCB_NULL /*irq */
|
||||
};
|
||||
|
||||
|
||||
@ -269,7 +269,7 @@ static TIMER_CALLBACK( via_0_ca1_timer_callback )
|
||||
gameplan_state *state = (gameplan_state *)machine->driver_data;
|
||||
|
||||
/* !VBLANK is connected to CA1 */
|
||||
via_ca1_w(state->via_0, 0, (UINT8)param);
|
||||
via_ca1_w(state->via_0, param);
|
||||
|
||||
if (param)
|
||||
timer_adjust_oneshot(state->via_0_ca1_timer, video_screen_get_time_until_pos(machine->primary_screen, VBSTART, 0), 0);
|
||||
|
Loading…
Reference in New Issue
Block a user