summaryrefslogtreecommitdiffstatshomepage
path: root/src/mess/machine/amigakbd.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mess/machine/amigakbd.c')
-rw-r--r--src/mess/machine/amigakbd.c67
1 files changed, 35 insertions, 32 deletions
diff --git a/src/mess/machine/amigakbd.c b/src/mess/machine/amigakbd.c
index 5bd49545dab..f8f103e5cb2 100644
--- a/src/mess/machine/amigakbd.c
+++ b/src/mess/machine/amigakbd.c
@@ -21,7 +21,11 @@ const device_type AMIGAKBD = &device_creator<amigakbd_device>;
amigakbd_device::amigakbd_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, AMIGAKBD, "Amiga Keyboard", tag, owner, clock, "amigakbd", __FILE__),
m_write_kclk(*this),
- m_write_kdat(*this)
+ m_write_kdat(*this),
+ m_buf(NULL),
+ m_buf_pos(0),
+ m_cur_pos(0),
+ m_timer(NULL)
{
}
@@ -36,8 +40,6 @@ void amigakbd_device::device_start()
/* allocate a keyboard buffer */
m_buf = auto_alloc_array(machine(), UINT8, KEYBOARD_BUFFER_SIZE);
- m_buf_pos = 0;
- m_cur_pos = 0;
m_timer = timer_alloc(0);
m_timer->reset();
}
@@ -82,46 +84,33 @@ void amigakbd_device::device_timer(emu_timer &timer, device_timer_id id, int par
}
}
-INPUT_CHANGED_MEMBER(amigakbd_device::kbd_update)
+INPUT_CHANGED_MEMBER( amigakbd_device::kbd_update )
{
int index = (int)(FPTR)param, i;
UINT32 oldvalue = oldval * field.mask(), newvalue = newval * field.mask();
UINT32 delta = oldvalue ^ newvalue;
- /* Special case Page UP, which we will use as Action Replay button */
- if ( (index == 3) && ( delta & 0x80000000 ) && ( newvalue & 0x80000000 ) )
- {
- const amiga_machine_interface *amiga_intf = amiga_get_interface(machine());
+ int key_buf_was_empty = ( m_buf_pos == m_cur_pos ) ? 1 : 0;
- if ( amiga_intf != NULL && amiga_intf->nmi_callback )
- {
- (*amiga_intf->nmi_callback)(machine());
- }
- }
- else
+ for( i = 0; i < 32; i++ )
{
- int key_buf_was_empty = ( m_buf_pos == m_cur_pos ) ? 1 : 0;
-
- for( i = 0; i < 32; i++ )
+ if ( delta & ( 1 << i ) )
{
- if ( delta & ( 1 << i ) )
- {
- int down = ( newvalue & ( 1 << i ) ) ? 0 : 1;
- int scancode = ( ( (index*32)+i ) << 1 ) | down;
- int amigacode = ~scancode;
-
- /* add the keycode to the buffer */
- m_buf[m_buf_pos++] = amigacode & 0xff;
- m_buf_pos %= KEYBOARD_BUFFER_SIZE;
- }
- }
+ int down = ( newvalue & ( 1 << i ) ) ? 0 : 1;
+ int scancode = ( ( (index*32)+i ) << 1 ) | down;
+ int amigacode = ~scancode;
- /* if the buffer was empty and we have new data, start a timer to send the keystrokes */
- if ( key_buf_was_empty && ( m_buf_pos != m_cur_pos ) )
- {
- m_timer->adjust(machine().first_screen()->frame_period() / 4);
+ /* add the keycode to the buffer */
+ m_buf[m_buf_pos++] = amigacode & 0xff;
+ m_buf_pos %= KEYBOARD_BUFFER_SIZE;
}
}
+
+ /* if the buffer was empty and we have new data, start a timer to send the keystrokes */
+ if ( key_buf_was_empty && ( m_buf_pos != m_cur_pos ) )
+ {
+ m_timer->adjust(machine().first_screen()->frame_period() / 4);
+ }
}
/*********************************************************************************************/
@@ -274,3 +263,17 @@ ioport_constructor amigakbd_device::device_input_ports() const
{
return INPUT_PORTS_NAME( amiga_us_keyboard );
}
+
+//-------------------------------------------------
+// rom_region - device-specific ROM region
+//-------------------------------------------------
+
+ROM_START( keyboard_mpu )
+ ROM_REGION(0x800, "keyboard", 0)
+ ROM_LOAD("328191-01.ic1", 0x000, 0x800, NO_DUMP)
+ROM_END
+
+const rom_entry *amigakbd_device::device_rom_region() const
+{
+ return ROM_NAME( keyboard_mpu );
+}