diff options
author | cracyc <cracyc@users.noreply.github.com> | 2014-03-31 02:43:25 +0000 |
---|---|---|
committer | cracyc <cracyc@users.noreply.github.com> | 2014-03-31 02:43:25 +0000 |
commit | d6bdfb79dc2b8a752c438a90a24647df69d8bead (patch) | |
tree | 4ac0f1ecfcf52cc58dbede5ea64c146ce4f6b375 /src/mess/drivers/europc.c | |
parent | 6a9842da8c0556e6336b803952cb44dac82c77a7 (diff) |
pckeybrd: make into a device (nw)
Diffstat (limited to 'src/mess/drivers/europc.c')
-rw-r--r-- | src/mess/drivers/europc.c | 83 |
1 files changed, 8 insertions, 75 deletions
diff --git a/src/mess/drivers/europc.c b/src/mess/drivers/europc.c index 97f6f5d8269..e9c5e34d6b9 100644 --- a/src/mess/drivers/europc.c +++ b/src/mess/drivers/europc.c @@ -13,12 +13,14 @@ public: driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_mb(*this, "mb"), + m_keyboard(*this, "pc_keyboard"), m_jim_state(0), m_port61(0) { } required_device<cpu_device> m_maincpu; required_device<pc_noppi_mb_device> m_mb; + required_device<pc_keyboard_device> m_keyboard; isa8_aga_device *m_aga; DECLARE_WRITE8_MEMBER( europc_pio_w ); @@ -31,8 +33,6 @@ public: DECLARE_READ8_MEMBER( europc_rtc_r ); DECLARE_WRITE8_MEMBER( europc_rtc_w ); - TIMER_DEVICE_CALLBACK_MEMBER(pc_frame_interrupt); - DECLARE_DRIVER_INIT(europc); void europc_rtc_set_time(); @@ -47,20 +47,11 @@ public: void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); emu_timer* m_rtc_timer; - emu_timer* m_keyboard_timer; enum { - TIMER_KEYBOARD, TIMER_RTC }; - - void pc_keyboard(); - void pc_keyb_set_clock(bool on); - - bool m_pc_keyb_self_test; - bool m_pc_keyb_on; - UINT8 m_pc_keyb_data; }; /* @@ -289,16 +280,6 @@ void europc_pc_state::device_timer(emu_timer &timer, device_timer_id id, int par } } break; - - case TIMER_KEYBOARD: - if ( m_pc_keyb_on ) { - pc_keyboard(); - } else { - /* Clock has been low for more than 5 msec, start diagnostic test */ - at_keyboard_reset(machine()); - m_pc_keyb_self_test = 1; - } - break; } } @@ -367,16 +348,7 @@ DRIVER_INIT_MEMBER(europc_pc_state,europc) machine().device<nvram_device>("nvram")->set_base(m_rtc_data, sizeof(m_rtc_data)); m_aga = machine().device<isa8_aga_device>("aga:aga"); - - at_keyboard_init(machine(), AT_KEYBOARD_TYPE_PC); - at_keyboard_set_scan_code_set(1); - m_keyboard_timer = timer_alloc(TIMER_KEYBOARD); -} -TIMER_DEVICE_CALLBACK_MEMBER(europc_pc_state::pc_frame_interrupt) -{ - if(!(param % 64)) - pc_keyboard(); } WRITE8_MEMBER( europc_pc_state::europc_pio_w ) @@ -387,12 +359,9 @@ WRITE8_MEMBER( europc_pc_state::europc_pio_w ) m_port61=data; m_mb->m_pit8253->write_gate2(BIT(data, 0)); m_mb->pc_speaker_set_spkrdata(BIT(data, 1)); - pc_keyb_set_clock(BIT(data, 6)); + m_keyboard->enable(BIT(data, 6)); if(data & 0x80) - { - m_pc_keyb_data = 0; m_mb->m_pic8259->ir1_w(0); - } break; } @@ -406,8 +375,7 @@ READ8_MEMBER( europc_pc_state::europc_pio_r ) switch (offset) { case 0: - if (!(m_port61&0x80)) - data = m_pc_keyb_data; + data = m_keyboard->read(space, 0); break; case 1: data = m_port61; @@ -420,43 +388,6 @@ READ8_MEMBER( europc_pc_state::europc_pio_r ) return data; } -void europc_pc_state::pc_keyb_set_clock(bool on) -{ - if (m_pc_keyb_on != on) - { - if (!on) - m_keyboard_timer->adjust(attotime::from_msec(5)); - else { - if ( m_pc_keyb_self_test ) { - /* The self test of the keyboard takes some time. 2 msec seems to work. */ - /* This still needs to verified against a real keyboard. */ - m_keyboard_timer->adjust(attotime::from_msec( 2 )); - } else { - m_keyboard_timer->reset(); - m_pc_keyb_self_test = 0; - } - } - - m_pc_keyb_on = on; - } -} - -void europc_pc_state::pc_keyboard(void) -{ - int data; - - at_keyboard_polling(); - - if (m_pc_keyb_on) - { - if ( (data=at_keyboard_read())!=-1) { - m_pc_keyb_data = data; - m_mb->m_pic8259->ir1_w(1); - m_pc_keyb_self_test = 0; - } - } -} - /* layout of an uk europc @@ -522,8 +453,9 @@ static INPUT_PORTS_START( europc ) PORT_BIT(0x0080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F11") PORT_CODE(KEYCODE_F11) /* F11 57 D7 */ PORT_BIT(0x0100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("F12") PORT_CODE(KEYCODE_F12) /* F12 58 D8 */ - PORT_MODIFY("pc_keyboard_6") /* IN10 */\ + PORT_START("pc_keyboard_6") /* IN10 */\ PORT_BIT(0x0001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("KP Enter") PORT_CODE(KEYCODE_ENTER_PAD) /* PAD Enter 60 e0 */ + PORT_BIT(0xfffe, IP_ACTIVE_HIGH, IPT_UNUSED) INPUT_PORTS_END static ADDRESS_MAP_START( europc_map, AS_PROGRAM, 8, europc_pc_state ) @@ -547,7 +479,6 @@ static MACHINE_CONFIG_START( europc, europc_pc_state ) MCFG_CPU_ADD("maincpu", I8088, 4772720*2) MCFG_CPU_PROGRAM_MAP(europc_map) MCFG_CPU_IO_MAP(europc_io) - MCFG_TIMER_DRIVER_ADD_PERIODIC("scantimer", europc_pc_state, pc_frame_interrupt, attotime::from_hz(60)) MCFG_PCNOPPI_MOTHERBOARD_ADD("mb", "maincpu") @@ -555,6 +486,8 @@ static MACHINE_CONFIG_START( europc, europc_pc_state ) MCFG_ISA8_SLOT_ADD("mb:isa", "isa2", pc_isa8_cards, "lpt", false) MCFG_ISA8_SLOT_ADD("mb:isa", "isa3", pc_isa8_cards, "com", false) MCFG_ISA8_SLOT_ADD("mb:isa", "isa4", pc_isa8_cards, "fdc_xt", false) + + MCFG_PC_KEYB_ADD("pc_keyboard", DEVWRITELINE("mb:pic8259", pic8259_device, ir1_w)) MCFG_NVRAM_ADD_0FILL("nvram"); |