mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
pit8253: Updated to use devcb calls, cleanups
This commit is contained in:
parent
e32607b73e
commit
4bfcd73cc3
@ -56,7 +56,8 @@ struct pit8253_timer
|
|||||||
double clockin; /* input clock frequency in Hz */
|
double clockin; /* input clock frequency in Hz */
|
||||||
int clock; /* clock signal when clockin is 0 */
|
int clock; /* clock signal when clockin is 0 */
|
||||||
|
|
||||||
pit8253_output_changed_func output_changed; /* callback function for when output changes */
|
devcb_resolved_read_line in_gate_func; /* callback for gate input */
|
||||||
|
devcb_resolved_write_line out_out_func; /* callback function for when output changes */
|
||||||
|
|
||||||
attotime last_updated; /* time when last updated */
|
attotime last_updated; /* time when last updated */
|
||||||
|
|
||||||
@ -119,6 +120,15 @@ static struct pit8253_timer *get_timer(struct _pit8253_t *pit,int which)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static int pit8253_gate(struct pit8253_timer *timer)
|
||||||
|
{
|
||||||
|
if (timer->in_gate_func.read != NULL)
|
||||||
|
return devcb_call_read_line(&timer->in_gate_func);
|
||||||
|
else
|
||||||
|
return timer->gate;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
INLINE UINT32 decimal_from_bcd(UINT16 val)
|
INLINE UINT32 decimal_from_bcd(UINT16 val)
|
||||||
{
|
{
|
||||||
/* In BCD mode, a nybble loaded with value A-F counts down the same as in
|
/* In BCD mode, a nybble loaded with value A-F counts down the same as in
|
||||||
@ -219,10 +229,7 @@ static void set_output(running_device *device, struct pit8253_timer *timer,int o
|
|||||||
if (output != timer->output)
|
if (output != timer->output)
|
||||||
{
|
{
|
||||||
timer->output = output;
|
timer->output = output;
|
||||||
if (timer->output_changed != NULL)
|
devcb_call_write_line(&timer->out_out_func, timer->output);
|
||||||
{
|
|
||||||
timer->output_changed(device, output);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -237,7 +244,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
int cycles_to_output = 0;
|
int cycles_to_output = 0;
|
||||||
|
|
||||||
LOG2(("pit8253: simulate2(): simulating %d cycles for %d in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x\n",
|
LOG2(("pit8253: simulate2(): simulating %d cycles for %d in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x\n",
|
||||||
(int)elapsed_cycles,timer->index,mode,bcd,timer->phase,timer->gate,timer->output,timer->value));
|
(int)elapsed_cycles,timer->index,mode,bcd,timer->phase,pit8253_gate(timer),timer->output,timer->value));
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case 0:
|
case 0:
|
||||||
@ -276,7 +283,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
load_counter_value( device, timer );
|
load_counter_value( device, timer );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( timer->gate == 0 )
|
if ( pit8253_gate(timer) == 0 )
|
||||||
{
|
{
|
||||||
cycles_to_output = CYCLES_NEVER;
|
cycles_to_output = CYCLES_NEVER;
|
||||||
}
|
}
|
||||||
@ -387,7 +394,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
Rising-edge reloads count and initiates counting
|
Rising-edge reloads count and initiates counting
|
||||||
Gate high enables counting. */
|
Gate high enables counting. */
|
||||||
|
|
||||||
if (timer->gate == 0 || timer->phase == 0)
|
if (pit8253_gate(timer) == 0 || timer->phase == 0)
|
||||||
{
|
{
|
||||||
/* Gate low or mode control write forces output high */
|
/* Gate low or mode control write forces output high */
|
||||||
set_output(device, timer, 1);
|
set_output(device, timer, 1);
|
||||||
@ -466,7 +473,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
Rising-edge reloads count and initiates counting
|
Rising-edge reloads count and initiates counting
|
||||||
Gate high enables counting. */
|
Gate high enables counting. */
|
||||||
|
|
||||||
if (timer->gate == 0 || timer->phase == 0)
|
if (pit8253_gate(timer) == 0 || timer->phase == 0)
|
||||||
{
|
{
|
||||||
/* Gate low or mode control write forces output high */
|
/* Gate low or mode control write forces output high */
|
||||||
set_output(device, timer, 1);
|
set_output(device, timer, 1);
|
||||||
@ -549,7 +556,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
Mode 4 only: Gate level sensitive only. Low disables counting, high enables it.
|
Mode 4 only: Gate level sensitive only. Low disables counting, high enables it.
|
||||||
Mode 5 only: Gate rising-edge sensitive only. Rising edge initiates counting */
|
Mode 5 only: Gate rising-edge sensitive only. Rising edge initiates counting */
|
||||||
|
|
||||||
if (timer->gate == 0 && mode == 4)
|
if (pit8253_gate(timer) == 0 && mode == 4)
|
||||||
{
|
{
|
||||||
cycles_to_output = CYCLES_NEVER;
|
cycles_to_output = CYCLES_NEVER;
|
||||||
}
|
}
|
||||||
@ -611,7 +618,7 @@ static void simulate2(running_device *device, struct pit8253_timer *timer, INT64
|
|||||||
}
|
}
|
||||||
|
|
||||||
LOG2(("pit8253: simulate2(): simulating %d cycles for %d in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x, cycles_to_output = %04x\n",
|
LOG2(("pit8253: simulate2(): simulating %d cycles for %d in mode %d, bcd = %d, phase = %d, gate = %d, output %d, value = 0x%04x, cycles_to_output = %04x\n",
|
||||||
(int)elapsed_cycles,timer->index,mode,bcd,timer->phase,timer->gate,timer->output,timer->value,cycles_to_output));
|
(int)elapsed_cycles,timer->index,mode,bcd,timer->phase,pit8253_gate(timer),timer->output,timer->value,cycles_to_output));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -974,33 +981,40 @@ WRITE8_DEVICE_HANDLER( pit8253_w )
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void pit8253_gate_w(running_device *device, int gate, int state)
|
||||||
WRITE8_DEVICE_HANDLER( pit8253_gate_w )
|
|
||||||
{
|
{
|
||||||
pit8253_t *pit8253 = get_safe_token(device);
|
pit8253_t *pit8253 = get_safe_token(device);
|
||||||
struct pit8253_timer *timer = get_timer(pit8253,offset);
|
struct pit8253_timer *timer = get_timer(pit8253, gate);
|
||||||
int mode;
|
|
||||||
int gate = (data!=0 ? 1 : 0);
|
|
||||||
|
|
||||||
LOG2(("pit8253_gate_w(): offset=%d gate=%d\n", offset, data));
|
LOG2(("pit8253_gate_w(): gate=%d state=%d\n", gate, state));
|
||||||
|
|
||||||
if (timer == NULL)
|
if (timer == NULL)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
mode = CTRL_MODE(timer->control);
|
if (timer->in_gate_func.read != NULL)
|
||||||
|
|
||||||
if (gate != timer->gate)
|
|
||||||
{
|
{
|
||||||
update(device, timer);
|
logerror("pit8253_gate_w: write has no effect because a read handler is already defined!\n");
|
||||||
timer->gate = gate;
|
}
|
||||||
if (gate != 0 && ( mode == 1 || mode == 2 || mode == 5 ))
|
else
|
||||||
|
{
|
||||||
|
if (state != timer->gate)
|
||||||
{
|
{
|
||||||
timer->phase = 1;
|
int mode = CTRL_MODE(timer->control);
|
||||||
|
|
||||||
|
update(device, timer);
|
||||||
|
timer->gate = state;
|
||||||
|
if (state != 0 && ( mode == 1 || mode == 2 || mode == 5 ))
|
||||||
|
{
|
||||||
|
timer->phase = 1;
|
||||||
|
}
|
||||||
|
update(device, timer);
|
||||||
}
|
}
|
||||||
update(device, timer);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate0_w ) { pit8253_gate_w(device, 0, state); }
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate1_w ) { pit8253_gate_w(device, 1, state); }
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate2_w ) { pit8253_gate_w(device, 2, state); }
|
||||||
|
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------- */
|
/* ----------------------------------------------------------------------- */
|
||||||
@ -1032,7 +1046,7 @@ void pit8253_set_clockin(running_device *device, int timerno, double new_clockin
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void pit8253_set_clock_signal(running_device *device, int timerno, int state)
|
static void pit8253_set_clock_signal(running_device *device, int timerno, int state)
|
||||||
{
|
{
|
||||||
pit8253_t *pit8253 = get_safe_token(device);
|
pit8253_t *pit8253 = get_safe_token(device);
|
||||||
struct pit8253_timer *timer = get_timer(pit8253,timerno);
|
struct pit8253_timer *timer = get_timer(pit8253,timerno);
|
||||||
@ -1048,6 +1062,10 @@ void pit8253_set_clock_signal(running_device *device, int timerno, int state)
|
|||||||
timer->clock = state;
|
timer->clock = state;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk0_w ) { pit8253_set_clock_signal(device, 0, state); }
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk1_w ) { pit8253_set_clock_signal(device, 1, state); }
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk2_w ) { pit8253_set_clock_signal(device, 2, state); }
|
||||||
|
|
||||||
|
|
||||||
static void common_start( running_device *device, int device_type ) {
|
static void common_start( running_device *device, int device_type ) {
|
||||||
pit8253_t *pit8253 = get_safe_token(device);
|
pit8253_t *pit8253 = get_safe_token(device);
|
||||||
@ -1059,14 +1077,17 @@ static void common_start( running_device *device, int device_type ) {
|
|||||||
/* register for state saving */
|
/* register for state saving */
|
||||||
for (timerno = 0; timerno < MAX_TIMER; timerno++)
|
for (timerno = 0; timerno < MAX_TIMER; timerno++)
|
||||||
{
|
{
|
||||||
struct pit8253_timer *timer = get_timer(pit8253,timerno);
|
struct pit8253_timer *timer = get_timer(pit8253, timerno);
|
||||||
|
|
||||||
|
/* initialize timer */
|
||||||
timer->clockin = pit8253->config->timer[timerno].clockin;
|
timer->clockin = pit8253->config->timer[timerno].clockin;
|
||||||
timer->output_changed = pit8253->config->timer[timerno].output_changed;
|
|
||||||
|
|
||||||
timer->updatetimer = timer_alloc(device->machine, update_timer_cb, (void *)device);
|
timer->updatetimer = timer_alloc(device->machine, update_timer_cb, (void *)device);
|
||||||
timer_adjust_oneshot(timer->updatetimer, attotime_never, timerno);
|
timer_adjust_oneshot(timer->updatetimer, attotime_never, timerno);
|
||||||
|
|
||||||
|
/* resolve callbacks */
|
||||||
|
devcb_resolve_read_line(&timer->in_gate_func, &pit8253->config->timer[timerno].in_gate_func, device);
|
||||||
|
devcb_resolve_write_line(&timer->out_out_func, &pit8253->config->timer[timerno].out_out_func, device);
|
||||||
|
|
||||||
/* set up state save values */
|
/* set up state save values */
|
||||||
state_save_register_device_item(device, timerno, timer->clockin);
|
state_save_register_device_item(device, timerno, timer->clockin);
|
||||||
state_save_register_device_item(device, timerno, timer->control);
|
state_save_register_device_item(device, timerno, timer->control);
|
||||||
@ -1116,7 +1137,12 @@ static DEVICE_RESET( pit8253 ) {
|
|||||||
timer->rmsb = timer->wmsb = 0;
|
timer->rmsb = timer->wmsb = 0;
|
||||||
timer->count = timer->value = timer->latch = 0;
|
timer->count = timer->value = timer->latch = 0;
|
||||||
timer->lowcount = 0;
|
timer->lowcount = 0;
|
||||||
timer->gate = 1;
|
|
||||||
|
if (timer->in_gate_func.read != NULL)
|
||||||
|
timer->gate = devcb_call_read_line(&timer->in_gate_func);
|
||||||
|
else
|
||||||
|
timer->gate = 1;
|
||||||
|
|
||||||
timer->output = 2; /* output is undetermined */
|
timer->output = 2; /* output is undetermined */
|
||||||
timer->latched_count = 0;
|
timer->latched_count = 0;
|
||||||
timer->latched_status = 0;
|
timer->latched_status = 0;
|
||||||
|
@ -1,30 +1,41 @@
|
|||||||
/*****************************************************************************
|
/***************************************************************************
|
||||||
*
|
|
||||||
* Programmable Interval Timer 8253/8254
|
Intel 8253/8254
|
||||||
*
|
|
||||||
*****************************************************************************/
|
Programmable Interval Timer
|
||||||
|
|
||||||
|
_____ _____
|
||||||
|
D7 1 |* \_/ | 24 VCC
|
||||||
|
D6 2 | | 23 _WR
|
||||||
|
D5 3 | | 22 _RD
|
||||||
|
D4 4 | | 21 _CS
|
||||||
|
D3 5 | | 20 A1
|
||||||
|
D2 6 | | 19 A0
|
||||||
|
D1 7 | 8259A | 18 CLK2
|
||||||
|
D0 8 | | 17 OUT2
|
||||||
|
CLK0 9 | | 16 GATE2
|
||||||
|
OUT0 10 | | 15 CLK1
|
||||||
|
GATE0 11 | | 14 GATE1
|
||||||
|
GND 12 |_____________| 13 OUT1
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#ifndef __PIT8253_H__
|
||||||
|
#define __PIT8253_H__
|
||||||
|
|
||||||
|
#include "devcb.h"
|
||||||
|
|
||||||
#ifndef __PIT8253_H_
|
|
||||||
#define __PIT8253_H_
|
|
||||||
|
|
||||||
#define PIT8253 DEVICE_GET_INFO_NAME(pit8253)
|
#define PIT8253 DEVICE_GET_INFO_NAME(pit8253)
|
||||||
#define PIT8254 DEVICE_GET_INFO_NAME(pit8254)
|
#define PIT8254 DEVICE_GET_INFO_NAME(pit8254)
|
||||||
|
|
||||||
|
|
||||||
typedef void (*pit8253_output_changed_func)(running_device *device, int state);
|
|
||||||
#define PIT8253_OUTPUT_CHANGED(name) void name(running_device *device, int state )
|
|
||||||
|
|
||||||
|
|
||||||
struct pit8253_config
|
struct pit8253_config
|
||||||
{
|
{
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
/* Input clock for this timer */
|
double clockin; /* timer clock */
|
||||||
double clockin;
|
devcb_read_line in_gate_func; /* gate signal */
|
||||||
|
devcb_write_line out_out_func; /* out signal */
|
||||||
/* If specified, this gets called whenever the output for this timer changes */
|
|
||||||
pit8253_output_changed_func output_changed;
|
|
||||||
|
|
||||||
} timer[3];
|
} timer[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -50,8 +61,13 @@ DEVICE_GET_INFO( pit8254 );
|
|||||||
READ8_DEVICE_HANDLER( pit8253_r );
|
READ8_DEVICE_HANDLER( pit8253_r );
|
||||||
WRITE8_DEVICE_HANDLER( pit8253_w );
|
WRITE8_DEVICE_HANDLER( pit8253_w );
|
||||||
|
|
||||||
WRITE8_DEVICE_HANDLER( pit8253_gate_w );
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk0_w );
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk1_w );
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_clk2_w );
|
||||||
|
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate0_w );
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate1_w );
|
||||||
|
WRITE_LINE_DEVICE_HANDLER( pit8253_gate2_w );
|
||||||
|
|
||||||
/* In the 8253/8254 the CLKx input lines can be attached to a regular clock
|
/* In the 8253/8254 the CLKx input lines can be attached to a regular clock
|
||||||
signal. Another option is to use the output from one timer as the input
|
signal. Another option is to use the output from one timer as the input
|
||||||
@ -60,13 +76,11 @@ WRITE8_DEVICE_HANDLER( pit8253_gate_w );
|
|||||||
The functions below should supply both functionalities. If the signal is
|
The functions below should supply both functionalities. If the signal is
|
||||||
a regular clock signal, use the pit8253_set_clockin function. If the
|
a regular clock signal, use the pit8253_set_clockin function. If the
|
||||||
CLKx input signal is the output of the different source, set the new_clockin
|
CLKx input signal is the output of the different source, set the new_clockin
|
||||||
to 0 with pit8253_set_clockin and call pit8253_set_clock_signal to change
|
to 0 with pit8253_set_clockin and call pit8253_clkX_w to change
|
||||||
the state of the input CLKx signal.
|
the state of the input CLKx signal.
|
||||||
*/
|
*/
|
||||||
int pit8253_get_output(running_device *device, int timer);
|
int pit8253_get_output(running_device *device, int timer);
|
||||||
void pit8253_set_clockin(running_device *device, int timer, double new_clockin);
|
void pit8253_set_clockin(running_device *device, int timer, double new_clockin);
|
||||||
void pit8253_set_clock_signal(running_device *device, int timer, int state);
|
|
||||||
|
|
||||||
|
|
||||||
#endif /* __PIT8253_H_ */
|
#endif /* __PIT8253_H__ */
|
||||||
|
|
||||||
|
@ -595,23 +595,21 @@ static const struct pic8259_interface calchase_pic8259_2_config =
|
|||||||
*
|
*
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( pc_timer0_w )
|
|
||||||
{
|
|
||||||
pic8259_ir0_w(calchase_devices.pic8259_1, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct pit8253_config calchase_pit8254_config =
|
static const struct pit8253_config calchase_pit8254_config =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
pc_timer0_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir0_w)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -637,23 +637,21 @@ static const struct pic8259_interface gamecstl_pic8259_2_config =
|
|||||||
*
|
*
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( pc_timer0_w )
|
|
||||||
{
|
|
||||||
pic8259_ir0_w(gamecstl_devices.pic8259_1, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct pit8253_config gamecstl_pit8254_config =
|
static const struct pit8253_config gamecstl_pit8254_config =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
pc_timer0_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir0_w)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -1014,24 +1014,21 @@ static const struct pic8259_interface mediagx_pic8259_2_config =
|
|||||||
*
|
*
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( pc_timer0_w )
|
|
||||||
{
|
|
||||||
pic8259_ir0_w(mediagx_devices.pic8259_1, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static const struct pit8253_config mediagx_pit8254_config =
|
static const struct pit8253_config mediagx_pit8254_config =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
pc_timer0_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_DEVICE_LINE("pic8259_master", pic8259_ir0_w)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -257,7 +257,7 @@ static IRQ_CALLBACK(irq_callback)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out0_changed )
|
||||||
{
|
{
|
||||||
if ( pcat_dyn_devices.pic8259_1 )
|
if ( pcat_dyn_devices.pic8259_1 )
|
||||||
{
|
{
|
||||||
@ -266,7 +266,7 @@ static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out2_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out2_changed )
|
||||||
{
|
{
|
||||||
//at_speaker_set_input( state ? 1 : 0 );
|
//at_speaker_set_input( state ? 1 : 0 );
|
||||||
}
|
}
|
||||||
@ -277,13 +277,16 @@ static const struct pit8253_config at_pit8254_config =
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
at_pit8254_out0_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out0_changed)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
at_pit8254_out2_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out2_changed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -320,7 +320,7 @@ static IRQ_CALLBACK(irq_callback)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out0_changed )
|
||||||
{
|
{
|
||||||
if ( streetg2_devices.pic8259_1 )
|
if ( streetg2_devices.pic8259_1 )
|
||||||
{
|
{
|
||||||
@ -329,7 +329,7 @@ static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out2_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out2_changed )
|
||||||
{
|
{
|
||||||
//at_speaker_set_input( state ? 1 : 0 );
|
//at_speaker_set_input( state ? 1 : 0 );
|
||||||
}
|
}
|
||||||
@ -340,13 +340,16 @@ static const struct pit8253_config at_pit8254_config =
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
at_pit8254_out0_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out0_changed)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
at_pit8254_out2_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out2_changed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -394,23 +394,21 @@ static WRITE8_HANDLER( disk_iobank_w )
|
|||||||
Pit8253
|
Pit8253
|
||||||
*********************************/
|
*********************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( pc_timer0_w )
|
|
||||||
{
|
|
||||||
pic8259_ir0_w(filetto_devices.pic8259_1, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct pit8253_config pc_pit8253_config =
|
static const struct pit8253_config pc_pit8253_config =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
pc_timer0_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir0_w)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -251,7 +251,7 @@ static IRQ_CALLBACK(irq_callback)
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out0_changed )
|
||||||
{
|
{
|
||||||
if ( photoply_devices.pic8259_1 )
|
if ( photoply_devices.pic8259_1 )
|
||||||
{
|
{
|
||||||
@ -260,7 +260,7 @@ static PIT8253_OUTPUT_CHANGED( at_pit8254_out0_changed )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( at_pit8254_out2_changed )
|
static WRITE_LINE_DEVICE_HANDLER( at_pit8254_out2_changed )
|
||||||
{
|
{
|
||||||
//at_speaker_set_input( state ? 1 : 0 );
|
//at_speaker_set_input( state ? 1 : 0 );
|
||||||
}
|
}
|
||||||
@ -271,13 +271,16 @@ static const struct pit8253_config at_pit8254_config =
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
at_pit8254_out0_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out0_changed)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
at_pit8254_out2_changed
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(at_pit8254_out2_changed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -578,23 +578,21 @@ static const struct pic8259_interface taitowlf_pic8259_2_config =
|
|||||||
*
|
*
|
||||||
*************************************************************/
|
*************************************************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( pc_timer0_w )
|
|
||||||
{
|
|
||||||
pic8259_ir0_w(taitowlf_devices.pic8259_1, state);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct pit8253_config taitowlf_pit8254_config =
|
static const struct pit8253_config taitowlf_pit8254_config =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
4772720/4, /* heartbeat IRQ */
|
4772720/4, /* heartbeat IRQ */
|
||||||
pc_timer0_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_DEVICE_LINE("pic8259_1", pic8259_ir0_w)
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* dram refresh */
|
4772720/4, /* dram refresh */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}, {
|
}, {
|
||||||
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
4772720/4, /* pio port c pin 4, and speaker polling enough */
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -21,8 +21,8 @@ static running_device *ttl74148;
|
|||||||
*
|
*
|
||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( v_irq4_w );
|
static WRITE_LINE_DEVICE_HANDLER( v_irq4_w );
|
||||||
static PIT8253_OUTPUT_CHANGED( v_irq3_w );
|
static WRITE_LINE_DEVICE_HANDLER( v_irq3_w );
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -49,13 +49,16 @@ const struct pit8253_config vertigo_pit8254_config =
|
|||||||
{
|
{
|
||||||
{
|
{
|
||||||
240000,
|
240000,
|
||||||
v_irq4_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(v_irq4_w)
|
||||||
}, {
|
}, {
|
||||||
240000,
|
240000,
|
||||||
v_irq3_w
|
DEVCB_NULL,
|
||||||
|
DEVCB_LINE(v_irq3_w)
|
||||||
}, {
|
}, {
|
||||||
240000,
|
240000,
|
||||||
NULL
|
DEVCB_NULL,
|
||||||
|
DEVCB_NULL
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@ -89,7 +92,7 @@ static void update_irq_encoder(running_machine *machine, int line, int state)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( v_irq4_w )
|
static WRITE_LINE_DEVICE_HANDLER( v_irq4_w )
|
||||||
{
|
{
|
||||||
update_irq_encoder(device->machine, INPUT_LINE_IRQ4, state);
|
update_irq_encoder(device->machine, INPUT_LINE_IRQ4, state);
|
||||||
vertigo_vproc(cputag_attotime_to_clocks(device->machine, "maincpu", attotime_sub(timer_get_time(device->machine), irq4_time)), state);
|
vertigo_vproc(cputag_attotime_to_clocks(device->machine, "maincpu", attotime_sub(timer_get_time(device->machine), irq4_time)), state);
|
||||||
@ -97,7 +100,7 @@ static PIT8253_OUTPUT_CHANGED( v_irq4_w )
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static PIT8253_OUTPUT_CHANGED( v_irq3_w )
|
static WRITE_LINE_DEVICE_HANDLER( v_irq3_w )
|
||||||
{
|
{
|
||||||
if (state)
|
if (state)
|
||||||
cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_IRQ0, ASSERT_LINE);
|
cputag_set_input_line(device->machine, "audiocpu", INPUT_LINE_IRQ0, ASSERT_LINE);
|
||||||
|
Loading…
Reference in New Issue
Block a user