8042kbdc is now device (nw)

This commit is contained in:
Miodrag Milanovic 2013-04-19 09:44:55 +00:00
parent abedd24d6e
commit 3dff6ae3ad
26 changed files with 553 additions and 523 deletions

View File

@ -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;
}
}

View File

@ -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);
void kbdc8042_init(running_machine &machine, const struct kbdc8042_interface *intf);
DECLARE_READ8_MEMBER( data_r );
DECLARE_WRITE8_MEMBER( data_w );
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 */

View File

@ -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)
@ -938,6 +933,8 @@ static MACHINE_CONFIG_START( calchase, calchase_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 )
@ -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));
}

View File

@ -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)

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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)
@ -796,13 +791,14 @@ static MACHINE_CONFIG_START( gammagic, gammagic_state )
/* video hardware */
MCFG_FRAGMENT_ADD( pcvideo_vga )
MCFG_KBDC8042_ADD("kbdc", at8042)
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());
}

View File

@ -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,30 +1226,6 @@ 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)
{
@ -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

View File

@ -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

View File

@ -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

View File

@ -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
/***************************************

View File

@ -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

View File

@ -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

View File

@ -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 )

View File

@ -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

View File

@ -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);
}
/*****************************************************************************/

View File

@ -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,6 +769,8 @@ 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 )
@ -789,7 +786,6 @@ DRIVER_INIT_MEMBER(voyager_state,voyager)
intel82439tx_init();
kbdc8042_init(machine(), &at8042);
}
ROM_START( voyager )

View File

@ -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

View File

@ -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)

View File

@ -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")

View File

@ -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;
}
@ -1638,6 +1646,7 @@ static MACHINE_CONFIG_START( ip225015, ip22_state )
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 )

View File

@ -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 );

View File

@ -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 -----------*/

View File

@ -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 )

View File

@ -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
@ -1047,8 +1017,6 @@ DRIVER_INIT_MEMBER(bebox_state,bebox)
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

View File

@ -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();

View File

@ -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);
}