mirror of
https://github.com/holub/mame
synced 2025-10-06 09:00:04 +03:00
8042kbdc is now device (nw)
This commit is contained in:
parent
abedd24d6e
commit
3dff6ae3ad
@ -192,144 +192,137 @@
|
||||
#define LOG_KEYBOARD 0
|
||||
#define LOG_ACCESSES 0
|
||||
|
||||
const device_type KBDC8042 = &device_creator<kbdc8042_device>;
|
||||
|
||||
//-------------------------------------------------
|
||||
// kbdc8042_device - constructor
|
||||
//-------------------------------------------------
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Type definitions
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static struct
|
||||
kbdc8042_device::kbdc8042_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
|
||||
: device_t(mconfig, KBDC8042, "Keyboard Controller 8042", tag, owner, clock, "kbdc8042", __FILE__)
|
||||
{
|
||||
kbdc8042_type_t type;
|
||||
void (*set_gate_a20)(running_machine &machine, int a20);
|
||||
void (*keyboard_interrupt)(running_machine &machine, int state);
|
||||
void (*set_spkr)(running_machine &machine, int speaker);
|
||||
int (*get_out2)(running_machine &machine);
|
||||
}
|
||||
|
||||
UINT8 inport, outport, data, command;
|
||||
//-------------------------------------------------
|
||||
// device_config_complete - perform any
|
||||
// operations now that the configuration is
|
||||
// complete
|
||||
//-------------------------------------------------
|
||||
|
||||
struct {
|
||||
int received;
|
||||
int on;
|
||||
} keyboard;
|
||||
struct {
|
||||
int received;
|
||||
int on;
|
||||
} mouse;
|
||||
|
||||
int last_write_to_control;
|
||||
int sending;
|
||||
int send_to_mouse;
|
||||
|
||||
int operation_write_state;
|
||||
int status_read_mode;
|
||||
|
||||
int speaker;
|
||||
|
||||
/* temporary hack */
|
||||
int offset1;
|
||||
} kbdc8042;
|
||||
|
||||
static int poll_delay;
|
||||
|
||||
static void at_8042_check_keyboard(running_machine &machine);
|
||||
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Code
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
static void at_8042_set_outport(running_machine &machine, UINT8 data, int initial)
|
||||
void kbdc8042_device::device_config_complete()
|
||||
{
|
||||
UINT8 change;
|
||||
change = initial ? 0xFF : (kbdc8042.outport ^ data);
|
||||
kbdc8042.outport = data;
|
||||
if (change & 0x02)
|
||||
// inherit a copy of the static data
|
||||
const kbdc8042_interface *intf = reinterpret_cast<const kbdc8042_interface *>(static_config());
|
||||
|
||||
if (intf != NULL)
|
||||
{
|
||||
if (kbdc8042.set_gate_a20)
|
||||
kbdc8042.set_gate_a20(machine, data & 0x02 ? 1 : 0);
|
||||
*static_cast<kbdc8042_interface *>(this) = *intf;
|
||||
}
|
||||
|
||||
// or initialize to defaults if none provided
|
||||
else
|
||||
{
|
||||
memset(&m_system_reset_cb, 0, sizeof(m_system_reset_cb));
|
||||
memset(&m_gate_a20_cb, 0, sizeof(m_gate_a20_cb));
|
||||
memset(&m_input_buffer_full_func, 0, sizeof(m_input_buffer_full_func));
|
||||
memset(&m_output_buffer_empty_cb, 0, sizeof(m_output_buffer_empty_cb));
|
||||
memset(&m_speaker_cb, 0, sizeof(m_speaker_cb));
|
||||
}
|
||||
}
|
||||
|
||||
/*-------------------------------------------------
|
||||
device_start - device-specific startup
|
||||
-------------------------------------------------*/
|
||||
|
||||
|
||||
static TIMER_CALLBACK( kbdc8042_time )
|
||||
void kbdc8042_device::device_start()
|
||||
{
|
||||
at_keyboard_polling();
|
||||
at_8042_check_keyboard(machine);
|
||||
// resolve callbacks
|
||||
m_system_reset_func.resolve(m_system_reset_cb, *this);
|
||||
m_gate_a20_func.resolve(m_gate_a20_cb, *this);
|
||||
m_input_buffer_full_func.resolve(m_input_buffer_full_cb, *this);
|
||||
m_output_buffer_empty_func.resolve(m_output_buffer_empty_cb, *this);
|
||||
m_speaker_func.resolve(m_speaker_cb, *this);
|
||||
m_getout2_func.resolve(m_getout2_cb, *this);
|
||||
machine().scheduler().timer_pulse(attotime::from_hz(60), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_time),this));
|
||||
}
|
||||
|
||||
static TIMER_CALLBACK( kbdc8042_clr_int )
|
||||
/*-------------------------------------------------
|
||||
device_reset - device-specific reset
|
||||
-------------------------------------------------*/
|
||||
|
||||
void kbdc8042_device::device_reset()
|
||||
{
|
||||
m_poll_delay = 10;
|
||||
|
||||
/* ibmat bios wants 0x20 set! (keyboard locked when not set) 0x80 */
|
||||
m_inport = 0xa0;
|
||||
at_8042_set_outport(0xfe, 1);
|
||||
}
|
||||
|
||||
void kbdc8042_device::at_8042_set_outport(UINT8 data, int initial)
|
||||
{
|
||||
UINT8 change;
|
||||
change = initial ? 0xFF : (m_outport ^ data);
|
||||
m_outport = data;
|
||||
if (change & 0x02)
|
||||
{
|
||||
if (!m_gate_a20_func.isnull())
|
||||
m_gate_a20_func(data & 0x02 ? 1 : 0);
|
||||
}
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER( kbdc8042_device::kbdc8042_time )
|
||||
{
|
||||
at_keyboard_polling();
|
||||
at_8042_check_keyboard();
|
||||
}
|
||||
|
||||
TIMER_CALLBACK_MEMBER( kbdc8042_device::kbdc8042_clr_int )
|
||||
{
|
||||
/* Lets 8952's timers do their job before clear the interrupt line, */
|
||||
/* else Keyboard interrupt never happens. */
|
||||
kbdc8042.keyboard_interrupt(machine, 0);
|
||||
m_input_buffer_full_func(0);
|
||||
}
|
||||
|
||||
|
||||
void kbdc8042_init(running_machine &machine, const struct kbdc8042_interface *intf)
|
||||
{
|
||||
poll_delay = 10;
|
||||
memset(&kbdc8042, 0, sizeof(kbdc8042));
|
||||
kbdc8042.type = intf->type;
|
||||
kbdc8042.set_gate_a20 = intf->set_gate_a20;
|
||||
kbdc8042.keyboard_interrupt = intf->keyboard_interrupt;
|
||||
kbdc8042.get_out2 = intf->get_out2;
|
||||
kbdc8042.set_spkr = intf->set_spkr;
|
||||
|
||||
/* ibmat bios wants 0x20 set! (keyboard locked when not set) 0x80 */
|
||||
kbdc8042.inport = 0xa0;
|
||||
at_8042_set_outport(machine, 0xfe, 1);
|
||||
|
||||
machine.scheduler().timer_pulse(attotime::from_hz(60), FUNC(kbdc8042_time));
|
||||
}
|
||||
|
||||
static void at_8042_receive(running_machine &machine, UINT8 data)
|
||||
void kbdc8042_device::at_8042_receive(UINT8 data)
|
||||
{
|
||||
if (LOG_KEYBOARD)
|
||||
logerror("at_8042_receive Received 0x%02x\n", data);
|
||||
|
||||
kbdc8042.data = data;
|
||||
kbdc8042.keyboard.received = 1;
|
||||
m_data = data;
|
||||
m_keyboard.received = 1;
|
||||
|
||||
if (kbdc8042.keyboard_interrupt)
|
||||
if (!m_input_buffer_full_func.isnull())
|
||||
{
|
||||
kbdc8042.keyboard_interrupt(machine, 1);
|
||||
m_input_buffer_full_func(1);
|
||||
/* Lets 8952's timers do their job before clear the interrupt line, */
|
||||
/* else Keyboard interrupt never happens. */
|
||||
machine.scheduler().timer_set( attotime::from_usec(2), FUNC(kbdc8042_clr_int),0,0 );
|
||||
machine().scheduler().timer_set(attotime::from_usec(2), timer_expired_delegate(FUNC(kbdc8042_device::kbdc8042_clr_int),this));
|
||||
}
|
||||
}
|
||||
|
||||
static void at_8042_check_keyboard(running_machine &machine)
|
||||
void kbdc8042_device::at_8042_check_keyboard()
|
||||
{
|
||||
int data;
|
||||
|
||||
if (!kbdc8042.keyboard.received
|
||||
&& !kbdc8042.mouse.received)
|
||||
if (!m_keyboard.received && !m_mouse.received)
|
||||
{
|
||||
if ( (data = at_keyboard_read())!=-1)
|
||||
at_8042_receive(machine, data);
|
||||
at_8042_receive(data);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void at_8042_clear_keyboard_received(void)
|
||||
void kbdc8042_device::at_8042_clear_keyboard_received()
|
||||
{
|
||||
if (kbdc8042.keyboard.received)
|
||||
if (m_keyboard.received)
|
||||
{
|
||||
if (LOG_KEYBOARD)
|
||||
logerror("kbdc8042_8_r(): Clearing kbdc8042.keyboard.received\n");
|
||||
logerror("kbdc8042_8_r(): Clearing m_keyboard.received\n");
|
||||
}
|
||||
|
||||
kbdc8042.keyboard.received = 0;
|
||||
kbdc8042.mouse.received = 0;
|
||||
m_keyboard.received = 0;
|
||||
m_mouse.received = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -357,87 +350,87 @@ static void at_8042_clear_keyboard_received(void)
|
||||
* 0: Keyboard data in
|
||||
*/
|
||||
|
||||
READ8_HANDLER(kbdc8042_8_r)
|
||||
READ8_MEMBER(kbdc8042_device::data_r)
|
||||
{
|
||||
UINT8 data = 0;
|
||||
|
||||
switch (offset) {
|
||||
case 0:
|
||||
data = kbdc8042.data;
|
||||
if ((kbdc8042.status_read_mode != 3) || (data != 0xfa))
|
||||
data = m_data;
|
||||
if ((m_status_read_mode != 3) || (data != 0xfa))
|
||||
{
|
||||
if (kbdc8042.type != KBDC8042_AT386 || (data != 0x55))
|
||||
if (m_keybtype != KBDC8042_AT386 || (data != 0x55))
|
||||
{
|
||||
/* at386 self test doesn't like this */
|
||||
at_8042_clear_keyboard_received();
|
||||
}
|
||||
at_8042_check_keyboard(space.machine());
|
||||
at_8042_check_keyboard();
|
||||
}
|
||||
else
|
||||
{
|
||||
kbdc8042.status_read_mode = 4;
|
||||
m_status_read_mode = 4;
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
data = kbdc8042.speaker;
|
||||
data = m_speaker;
|
||||
data &= ~0xc0; /* AT BIOS don't likes this being set */
|
||||
|
||||
/* needed for AMI BIOS, maybe only some keyboard controller revisions! */
|
||||
at_8042_clear_keyboard_received();
|
||||
|
||||
/* polled for changes in ibmat bios */
|
||||
if (--poll_delay < 0)
|
||||
if (--m_poll_delay < 0)
|
||||
{
|
||||
if (kbdc8042.type != KBDC8042_PS2)
|
||||
poll_delay = 4; /* ibmat */
|
||||
if (m_keybtype != KBDC8042_PS2)
|
||||
m_poll_delay = 4; /* ibmat */
|
||||
else
|
||||
poll_delay = 8; /* ibm ps2m30 */
|
||||
kbdc8042.offset1 ^= 0x10;
|
||||
m_poll_delay = 8; /* ibm ps2m30 */
|
||||
m_offset1 ^= 0x10;
|
||||
}
|
||||
data = (data & ~0x10) | kbdc8042.offset1;
|
||||
data = (data & ~0x10) | m_offset1;
|
||||
|
||||
if (kbdc8042.speaker & 1)
|
||||
if (m_speaker & 1)
|
||||
data |= 0x20;
|
||||
else
|
||||
data &= ~0x20; /* ps2m30 wants this */
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if (kbdc8042.get_out2(space.machine()))
|
||||
if (m_getout2_func(0))
|
||||
data |= 0x20;
|
||||
else
|
||||
data &= ~0x20;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
at_8042_check_keyboard(space.machine());
|
||||
at_8042_check_keyboard();
|
||||
|
||||
if (kbdc8042.keyboard.received || kbdc8042.mouse.received)
|
||||
if (m_keyboard.received || m_mouse.received)
|
||||
data |= 1;
|
||||
if (kbdc8042.sending)
|
||||
if (m_sending)
|
||||
data |= 2;
|
||||
|
||||
kbdc8042.sending = 0; /* quicker than normal */
|
||||
m_sending = 0; /* quicker than normal */
|
||||
data |= 4; /* selftest ok */
|
||||
|
||||
if (kbdc8042.last_write_to_control)
|
||||
if (m_last_write_to_control)
|
||||
data |= 8;
|
||||
|
||||
switch (kbdc8042.status_read_mode) {
|
||||
switch (m_status_read_mode) {
|
||||
case 0:
|
||||
if (!kbdc8042.keyboard.on) data|=0x10;
|
||||
if (kbdc8042.mouse.received) data|=0x20;
|
||||
if (!m_keyboard.on) data|=0x10;
|
||||
if (m_mouse.received) data|=0x20;
|
||||
break;
|
||||
case 1:
|
||||
data |= kbdc8042.inport&0xf;
|
||||
data |= m_inport&0xf;
|
||||
break;
|
||||
case 2:
|
||||
data |= kbdc8042.inport<<4;
|
||||
data |= m_inport<<4;
|
||||
break;
|
||||
case 4:
|
||||
at_8042_receive(space.machine(), 0xaa);
|
||||
kbdc8042.status_read_mode = 0;
|
||||
at_8042_receive(0xaa);
|
||||
m_status_read_mode = 0;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
@ -450,29 +443,29 @@ READ8_HANDLER(kbdc8042_8_r)
|
||||
|
||||
|
||||
|
||||
WRITE8_HANDLER(kbdc8042_8_w)
|
||||
WRITE8_MEMBER(kbdc8042_device::data_w)
|
||||
{
|
||||
switch (offset) {
|
||||
case 0:
|
||||
kbdc8042.last_write_to_control = 0;
|
||||
kbdc8042.status_read_mode = 0;
|
||||
switch (kbdc8042.operation_write_state) {
|
||||
m_last_write_to_control = 0;
|
||||
m_status_read_mode = 0;
|
||||
switch (m_operation_write_state) {
|
||||
case 0:
|
||||
if ((data == 0xf4) || (data == 0xff)) /* keyboard enable or keyboard reset */
|
||||
{
|
||||
at_8042_receive(space.machine(), 0xfa); /* ACK, delivered a bit differently */
|
||||
at_8042_receive(0xfa); /* ACK, delivered a bit differently */
|
||||
|
||||
if (data == 0xff)
|
||||
{
|
||||
kbdc8042.status_read_mode = 3; /* keyboard buffer to be written again after next read */
|
||||
m_status_read_mode = 3; /* keyboard buffer to be written again after next read */
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
/* normal case */
|
||||
kbdc8042.data = data;
|
||||
kbdc8042.sending=1;
|
||||
m_data = data;
|
||||
m_sending=1;
|
||||
at_keyboard_write(space.machine(), data);
|
||||
break;
|
||||
|
||||
@ -487,73 +480,73 @@ WRITE8_HANDLER(kbdc8042_8_w)
|
||||
* | `----------- keyboard clock (output)
|
||||
* `------------ keyboard data (output)
|
||||
*/
|
||||
at_8042_set_outport(space.machine(), data, 0);
|
||||
at_8042_set_outport(data, 0);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
/* preceded by writing 0xD2 to port 60h */
|
||||
kbdc8042.data = data;
|
||||
kbdc8042.sending=1;
|
||||
at_keyboard_write(space.machine(), data);
|
||||
m_data = data;
|
||||
m_sending=1;
|
||||
at_keyboard_write(machine(), data);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
/* preceded by writing 0xD3 to port 60h */
|
||||
kbdc8042.data = data;
|
||||
m_data = data;
|
||||
break;
|
||||
|
||||
case 4:
|
||||
/* preceded by writing 0xD4 to port 60h */
|
||||
kbdc8042.data = data;
|
||||
m_data = data;
|
||||
break;
|
||||
|
||||
case 5:
|
||||
/* preceded by writing 0x60 to port 60h */
|
||||
kbdc8042.command = data;
|
||||
m_command = data;
|
||||
break;
|
||||
}
|
||||
kbdc8042.operation_write_state = 0;
|
||||
m_operation_write_state = 0;
|
||||
break;
|
||||
|
||||
case 1:
|
||||
kbdc8042.speaker = data;
|
||||
if (kbdc8042.set_spkr)
|
||||
kbdc8042.set_spkr(space.machine(), kbdc8042.speaker);
|
||||
m_speaker = data;
|
||||
if (!m_speaker_func.isnull())
|
||||
m_speaker_func(0, m_speaker);
|
||||
|
||||
break;
|
||||
|
||||
case 4:
|
||||
kbdc8042.last_write_to_control=0;
|
||||
m_last_write_to_control=0;
|
||||
|
||||
/* switch based on the command */
|
||||
switch(data) {
|
||||
case 0x20: /* current 8042 command byte is placed on port 60h */
|
||||
kbdc8042.data = kbdc8042.command;
|
||||
m_data = m_command;
|
||||
break;
|
||||
case 0x60: /* next data byte is placed in 8042 command byte */
|
||||
kbdc8042.operation_write_state = 5;
|
||||
kbdc8042.send_to_mouse = 0;
|
||||
m_operation_write_state = 5;
|
||||
m_send_to_mouse = 0;
|
||||
break;
|
||||
case 0xa7: /* disable auxilary interface */
|
||||
kbdc8042.mouse.on = 0;
|
||||
m_mouse.on = 0;
|
||||
break;
|
||||
case 0xa8: /* enable auxilary interface */
|
||||
kbdc8042.mouse.on = 1;
|
||||
m_mouse.on = 1;
|
||||
break;
|
||||
case 0xa9: /* test mouse */
|
||||
at_8042_receive(space.machine(), PS2_MOUSE_ON ? 0x00 : 0xff);
|
||||
at_8042_receive(PS2_MOUSE_ON ? 0x00 : 0xff);
|
||||
break;
|
||||
case 0xaa: /* selftest */
|
||||
at_8042_receive(space.machine(), 0x55);
|
||||
at_8042_receive(0x55);
|
||||
break;
|
||||
case 0xab: /* test keyboard */
|
||||
at_8042_receive(space.machine(), KEYBOARD_ON ? 0x00 : 0xff);
|
||||
at_8042_receive(KEYBOARD_ON ? 0x00 : 0xff);
|
||||
break;
|
||||
case 0xad: /* disable keyboard interface */
|
||||
kbdc8042.keyboard.on = 0;
|
||||
m_keyboard.on = 0;
|
||||
break;
|
||||
case 0xae: /* enable keyboard interface */
|
||||
kbdc8042.keyboard.on = 1;
|
||||
m_keyboard.on = 1;
|
||||
break;
|
||||
case 0xc0: /* read input port */
|
||||
/* |7|6|5|4|3 2 1 0| 8042 Input Port
|
||||
@ -565,45 +558,45 @@ WRITE8_HANDLER(kbdc8042_8_w)
|
||||
* | `----------- 1=primary display is MDA, 0=CGA
|
||||
* `------------ 1=keyboard not inhibited; 0=inhibited
|
||||
*/
|
||||
at_8042_receive(space.machine(), kbdc8042.inport);
|
||||
at_8042_receive(m_inport);
|
||||
break;
|
||||
case 0xc1: /* read input port 3..0 until write to 0x60 */
|
||||
kbdc8042.status_read_mode = 1;
|
||||
m_status_read_mode = 1;
|
||||
break;
|
||||
case 0xc2: /* read input port 7..4 until write to 0x60 */
|
||||
kbdc8042.status_read_mode = 2;
|
||||
m_status_read_mode = 2;
|
||||
break;
|
||||
case 0xd0: /* read output port */
|
||||
at_8042_receive(space.machine(), kbdc8042.outport);
|
||||
at_8042_receive(m_outport);
|
||||
break;
|
||||
case 0xd1:
|
||||
/* write output port; next byte written to port 60h is placed on
|
||||
* 8042 output port */
|
||||
kbdc8042.operation_write_state = 1;
|
||||
m_operation_write_state = 1;
|
||||
return; /* instant delivery */
|
||||
case 0xd2:
|
||||
/* write keyboard output register; on PS/2 systems next port 60h
|
||||
* write is written to port 60h output register as if initiated
|
||||
* by a device; invokes interrupt if enabled */
|
||||
kbdc8042.operation_write_state = 2;
|
||||
kbdc8042.send_to_mouse = 0;
|
||||
m_operation_write_state = 2;
|
||||
m_send_to_mouse = 0;
|
||||
break;
|
||||
case 0xd3:
|
||||
/* write auxillary output register; on PS/2 systems next port 60h
|
||||
* write is written to port 60h input register as if initiated
|
||||
* by a device; invokes interrupt if enabled */
|
||||
kbdc8042.operation_write_state = 3;
|
||||
kbdc8042.send_to_mouse = 1;
|
||||
m_operation_write_state = 3;
|
||||
m_send_to_mouse = 1;
|
||||
break;
|
||||
case 0xd4:
|
||||
/* write auxillary device; on PS/2 systems the next data byte
|
||||
* written to input register a port at 60h is sent to the
|
||||
* auxiliary device */
|
||||
kbdc8042.operation_write_state = 4;
|
||||
m_operation_write_state = 4;
|
||||
break;
|
||||
case 0xe0:
|
||||
/* read test inputs; read T1/T0 test inputs into bit 1/0 */
|
||||
at_8042_receive(space.machine(), 0x00);
|
||||
at_8042_receive(0x00);
|
||||
break;
|
||||
|
||||
case 0xf0:
|
||||
@ -619,11 +612,11 @@ WRITE8_HANDLER(kbdc8042_8_w)
|
||||
* the bits low set in the command byte. The only pulse that has
|
||||
* an effect currently is bit 0, which pulses the CPU's reset line
|
||||
*/
|
||||
space.machine().firstcpu->set_input_line(INPUT_LINE_RESET, PULSE_LINE);
|
||||
at_8042_set_outport(space.machine(), kbdc8042.outport | 0x02, 0);
|
||||
m_system_reset_func(PULSE_LINE);
|
||||
at_8042_set_outport(m_outport | 0x02, 0);
|
||||
break;
|
||||
}
|
||||
kbdc8042.sending = 1;
|
||||
m_sending = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -17,24 +17,94 @@ enum kbdc8042_type_t
|
||||
KBDC8042_AT386 /* hack for at386 driver */
|
||||
};
|
||||
|
||||
//**************************************************************************
|
||||
// INTERFACE CONFIGURATION MACROS
|
||||
//**************************************************************************
|
||||
|
||||
#define MCFG_KBDC8042_ADD(_tag, _interface) \
|
||||
MCFG_DEVICE_ADD(_tag, KBDC8042, 0) \
|
||||
MCFG_DEVICE_CONFIG(_interface)
|
||||
|
||||
|
||||
//**************************************************************************
|
||||
// TYPE DEFINITIONS
|
||||
//**************************************************************************
|
||||
|
||||
// ======================> kbdc8042_interface
|
||||
|
||||
struct kbdc8042_interface
|
||||
{
|
||||
kbdc8042_type_t type;
|
||||
void (*set_gate_a20)(running_machine &machine, int a20);
|
||||
void (*keyboard_interrupt)(running_machine &machine, int state);
|
||||
void (*set_spkr)(running_machine &machine, int speaker);
|
||||
int (*get_out2)(running_machine &machine);
|
||||
|
||||
|
||||
|
||||
kbdc8042_type_t m_keybtype;
|
||||
// interface to the host pc
|
||||
devcb_write_line m_system_reset_cb;
|
||||
devcb_write_line m_gate_a20_cb;
|
||||
devcb_write_line m_input_buffer_full_cb;
|
||||
devcb_write_line m_output_buffer_empty_cb;
|
||||
|
||||
devcb_write8 m_speaker_cb;
|
||||
devcb_read8 m_getout2_cb;
|
||||
};
|
||||
|
||||
// ======================> kbdc8042_device
|
||||
|
||||
class kbdc8042_device : public device_t,
|
||||
public kbdc8042_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
kbdc8042_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||
|
||||
DECLARE_READ8_MEMBER( data_r );
|
||||
DECLARE_WRITE8_MEMBER( data_w );
|
||||
|
||||
void kbdc8042_init(running_machine &machine, const struct kbdc8042_interface *intf);
|
||||
void at_8042_set_outport(UINT8 data, int initial);
|
||||
TIMER_CALLBACK_MEMBER( kbdc8042_time );
|
||||
TIMER_CALLBACK_MEMBER( kbdc8042_clr_int );
|
||||
void at_8042_receive(UINT8 data);
|
||||
void at_8042_check_keyboard();
|
||||
void at_8042_clear_keyboard_received();
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start();
|
||||
virtual void device_reset();
|
||||
virtual void device_config_complete();
|
||||
|
||||
UINT8 m_inport, m_outport, m_data, m_command;
|
||||
|
||||
struct {
|
||||
int received;
|
||||
int on;
|
||||
} m_keyboard;
|
||||
struct {
|
||||
int received;
|
||||
int on;
|
||||
} m_mouse;
|
||||
|
||||
int m_last_write_to_control;
|
||||
int m_sending;
|
||||
int m_send_to_mouse;
|
||||
|
||||
int m_operation_write_state;
|
||||
int m_status_read_mode;
|
||||
|
||||
int m_speaker;
|
||||
|
||||
/* temporary hack */
|
||||
int m_offset1;
|
||||
|
||||
int m_poll_delay;
|
||||
|
||||
devcb_resolved_write_line m_system_reset_func;
|
||||
devcb_resolved_write_line m_gate_a20_func;
|
||||
devcb_resolved_write_line m_input_buffer_full_func;
|
||||
devcb_resolved_write_line m_output_buffer_empty_func;
|
||||
|
||||
devcb_resolved_write8 m_speaker_func;
|
||||
devcb_resolved_read8 m_getout2_func;
|
||||
};
|
||||
|
||||
// device type definition
|
||||
extern const device_type KBDC8042;
|
||||
|
||||
DECLARE_READ8_HANDLER(kbdc8042_8_r);
|
||||
DECLARE_WRITE8_HANDLER(kbdc8042_8_w);
|
||||
|
||||
#endif /* KBDC8042_H */
|
||||
|
@ -181,6 +181,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(calchase_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
DECLARE_DRIVER_INIT(calchase);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
@ -582,7 +583,7 @@ static ADDRESS_MAP_START( calchase_io, AS_IO, 32, calchase_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -891,27 +892,21 @@ void calchase_state::machine_reset()
|
||||
membank("bios_ext")->set_base(memregion("bios")->base() + 0);
|
||||
}
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(calchase_state::get_out2)
|
||||
{
|
||||
calchase_state *drvstate = machine.driver_data<calchase_state>();
|
||||
drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
calchase_state *drvstate = machine.driver_data<calchase_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int calchase_get_out2(running_machine &machine)
|
||||
{
|
||||
calchase_state *state = machine.driver_data<calchase_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, calchase_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(calchase_state,get_out2)
|
||||
};
|
||||
|
||||
static void calchase_set_keyb_int(running_machine &machine, int state)
|
||||
@ -937,7 +932,9 @@ static MACHINE_CONFIG_START( calchase, calchase_state )
|
||||
MCFG_PCI_BUS_LEGACY_ADD("pcibus", 0)
|
||||
MCFG_PCI_BUS_LEGACY_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w)
|
||||
MCFG_PCI_BUS_LEGACY_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w)
|
||||
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_trident_vga )
|
||||
|
||||
@ -971,7 +968,6 @@ DRIVER_INIT_MEMBER(calchase_state,calchase)
|
||||
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
|
||||
m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0x3f0b160, 0x3f0b163, read32_delegate(FUNC(calchase_state::calchase_idle_skip_r),this), write32_delegate(FUNC(calchase_state::calchase_idle_skip_w),this));
|
||||
}
|
||||
|
@ -166,6 +166,7 @@ public:
|
||||
virtual void machine_reset();
|
||||
UINT32 screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
};
|
||||
|
||||
void funkball_state::video_start()
|
||||
@ -589,7 +590,7 @@ static ADDRESS_MAP_START(funkball_io, AS_IO, 32, funkball_state)
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_READWRITE8(io20_r, io20_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -1059,28 +1060,21 @@ static const struct pic8259_interface funkball_pic8259_2_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(funkball_state::get_out2)
|
||||
{
|
||||
funkball_state *state = machine.driver_data<funkball_state>();
|
||||
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
funkball_state *drvstate = machine.driver_data<funkball_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int funkball_get_out2(running_machine &machine)
|
||||
{
|
||||
funkball_state *state = machine.driver_data<funkball_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, funkball_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(funkball_state,get_out2)
|
||||
};
|
||||
|
||||
static void funkball_set_keyb_int(running_machine &machine, int state)
|
||||
@ -1102,7 +1096,6 @@ void funkball_state::machine_start()
|
||||
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(funkball_state::irq_callback),this));
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
|
||||
/* defaults, otherwise it won't boot */
|
||||
m_unk_ram[0x010/4] = 0x2f8d85ff;
|
||||
@ -1160,6 +1153,8 @@ static MACHINE_CONFIG_START( funkball, funkball_state )
|
||||
MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
|
||||
MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_3DFX_VOODOO_1_ADD("voodoo_0", STD_VOODOO_1_CLOCK, voodoo_intf)
|
||||
|
||||
|
@ -117,6 +117,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(gamecstl_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
DECLARE_DRIVER_INIT(gamecstl);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
virtual void video_start();
|
||||
@ -530,7 +531,7 @@ static ADDRESS_MAP_START(gamecstl_io, AS_IO, 32, gamecstl_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -685,6 +686,23 @@ static const struct pit8253_config gamecstl_pit8254_config =
|
||||
}
|
||||
};
|
||||
|
||||
READ8_MEMBER(gamecstl_state::get_out2)
|
||||
{
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(gamecstl_state,get_out2)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( gamecstl, gamecstl_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -712,6 +730,8 @@ static MACHINE_CONFIG_START( gamecstl, gamecstl_state )
|
||||
|
||||
MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_SCREEN_ADD("screen", RASTER)
|
||||
MCFG_SCREEN_REFRESH_RATE(60)
|
||||
@ -726,29 +746,6 @@ static MACHINE_CONFIG_START( gamecstl, gamecstl_state )
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
{
|
||||
gamecstl_state *drvstate = machine.driver_data<gamecstl_state>();
|
||||
drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
gamecstl_state *drvstate = machine.driver_data<gamecstl_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int gamecstl_get_out2(running_machine &machine)
|
||||
{
|
||||
gamecstl_state *state = machine.driver_data<gamecstl_state>();
|
||||
return pit8253_get_output( state->m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, gamecstl_get_out2
|
||||
};
|
||||
|
||||
static void gamecstl_set_keyb_int(running_machine &machine, int state)
|
||||
{
|
||||
gamecstl_state *drvstate = machine.driver_data<gamecstl_state>();
|
||||
@ -763,7 +760,6 @@ DRIVER_INIT_MEMBER(gamecstl_state,gamecstl)
|
||||
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -104,6 +104,7 @@ public:
|
||||
|
||||
DECLARE_DRIVER_INIT(gammagic);
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
};
|
||||
|
||||
@ -559,7 +560,7 @@ static ADDRESS_MAP_START( gammagic_io, AS_IO, 32, gammagic_state)
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8_LEGACY(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -747,27 +748,21 @@ static const struct pit8253_config gammagic_pit8254_config =
|
||||
}
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(gammagic_state::get_out2)
|
||||
{
|
||||
gammagic_state *drvstate = machine.driver_data<gammagic_state>();
|
||||
drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
gammagic_state *drvstate = machine.driver_data<gammagic_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int gammagic_get_out2(running_machine &machine)
|
||||
{
|
||||
gammagic_state *state = machine.driver_data<gammagic_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, gammagic_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(gammagic_state,get_out2)
|
||||
};
|
||||
|
||||
static void gammagic_set_keyb_int(running_machine &machine, int state)
|
||||
@ -795,6 +790,8 @@ static MACHINE_CONFIG_START( gammagic, gammagic_state )
|
||||
// MCFG_PCI_BUS_DEVICE(1, "i82371sb", i82371sb_pci_read, i82371sb_pci_write)
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
@ -802,7 +799,6 @@ MACHINE_CONFIG_END
|
||||
DRIVER_INIT_MEMBER(gammagic_state,gammagic)
|
||||
{
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, gammagic_set_keyb_int);
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
atapi_init(machine());
|
||||
}
|
||||
|
||||
|
@ -199,6 +199,7 @@ public:
|
||||
DECLARE_READ32_MEMBER(speedup9_r);
|
||||
DECLARE_READ32_MEMBER(speedup10_r);
|
||||
DECLARE_READ32_MEMBER(speedup11_r);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
TIMER_DEVICE_CALLBACK_MEMBER(sound_timer_callback);
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
void draw_char(bitmap_rgb32 &bitmap, const rectangle &cliprect, gfx_element *gfx, int ch, int att, int x, int y);
|
||||
@ -960,7 +961,7 @@ static ADDRESS_MAP_START(mediagx_io, AS_IO, 32, mediagx_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_READWRITE8(io20_r, io20_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -1156,6 +1157,23 @@ static RAMDAC_INTERFACE( ramdac_intf )
|
||||
0
|
||||
};
|
||||
|
||||
READ8_MEMBER(mediagx_state::get_out2)
|
||||
{
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_master", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(mediagx_state,get_out2)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( mediagx, mediagx_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -1196,6 +1214,7 @@ static MACHINE_CONFIG_START( mediagx, mediagx_state )
|
||||
MCFG_GFXDECODE(CGA)
|
||||
MCFG_PALETTE_LENGTH(256)
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
|
||||
@ -1207,31 +1226,7 @@ static MACHINE_CONFIG_START( mediagx, mediagx_state )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
{
|
||||
mediagx_state *state = machine.driver_data<mediagx_state>();
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int _state)
|
||||
{
|
||||
mediagx_state *state = machine.driver_data<mediagx_state>();
|
||||
|
||||
pic8259_ir1_w(state->m_pic8259_1, _state);
|
||||
}
|
||||
|
||||
static int mediagx_get_out2(running_machine &machine)
|
||||
{
|
||||
mediagx_state *state = machine.driver_data<mediagx_state>();
|
||||
|
||||
return pit8253_get_output( state->m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, mediagx_get_out2
|
||||
};
|
||||
|
||||
|
||||
static void mediagx_set_keyb_int(running_machine &machine, int _state)
|
||||
{
|
||||
mediagx_state *state = machine.driver_data<mediagx_state>();
|
||||
@ -1244,8 +1239,6 @@ void mediagx_state::init_mediagx()
|
||||
m_frame_width = m_frame_height = 1;
|
||||
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT,mediagx_set_keyb_int);
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
#if SPEEDUP_HACKS
|
||||
|
@ -96,6 +96,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(midqslvr_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
@ -549,7 +550,7 @@ static ADDRESS_MAP_START(midqslvr_io, AS_IO, 32, midqslvr_state)
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r,at_page8_w,0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -612,28 +613,21 @@ static const struct pic8259_interface midqslvr_pic8259_2_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(midqslvr_state::get_out2)
|
||||
{
|
||||
midqslvr_state *state = machine.driver_data<midqslvr_state>();
|
||||
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
midqslvr_state *drvstate = machine.driver_data<midqslvr_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int midqslvr_get_out2(running_machine &machine)
|
||||
{
|
||||
midqslvr_state *state = machine.driver_data<midqslvr_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, midqslvr_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(midqslvr_state,get_out2)
|
||||
};
|
||||
|
||||
static void midqslvr_set_keyb_int(running_machine &machine, int state)
|
||||
@ -662,7 +656,6 @@ void midqslvr_state::machine_start()
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(midqslvr_state::irq_callback),this));
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
void midqslvr_state::machine_reset()
|
||||
@ -697,6 +690,8 @@ static MACHINE_CONFIG_START( midqslvr, midqslvr_state )
|
||||
MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
|
||||
MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -109,6 +109,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
DECLARE_DRIVER_INIT(pangofun);
|
||||
virtual void machine_start();
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -176,32 +177,27 @@ static void pangofun_set_keyb_int(running_machine &machine, int state)
|
||||
pic8259_ir1_w(machine.device("pic8259_1"), state);
|
||||
}
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(pangofun_state::get_out2)
|
||||
{
|
||||
pangofun_state *state = machine.driver_data<pangofun_state>();
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
return pit8253_get_output( machine().device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
pic8259_ir1_w(machine.device("pic8259_1"), state);
|
||||
}
|
||||
|
||||
static int pcat_dyn_get_out2(running_machine &machine) {
|
||||
return pit8253_get_output(machine.device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, pcat_dyn_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(pangofun_state,get_out2)
|
||||
};
|
||||
|
||||
void pangofun_state::machine_start()
|
||||
{
|
||||
m_maincpu->set_irq_acknowledge_callback(pcat_irq_callback);
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, pangofun_set_keyb_int);
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
|
||||
@ -219,6 +215,8 @@ static MACHINE_CONFIG_START( pangofun, pangofun_state )
|
||||
|
||||
MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
|
||||
MCFG_FRAGMENT_ADD( pcat_common )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
: driver_device(mconfig, type, tag),
|
||||
m_maincpu(*this, "maincpu") { }
|
||||
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
DECLARE_DRIVER_INIT(pcat_dyn);
|
||||
virtual void machine_start();
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -114,32 +115,26 @@ static void pcat_dyn_set_keyb_int(running_machine &machine, int state)
|
||||
pic8259_ir1_w(machine.device("pic8259_1"), state);
|
||||
}
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(pcat_dyn_state::get_out2)
|
||||
{
|
||||
pcat_dyn_state *state = machine.driver_data<pcat_dyn_state>();
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
return pit8253_get_output( machine().device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
pic8259_ir1_w(machine.device("pic8259_1"), state);
|
||||
}
|
||||
|
||||
static int pcat_dyn_get_out2(running_machine &machine) {
|
||||
return pit8253_get_output(machine.device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, pcat_dyn_get_out2
|
||||
};
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(pcat_dyn_state,get_out2)
|
||||
};
|
||||
void pcat_dyn_state::machine_start()
|
||||
{
|
||||
m_maincpu->set_irq_acknowledge_callback(pcat_irq_callback);
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, pcat_dyn_set_keyb_int);
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state )
|
||||
@ -156,6 +151,8 @@ static MACHINE_CONFIG_START( pcat_dyn, pcat_dyn_state )
|
||||
MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
|
||||
|
||||
MCFG_FRAGMENT_ADD( pcat_common )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
/***************************************
|
||||
|
@ -57,6 +57,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out0_changed);
|
||||
DECLARE_WRITE_LINE_MEMBER(at_pit8254_out2_changed);
|
||||
DECLARE_DRIVER_INIT(photoply);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
required_device<cpu_device> m_maincpu;
|
||||
@ -284,7 +285,7 @@ static ADDRESS_MAP_START( photoply_io, AS_IO, 32, photoply_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_RAM//DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -334,6 +335,22 @@ static INPUT_PORTS_START( photoply )
|
||||
PORT_START("pc_keyboard_7")
|
||||
INPUT_PORTS_END
|
||||
|
||||
READ8_MEMBER(photoply_state::get_out2)
|
||||
{
|
||||
return pit8253_get_output( m_pit8253, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(photoply_state,get_out2)
|
||||
};
|
||||
|
||||
static void photoply_set_keyb_int(running_machine &machine, int state)
|
||||
{
|
||||
@ -391,6 +408,8 @@ static MACHINE_CONFIG_START( photoply, photoply_state )
|
||||
MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
|
||||
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -88,6 +88,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(queen_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
@ -413,7 +414,7 @@ static ADDRESS_MAP_START( queen_io, AS_IO, 32, queen_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -476,28 +477,21 @@ static const struct pic8259_interface queen_pic8259_2_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(queen_state::get_out2)
|
||||
{
|
||||
queen_state *state = machine.driver_data<queen_state>();
|
||||
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
queen_state *drvstate = machine.driver_data<queen_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int queen_get_out2(running_machine &machine)
|
||||
{
|
||||
queen_state *state = machine.driver_data<queen_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, queen_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(queen_state,get_out2)
|
||||
};
|
||||
|
||||
static void queen_set_keyb_int(running_machine &machine, int state)
|
||||
@ -521,7 +515,6 @@ void queen_state::machine_start()
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(queen_state::irq_callback),this));
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
void queen_state::machine_reset()
|
||||
@ -555,6 +548,8 @@ static MACHINE_CONFIG_START( queen, queen_state )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -100,6 +100,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(savquest_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
@ -507,7 +508,7 @@ static ADDRESS_MAP_START(savquest_io, AS_IO, 32, savquest_state)
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -575,28 +576,21 @@ static const struct pic8259_interface savquest_pic8259_2_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(savquest_state::get_out2)
|
||||
{
|
||||
savquest_state *state = machine.driver_data<savquest_state>();
|
||||
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
savquest_state *drvstate = machine.driver_data<savquest_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int savquest_get_out2(running_machine &machine)
|
||||
{
|
||||
savquest_state *state = machine.driver_data<savquest_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, savquest_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(savquest_state,get_out2)
|
||||
};
|
||||
|
||||
static void savquest_set_keyb_int(running_machine &machine, int state)
|
||||
@ -623,7 +617,6 @@ void savquest_state::machine_start()
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(savquest_state::irq_callback),this));
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
void savquest_state::machine_reset()
|
||||
@ -658,6 +651,8 @@ static MACHINE_CONFIG_START( savquest, savquest_state )
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
ROM_START( savquest )
|
||||
|
@ -79,6 +79,7 @@ public:
|
||||
|
||||
UINT32 *m_pc_ram;
|
||||
DECLARE_WRITE_LINE_MEMBER(su2000_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
@ -128,31 +129,21 @@ static void su2000_set_keyb_int(running_machine &machine, int state)
|
||||
pic8259_ir1_w(drv_state->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(su2000_state::get_out2)
|
||||
{
|
||||
su2000_state *state = machine.driver_data<su2000_state>();
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
su2000_state *drv_state = machine.driver_data<su2000_state>();
|
||||
pic8259_ir1_w(drv_state->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int pcat_get_out2(running_machine &machine)
|
||||
{
|
||||
su2000_state *state = machine.driver_data<su2000_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2);
|
||||
return pit8253_get_output( machine().device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386,
|
||||
set_gate_a20,
|
||||
keyboard_interrupt,
|
||||
NULL,
|
||||
pcat_get_out2,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(su2000_state,get_out2)
|
||||
};
|
||||
|
||||
|
||||
@ -277,8 +268,6 @@ void su2000_state::machine_start()
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(su2000_state::irq_callback),this));
|
||||
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, su2000_set_keyb_int);
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
void su2000_state::machine_reset()
|
||||
@ -319,6 +308,8 @@ static MACHINE_CONFIG_START( su2000, su2000_state )
|
||||
MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500)) // TODO
|
||||
|
||||
MCFG_FRAGMENT_ADD(pcat_common)
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
|
||||
|
@ -92,6 +92,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(taitowlf_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
DECLARE_DRIVER_INIT(taitowlf);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
#if !ENABLE_VGA
|
||||
@ -489,7 +490,7 @@ static ADDRESS_MAP_START(taitowlf_io, AS_IO, 32, taitowlf_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -634,6 +635,23 @@ void taitowlf_state::palette_init()
|
||||
}
|
||||
#endif
|
||||
|
||||
READ8_MEMBER(taitowlf_state::get_out2)
|
||||
{
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(taitowlf_state,get_out2)
|
||||
};
|
||||
|
||||
static MACHINE_CONFIG_START( taitowlf, taitowlf_state )
|
||||
|
||||
/* basic machine hardware */
|
||||
@ -655,6 +673,8 @@ static MACHINE_CONFIG_START( taitowlf, taitowlf_state )
|
||||
MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
|
||||
MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
#if ENABLE_VGA
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
@ -670,28 +690,6 @@ static MACHINE_CONFIG_START( taitowlf, taitowlf_state )
|
||||
#endif
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
{
|
||||
taitowlf_state *drvstate = machine.driver_data<taitowlf_state>();
|
||||
drvstate->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
taitowlf_state *drvstate = machine.driver_data<taitowlf_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int taitowlf_get_out2(running_machine &machine)
|
||||
{
|
||||
taitowlf_state *state = machine.driver_data<taitowlf_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, taitowlf_get_out2
|
||||
};
|
||||
|
||||
static void taitowlf_set_keyb_int(running_machine &machine, int state)
|
||||
{
|
||||
@ -707,7 +705,6 @@ DRIVER_INIT_MEMBER(taitowlf_state,taitowlf)
|
||||
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
/*****************************************************************************/
|
||||
|
@ -66,6 +66,7 @@ public:
|
||||
DECLARE_WRITE32_MEMBER(fdc_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(voyager_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_slave_ack);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
DECLARE_DRIVER_INIT(voyager);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
@ -421,7 +422,7 @@ static ADDRESS_MAP_START( voyager_io, AS_IO, 32, voyager_state )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -726,27 +727,21 @@ void voyager_state::machine_reset()
|
||||
membank("bank1")->set_base(memregion("bios")->base());
|
||||
}
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(voyager_state::get_out2)
|
||||
{
|
||||
voyager_state *state = machine.driver_data<voyager_state>();
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
voyager_state *drvstate = machine.driver_data<voyager_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int voyager_get_out2(running_machine &machine)
|
||||
{
|
||||
voyager_state *state = machine.driver_data<voyager_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, voyager_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(voyager_state,get_out2)
|
||||
};
|
||||
|
||||
static void voyager_set_keyb_int(running_machine &machine, int state)
|
||||
@ -774,9 +769,11 @@ static MACHINE_CONFIG_START( voyager, voyager_state )
|
||||
MCFG_PCI_BUS_LEGACY_DEVICE(0, NULL, intel82439tx_pci_r, intel82439tx_pci_w)
|
||||
MCFG_PCI_BUS_LEGACY_DEVICE(7, NULL, intel82371ab_pci_r, intel82371ab_pci_w)
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_trident_vga )
|
||||
|
||||
|
||||
/* sound hardware */
|
||||
MCFG_SPEAKER_STANDARD_STEREO("lspeaker","rspeaker")
|
||||
MACHINE_CONFIG_END
|
||||
@ -789,7 +786,6 @@ DRIVER_INIT_MEMBER(voyager_state,voyager)
|
||||
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
ROM_START( voyager )
|
||||
|
@ -113,6 +113,7 @@ public:
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack2_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(pc_dack3_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(xtom3d_pic8259_1_set_int_line);
|
||||
DECLARE_READ8_MEMBER(get_out2);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
IRQ_CALLBACK_MEMBER(irq_callback);
|
||||
@ -540,7 +541,7 @@ static ADDRESS_MAP_START(xtom3d_io, AS_IO, 32, xtom3d_state)
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff) /* todo: nvram (CMOS Setup Save)*/
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8(at_page8_r, at_page8_w, 0xffffffff)
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
@ -604,28 +605,21 @@ static const struct pic8259_interface xtom3d_pic8259_2_config =
|
||||
DEVCB_NULL
|
||||
};
|
||||
|
||||
static void set_gate_a20(running_machine &machine, int a20)
|
||||
READ8_MEMBER(xtom3d_state::get_out2)
|
||||
{
|
||||
xtom3d_state *state = machine.driver_data<xtom3d_state>();
|
||||
|
||||
state->m_maincpu->set_input_line(INPUT_LINE_A20, a20);
|
||||
}
|
||||
|
||||
static void keyboard_interrupt(running_machine &machine, int state)
|
||||
{
|
||||
xtom3d_state *drvstate = machine.driver_data<xtom3d_state>();
|
||||
pic8259_ir1_w(drvstate->m_pic8259_1, state);
|
||||
}
|
||||
|
||||
static int xtom3d_get_out2(running_machine &machine)
|
||||
{
|
||||
xtom3d_state *state = machine.driver_data<xtom3d_state>();
|
||||
return pit8253_get_output(state->m_pit8254, 2 );
|
||||
return pit8253_get_output( m_pit8254, 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_AT386, set_gate_a20, keyboard_interrupt, NULL, xtom3d_get_out2
|
||||
KBDC8042_AT386,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_A20),
|
||||
DEVCB_DEVICE_LINE_MEMBER("pic8259_1", pic8259_device, ir1_w),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(xtom3d_state,get_out2)
|
||||
};
|
||||
|
||||
static void xtom3d_set_keyb_int(running_machine &machine, int state)
|
||||
@ -654,7 +648,6 @@ void xtom3d_state::machine_start()
|
||||
m_maincpu->set_irq_acknowledge_callback(device_irq_acknowledge_delegate(FUNC(xtom3d_state::irq_callback),this));
|
||||
intel82439tx_init();
|
||||
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
}
|
||||
|
||||
void xtom3d_state::machine_reset()
|
||||
@ -689,6 +682,8 @@ static MACHINE_CONFIG_START( xtom3d, xtom3d_state )
|
||||
MCFG_IDE_CONTROLLER_ADD("ide", ide_devices, "hdd", NULL, true)
|
||||
MCFG_IDE_CONTROLLER_IRQ_HANDLER(DEVWRITELINE("pic8259_2", pic8259_device, ir6_w))
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
|
||||
/* video hardware */
|
||||
MCFG_FRAGMENT_ADD( pcvideo_vga )
|
||||
MACHINE_CONFIG_END
|
||||
|
@ -329,7 +329,7 @@ ADDRESS_MAP_START( pcat32_io_common, AS_IO, 32, driver_device )
|
||||
AM_RANGE(0x0000, 0x001f) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, 0xffffffff)
|
||||
AM_RANGE(0x0020, 0x003f) AM_DEVREADWRITE8_LEGACY("pic8259_1", pic8259_r, pic8259_w, 0xffffffff)
|
||||
AM_RANGE(0x0040, 0x005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, 0xffffffff)
|
||||
AM_RANGE(0x0060, 0x006f) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, 0xffffffff)
|
||||
AM_RANGE(0x0070, 0x007f) AM_RAM //AM_DEVREADWRITE8("rtc", mc146818_device, read, write, 0xffffffff)
|
||||
AM_RANGE(0x0080, 0x009f) AM_READWRITE8_LEGACY(dma_page_select_r,dma_page_select_w, 0xffffffff)//TODO
|
||||
AM_RANGE(0x00a0, 0x00bf) AM_DEVREADWRITE8_LEGACY("pic8259_2", pic8259_r, pic8259_w, 0xffffffff)
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include "machine/scsihd.h"
|
||||
#include "formats/pc_dsk.h"
|
||||
#include "machine/ram.h"
|
||||
#include "machine/8042kbdc.h"
|
||||
|
||||
READ8_MEMBER(bebox_state::at_dma8237_1_r) { return machine().device<i8237_device>("dma8237_2")->i8237_r(space, offset / 2); }
|
||||
WRITE8_MEMBER(bebox_state::at_dma8237_1_w) { machine().device<i8237_device>("dma8237_2")->i8237_w(space, offset / 2, data); }
|
||||
@ -48,7 +49,7 @@ static ADDRESS_MAP_START( bebox_mem, AS_PROGRAM, 64, bebox_state )
|
||||
AM_RANGE(0x80000000, 0x8000001F) AM_DEVREADWRITE8("dma8237_1", i8237_device, i8237_r, i8237_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000020, 0x8000003F) AM_DEVREADWRITE8_LEGACY("pic8259_master", pic8259_r, pic8259_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000040, 0x8000005f) AM_DEVREADWRITE8_LEGACY("pit8254", pit8253_r, pit8253_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000060, 0x8000006F) AM_READWRITE8_LEGACY(kbdc8042_8_r, kbdc8042_8_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000060, 0x8000006F) AM_DEVREADWRITE8("kbdc", kbdc8042_device, data_r, data_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000070, 0x8000007F) AM_DEVREADWRITE8("rtc", mc146818_device, read, write , U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x80000080, 0x8000009F) AM_READWRITE8(bebox_page_r, bebox_page_w, U64(0xffffffffffffffff) )
|
||||
AM_RANGE(0x800000A0, 0x800000BF) AM_DEVREADWRITE8_LEGACY("pic8259_slave", pic8259_r, pic8259_w, U64(0xffffffffffffffff) )
|
||||
@ -143,6 +144,38 @@ const struct mpc105_interface mpc105_config =
|
||||
0
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Keyboard
|
||||
*
|
||||
*************************************/
|
||||
|
||||
WRITE_LINE_MEMBER(bebox_state::bebox_keyboard_interrupt)
|
||||
{
|
||||
bebox_set_irq_bit(machine(), 16, state);
|
||||
if ( m_devices.pic8259_master ) {
|
||||
pic8259_ir1_w(m_devices.pic8259_master, state);
|
||||
}
|
||||
}
|
||||
|
||||
READ8_MEMBER(bebox_state::bebox_get_out2)
|
||||
{
|
||||
return pit8253_get_output(machine().device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface bebox_8042_interface =
|
||||
{
|
||||
KBDC8042_STANDARD,
|
||||
DEVCB_CPU_INPUT_LINE("ppc1", INPUT_LINE_RESET),
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_LINE_MEMBER(bebox_state,bebox_keyboard_interrupt),
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(bebox_state,bebox_get_out2)
|
||||
};
|
||||
|
||||
static SLOT_INTERFACE_START( pci_devices )
|
||||
SLOT_INTERFACE_INTERNAL("mpc105", MPC105)
|
||||
SLOT_INTERFACE("cirrus", CIRRUS)
|
||||
@ -203,6 +236,7 @@ static MACHINE_CONFIG_START( bebox, bebox_state )
|
||||
|
||||
MCFG_MC146818_ADD( "rtc", MC146818_STANDARD )
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", bebox_8042_interface)
|
||||
/* internal ram */
|
||||
MCFG_RAM_ADD(RAM_TAG)
|
||||
MCFG_RAM_DEFAULT_SIZE("32M")
|
||||
|
@ -100,7 +100,8 @@ public:
|
||||
m_mainram(*this, "mainram"),
|
||||
m_lpt0(*this, "lpt_0"),
|
||||
m_pit(*this, "pit8254"),
|
||||
m_dac(*this, "dac")
|
||||
m_dac(*this, "dac"),
|
||||
m_kbdc8042(*this, "kbdc")
|
||||
{ }
|
||||
|
||||
RTC_t m_RTC;
|
||||
@ -130,6 +131,7 @@ public:
|
||||
DECLARE_READ32_MEMBER(hpc3_unkpbus0_r);
|
||||
DECLARE_WRITE32_MEMBER(hpc3_unkpbus0_w);
|
||||
DECLARE_WRITE_LINE_MEMBER(scsi_irq);
|
||||
DECLARE_READ8_MEMBER(ip22_get_out2);
|
||||
DECLARE_DRIVER_INIT(ip225015);
|
||||
virtual void machine_start();
|
||||
virtual void machine_reset();
|
||||
@ -143,6 +145,7 @@ public:
|
||||
required_device<device_t> m_lpt0;
|
||||
required_device<pit8254_device> m_pit;
|
||||
required_device<dac_device> m_dac;
|
||||
required_device<kbdc8042_device> m_kbdc8042;
|
||||
inline void ATTR_PRINTF(3,4) verboselog(int n_level, const char *s_fmt, ... );
|
||||
void int3_raise_local0_irq(UINT8 source_mask);
|
||||
void int3_lower_local0_irq(UINT8 source_mask);
|
||||
@ -281,9 +284,9 @@ READ32_MEMBER(ip22_state::hpc3_pbus6_r)
|
||||
//verboselog(2, "Serial 2 Command Transfer Read, 0x1fbd9838: %02x\n", 0x04 );
|
||||
return 0x00000004;
|
||||
case 0x40/4:
|
||||
return kbdc8042_8_r(space, 0);
|
||||
return m_kbdc8042->data_r(space, 0);
|
||||
case 0x44/4:
|
||||
return kbdc8042_8_r(space, 4);
|
||||
return m_kbdc8042->data_r(space, 4);
|
||||
case 0x58/4:
|
||||
return 0x20; // chip rev 1, board rev 0, "Guinness" (Indy) => 0x01 for "Full House" (Indigo2)
|
||||
case 0x80/4:
|
||||
@ -365,10 +368,10 @@ WRITE32_MEMBER(ip22_state::hpc3_pbus6_w)
|
||||
}
|
||||
break;
|
||||
case 0x40/4:
|
||||
kbdc8042_8_w(space, 0, data);
|
||||
m_kbdc8042->data_w(space, 0, data);
|
||||
break;
|
||||
case 0x44/4:
|
||||
kbdc8042_8_w(space, 4, data);
|
||||
m_kbdc8042->data_w(space, 4, data);
|
||||
break;
|
||||
case 0x80/4:
|
||||
case 0x84/4:
|
||||
@ -1475,10 +1478,9 @@ static const struct WD33C93interface wd33c93_intf =
|
||||
DEVCB_DRIVER_LINE_MEMBER(ip22_state,scsi_irq) /* command completion IRQ */
|
||||
};
|
||||
|
||||
static int ip22_get_out2(running_machine &machine)
|
||||
READ8_MEMBER(ip22_state::ip22_get_out2)
|
||||
{
|
||||
ip22_state *state = machine.driver_data<ip22_state>();
|
||||
return pit8253_get_output(state->m_pit, 2 );
|
||||
return pit8253_get_output(m_pit, 2 );
|
||||
}
|
||||
|
||||
void ip22_state::machine_start()
|
||||
@ -1490,17 +1492,23 @@ void ip22_state::machine_start()
|
||||
machine().device<nvram_device>("nvram")->set_base(m_RTC.nRAM, 0x200);
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_STANDARD,
|
||||
DEVCB_CPU_INPUT_LINE("maincpu", INPUT_LINE_RESET),
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
DEVCB_NULL,
|
||||
|
||||
DEVCB_NULL,
|
||||
DEVCB_DRIVER_MEMBER(ip22_state,ip22_get_out2)
|
||||
};
|
||||
|
||||
DRIVER_INIT_MEMBER(ip22_state,ip225015)
|
||||
{
|
||||
static const struct kbdc8042_interface at8042 =
|
||||
{
|
||||
KBDC8042_STANDARD, NULL, NULL, NULL, ip22_get_out2
|
||||
};
|
||||
|
||||
// IP22 uses 2 pieces of PC-compatible hardware: the 8042 PS/2 keyboard/mouse
|
||||
// interface and the 8254 PIT. Both are licensed cores embedded in the IOC custom chip.
|
||||
init_pc_common(machine(), PCCOMMON_KEYBOARD_AT, NULL);
|
||||
kbdc8042_init(machine(), &at8042);
|
||||
|
||||
m_nIOC_ParReadCnt = 0;
|
||||
}
|
||||
@ -1637,7 +1645,8 @@ static MACHINE_CONFIG_START( ip225015, ip22_state )
|
||||
MCFG_SOUND_MODIFY( "scsi:cdrom:cdda" )
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^lspeaker", 1.0)
|
||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "^^^rspeaker", 1.0)
|
||||
|
||||
|
||||
MCFG_KBDC8042_ADD("kbdc", at8042)
|
||||
MACHINE_CONFIG_END
|
||||
|
||||
static MACHINE_CONFIG_DERIVED( ip224613, ip225015 )
|
||||
|
@ -90,6 +90,9 @@ public:
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(bebox_ide_interrupt);
|
||||
|
||||
DECLARE_WRITE_LINE_MEMBER(bebox_keyboard_interrupt);
|
||||
DECLARE_READ8_MEMBER(bebox_get_out2);
|
||||
|
||||
void fdc_interrupt(bool state);
|
||||
void fdc_dma_drq(bool state);
|
||||
DECLARE_FLOPPY_FORMATS( floppy_formats );
|
||||
|
@ -153,7 +153,7 @@ public:
|
||||
void pc_speaker_set_spkrdata(UINT8 data);
|
||||
void pc_speaker_set_input(UINT8 data);
|
||||
void pcjr_keyb_init();
|
||||
void mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int));
|
||||
void mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int));
|
||||
void pc_rtc_init();
|
||||
|
||||
TIMER_CALLBACK_MEMBER(pc_turbo_callback);
|
||||
@ -165,7 +165,6 @@ public:
|
||||
|
||||
};
|
||||
|
||||
void pc_set_irq_line(running_machine &machine,int irq, int state);
|
||||
void pc_set_keyb_int(running_machine &machine, int state);
|
||||
|
||||
/*----------- defined in machine/pc.c -----------*/
|
||||
|
@ -139,7 +139,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc1640)
|
||||
io_space.install_read_handler(0x278, 0x27b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port278_r),this), 0xffff);
|
||||
io_space.install_read_handler(0x4278, 0x427b, read8_delegate(FUNC(amstrad_pc_state::pc1640_port4278_r),this), 0xffff);
|
||||
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
}
|
||||
|
||||
|
||||
@ -152,7 +152,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc200)
|
||||
for (i = 0; i < 256; i++)
|
||||
gfx[i] = i;
|
||||
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(amstrad_pc_state,ppc512)
|
||||
@ -164,7 +164,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,ppc512)
|
||||
for (i = 0; i < 256; i++)
|
||||
gfx[i] = i;
|
||||
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
}
|
||||
DRIVER_INIT_MEMBER(amstrad_pc_state,pc1512)
|
||||
{
|
||||
@ -175,7 +175,7 @@ DRIVER_INIT_MEMBER(amstrad_pc_state,pc1512)
|
||||
for (i = 0; i < 256; i++)
|
||||
gfx[i] = i;
|
||||
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
}
|
||||
|
||||
WRITE8_MEMBER( amstrad_pc_state::pc1640_port60_w )
|
||||
|
@ -104,7 +104,6 @@
|
||||
#include "machine/idectrl.h"
|
||||
#include "machine/pci.h"
|
||||
#include "machine/intelfsh.h"
|
||||
#include "machine/8042kbdc.h"
|
||||
#include "machine/53c810.h"
|
||||
#include "machine/ram.h"
|
||||
|
||||
@ -835,35 +834,6 @@ WRITE8_MEMBER(bebox_state::bebox_flash_w )
|
||||
flash->write(offset, data);
|
||||
}
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* Keyboard
|
||||
*
|
||||
*************************************/
|
||||
|
||||
static void bebox_keyboard_interrupt(running_machine &machine,int state)
|
||||
{
|
||||
bebox_state *drvstate = machine.driver_data<bebox_state>();
|
||||
bebox_set_irq_bit(machine, 16, state);
|
||||
if ( drvstate->m_devices.pic8259_master ) {
|
||||
pic8259_ir1_w(drvstate->m_devices.pic8259_master, state);
|
||||
}
|
||||
}
|
||||
|
||||
static int bebox_get_out2(running_machine &machine) {
|
||||
return pit8253_get_output(machine.device("pit8254"), 2 );
|
||||
}
|
||||
|
||||
static const struct kbdc8042_interface bebox_8042_interface =
|
||||
{
|
||||
KBDC8042_STANDARD,
|
||||
NULL,
|
||||
bebox_keyboard_interrupt,
|
||||
NULL,
|
||||
bebox_get_out2
|
||||
};
|
||||
|
||||
|
||||
/*************************************
|
||||
*
|
||||
* SCSI
|
||||
@ -1046,9 +1016,7 @@ DRIVER_INIT_MEMBER(bebox_state,bebox)
|
||||
space_0.install_readwrite_bank(0, machine().device<ram_device>(RAM_TAG)->size() - 1, 0, 0x02000000, "bank3");
|
||||
space_1.install_readwrite_bank(0, machine().device<ram_device>(RAM_TAG)->size() - 1, 0, 0x02000000, "bank3");
|
||||
membank("bank3")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
|
||||
|
||||
kbdc8042_init(machine(), &bebox_8042_interface);
|
||||
|
||||
|
||||
/* The following is a verrrry ugly hack put in to support NetBSD for
|
||||
* NetBSD. When NetBSD/bebox it does most of its work on CPU #0 and then
|
||||
* lets CPU #1 go. However, it seems that CPU #1 jumps into never-never
|
||||
|
@ -372,7 +372,7 @@ DRIVER_INIT_MEMBER(europc_pc_state,europc)
|
||||
rom[0xfffff]=256-a;
|
||||
}
|
||||
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
|
||||
europc_rtc_init();
|
||||
// europc_rtc_set_time();
|
||||
|
@ -1156,7 +1156,7 @@ void pc_state::fdc_dma_drq(bool state)
|
||||
m_dma8237->dreq2_w( state );
|
||||
}
|
||||
|
||||
void pc_set_irq_line(running_machine &machine,int irq, int state)
|
||||
static void pc_set_irq_line(running_machine &machine,int irq, int state)
|
||||
{
|
||||
pc_state *st = machine.driver_data<pc_state>();
|
||||
|
||||
@ -1330,7 +1330,7 @@ READ8_MEMBER(pc_state::mc1502_wd17xx_motor_r)
|
||||
*
|
||||
**********************************************************/
|
||||
|
||||
void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int))
|
||||
void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(running_machine &, int))
|
||||
{
|
||||
if ( set_keyb_int_func != NULL )
|
||||
init_pc_common(machine(), flags, set_keyb_int_func);
|
||||
@ -1343,43 +1343,43 @@ void pc_state::mess_init_pc_common(UINT32 flags, void (*set_keyb_int_func)(runni
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,ibm5150)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL);
|
||||
pc_rtc_init();
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,pccga)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL);
|
||||
pc_rtc_init();
|
||||
}
|
||||
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,bondwell)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, NULL);
|
||||
pc_turbo_setup(4.77/12, 1);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,pcmda)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,t1000hx)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pc_set_keyb_int);
|
||||
pc_turbo_setup(4.77/12, 1);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,pcjr)
|
||||
{
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pcjr_set_keyb_int, pc_set_irq_line);
|
||||
mess_init_pc_common(PCCOMMON_KEYBOARD_PC, pcjr_set_keyb_int);
|
||||
}
|
||||
|
||||
DRIVER_INIT_MEMBER(pc_state,mc1502)
|
||||
{
|
||||
mess_init_pc_common(0, NULL, pc_set_irq_line);
|
||||
mess_init_pc_common(0, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user