Changed the 6522 VIA implementation to be a device

This commit is contained in:
Nathan Woods 2008-12-14 01:08:14 +00:00
parent 5b13d131ea
commit f2c32190ea
14 changed files with 617 additions and 668 deletions

File diff suppressed because it is too large Load Diff

View File

@ -2,7 +2,7 @@
Rockwell 6522 VIA interface and emulation
This function emulates all the functionality of up to 8 6522
This function emulates all the functionality of 6522
versatile interface adapters.
This is based on the M6821 emulation in MAME.
@ -19,7 +19,15 @@
MACROS / CONSTANTS
***************************************************************************/
#define MAX_VIA 8
#define VIA6522 DEVICE_GET_INFO_NAME(via6522)
#define MDRV_VIA6522_ADD(_tag, _clock, _intrf) \
MDRV_DEVICE_ADD(_tag, VIA6522) \
MDRV_DEVICE_CONFIG_DATA32(via6522_inline_config, clck, _clock) \
MDRV_DEVICE_CONFIG(_intrf)
#define MDRV_VIA6522_REMOVE(_tag) \
MDRV_DEVICE_REMOVE(_tag, VIA6522)
#define VIA_PB 0
#define VIA_PA 1
@ -46,19 +54,25 @@
typedef struct _via6522_interface via6522_interface;
struct _via6522_interface
{
read8_space_func in_a_func;
read8_space_func in_b_func;
read8_space_func in_ca1_func;
read8_space_func in_cb1_func;
read8_space_func in_ca2_func;
read8_space_func in_cb2_func;
write8_space_func out_a_func;
write8_space_func out_b_func;
write8_space_func out_ca1_func;
write8_space_func out_cb1_func;
write8_space_func out_ca2_func;
write8_space_func out_cb2_func;
void (*irq_func)(running_machine *machine, int state);
read8_device_func in_a_func;
read8_device_func in_b_func;
read8_device_func in_ca1_func;
read8_device_func in_cb1_func;
read8_device_func in_ca2_func;
read8_device_func in_cb2_func;
write8_device_func out_a_func;
write8_device_func out_b_func;
write8_device_func out_ca1_func;
write8_device_func out_cb1_func;
write8_device_func out_ca2_func;
write8_device_func out_cb2_func;
void (*irq_func)(const device_config *device, int state);
};
typedef struct _via6522_inline_config via6522_inline_config;
struct _via6522_inline_config
{
int clck;
};
@ -66,144 +80,27 @@ struct _via6522_interface
PROTOTYPES
***************************************************************************/
void via_set_clock(int which,int clck);
void via_config(int which, const via6522_interface *intf);
void via_reset(void);
int via_read(running_machine *machine, int which, int offset);
void via_write(running_machine *machine, int which, int offset, int data);
void via_set_input_a(int which, int data);
void via_set_input_ca1(running_machine *machine, int which, int data);
void via_set_input_ca2(running_machine *machine, int which, int data);
void via_set_input_b(int which, int data);
void via_set_input_cb1(running_machine *machine, int which, int data);
void via_set_input_cb2(running_machine *machine, int which, int data);
DEVICE_GET_INFO(via6522);
/******************* Standard 8-bit CPU interfaces, D0-D7 *******************/
READ8_DEVICE_HANDLER(via_r);
WRITE8_DEVICE_HANDLER(via_w);
READ8_HANDLER( via_0_r );
READ8_HANDLER( via_1_r );
READ8_HANDLER( via_2_r );
READ8_HANDLER( via_3_r );
READ8_HANDLER( via_4_r );
READ8_HANDLER( via_5_r );
READ8_HANDLER( via_6_r );
READ8_HANDLER( via_7_r );
READ8_DEVICE_HANDLER(via_porta_r);
WRITE8_DEVICE_HANDLER(via_porta_w);
WRITE8_HANDLER( via_0_w );
WRITE8_HANDLER( via_1_w );
WRITE8_HANDLER( via_2_w );
WRITE8_HANDLER( via_3_w );
WRITE8_HANDLER( via_4_w );
WRITE8_HANDLER( via_5_w );
WRITE8_HANDLER( via_6_w );
WRITE8_HANDLER( via_7_w );
READ8_DEVICE_HANDLER(via_portb_r);
WRITE8_DEVICE_HANDLER(via_portb_w);
/******************* 8-bit A/B port interfaces *******************/
READ8_DEVICE_HANDLER(via_ca1_r);
WRITE8_DEVICE_HANDLER(via_ca1_w);
WRITE8_HANDLER( via_0_porta_w );
WRITE8_HANDLER( via_1_porta_w );
WRITE8_HANDLER( via_2_porta_w );
WRITE8_HANDLER( via_3_porta_w );
WRITE8_HANDLER( via_4_porta_w );
WRITE8_HANDLER( via_5_porta_w );
WRITE8_HANDLER( via_6_porta_w );
WRITE8_HANDLER( via_7_porta_w );
READ8_DEVICE_HANDLER(via_ca2_r);
WRITE8_DEVICE_HANDLER(via_ca2_w);
WRITE8_HANDLER( via_0_portb_w );
WRITE8_HANDLER( via_1_portb_w );
WRITE8_HANDLER( via_2_portb_w );
WRITE8_HANDLER( via_3_portb_w );
WRITE8_HANDLER( via_4_portb_w );
WRITE8_HANDLER( via_5_portb_w );
WRITE8_HANDLER( via_6_portb_w );
WRITE8_HANDLER( via_7_portb_w );
READ8_DEVICE_HANDLER(via_cb1_r);
WRITE8_DEVICE_HANDLER(via_cb1_w);
READ8_HANDLER( via_0_porta_r );
READ8_HANDLER( via_1_porta_r );
READ8_HANDLER( via_2_porta_r );
READ8_HANDLER( via_3_porta_r );
READ8_HANDLER( via_4_porta_r );
READ8_HANDLER( via_5_porta_r );
READ8_HANDLER( via_6_porta_r );
READ8_HANDLER( via_7_porta_r );
READ8_HANDLER( via_0_portb_r );
READ8_HANDLER( via_1_portb_r );
READ8_HANDLER( via_2_portb_r );
READ8_HANDLER( via_3_portb_r );
READ8_HANDLER( via_4_portb_r );
READ8_HANDLER( via_5_portb_r );
READ8_HANDLER( via_6_portb_r );
READ8_HANDLER( via_7_portb_r );
/******************* 1-bit CA1/CA2/CB1/CB2 port interfaces *******************/
WRITE8_HANDLER( via_0_ca1_w );
WRITE8_HANDLER( via_1_ca1_w );
WRITE8_HANDLER( via_2_ca1_w );
WRITE8_HANDLER( via_3_ca1_w );
WRITE8_HANDLER( via_4_ca1_w );
WRITE8_HANDLER( via_5_ca1_w );
WRITE8_HANDLER( via_6_ca1_w );
WRITE8_HANDLER( via_7_ca1_w );
WRITE8_HANDLER( via_0_ca2_w );
WRITE8_HANDLER( via_1_ca2_w );
WRITE8_HANDLER( via_2_ca2_w );
WRITE8_HANDLER( via_3_ca2_w );
WRITE8_HANDLER( via_4_ca2_w );
WRITE8_HANDLER( via_5_ca2_w );
WRITE8_HANDLER( via_6_ca2_w );
WRITE8_HANDLER( via_7_ca2_w );
WRITE8_HANDLER( via_0_cb1_w );
WRITE8_HANDLER( via_1_cb1_w );
WRITE8_HANDLER( via_2_cb1_w );
WRITE8_HANDLER( via_3_cb1_w );
WRITE8_HANDLER( via_4_cb1_w );
WRITE8_HANDLER( via_5_cb1_w );
WRITE8_HANDLER( via_6_cb1_w );
WRITE8_HANDLER( via_7_cb1_w );
WRITE8_HANDLER( via_0_cb2_w );
WRITE8_HANDLER( via_1_cb2_w );
WRITE8_HANDLER( via_2_cb2_w );
WRITE8_HANDLER( via_3_cb2_w );
WRITE8_HANDLER( via_4_cb2_w );
WRITE8_HANDLER( via_5_cb2_w );
WRITE8_HANDLER( via_6_cb2_w );
WRITE8_HANDLER( via_7_cb2_w );
READ8_HANDLER( via_0_ca1_r );
READ8_HANDLER( via_1_ca1_r );
READ8_HANDLER( via_2_ca1_r );
READ8_HANDLER( via_3_ca1_r );
READ8_HANDLER( via_4_ca1_r );
READ8_HANDLER( via_5_ca1_r );
READ8_HANDLER( via_6_ca1_r );
READ8_HANDLER( via_7_ca1_r );
READ8_HANDLER( via_0_ca2_r );
READ8_HANDLER( via_1_ca2_r );
READ8_HANDLER( via_2_ca2_r );
READ8_HANDLER( via_3_ca2_r );
READ8_HANDLER( via_4_ca2_r );
READ8_HANDLER( via_5_ca2_r );
READ8_HANDLER( via_6_ca2_r );
READ8_HANDLER( via_7_ca2_r );
READ8_HANDLER( via_0_cb1_r );
READ8_HANDLER( via_1_cb1_r );
READ8_HANDLER( via_2_cb1_r );
READ8_HANDLER( via_3_cb1_r );
READ8_HANDLER( via_4_cb1_r );
READ8_HANDLER( via_5_cb1_r );
READ8_HANDLER( via_6_cb1_r );
READ8_HANDLER( via_7_cb1_r );
READ8_HANDLER( via_0_cb2_r );
READ8_HANDLER( via_1_cb2_r );
READ8_HANDLER( via_2_cb2_r );
READ8_HANDLER( via_3_cb2_r );
READ8_HANDLER( via_4_cb2_r );
READ8_HANDLER( via_5_cb2_r );
READ8_HANDLER( via_6_cb2_r );
READ8_HANDLER( via_7_cb2_r );
READ8_DEVICE_HANDLER(via_cb2_r);
WRITE8_DEVICE_HANDLER(via_cb2_w);
#endif /* __6522VIA_H__ */

View File

@ -336,20 +336,21 @@ static READ8_HANDLER( switch_6502_r )
* D5 = LED (out)
*/
static WRITE8_HANDLER( via_pa_w )
static WRITE8_DEVICE_HANDLER( via_pa_w )
{
tms5220_out_data = data;
}
static READ8_HANDLER( via_pa_r )
static READ8_DEVICE_HANDLER( via_pa_r )
{
return tms5220_in_data;
}
static WRITE8_HANDLER( via_pb_w )
static WRITE8_DEVICE_HANDLER( via_pb_w )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
UINT8 old = tms5220_ctl;
tms5220_ctl = data;
@ -367,7 +368,7 @@ static WRITE8_HANDLER( via_pb_w )
}
static READ8_HANDLER( via_pb_r )
static READ8_DEVICE_HANDLER( via_pb_r )
{
return (!tms5220_ready_r() << 2) | (!tms5220_int_r() << 3);
}
@ -439,7 +440,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM
AM_RANGE(0x1000, 0x100f) AM_READWRITE(via_0_r, via_0_w)
AM_RANGE(0x1000, 0x100f) AM_DEVREADWRITE(VIA6522, "via6522_0", via_r, via_w)
AM_RANGE(0x1800, 0x1800) AM_WRITE(ym2151_register_port_0_w)
AM_RANGE(0x1800, 0x1801) AM_READWRITE(ym2151_status_port_0_r, ym2151_data_port_0_w)
AM_RANGE(0x1810, 0x1810) AM_READWRITE(atarigen_6502_sound_r, atarigen_6502_sound_w)
@ -738,6 +739,9 @@ static MACHINE_DRIVER_START( atarisy1 )
MDRV_SOUND_ADD("tms", TMS5220, ATARI_CLOCK_14MHz/2/11)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 1.0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 1.0)
/* via */
MDRV_VIA6522_ADD("via6522_0", 0, via_interface)
MACHINE_DRIVER_END
@ -2141,8 +2145,6 @@ ROM_END
static DRIVER_INIT( marble )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 103);
@ -2153,8 +2155,6 @@ static DRIVER_INIT( marble )
static DRIVER_INIT( peterpak )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 107);
@ -2165,8 +2165,6 @@ static DRIVER_INIT( peterpak )
static DRIVER_INIT( indytemp )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 105);
@ -2177,8 +2175,6 @@ static DRIVER_INIT( indytemp )
static DRIVER_INIT( roadrunn )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 108);
@ -2189,8 +2185,6 @@ static DRIVER_INIT( roadrunn )
static DRIVER_INIT( roadb109 )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 109);
@ -2201,8 +2195,6 @@ static DRIVER_INIT( roadb109 )
static DRIVER_INIT( roadb110 )
{
via_config(0, &via_interface);
atarigen_eeprom_default = NULL;
atarigen_slapstic_init(machine, 0, 0x080000, 0, 110);

View File

@ -23,7 +23,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x07ff) AM_RAM
// AM_RANGE(0x1000, 0x10ff) AM_READWRITE(beezer_6840_r, beezer_6840_w)
AM_RANGE(0x1800, 0x18ff) AM_READWRITE(via_1_r, via_1_w)
AM_RANGE(0x1800, 0x18ff) AM_DEVREADWRITE(VIA6522, "via6522_1", via_r, via_w)
// AM_RANGE(0x8000, 0x9fff) AM_WRITE(beezer_dac_w)
AM_RANGE(0xe000, 0xffff) AM_ROM
ADDRESS_MAP_END
@ -98,6 +98,10 @@ static MACHINE_DRIVER_START( beezer )
MDRV_SOUND_ADD("dac", DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* via */
MDRV_VIA6522_ADD("via6522_0", 0, b_via_0_interface)
MDRV_VIA6522_ADD("via6522_1", 0, b_via_1_interface)
MACHINE_DRIVER_END
/***************************************************************************

View File

@ -213,39 +213,41 @@ static WRITE16_HANDLER( scroll_w )
}
static READ16_HANDLER(via_r)
static READ16_HANDLER(bmcbowl_via_r)
{
return via_0_r(space,offset);
const device_config *via_0 = device_list_find_by_tag(space->machine->config->devicelist, VIA6522, "via6522_0");
return via_r(via_0, offset);
}
static WRITE16_HANDLER(via_w)
static WRITE16_HANDLER(bmcbowl_via_w)
{
via_0_w(space,offset,data);
const device_config *via_0 = device_list_find_by_tag(space->machine->config->devicelist, VIA6522, "via6522_0");
via_w(via_0, offset, data);
}
static READ8_HANDLER(via_b_in)
static READ8_DEVICE_HANDLER(via_b_in)
{
return input_port_read(space->machine, "IN3");
return input_port_read(device->machine, "IN3");
}
static WRITE8_HANDLER(via_a_out)
static WRITE8_DEVICE_HANDLER(via_a_out)
{
// related to video hw ? BG scroll ?
}
static WRITE8_HANDLER(via_b_out)
static WRITE8_DEVICE_HANDLER(via_b_out)
{
//used
}
static WRITE8_HANDLER(via_ca2_out)
static WRITE8_DEVICE_HANDLER(via_ca2_out)
{
//used
}
static void via_irq(running_machine *machine, int state)
static void via_irq(const device_config *device, int state)
{
//used
}
@ -333,7 +335,7 @@ static ADDRESS_MAP_START( bmcbowl_mem, ADDRESS_SPACE_PROGRAM, 16 )
AM_RANGE(0x091000, 0x091001) AM_WRITE(SMH_NOP)
AM_RANGE(0x091800, 0x091801) AM_WRITE(scroll_w)
AM_RANGE(0x092000, 0x09201f) AM_READWRITE(via_r,via_w)
AM_RANGE(0x092000, 0x09201f) AM_READWRITE(bmcbowl_via_r, bmcbowl_via_w)
AM_RANGE(0x093000, 0x093003) AM_WRITE(SMH_NOP) // related to music
AM_RANGE(0x092800, 0x092801) AM_WRITE(ay8910_write_port_0_msb_w )
@ -482,7 +484,6 @@ static const via6522_interface via_interface =
static MACHINE_RESET( bmcbowl )
{
via_reset();
}
static INTERRUPT_GEN( bmc_interrupt )
@ -525,6 +526,9 @@ static MACHINE_DRIVER_START( bmcbowl )
MDRV_SOUND_CONFIG(okim6295_interface_pin7high) // clock frequency & pin 7 not verified
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "left", 0.50)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "right", 0.50)
/* via */
MDRV_VIA6522_ADD("via6522_0", 1000000, via_interface)
MACHINE_DRIVER_END
ROM_START( bmcbowl )
@ -547,8 +551,6 @@ ROM_END
static DRIVER_INIT(bmcbowl)
{
via_config(0, &via_interface);
via_set_clock(0, 1000000);//1 MHz ?
colorram=auto_malloc(768);
}

View File

@ -77,9 +77,9 @@ TODO:
*
*************************************/
static WRITE8_HANDLER( io_select_w )
static WRITE8_DEVICE_HANDLER( io_select_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
switch (data)
{
@ -93,16 +93,16 @@ static WRITE8_HANDLER( io_select_w )
}
static READ8_HANDLER( io_port_r )
static READ8_DEVICE_HANDLER( io_port_r )
{
static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3", "DSW0", "DSW1" };
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
return input_port_read(space->machine, portnames[state->current_port]);
return input_port_read(device->machine, portnames[state->current_port]);
}
static WRITE8_HANDLER( coin_w )
static WRITE8_DEVICE_HANDLER( coin_w )
{
coin_counter_w(0, ~data & 1);
}
@ -125,35 +125,42 @@ static const via6522_interface via_1_interface =
*
*************************************/
static WRITE8_HANDLER( audio_reset_w )
static WRITE8_DEVICE_HANDLER( audio_reset_w )
{
gameplan_state *state = space->machine->driver_data;
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
gameplan_state *state = device->machine->driver_data;
cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_RESET, data ? CLEAR_LINE : ASSERT_LINE);
if (data == 0)
{
device_reset(state->riot);
cpuexec_boost_interleave(space->machine, attotime_zero, ATTOTIME_IN_USEC(10));
cpuexec_boost_interleave(device->machine, attotime_zero, ATTOTIME_IN_USEC(10));
}
}
static WRITE8_HANDLER( audio_cmd_w )
static WRITE8_DEVICE_HANDLER( audio_cmd_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
riot6532_porta_in_set(state->riot, data, 0x7f);
}
static WRITE8_HANDLER( audio_trigger_w )
static WRITE8_DEVICE_HANDLER( audio_trigger_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
riot6532_porta_in_set(state->riot, data << 7, 0x80);
}
static READ8_DEVICE_HANDLER( via_soundlatch_r )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
return soundlatch_r(space, offset);
}
static const via6522_interface via_2_interface =
{
0, soundlatch_r, /*inputs : A/B */
0, via_soundlatch_r, /*inputs : A/B */
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
audio_cmd_w, 0, /*outputs: A/B */
0, 0, audio_trigger_w, audio_reset_w, /*outputs: CA/B1,CA/B2 */
@ -179,7 +186,6 @@ static void r6532_irq(const device_config *device, int state)
static void r6532_soundlatch_w(const device_config *device, UINT8 newdata, UINT8 olddata)
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
soundlatch_w(space, 0, newdata);
}
@ -207,9 +213,6 @@ static MACHINE_START( gameplan )
state->riot = device_list_find_by_tag(machine->config->devicelist, RIOT6532, "riot");
via_config(1, &via_1_interface);
via_config(2, &via_2_interface);
/* register for save states */
state_save_register_global(machine, state->current_port);
}
@ -224,7 +227,6 @@ static MACHINE_START( gameplan )
static MACHINE_RESET( gameplan )
{
via_reset();
}
@ -237,9 +239,9 @@ static MACHINE_RESET( gameplan )
static ADDRESS_MAP_START( gameplan_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_MIRROR(0x1c00) AM_RAM
AM_RANGE(0x2000, 0x200f) AM_MIRROR(0x07f0) AM_READWRITE(via_0_r, via_0_w) /* VIA 1 */
AM_RANGE(0x2800, 0x280f) AM_MIRROR(0x07f0) AM_READWRITE(via_1_r, via_1_w) /* VIA 2 */
AM_RANGE(0x3000, 0x300f) AM_MIRROR(0x07f0) AM_READWRITE(via_2_r, via_2_w) /* VIA 3 */
AM_RANGE(0x2000, 0x200f) AM_MIRROR(0x07f0) AM_DEVREADWRITE(VIA6522, "via6522_0", via_r, via_w) /* VIA 1 */
AM_RANGE(0x2800, 0x280f) AM_MIRROR(0x07f0) AM_DEVREADWRITE(VIA6522, "via6522_1", via_r, via_w) /* VIA 2 */
AM_RANGE(0x3000, 0x300f) AM_MIRROR(0x07f0) AM_DEVREADWRITE(VIA6522, "via6522_2", via_r, via_w) /* VIA 3 */
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@ -1192,6 +1194,11 @@ static MACHINE_DRIVER_START( gameplan )
MDRV_SOUND_ADD("ay", AY8910, GAMEPLAN_AY8910_CLOCK)
MDRV_SOUND_CONFIG(ay8910_config)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.33)
/* via */
MDRV_VIA6522_ADD("via6522_0", 0, gameplan_via_0_interface)
MDRV_VIA6522_ADD("via6522_1", 0, via_1_interface)
MDRV_VIA6522_ADD("via6522_2", 0, via_2_interface)
MACHINE_DRIVER_END
@ -1205,6 +1212,10 @@ static MACHINE_DRIVER_START( leprechn )
/* video hardware */
MDRV_IMPORT_FROM(leprechn_video)
/* via */
MDRV_VIA6522_REMOVE("via6522_0")
MDRV_VIA6522_ADD("via6522_0", 0, leprechn_via_0_interface)
MACHINE_DRIVER_END

View File

@ -412,9 +412,6 @@ static MACHINE_RESET( itech32 )
sound_return = 0;
sound_int_state = 0;
/* reset the VIA chip (if used) */
via_reset();
/* reset the ticket dispenser */
ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_HIGH);
}
@ -667,8 +664,9 @@ static READ8_HANDLER( sound_data_buffer_r )
*
*************************************/
static WRITE8_HANDLER( drivedge_portb_out )
static WRITE8_DEVICE_HANDLER( drivedge_portb_out )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
// logerror("PIA port B write = %02x\n", data);
/* bit 0 controls the fan light */
@ -685,14 +683,15 @@ static WRITE8_HANDLER( drivedge_portb_out )
}
static WRITE8_HANDLER( drivedge_turbo_light )
static WRITE8_DEVICE_HANDLER( drivedge_turbo_light )
{
set_led_status(0, data);
}
static WRITE8_HANDLER( pia_portb_out )
static WRITE8_DEVICE_HANDLER( pia_portb_out )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
// logerror("PIA port B write = %02x\n", data);
/* bit 4 controls the ticket dispenser */
@ -710,12 +709,12 @@ static WRITE8_HANDLER( pia_portb_out )
*
*************************************/
static void via_irq(running_machine *machine, int state)
static void via_irq(const device_config *device, int state)
{
if (state)
cpu_set_input_line(machine->cpu[1], M6809_FIRQ_LINE, ASSERT_LINE);
cpu_set_input_line(device->machine->cpu[1], M6809_FIRQ_LINE, ASSERT_LINE);
else
cpu_set_input_line(machine->cpu[1], M6809_FIRQ_LINE, CLEAR_LINE);
cpu_set_input_line(device->machine->cpu[1], M6809_FIRQ_LINE, CLEAR_LINE);
}
@ -1060,7 +1059,7 @@ static ADDRESS_MAP_START( sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0880, 0x08bf) AM_READ(es5506_data_0_r)
AM_RANGE(0x0c00, 0x0c00) AM_WRITE(sound_bank_w)
AM_RANGE(0x1000, 0x1000) AM_WRITENOP /* noisy */
AM_RANGE(0x1400, 0x140f) AM_READWRITE(via_0_r, via_0_w)
AM_RANGE(0x1400, 0x140f) AM_DEVREADWRITE(VIA6522, "via6522_0", via_r, via_w)
AM_RANGE(0x2000, 0x3fff) AM_RAM
AM_RANGE(0x4000, 0x7fff) AM_ROMBANK(1)
AM_RANGE(0x8000, 0xffff) AM_ROM
@ -1709,6 +1708,9 @@ static MACHINE_DRIVER_START( timekill )
MDRV_SOUND_ADD("ensoniq", ES5506, SOUND_CLOCK)
MDRV_SOUND_CONFIG(es5506_config)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
/* via */
MDRV_VIA6522_ADD("via6522_0", SOUND_CLOCK/8, via_interface)
MACHINE_DRIVER_END
@ -1760,6 +1762,9 @@ static MACHINE_DRIVER_START( sftm )
MDRV_CPU_VBLANK_INT_HACK(irq1_line_assert,4)
MDRV_NVRAM_HANDLER(itech020)
/* via */
MDRV_VIA6522_REMOVE("via6522_0")
MACHINE_DRIVER_END
@ -3837,8 +3842,6 @@ static void init_program_rom(running_machine *machine)
static DRIVER_INIT( timekill )
{
init_program_rom(machine);
via_config(0, &via_interface);
via_set_clock(0, SOUND_CLOCK/8);
itech32_vram_height = 512;
itech32_planes = 2;
is_drivedge = 0;
@ -3848,8 +3851,6 @@ static DRIVER_INIT( timekill )
static DRIVER_INIT( hardyard )
{
init_program_rom(machine);
via_config(0, &via_interface);
via_set_clock(0, SOUND_CLOCK/8);
itech32_vram_height = 1024;
itech32_planes = 1;
is_drivedge = 0;
@ -3859,8 +3860,6 @@ static DRIVER_INIT( hardyard )
static DRIVER_INIT( bloodstm )
{
init_program_rom(machine);
via_config(0, &via_interface);
via_set_clock(0, SOUND_CLOCK/8);
itech32_vram_height = 1024;
itech32_planes = 1;
is_drivedge = 0;
@ -3870,8 +3869,6 @@ static DRIVER_INIT( bloodstm )
static DRIVER_INIT( drivedge )
{
init_program_rom(machine);
via_config(0, &drivedge_via_interface);
via_set_clock(0, SOUND_CLOCK/8);
itech32_vram_height = 1024;
itech32_planes = 1;
is_drivedge = 1;
@ -3890,8 +3887,6 @@ static DRIVER_INIT( wcbowl )
Sound P/N 1060 Rev 0 (see Hot Memory PCB layout above)
*/
init_program_rom(machine);
via_config(0, &via_interface);
via_set_clock(0, SOUND_CLOCK/8);
itech32_vram_height = 1024;
itech32_planes = 1;

View File

@ -561,13 +561,20 @@ static const pia6821_interface pia_interface =
*
*************************************/
static void via_irq(running_machine *machine, int state);
static void via_irq(const device_config *device, int state);
static WRITE8_DEVICE_HANDLER( via_pia_portb_out )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
pia_portb_out(space, offset, data);
}
static const via6522_interface via_interface =
{
/*inputs : A/B */ 0, 0,
/*inputs : CA/B1,CA/B2 */ 0, 0, 0, 0,
/*outputs: A/B */ 0, pia_portb_out,
/*outputs: A/B */ 0, via_pia_portb_out,
/*outputs: CA/B1,CA/B2 */ 0, 0, 0, 0,
/*irq */ via_irq
};
@ -676,11 +683,6 @@ static MACHINE_RESET( itech8 )
/* reset the PIA (if used) */
pia_reset();
/* reset the VIA chip (if used) */
via_config(0, &via_interface);
via_set_clock(0, CLOCK_8MHz/4);
via_reset();
/* reset the ticket dispenser */
ticket_dispenser_init(machine, 200, TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW);
@ -844,12 +846,12 @@ static READ8_HANDLER( sound_data_r )
*
*************************************/
static void via_irq(running_machine *machine, int state)
static void via_irq(const device_config *device, int state)
{
if (state)
cpu_set_input_line(machine->cpu[1], M6809_FIRQ_LINE, ASSERT_LINE);
cpu_set_input_line(device->machine->cpu[1], M6809_FIRQ_LINE, ASSERT_LINE);
else
cpu_set_input_line(machine->cpu[1], M6809_FIRQ_LINE, CLEAR_LINE);
cpu_set_input_line(device->machine->cpu[1], M6809_FIRQ_LINE, CLEAR_LINE);
}
@ -1026,7 +1028,7 @@ static ADDRESS_MAP_START( sound3812_external_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x2001, 0x2001) AM_WRITE(ym3812_write_port_0_w)
AM_RANGE(0x3000, 0x37ff) AM_RAM
AM_RANGE(0x4000, 0x4000) AM_READWRITE(okim6295_status_0_r, okim6295_data_0_w)
AM_RANGE(0x5000, 0x500f) AM_READWRITE(via_0_r, via_0_w)
AM_RANGE(0x5000, 0x500f) AM_DEVREADWRITE(VIA6522, "via6522_0", via_r, via_w)
AM_RANGE(0x8000, 0xffff) AM_ROM
ADDRESS_MAP_END
@ -1765,6 +1767,9 @@ static MACHINE_DRIVER_START( itech8_core_lo )
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
/* via */
MDRV_VIA6522_ADD("via6522_0", CLOCK_8MHz/4, via_interface)
MACHINE_DRIVER_END

View File

@ -46,12 +46,12 @@ static READ8_HANDLER( trvquest_question_r )
return memory_region(space->machine, "questions")[*state->trvquest_question * 0x2000 + offset];
}
static WRITE8_HANDLER( trvquest_coin_w )
static WRITE8_DEVICE_HANDLER( trvquest_coin_w )
{
coin_counter_w(0,~data & 1);
}
static WRITE8_HANDLER( trvquest_misc_w )
static WRITE8_DEVICE_HANDLER( trvquest_misc_w )
{
// data & 1 -> led on/off ?
}
@ -59,9 +59,9 @@ static WRITE8_HANDLER( trvquest_misc_w )
static ADDRESS_MAP_START( cpu_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x1fff) AM_RAM AM_BASE(&generic_nvram) AM_SIZE(&generic_nvram_size) // cmos ram
AM_RANGE(0x2000, 0x27ff) AM_RAM // main ram
AM_RANGE(0x3800, 0x380f) AM_READWRITE(via_1_r, via_1_w)
AM_RANGE(0x3810, 0x381f) AM_READWRITE(via_2_r, via_2_w)
AM_RANGE(0x3820, 0x382f) AM_READWRITE(via_0_r, via_0_w)
AM_RANGE(0x3800, 0x380f) AM_DEVREADWRITE(VIA6522, "via6522_1", via_r, via_w)
AM_RANGE(0x3810, 0x381f) AM_DEVREADWRITE(VIA6522, "via6522_2", via_r, via_w)
AM_RANGE(0x3820, 0x382f) AM_DEVREADWRITE(VIA6522, "via6522_0", via_r, via_w)
AM_RANGE(0x3830, 0x3830) AM_WRITE(ay8910_control_port_0_w)
AM_RANGE(0x3831, 0x3831) AM_WRITE(ay8910_write_port_0_w)
AM_RANGE(0x3840, 0x3840) AM_WRITE(ay8910_control_port_1_w)
@ -152,20 +152,31 @@ static TIMER_CALLBACK( via_irq_delayed )
cpu_set_input_line(machine->cpu[0], 0, param);
}
static void via_irq(running_machine *machine, int state)
static void via_irq(const device_config *device, int state)
{
// from gameplan.c
/* Kaos sits in a tight loop polling the VIA irq flags register, but that register is
cleared by the irq handler. Therefore, I wait a bit before triggering the irq to
leave time for the program to see the flag change. */
timer_set(machine, ATTOTIME_IN_USEC(50), NULL, state, via_irq_delayed);
timer_set(device->machine, ATTOTIME_IN_USEC(50), NULL, state, via_irq_delayed);
}
static input_port_value input_port_read_indexed(running_machine *machine, int portnum)
{
const input_port_config *port = input_port_by_index(machine->portconfig, portnum);
return input_port_read_direct(port);
}
static READ8_DEVICE_HANDLER( via_input_port_0_r ) { return input_port_read_indexed(device->machine, 0); }
static READ8_DEVICE_HANDLER( via_input_port_1_r ) { return input_port_read_indexed(device->machine, 1); }
static READ8_DEVICE_HANDLER( via_input_port_2_r ) { return input_port_read_indexed(device->machine, 2); }
static READ8_DEVICE_HANDLER( via_input_port_3_r ) { return input_port_read_indexed(device->machine, 3); }
static const via6522_interface via_1_interface =
{
/*inputs : A/B */ input_port_0_r, input_port_1_r,
/*inputs : A/B */ via_input_port_0_r, via_input_port_1_r,
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
/*outputs: A/B */ NULL, NULL,
/*outputs: CA/B1,CA/B2 */ NULL, NULL, trvquest_coin_w, NULL,
@ -174,7 +185,7 @@ static const via6522_interface via_1_interface =
static const via6522_interface via_2_interface =
{
/*inputs : A/B */ input_port_2_r, input_port_3_r,
/*inputs : A/B */ via_input_port_2_r, via_input_port_3_r,
/*inputs : CA/B1,CA/B2 */ NULL, NULL, NULL, NULL,
/*outputs: A/B */ NULL, NULL,
/*outputs: CA/B1,CA/B2 */ NULL, NULL, trvquest_misc_w, NULL,
@ -184,20 +195,17 @@ static const via6522_interface via_2_interface =
static MACHINE_START( trvquest )
{
via_config(1, &via_1_interface);
via_config(2, &via_2_interface);
}
static MACHINE_RESET( trvquest )
{
via_reset();
}
static INTERRUPT_GEN( trvquest_interrupt )
{
const address_space *space = cpu_get_address_space(device, ADDRESS_SPACE_PROGRAM);
via_2_ca1_w(space,0,1);
via_2_ca1_w(space,0,0);
const device_config *via_2 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_2");
via_ca1_w(via_2, 0, 1);
via_ca1_w(via_2, 0, 0);
}
static MACHINE_DRIVER_START( trvquest )
@ -223,6 +231,11 @@ static MACHINE_DRIVER_START( trvquest )
MDRV_SOUND_ADD("ay2", AY8910, XTAL_6MHz/2)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.25)
/* via */
MDRV_VIA6522_ADD("via6522_0", 0, trvquest_via_0_interface)
MDRV_VIA6522_ADD("via6522_1", 0, via_1_interface)
MDRV_VIA6522_ADD("via6522_2", 0, via_2_interface)
MACHINE_DRIVER_END
ROM_START( trvquest )

View File

@ -1,5 +1,8 @@
/*----------- defined in machine/beezer.c -----------*/
extern const via6522_interface b_via_0_interface;
extern const via6522_interface b_via_1_interface;
DRIVER_INIT( beezer );
WRITE8_HANDLER( beezer_bankswitch_w );

View File

@ -6,6 +6,7 @@ driver by Chris Moore
***************************************************************************/
#include "machine/6522via.h"
#define GAMEPLAN_MAIN_MASTER_CLOCK (XTAL_3_579545MHz)
#define GAMEPLAN_AUDIO_MASTER_CLOCK (XTAL_3_579545MHz)
@ -36,6 +37,10 @@ struct _gameplan_state
/*----------- defined in video/gameplan.c -----------*/
extern const via6522_interface gameplan_via_0_interface;
extern const via6522_interface leprechn_via_0_interface;
extern const via6522_interface trvquest_via_0_interface;
MACHINE_DRIVER_EXTERN( gameplan_video );
MACHINE_DRIVER_EXTERN( leprechn_video );
MACHINE_DRIVER_EXTERN( trvquest_video );

View File

@ -5,20 +5,56 @@
static int pbus;
static READ8_HANDLER( b_via_0_pb_r );
static WRITE8_HANDLER( b_via_0_pa_w );
static WRITE8_HANDLER( b_via_0_pb_w );
static READ8_HANDLER( b_via_0_ca2_r );
static WRITE8_HANDLER( b_via_0_ca2_w );
static void b_via_0_irq (running_machine *machine, int level);
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 void b_via_0_irq (const device_config *device, int level);
static READ8_HANDLER( b_via_1_pa_r );
static READ8_HANDLER( b_via_1_pb_r );
static WRITE8_HANDLER( b_via_1_pa_w );
static WRITE8_HANDLER( b_via_1_pb_w );
static void b_via_1_irq (running_machine *machine, int level);
static READ8_DEVICE_HANDLER( b_via_1_pa_r );
static READ8_DEVICE_HANDLER( b_via_1_pb_r );
static WRITE8_DEVICE_HANDLER( b_via_1_pa_w );
static WRITE8_DEVICE_HANDLER( b_via_1_pb_w );
static void b_via_1_irq (const device_config *device, int level);
static const via6522_interface b_via_0_interface =
static READ8_DEVICE_HANDLER( via_0_cb1_r )
{
const device_config *via_0 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_0");
return via_cb1_r(via_0, offset);
}
static WRITE8_DEVICE_HANDLER( via_0_cb1_w )
{
const device_config *via_0 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_0");
via_cb1_w(via_0, offset, data);
}
static READ8_DEVICE_HANDLER( via_0_cb2_r )
{
const device_config *via_0 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_0");
return via_cb2_r(via_0, offset);
}
static READ8_DEVICE_HANDLER( via_1_ca1_r )
{
const device_config *via_1 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_1");
return via_ca1_r(via_1, offset);
}
static WRITE8_DEVICE_HANDLER( via_1_ca1_w )
{
const device_config *via_1 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_1");
via_ca1_w(via_1, offset, data);
}
static READ8_DEVICE_HANDLER( via_1_ca2_r )
{
const device_config *via_1 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_1");
return via_ca2_r(via_1, offset);
}
const via6522_interface b_via_0_interface =
{
/*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,
@ -27,7 +63,7 @@ static const via6522_interface b_via_0_interface =
/*irq */ b_via_0_irq
};
static const via6522_interface b_via_1_interface =
const via6522_interface b_via_1_interface =
{
/*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,
@ -36,44 +72,44 @@ static const via6522_interface b_via_1_interface =
/*irq */ b_via_1_irq
};
static READ8_HANDLER( b_via_0_ca2_r )
static READ8_DEVICE_HANDLER( b_via_0_ca2_r )
{
return 0;
}
static WRITE8_HANDLER( b_via_0_ca2_w )
static WRITE8_DEVICE_HANDLER( b_via_0_ca2_w )
{
}
static void b_via_0_irq (running_machine *machine, int level)
static void b_via_0_irq (const device_config *device, int level)
{
cpu_set_input_line(machine->cpu[0], M6809_IRQ_LINE, level);
cpu_set_input_line(device->machine->cpu[0], M6809_IRQ_LINE, level);
}
static READ8_HANDLER( b_via_0_pb_r )
static READ8_DEVICE_HANDLER( b_via_0_pb_r )
{
return pbus;
}
static WRITE8_HANDLER( b_via_0_pa_w )
static WRITE8_DEVICE_HANDLER( b_via_0_pa_w )
{
if ((data & 0x08) == 0)
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, ASSERT_LINE);
cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_RESET, ASSERT_LINE);
else
cpu_set_input_line(space->machine->cpu[1], INPUT_LINE_RESET, CLEAR_LINE);
cpu_set_input_line(device->machine->cpu[1], INPUT_LINE_RESET, CLEAR_LINE);
if ((data & 0x04) == 0)
{
switch (data & 0x03)
{
case 0:
pbus = input_port_read(space->machine, "IN0");
pbus = input_port_read(device->machine, "IN0");
break;
case 1:
pbus = input_port_read(space->machine, "IN1") | (input_port_read(space->machine, "IN2") << 4);
pbus = input_port_read(device->machine, "IN1") | (input_port_read(device->machine, "IN2") << 4);
break;
case 2:
pbus = input_port_read(space->machine, "DSWB");
pbus = input_port_read(device->machine, "DSWB");
break;
case 3:
pbus = 0xff;
@ -82,40 +118,37 @@ static WRITE8_HANDLER( b_via_0_pa_w )
}
}
static WRITE8_HANDLER( b_via_0_pb_w )
static WRITE8_DEVICE_HANDLER( b_via_0_pb_w )
{
pbus = data;
}
static void b_via_1_irq (running_machine *machine, int level)
static void b_via_1_irq (const device_config *device, int level)
{
cpu_set_input_line(machine->cpu[1], M6809_IRQ_LINE, level);
cpu_set_input_line(device->machine->cpu[1], M6809_IRQ_LINE, level);
}
static READ8_HANDLER( b_via_1_pa_r )
static READ8_DEVICE_HANDLER( b_via_1_pa_r )
{
return pbus;
}
static READ8_HANDLER( b_via_1_pb_r )
static READ8_DEVICE_HANDLER( b_via_1_pb_r )
{
return 0xff;
}
static WRITE8_HANDLER( b_via_1_pa_w )
static WRITE8_DEVICE_HANDLER( b_via_1_pa_w )
{
pbus = data;
}
static WRITE8_HANDLER( b_via_1_pb_w )
static WRITE8_DEVICE_HANDLER( b_via_1_pb_w )
{
}
DRIVER_INIT( beezer )
{
via_config(0, &b_via_0_interface);
via_config(1, &b_via_1_interface);
via_reset();
pbus = 0;
}
@ -123,10 +156,11 @@ WRITE8_HANDLER( beezer_bankswitch_w )
{
if ((data & 0x07) == 0)
{
const device_config *via_0 = device_list_find_by_tag(space->machine->config->devicelist, VIA6522, "via6522_0");
memory_install_write8_handler(space, 0xc600, 0xc7ff, 0, 0, watchdog_reset_w);
memory_install_write8_handler(space, 0xc800, 0xc9ff, 0, 0, beezer_map_w);
memory_install_read8_handler(space, 0xca00, 0xcbff, 0, 0, beezer_line_r);
memory_install_readwrite8_handler(space, 0xce00, 0xcfff, 0, 0, via_0_r, via_0_w);
memory_install_readwrite8_device_handler(space, via_0, 0xce00, 0xcfff, 0, 0, via_r, via_w);
}
else
{

View File

@ -7,10 +7,10 @@ static int scanline=0;
INTERRUPT_GEN( beezer_interrupt )
{
const address_space *space = cpu_get_address_space(device->machine->cpu[0], ADDRESS_SPACE_PROGRAM);
const device_config *via_0 = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_0");
scanline = (scanline + 1) % 0x80;
via_0_ca2_w (space, 0, scanline & 0x10);
via_ca2_w (via_0, 0, scanline & 0x10);
if ((scanline & 0x78) == 0x78)
cpu_set_input_line(device, M6809_FIRQ_LINE, ASSERT_LINE);
else

View File

@ -116,25 +116,25 @@ static VIDEO_UPDATE( leprechn )
*
*************************************/
static WRITE8_HANDLER( video_data_w )
static WRITE8_DEVICE_HANDLER( video_data_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
state->video_data = data;
}
static WRITE8_HANDLER( gameplan_video_command_w )
static WRITE8_DEVICE_HANDLER( gameplan_video_command_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
state->video_command = data & 0x07;
}
static WRITE8_HANDLER( leprechn_video_command_w )
static WRITE8_DEVICE_HANDLER( leprechn_video_command_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
state->video_command = (data >> 3) & 0x07;
}
@ -142,16 +142,16 @@ static WRITE8_HANDLER( leprechn_video_command_w )
static TIMER_CALLBACK( clear_screen_done_callback )
{
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
const device_config *via = device_list_find_by_tag(machine->config->devicelist, VIA6522, "via6522_0");
/* indicate that the we are done clearing the screen */
via_0_ca1_w(space, 0, 0);
via_ca1_w(via, 0, 0);
}
static WRITE8_HANDLER( video_command_trigger_w )
static WRITE8_DEVICE_HANDLER( video_command_trigger_w )
{
gameplan_state *state = space->machine->driver_data;
gameplan_state *state = device->machine->driver_data;
if (data == 0)
{
@ -194,14 +194,17 @@ static WRITE8_HANDLER( video_command_trigger_w )
/* clear screen */
case 3:
/* indicate that the we are busy */
via_0_ca1_w(space, 0, 1);
{
const device_config *via = device_list_find_by_tag(device->machine->config->devicelist, VIA6522, "via6522_0");
via_ca1_w(via, 0, 1);
}
memset(state->videoram, state->video_data & 0x0f, state->videoram_size);
/* set a timer for an arbitrarily short period.
The real time it takes to clear to screen is not
important to the software */
timer_call_after_resynch(space->machine, NULL, 0, clear_screen_done_callback);
timer_call_after_resynch(device->machine, NULL, 0, clear_screen_done_callback);
break;
}
@ -215,23 +218,23 @@ static TIMER_CALLBACK( via_irq_delayed )
}
static void via_irq(running_machine *machine, int state)
static void via_irq(const device_config *device, int state)
{
/* Kaos sits in a tight loop polling the VIA irq flags register, but that register is
cleared by the irq handler. Therefore, I wait a bit before triggering the irq to
leave time for the program to see the flag change. */
timer_set(machine, ATTOTIME_IN_USEC(50), NULL, state, via_irq_delayed);
timer_set(device->machine, ATTOTIME_IN_USEC(50), NULL, state, via_irq_delayed);
}
static READ8_HANDLER( vblank_r )
static READ8_DEVICE_HANDLER( vblank_r )
{
/* this is needed for trivia quest */
return 0x20;
}
static const via6522_interface gameplan_via_0_interface =
const via6522_interface gameplan_via_0_interface =
{
0, vblank_r, /*inputs : A/B */
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
@ -241,7 +244,7 @@ static const via6522_interface gameplan_via_0_interface =
};
static const via6522_interface leprechn_via_0_interface =
const via6522_interface leprechn_via_0_interface =
{
0, vblank_r, /*inputs : A/B */
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
@ -251,7 +254,7 @@ static const via6522_interface leprechn_via_0_interface =
};
static const via6522_interface trvquest_via_0_interface =
const via6522_interface trvquest_via_0_interface =
{
0, vblank_r, /*inputs : A/B */
0, 0, 0, 0, /*inputs : CA/B1,CA/B2 */
@ -264,10 +267,10 @@ static const via6522_interface trvquest_via_0_interface =
static TIMER_CALLBACK( via_0_ca1_timer_callback )
{
gameplan_state *state = machine->driver_data;
const address_space *space = cpu_get_address_space(machine->cpu[0], ADDRESS_SPACE_PROGRAM);
const device_config *via = device_list_find_by_tag(machine->config->devicelist, VIA6522, "via6522_0");
/* !VBLANK is connected to CA1 */
via_0_ca1_w(space, 0, (UINT8)param);
via_ca1_w(via, 0, (UINT8)param);
if (param)
timer_adjust_oneshot(state->via_0_ca1_timer, video_screen_get_time_until_pos(machine->primary_screen, VBSTART, 0), 0);
@ -315,24 +318,18 @@ static VIDEO_START( common )
static VIDEO_START( gameplan )
{
via_config(0, &gameplan_via_0_interface);
VIDEO_START_CALL(common);
}
static VIDEO_START( leprechn )
{
via_config(0, &leprechn_via_0_interface);
VIDEO_START_CALL(common);
}
static VIDEO_START( trvquest )
{
via_config(0, &trvquest_via_0_interface);
VIDEO_START_CALL(common);
}
@ -346,7 +343,6 @@ static VIDEO_START( trvquest )
static VIDEO_RESET( gameplan )
{
via_reset();
start_via_0_timer(machine, machine->driver_data);
}