mirror of
https://github.com/holub/mame
synced 2025-06-03 11:26:56 +03:00
6522 interface cleanups
This commit is contained in:
parent
b12547e1e1
commit
8917ad4f41
@ -26,13 +26,24 @@
|
|||||||
#include "deprecat.h"
|
#include "deprecat.h"
|
||||||
#include "6522via.h"
|
#include "6522via.h"
|
||||||
|
|
||||||
//#define TRACE_VIA
|
|
||||||
|
/***************************************************************************
|
||||||
|
PARAMETERS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#define TRACE_VIA 0
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
TYPE DEFINITIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
/******************* internal VIA data structure *******************/
|
/******************* internal VIA data structure *******************/
|
||||||
|
|
||||||
struct via6522
|
typedef struct _via6522_t via6522_t;
|
||||||
|
struct _via6522_t
|
||||||
{
|
{
|
||||||
const struct via6522_interface *intf;
|
const via6522_interface *intf;
|
||||||
|
|
||||||
UINT8 in_a;
|
UINT8 in_a;
|
||||||
UINT8 in_ca1;
|
UINT8 in_ca1;
|
||||||
@ -75,7 +86,9 @@ struct via6522
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/******************* convenince macros and defines *******************/
|
/***************************************************************************
|
||||||
|
MACROS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
/* Macros for PCR */
|
/* Macros for PCR */
|
||||||
#define CA1_LOW_TO_HIGH(c) (c & 0x01)
|
#define CA1_LOW_TO_HIGH(c) (c & 0x01)
|
||||||
@ -145,16 +158,64 @@ struct via6522
|
|||||||
|
|
||||||
/******************* static variables *******************/
|
/******************* static variables *******************/
|
||||||
|
|
||||||
static struct via6522 via[MAX_VIA];
|
static via6522_t via[MAX_VIA];
|
||||||
|
|
||||||
/******************* configuration *******************/
|
|
||||||
|
/***************************************************************************
|
||||||
|
PROTOTYPES
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
static TIMER_CALLBACK( via_shift_callback );
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
INLINE FUNCTIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
INLINE attotime v_cycles_to_time(via6522_t *v, int c)
|
||||||
|
{
|
||||||
|
return attotime_mul(ATTOTIME_IN_HZ(v->clock), c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INLINE UINT32 v_time_to_cycles(via6522_t *v, attotime t)
|
||||||
|
{
|
||||||
|
return attotime_to_double(attotime_mul(t, v->clock));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
INLINE UINT16 v_get_counter1_value(via6522_t *v)
|
||||||
|
{
|
||||||
|
UINT16 val;
|
||||||
|
|
||||||
|
if (v->t1_active) {
|
||||||
|
val = v_time_to_cycles(v, timer_timeleft(v->t1)) - IFR_DELAY;
|
||||||
|
} else {
|
||||||
|
val = 0xFFFF - v_time_to_cycles(v, attotime_sub(timer_get_time(Machine), v->time1));
|
||||||
|
}
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
IMPLEMENTATION
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_clock
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_clock(int which,int clock)
|
void via_set_clock(int which,int clock)
|
||||||
{
|
{
|
||||||
via[which].clock = clock;
|
via[which].clock = clock;
|
||||||
}
|
}
|
||||||
|
|
||||||
void via_config(int which, const struct via6522_interface *intf)
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_config
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
|
void via_config(int which, const via6522_interface *intf)
|
||||||
{
|
{
|
||||||
assert(which < MAX_VIA);
|
assert(which < MAX_VIA);
|
||||||
|
|
||||||
@ -169,17 +230,19 @@ void via_config(int which, const struct via6522_interface *intf)
|
|||||||
via_set_clock (which, cpu_get_clock(Machine->cpu[0]));
|
via_set_clock (which, cpu_get_clock(Machine->cpu[0]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* external interrupt check *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_int - external interrupt check
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
static void via_set_int (running_machine *machine, int which, int data)
|
static void via_set_int (running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
|
|
||||||
v->ifr |= data;
|
v->ifr |= data;
|
||||||
#ifdef TRACE_VIA
|
if (TRACE_VIA)
|
||||||
logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine), which, v->ifr);
|
logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine), which, v->ifr);
|
||||||
#endif
|
|
||||||
|
|
||||||
if (v->ier & v->ifr)
|
if (v->ier & v->ifr)
|
||||||
{
|
{
|
||||||
@ -191,15 +254,20 @@ logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_clear_int - external interrupt check
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
static void via_clear_int (running_machine *machine, int which, int data)
|
static void via_clear_int (running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
|
|
||||||
v->ifr = (v->ifr & ~data) & 0x7f;
|
v->ifr = (v->ifr & ~data) & 0x7f;
|
||||||
#ifdef TRACE_VIA
|
|
||||||
logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine), which, v->ifr);
|
if (TRACE_VIA)
|
||||||
#endif
|
logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine), which, v->ifr);
|
||||||
|
|
||||||
if (v->ifr & v->ier)
|
if (v->ifr & v->ier)
|
||||||
v->ifr |= INT_ANY;
|
v->ifr |= INT_ANY;
|
||||||
@ -213,39 +281,15 @@ logerror("%s:6522VIA chip %d: IFR = %02X\n", cpuexec_describe_context(machine),
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
INLINE attotime v_cycles_to_time(struct via6522 *v, int c)
|
/*-------------------------------------------------
|
||||||
{
|
via_shift
|
||||||
return attotime_mul(ATTOTIME_IN_HZ(v->clock), c);
|
-------------------------------------------------*/
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
INLINE UINT32 v_time_to_cycles(struct via6522 *v, attotime t)
|
|
||||||
{
|
|
||||||
return attotime_to_double(attotime_mul(t, v->clock));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
INLINE UINT16 v_get_counter1_value(struct via6522 *v) {
|
|
||||||
UINT16 val;
|
|
||||||
|
|
||||||
if (v->t1_active) {
|
|
||||||
val = v_time_to_cycles(v, timer_timeleft(v->t1)) - IFR_DELAY;
|
|
||||||
} else {
|
|
||||||
val = 0xFFFF - v_time_to_cycles(v, attotime_sub(timer_get_time(Machine), v->time1));
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/************************ shift register ************************/
|
|
||||||
|
|
||||||
static TIMER_CALLBACK( via_shift_callback );
|
|
||||||
|
|
||||||
static void via_shift(running_machine *machine, int which)
|
static void via_shift(running_machine *machine, int which)
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
if (SO_O2_CONTROL(v->acr))
|
if (SO_O2_CONTROL(v->acr))
|
||||||
{
|
{
|
||||||
@ -308,19 +352,27 @@ static void via_shift(running_machine *machine, int which)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
TIMER_CALLBACK( via_shift_callback )
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
static TIMER_CALLBACK( via_shift_callback )
|
static TIMER_CALLBACK( via_shift_callback )
|
||||||
{
|
{
|
||||||
via_shift(machine, param);
|
via_shift(machine, param);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* Timer timeouts *************************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
TIMER_CALLBACK( via_t1_timeout )
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
static TIMER_CALLBACK( via_t1_timeout )
|
static TIMER_CALLBACK( via_t1_timeout )
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
int which = param;
|
int which = param;
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
|
|
||||||
if (T1_CONTINUOUS (v->acr))
|
if (T1_CONTINUOUS (v->acr))
|
||||||
@ -350,10 +402,15 @@ static TIMER_CALLBACK( via_t1_timeout )
|
|||||||
via_set_int (machine, which, INT_T1);
|
via_set_int (machine, which, INT_T1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
TIMER_CALLBACK( via_t2_timeout )
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
static TIMER_CALLBACK( via_t2_timeout )
|
static TIMER_CALLBACK( via_t2_timeout )
|
||||||
{
|
{
|
||||||
int which = param;
|
int which = param;
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
v->t2_active = 0;
|
v->t2_active = 0;
|
||||||
v->time2 = timer_get_time(machine);
|
v->time2 = timer_get_time(machine);
|
||||||
@ -362,12 +419,15 @@ static TIMER_CALLBACK( via_t2_timeout )
|
|||||||
via_set_int (machine, which, INT_T2);
|
via_set_int (machine, which, INT_T2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* reset *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_reset
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_reset(void)
|
void via_reset(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
struct via6522 v;
|
via6522_t v;
|
||||||
|
|
||||||
memset(&v, 0, sizeof(v));
|
memset(&v, 0, sizeof(v));
|
||||||
|
|
||||||
@ -391,13 +451,16 @@ void via_reset(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* CPU interface for VIA read *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_read - CPU interface for VIA read
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
int via_read(running_machine *machine, int which, int offset)
|
int via_read(running_machine *machine, int which, int offset)
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
int val = 0;
|
int val = 0;
|
||||||
|
|
||||||
offset &= 0xf;
|
offset &= 0xf;
|
||||||
@ -551,13 +614,15 @@ int via_read(running_machine *machine, int which, int offset)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/******************* CPU interface for VIA write *******************/
|
/*-------------------------------------------------
|
||||||
|
via_write - CPU interface for VIA write
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_write(running_machine *machine, int which, int offset, int data)
|
void via_write(running_machine *machine, int which, int offset, int data)
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
offset &=0x0f;
|
offset &=0x0f;
|
||||||
|
|
||||||
@ -765,9 +830,9 @@ void via_write(running_machine *machine, int which, int offset, int data)
|
|||||||
|
|
||||||
case VIA_PCR:
|
case VIA_PCR:
|
||||||
v->pcr = data;
|
v->pcr = data;
|
||||||
#ifdef TRACE_VIA
|
|
||||||
logerror("%s:6522VIA chip %d: PCR = %02X\n", cpuexec_describe_context(machine), which, data);
|
if (TRACE_VIA)
|
||||||
#endif
|
logerror("%s:6522VIA chip %d: PCR = %02X\n", cpuexec_describe_context(machine), which, data);
|
||||||
|
|
||||||
if (CA2_FIX_OUTPUT(data) && CA2_OUTPUT_LEVEL(data) ^ v->out_ca2)
|
if (CA2_FIX_OUTPUT(data) && CA2_OUTPUT_LEVEL(data) ^ v->out_ca2)
|
||||||
{
|
{
|
||||||
@ -855,23 +920,31 @@ logerror("%s:6522VIA chip %d: PCR = %02X\n", cpuexec_describe_context(machine),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* interface setting VIA port A input *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_input_a - interface setting VIA port
|
||||||
|
A input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_a(int which, int data)
|
void via_set_input_a(int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* set the input, what could be easier? */
|
/* set the input, what could be easier? */
|
||||||
v->in_a = data;
|
v->in_a = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* interface setting VIA port CA1 input *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_input_ca1 - interface setting VIA port
|
||||||
|
CA1 input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_ca1(running_machine *machine, int which, int data)
|
void via_set_input_ca1(running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* limit the data to 0 or 1 */
|
/* limit the data to 0 or 1 */
|
||||||
data = data ? 1 : 0;
|
data = data ? 1 : 0;
|
||||||
@ -879,9 +952,9 @@ void via_set_input_ca1(running_machine *machine, int which, int data)
|
|||||||
/* handle the active transition */
|
/* handle the active transition */
|
||||||
if (data != v->in_ca1)
|
if (data != v->in_ca1)
|
||||||
{
|
{
|
||||||
#ifdef TRACE_VIA
|
if (TRACE_VIA)
|
||||||
logerror("%s:6522VIA chip %d: CA1 = %02X\n", cpuexec_describe_context(machine), which, data);
|
logerror("%s:6522VIA chip %d: CA1 = %02X\n", cpuexec_describe_context(machine), which, data);
|
||||||
#endif
|
|
||||||
if ((CA1_LOW_TO_HIGH(v->pcr) && data) || (CA1_HIGH_TO_LOW(v->pcr) && !data))
|
if ((CA1_LOW_TO_HIGH(v->pcr) && data) || (CA1_HIGH_TO_LOW(v->pcr) && !data))
|
||||||
{
|
{
|
||||||
if (PA_LATCH_ENABLE(v->acr))
|
if (PA_LATCH_ENABLE(v->acr))
|
||||||
@ -916,11 +989,15 @@ logerror("%s:6522VIA chip %d: CA1 = %02X\n", cpuexec_describe_context(machine),
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* interface setting VIA port CA2 input *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_input_ca2 - interface setting VIA port
|
||||||
|
CA2 input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_ca2(running_machine *machine, int which, int data)
|
void via_set_input_ca2(running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* limit the data to 0 or 1 */
|
/* limit the data to 0 or 1 */
|
||||||
data = data ? 1 : 0;
|
data = data ? 1 : 0;
|
||||||
@ -945,25 +1022,31 @@ void via_set_input_ca2(running_machine *machine, int which, int data)
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* interface setting VIA port B input *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_input_b - interface setting VIA port
|
||||||
|
B input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_b(int which, int data)
|
void via_set_input_b(int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* set the input, what could be easier? */
|
/* set the input, what could be easier? */
|
||||||
v->in_b = data;
|
v->in_b = data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*-------------------------------------------------
|
||||||
/******************* interface setting VIA port CB1 input *******************/
|
via_set_input_cb1 - interface setting VIA port
|
||||||
|
CB1 input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_cb1(running_machine *machine, int which, int data)
|
void via_set_input_cb1(running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
/* temporary hack until this is converted to a device */
|
/* temporary hack until this is converted to a device */
|
||||||
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* limit the data to 0 or 1 */
|
/* limit the data to 0 or 1 */
|
||||||
data = data ? 1 : 0;
|
data = data ? 1 : 0;
|
||||||
@ -1006,11 +1089,15 @@ void via_set_input_cb1(running_machine *machine, int which, int data)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************* interface setting VIA port CB2 input *******************/
|
|
||||||
|
/*-------------------------------------------------
|
||||||
|
via_set_input_cb2 - interface setting VIA port
|
||||||
|
CB2 input
|
||||||
|
-------------------------------------------------*/
|
||||||
|
|
||||||
void via_set_input_cb2(running_machine *machine, int which, int data)
|
void via_set_input_cb2(running_machine *machine, int which, int data)
|
||||||
{
|
{
|
||||||
struct via6522 *v = via + which;
|
via6522_t *v = via + which;
|
||||||
|
|
||||||
/* limit the data to 0 or 1 */
|
/* limit the data to 0 or 1 */
|
||||||
data = data ? 1 : 0;
|
data = data ? 1 : 0;
|
||||||
@ -1160,6 +1247,3 @@ READ8_HANDLER( via_4_cb2_r) { return via[4].in_cb2; }
|
|||||||
READ8_HANDLER( via_5_cb2_r) { return via[5].in_cb2; }
|
READ8_HANDLER( via_5_cb2_r) { return via[5].in_cb2; }
|
||||||
READ8_HANDLER( via_6_cb2_r) { return via[6].in_cb2; }
|
READ8_HANDLER( via_6_cb2_r) { return via[6].in_cb2; }
|
||||||
READ8_HANDLER( via_7_cb2_r) { return via[7].in_cb2; }
|
READ8_HANDLER( via_7_cb2_r) { return via[7].in_cb2; }
|
||||||
|
|
||||||
|
|
||||||
#undef TRACE_VIA
|
|
||||||
|
@ -11,10 +11,14 @@
|
|||||||
|
|
||||||
**********************************************************************/
|
**********************************************************************/
|
||||||
|
|
||||||
#ifndef VIA_6522
|
#ifndef __6522VIA_H__
|
||||||
#define VIA_6522
|
#define __6522VIA_H__
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
MACROS / CONSTANTS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
#define MAX_VIA 8
|
#define MAX_VIA 8
|
||||||
|
|
||||||
#define VIA_PB 0
|
#define VIA_PB 0
|
||||||
@ -34,7 +38,13 @@
|
|||||||
#define VIA_IER 14
|
#define VIA_IER 14
|
||||||
#define VIA_PANH 15
|
#define VIA_PANH 15
|
||||||
|
|
||||||
struct via6522_interface
|
|
||||||
|
/***************************************************************************
|
||||||
|
TYPE DEFINITIONS
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
typedef struct _via6522_interface via6522_interface;
|
||||||
|
struct _via6522_interface
|
||||||
{
|
{
|
||||||
read8_space_func in_a_func;
|
read8_space_func in_a_func;
|
||||||
read8_space_func in_b_func;
|
read8_space_func in_b_func;
|
||||||
@ -51,8 +61,13 @@ struct via6522_interface
|
|||||||
void (*irq_func)(running_machine *machine, int state);
|
void (*irq_func)(running_machine *machine, int state);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/***************************************************************************
|
||||||
|
PROTOTYPES
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
void via_set_clock(int which,int clck);
|
void via_set_clock(int which,int clck);
|
||||||
void via_config(int which, const struct via6522_interface *intf);
|
void via_config(int which, const via6522_interface *intf);
|
||||||
void via_reset(void);
|
void via_reset(void);
|
||||||
int via_read(running_machine *machine, int which, int offset);
|
int via_read(running_machine *machine, int which, int offset);
|
||||||
void via_write(running_machine *machine, int which, int offset, int data);
|
void via_write(running_machine *machine, int which, int offset, int data);
|
||||||
@ -191,5 +206,4 @@ READ8_HANDLER( via_5_cb2_r );
|
|||||||
READ8_HANDLER( via_6_cb2_r );
|
READ8_HANDLER( via_6_cb2_r );
|
||||||
READ8_HANDLER( via_7_cb2_r );
|
READ8_HANDLER( via_7_cb2_r );
|
||||||
|
|
||||||
#endif
|
#endif /* __6522VIA_H__ */
|
||||||
|
|
||||||
|
@ -373,7 +373,7 @@ static READ8_HANDLER( via_pb_r )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_interface =
|
static const via6522_interface via_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ via_pa_r, via_pb_r,
|
/*inputs : A/B */ via_pa_r, via_pb_r,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
||||||
|
@ -471,7 +471,7 @@ static const ay8910_interface ay8910_config =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_interface =
|
static const via6522_interface via_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ 0, via_b_in,
|
/*inputs : A/B */ 0, via_b_in,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
||||||
|
@ -108,7 +108,7 @@ static WRITE8_HANDLER( coin_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_1_interface =
|
static const via6522_interface via_1_interface =
|
||||||
{
|
{
|
||||||
io_port_r, 0, /*inputs : A/B */
|
io_port_r, 0, /*inputs : A/B */
|
||||||
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
||||||
@ -151,7 +151,7 @@ static WRITE8_HANDLER( audio_trigger_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_2_interface =
|
static const via6522_interface via_2_interface =
|
||||||
{
|
{
|
||||||
0, soundlatch_r, /*inputs : A/B */
|
0, soundlatch_r, /*inputs : A/B */
|
||||||
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
||||||
|
@ -719,7 +719,7 @@ static void via_irq(running_machine *machine, int state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_interface =
|
static const via6522_interface via_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ 0, 0,
|
/*inputs : A/B */ 0, 0,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
||||||
@ -729,7 +729,7 @@ static const struct via6522_interface via_interface =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface drivedge_via_interface =
|
static const via6522_interface drivedge_via_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ 0, 0,
|
/*inputs : A/B */ 0, 0,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
||||||
|
@ -563,7 +563,7 @@ static const pia6821_interface pia_interface =
|
|||||||
|
|
||||||
static void via_irq(running_machine *machine, int state);
|
static void via_irq(running_machine *machine, int state);
|
||||||
|
|
||||||
static const struct via6522_interface via_interface =
|
static const via6522_interface via_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ 0, 0,
|
/*inputs : A/B */ 0, 0,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
|
||||||
|
@ -163,7 +163,7 @@ static void via_irq(running_machine *machine, int state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface via_1_interface =
|
static const via6522_interface via_1_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ input_port_0_r, input_port_1_r,
|
/*inputs : A/B */ input_port_0_r, input_port_1_r,
|
||||||
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
|
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
|
||||||
@ -172,7 +172,7 @@ static const struct via6522_interface via_1_interface =
|
|||||||
/*irq */ NULL
|
/*irq */ NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct via6522_interface via_2_interface =
|
static const via6522_interface via_2_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ input_port_2_r, input_port_3_r,
|
/*inputs : A/B */ input_port_2_r, input_port_3_r,
|
||||||
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
|
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
|
||||||
|
@ -18,7 +18,7 @@ static WRITE8_HANDLER( b_via_1_pa_w );
|
|||||||
static WRITE8_HANDLER( b_via_1_pb_w );
|
static WRITE8_HANDLER( b_via_1_pb_w );
|
||||||
static void b_via_1_irq (running_machine *machine, int level);
|
static void b_via_1_irq (running_machine *machine, int level);
|
||||||
|
|
||||||
static const struct via6522_interface b_via_0_interface =
|
static const via6522_interface b_via_0_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ 0, b_via_0_pb_r,
|
/*inputs : A/B */ 0, b_via_0_pb_r,
|
||||||
/*inputs : CA/B1,CA/B2 */ 0, via_1_ca2_r, b_via_0_ca2_r, via_1_ca1_r,
|
/*inputs : CA/B1,CA/B2 */ 0, via_1_ca2_r, b_via_0_ca2_r, via_1_ca1_r,
|
||||||
@ -27,7 +27,7 @@ static const struct via6522_interface b_via_0_interface =
|
|||||||
/*irq */ b_via_0_irq
|
/*irq */ b_via_0_irq
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct via6522_interface b_via_1_interface =
|
static const via6522_interface b_via_1_interface =
|
||||||
{
|
{
|
||||||
/*inputs : A/B */ b_via_1_pa_r, b_via_1_pb_r,
|
/*inputs : A/B */ b_via_1_pa_r, b_via_1_pb_r,
|
||||||
/*inputs : CA/B1,CA/B2 */ via_0_cb2_r, 0, via_0_cb1_r, 0,
|
/*inputs : CA/B1,CA/B2 */ via_0_cb2_r, 0, via_0_cb1_r, 0,
|
||||||
|
@ -231,7 +231,7 @@ static READ8_HANDLER( vblank_r )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface gameplan_via_0_interface =
|
static const via6522_interface gameplan_via_0_interface =
|
||||||
{
|
{
|
||||||
0, vblank_r, /*inputs : A/B */
|
0, vblank_r, /*inputs : A/B */
|
||||||
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
||||||
@ -241,7 +241,7 @@ static const struct via6522_interface gameplan_via_0_interface =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface leprechn_via_0_interface =
|
static const via6522_interface leprechn_via_0_interface =
|
||||||
{
|
{
|
||||||
0, vblank_r, /*inputs : A/B */
|
0, vblank_r, /*inputs : A/B */
|
||||||
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
||||||
@ -251,7 +251,7 @@ static const struct via6522_interface leprechn_via_0_interface =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static const struct via6522_interface trvquest_via_0_interface =
|
static const via6522_interface trvquest_via_0_interface =
|
||||||
{
|
{
|
||||||
0, vblank_r, /*inputs : A/B */
|
0, vblank_r, /*inputs : A/B */
|
||||||
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
|
||||||
|
Loading…
Reference in New Issue
Block a user