summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
author shattered <shattered@users.noreply.github.com>2020-11-12 14:27:07 +0000
committer GitHub <noreply@github.com>2020-11-13 01:27:07 +1100
commitd474634169b36166ca45f92b1921d4243ef20138 (patch)
tree7384b17e2bc99c44031dd36f19451a3038e03864 /src/devices
parenta0fdb99497418b62496b55d7d73088de44739116 (diff)
ie15: update logging, use device_matrix_keyboard_interface (#7463)
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/machine/ie15.cpp85
-rw-r--r--src/devices/machine/ie15.h2
-rw-r--r--src/devices/machine/ie15_kbd.cpp175
-rw-r--r--src/devices/machine/ie15_kbd.h27
4 files changed, 127 insertions, 162 deletions
diff --git a/src/devices/machine/ie15.cpp b/src/devices/machine/ie15.cpp
index eba7ace6fa7..1555e1cb645 100644
--- a/src/devices/machine/ie15.cpp
+++ b/src/devices/machine/ie15.cpp
@@ -19,17 +19,24 @@
#include "ie15.lh"
-#define VERBOSE_DBG 1 /* general debug messages */
+//#define LOG_GENERAL (1U << 0) //defined in logmacro.h already
+#define LOG_RAM (1U << 1)
+#define LOG_CPU (1U << 2)
+#define LOG_KBD (1U << 3)
+#define LOG_SCANLINE (1U << 4)
+#define LOG_SERIAL (1U << 5)
-#define DBG_LOG(N,M,A) \
- do { \
- if(VERBOSE_DBG>=N) \
- { \
- if( M ) \
- logerror("%11.6f at %s: %-10s",machine().time().as_double(),machine().describe_context(),(char*)M ); \
- logerror A; \
- } \
- } while (0)
+#define VERBOSE (LOG_GENERAL|LOG_KBD)
+//#define LOG_OUTPUT_FUNC printf
+#include "logmacro.h"
+
+#define LOGM(...) LOGMASKED(LOG_RAM, __VA_ARGS__)
+#define LOGCPU(...) LOGMASKED(LOG_CPU, __VA_ARGS__)
+#define LOGKBD(...) LOGMASKED(LOG_KBD, __VA_ARGS__)
+#define LOGSERIAL(...) LOGMASKED(LOG_SERIAL, __VA_ARGS__)
+
+
+#define _PRINT(ch) (std::isprint(ch & 127)?(ch & 127):' ')
ie15_device::ie15_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
@@ -75,7 +82,7 @@ uint8_t ie15_device::mem_r()
ret = m_p_videoram[m_video.ptr1];
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_video.ptr1 >= SCREEN_PAGE)
{
- DBG_LOG(2, "memory", ("R @ %03x == %02x\n", m_video.ptr1, ret));
+ LOGM("memory R @ %03x == %02x\n", m_video.ptr1, ret);
}
m_video.ptr1++;
m_video.ptr1 &= 0xfff;
@@ -89,7 +96,7 @@ void ie15_device::mem_w(uint8_t data)
{
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && m_video.ptr1 >= SCREEN_PAGE)
{
- DBG_LOG(2, "memory", ("W @ %03x <- %02x\n", m_video.ptr1, data));
+ LOGM("memory W @ %03x <- %02x\n", m_video.ptr1, data);
}
m_p_videoram[m_video.ptr1++] = data;
m_video.ptr1 &= 0xfff;
@@ -100,7 +107,7 @@ void ie15_device::mem_addr_inc_w(uint8_t data)
{
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
{
- DBG_LOG(2, "memory", ("++ %03x\n", m_video.ptr1));
+ LOGM("memory addr ++ %03x\n", m_video.ptr1);
}
m_video.ptr1++;
m_video.ptr1 &= 0xfff;
@@ -111,7 +118,7 @@ void ie15_device::mem_addr_dec_w(uint8_t data)
{
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
{
- DBG_LOG(2, "memory", ("-- %03x\n", m_video.ptr1));
+ LOGM("memory addr -- %03x\n", m_video.ptr1);
}
m_video.ptr1--;
m_video.ptr1 &= 0xfff;
@@ -126,7 +133,7 @@ void ie15_device::mem_addr_lo_w(uint8_t data)
tmp |= ((data >> 4) & 0xf);
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
{
- DBG_LOG(2, "memory", ("lo %03x <- %02x = %03x\n", m_video.ptr1, data, tmp));
+ LOGM("memory addr lo %03x <- %02x = %03x\n", m_video.ptr1, data, tmp);
}
m_video.ptr1 = tmp;
if (m_video.enable) m_video.ptr2 = tmp;
@@ -140,7 +147,7 @@ void ie15_device::mem_addr_hi_w(uint8_t data)
tmp |= (data << 4);
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
{
- DBG_LOG(2, "memory", ("hi %03x <- %02x = %03x\n", m_video.ptr1, data, tmp));
+ LOGM("memory addr hi %03x <- %02x = %03x\n", m_video.ptr1, data, tmp);
}
m_video.ptr1 = tmp;
if (m_video.enable) m_video.ptr2 = tmp;
@@ -157,7 +164,7 @@ void ie15_device::beep_w(uint8_t data)
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0)
{
- DBG_LOG(1, "beep", ("(%s)\n", m_long_beep ? "short" : "long"));
+ LOG("beep (%s)\n", m_long_beep ? "short" : "long");
}
machine().scheduler().timer_set(attotime::from_msec(length), timer_expired_delegate(FUNC(ie15_device::ie15_beepoff),this));
m_beeper->set_state(1);
@@ -168,7 +175,7 @@ void ie15_device::beep_w(uint8_t data)
// active high
uint8_t ie15_device::kb_r()
{
- DBG_LOG(2, "keyboard", ("R %02X '%c'\n", m_kb_data, m_kb_data < 0x20 ? ' ' : m_kb_data));
+ LOGKBD("keyboard data R %02X '%c'\n", m_kb_data, _PRINT(m_kb_data));
return m_kb_data;
}
@@ -178,7 +185,7 @@ uint8_t ie15_device::kb_ready_r()
m_kb_flag &= IE_TRUE;
if (m_kb_flag != m_kb_flag0)
{
- DBG_LOG(2, "keyboard", ("? %c\n", m_kb_flag ? 'n' : 'y'));
+ LOGKBD("keyboard ready? %c\n", m_kb_flag ? 'n' : 'y');
m_kb_flag0 = m_kb_flag;
}
return m_kb_flag;
@@ -187,7 +194,7 @@ uint8_t ie15_device::kb_ready_r()
// active low
void ie15_device::kb_ready_w(uint8_t data)
{
- DBG_LOG(2, "keyboard", ("clear ready\n"));
+ LOGKBD("keyboard clear ready\n");
m_kb_flag = IE_TRUE | ie15_keyboard_device::IE_KB_ACK;
}
@@ -201,7 +208,7 @@ uint8_t ie15_device::kb_s_red_r()
// active high; active = setup mode
uint8_t ie15_device::kb_s_sdv_r()
{
- return m_kb_control & ie15_keyboard_device::IE_KB_SDV ? IE_TRUE : 0;
+ return m_kbd_sdv ? IE_TRUE : 0;
}
// active high; active = keypress detected on aux keypad
@@ -283,13 +290,13 @@ uint8_t ie15_device::serial_tx_ready_r()
uint8_t ie15_device::serial_r()
{
m_serial_rx_ready = IE_TRUE;
- DBG_LOG(1,"serial",("R %02X '%c'\n", m_serial_rx_char, m_serial_rx_char < 0x20?' ':m_serial_rx_char&127));
+ LOGSERIAL("serial R %02X '%c'\n", m_serial_rx_char, _PRINT(m_serial_rx_char));
return m_serial_rx_char;
}
void ie15_device::serial_w(uint8_t data)
{
- DBG_LOG(1, "serial", ("W %02X '%c'\n", data, data < 0x20 ? ' ' : data & 127));
+ LOGSERIAL("serial W %02X '%c'\n", data, _PRINT(data));
m_serial_tx_ready = IE_FALSE;
transmit_register_setup(data);
@@ -335,7 +342,7 @@ uint8_t ie15_device::flag_r(offs_t offset)
}
if (machine().debug_flags & DEBUG_FLAG_ENABLED)
{
- DBG_LOG(2, "flag", ("read %d: ?\n", offset));
+ LOGCPU("flag read %d: ?\n", offset);
}
return 0;
}
@@ -358,13 +365,14 @@ void ie15_device::flag_w(offs_t offset, uint8_t data)
break;
case 4:
m_kb_ruslat = data;
+ m_keyboard->set_ruslat(!!data);
break;
default:
break;
}
if ((machine().debug_flags & DEBUG_FLAG_ENABLED) != 0 && !offset)
{
- DBG_LOG(2, "flag", ("%sset %d\n", data ? "" : "re", offset));
+ LOGCPU("flag %sset %d\n", data ? "" : "re", offset);
}
}
@@ -453,8 +461,7 @@ INPUT_PORTS_END
void ie15_device::kbd_put(uint16_t data)
{
- DBG_LOG(2,"keyboard",("W %02X<-%02X '%c' %02X (%c)\n", m_kb_data, data, 'x' /* data < 0x20 ? ' ' : (data & 255) */,
- m_kb_flag, m_kb_flag ? 'n' : 'y'));
+ LOGKBD("keyboard data W %02X<-%02X '%c' %02X (%c)\n", m_kb_data, data, _PRINT(data), m_kb_flag, m_kb_flag ? 'n' : 'y');
m_kb_control = (data >> 8) & 255;
// send new key only when firmware has processed previous one
if (m_kb_flag == IE_TRUE)
@@ -464,6 +471,11 @@ void ie15_device::kbd_put(uint16_t data)
}
}
+WRITE_LINE_MEMBER( ie15_device::kbd_sdv )
+{
+ m_kbd_sdv = state;
+}
+
void ie15_device::device_resolve_objects()
{
m_rs232_conn_dtr_handler.resolve_safe();
@@ -497,6 +509,7 @@ void ie15_device::device_reset()
memset(&m_video, 0, sizeof(m_video));
m_kb_ruslat = m_long_beep = m_kb_control = m_kb_data = m_kb_flag0 = 0;
m_kb_flag = IE_TRUE;
+ m_kbd_sdv = false;
m_hblank = 1;
m_hblank_timer->adjust(m_screen->time_until_pos(0, IE15_HORZ_START));
@@ -597,14 +610,14 @@ void ie15_device::update_leds()
m_dup_led = BIT(data, ie15_keyboard_device::IE_KB_DUP_BIT) ^ 1;
m_lin_led = BIT(data, ie15_keyboard_device::IE_KB_LIN_BIT) ^ 1;
m_red_led = BIT(data, ie15_keyboard_device::IE_KB_RED_BIT) ^ 1;
- m_sdv_led = BIT(m_kb_control, ie15_keyboard_device::IE_KB_SDV_BIT) ^ 1;
+ m_sdv_led = m_kbd_sdv ^ 1;
m_prd_led = 1; // XXX
}
/*
- VBlank is active for 3 topmost on-screen rows and 1 at the bottom; however, control flag 3
- overrides VBlank,
- allowing status line to be switched on and off.
+ VBlank is active for 3 topmost on-screen rows and 1 at the bottom.
+ However, control flag 3 overrides VBlank, allowing status line
+ to be switched on and off.
*/
void ie15_device::scanline_callback()
{
@@ -614,10 +627,10 @@ void ie15_device::scanline_callback()
m_vpos %= IE15_TOTAL_VERT;
m_marker_scanline = (m_vpos % 11) > 7;
- DBG_LOG(3,"scanline_cb",
- ("addr %03x frame %d x %.4d y %.3d row %.2d e:c:s %d:%d:%d\n",
+ LOGMASKED(LOG_SCANLINE,
+ "addr %03x frame %d x %.4d y %.3d row %.2d e:c:s %d:%d:%d\n",
m_video.ptr2, (int)m_screen->frame_number(), m_screen->hpos(), y,
- y%11, m_video.enable, m_video.cursor, m_video.line25));
+ y%11, m_video.enable, m_video.cursor, m_video.line25);
if (y < IE15_VERT_START) return;
y -= IE15_VERT_START;
@@ -671,7 +684,9 @@ void ie15_device::ie15core(machine_config &config)
config.set_default_layout(layout_ie15);
/* Devices */
- IE15_KEYBOARD(config, m_keyboard, 0).keyboard_cb().set(FUNC(ie15_device::kbd_put));
+ IE15_KEYBOARD(config, m_keyboard, 0);
+ m_keyboard->keyboard_cb().set(FUNC(ie15_device::kbd_put));
+ m_keyboard->sdv_cb().set(FUNC(ie15_device::kbd_sdv));
SPEAKER(config, "mono").front_center();
BEEP(config, m_beeper, 2400);
diff --git a/src/devices/machine/ie15.h b/src/devices/machine/ie15.h
index ef8f73334da..3bd93567d22 100644
--- a/src/devices/machine/ie15.h
+++ b/src/devices/machine/ie15.h
@@ -76,6 +76,7 @@ private:
void ie15core(machine_config &config);
void kbd_put(uint16_t data);
+ DECLARE_WRITE_LINE_MEMBER(kbd_sdv);
void mem_w(uint8_t data);
uint8_t mem_r();
void mem_addr_lo_w(uint8_t data);
@@ -130,6 +131,7 @@ private:
int m_hblank;
int m_vpos;
int m_marker_scanline;
+ bool m_kbd_sdv;
required_device<cpu_device> m_maincpu;
required_region_ptr<u8> m_p_videoram;
diff --git a/src/devices/machine/ie15_kbd.cpp b/src/devices/machine/ie15_kbd.cpp
index 79a4bb86aad..24120fc5734 100644
--- a/src/devices/machine/ie15_kbd.cpp
+++ b/src/devices/machine/ie15_kbd.cpp
@@ -10,6 +10,8 @@
#include "emu.h"
#include "machine/ie15_kbd.h"
+#include "machine/keyboard.ipp"
+
/***************************************************************************
IMPLEMENTATION
***************************************************************************/
@@ -18,9 +20,10 @@ DEFINE_DEVICE_TYPE(IE15_KEYBOARD, ie15_keyboard_device, "ie15kbd", "15WWW-97-006
ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock)
: device_t(mconfig, type, tag, owner, clock)
- , m_io_kbd(*this, "TERM_LINE%u", 0)
+ , device_matrix_keyboard_interface(mconfig, *this, "TERM_LINE0", "TERM_LINE1", "TERM_LINE2", "TERM_LINE3")
, m_io_kbdc(*this, "TERM_LINEC")
, m_keyboard_cb(*this)
+ , m_sdv_cb(*this)
{
}
@@ -29,83 +32,37 @@ ie15_keyboard_device::ie15_keyboard_device(const machine_config &mconfig, const
{
}
-uint8_t ie15_keyboard_device::row_number(uint32_t code)
+INPUT_CHANGED_MEMBER(ie15_keyboard_device::dip_changed)
{
- int row = 0;
-
- while (code >>= 1) { ++row; }
-
- return row;
+ m_sdv_cb(newval);
}
-uint16_t ie15_keyboard_device::keyboard_handler(uint16_t last_code, uint8_t *scan_line)
+void ie15_keyboard_device::key_make(uint8_t row, uint8_t column)
{
- int i;
- uint32_t code = 0;
uint16_t key_code = 0;
- uint16_t retVal = 0;
- uint8_t ctrl = BIT(m_io_kbdc->read(), 0);
- uint8_t shift = BIT(m_io_kbdc->read(), 1);
+ int ctrl = BIT(m_io_kbdc->read(), 0);
+ int shift = BIT(m_io_kbdc->read(), 1);
- i = *scan_line;
- {
- if (i<4)
- code = m_io_kbd[i]->read();
-
- if (code != 0)
- {
- if (!m_ruslat)
- i += 4;
- if (shift)
- i += 8;
- i <<= 4;
- if (code < 0x10000) {
- key_code = m_rom [i + row_number(code)];
- } else {
- key_code = m_rom [i + row_number(code >> 16)*2 + 256];
- }
- if (ctrl) {
- key_code &= 0x1f;
- }
- retVal = key_code;
- } else {
- *scan_line += 1;
- if (*scan_line==4) {
- *scan_line = 0;
- }
- }
- }
+ if (m_ruslat)
+ row += 4;
+ if (shift)
+ row += 8;
- // setup mode toggle
- if (BIT(m_io_kbdc->read(), 2)) {
- retVal |= (IE_KB_SDV << 8);
- }
- // aux keyboard flag
- if (code & 0xe0e000) {
- retVal |= (IE_KB_DK << 8);
- }
- // shift
- if (shift) {
- retVal |= (IE_KB_NR << 8);
- }
- // SI/SO handling
- if ((key_code & 127) == IE_KB_SI) {
- m_ruslat = 0;
- }
- if ((key_code & 127) == IE_KB_SO) {
- m_ruslat = 1;
- }
+ if (column < 16)
+ key_code = m_rom [(row << 4) + column];
+ else
+ key_code = m_rom [(row << 4) + (column - 16) * 2 + 256];
- return retVal;
-}
+ if (ctrl)
+ key_code &= 0x1f;
-void ie15_keyboard_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
-{
- uint16_t new_code;
- new_code = keyboard_handler(m_last_code, &m_scan_line);
- if ((m_last_code != new_code) /* && (new_code) */)
- send_key(new_code);
- m_last_code = new_code;
+ // XXX aux keyboard flag
+ if ((column > 12 && column < 16) || (column > 20 && column < 24))
+ {
+ key_code |= (IE_KB_DK << 8);
+ }
+
+ m_keyboard_cb(offs_t(0), key_code);
}
/***************************************************************************
@@ -122,24 +79,21 @@ const tiny_rom_entry *ie15_keyboard_device::device_rom_region() const
return ROM_NAME( ie15_keyboard );
}
-void ie15_keyboard_device::device_add_mconfig(machine_config &config)
-{
-}
-
void ie15_keyboard_device::device_start()
{
m_keyboard_cb.resolve_safe();
- m_timer = timer_alloc();
+ m_sdv_cb.resolve_safe();
+
m_rom = (uint8_t*)memregion("ie15kbd")->base();
}
void ie15_keyboard_device::device_reset()
{
- m_last_code = 0;
- m_scan_line = 0;
- m_ruslat = 0;
- m_timer->adjust(attotime::from_hz(10000), 0, attotime::from_hz(10000));
+ m_ruslat = false;
+
+ reset_key_state();
+ start_processing(attotime::from_hz(1'000));
}
/*
@@ -191,7 +145,7 @@ static INPUT_PORTS_START( ie15_keyboard )
PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8) PORT_CHAR('8') PORT_CHAR('(')
PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_9) PORT_CHAR('9') PORT_CHAR(')')
PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0) PORT_CHAR('0')
- PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') // PORT_CHAR('=')
+ PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR(UCHAR_MAMEKEY(7_PAD))
PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR(UCHAR_MAMEKEY(8_PAD))
@@ -206,17 +160,17 @@ static INPUT_PORTS_START( ie15_keyboard )
PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Home") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) // 'f3'
PORT_START("TERM_LINE1")
- PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('j') PORT_CHAR('J')
- PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('c') PORT_CHAR('C')
- PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('u') PORT_CHAR('U')
- PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('k') PORT_CHAR('K')
- PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('e') PORT_CHAR('E')
- PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('n') PORT_CHAR('N')
- PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('g') PORT_CHAR('G')
+ PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_J) PORT_CHAR('J') PORT_CHAR('j') PORT_CHAR(0x0a)
+ PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_C) PORT_CHAR('C') PORT_CHAR('c')
+ PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_U) PORT_CHAR('U') PORT_CHAR('u')
+ PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_K) PORT_CHAR('K') PORT_CHAR('k')
+ PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_E) PORT_CHAR('E') PORT_CHAR('e')
+ PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_N) PORT_CHAR('N') PORT_CHAR('n')
+ PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_G) PORT_CHAR('G') PORT_CHAR('g')
PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR('[') PORT_CHAR('{')
PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(']') PORT_CHAR('}')
- PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('z') PORT_CHAR('Z')
- PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('h') PORT_CHAR('H')
+ PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z') PORT_CHAR('z')
+ PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_H) PORT_CHAR('H') PORT_CHAR('h')
PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(':') PORT_CHAR('*')
PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_UNUSED)
PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR(UCHAR_MAMEKEY(4_PAD))
@@ -232,16 +186,16 @@ static INPUT_PORTS_START( ie15_keyboard )
PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Right") PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
PORT_START("TERM_LINE2")
- PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('f') PORT_CHAR('F')
- PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('y') PORT_CHAR('Y')
- PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('w') PORT_CHAR('W')
- PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('a') PORT_CHAR('A')
- PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('p') PORT_CHAR('P')
- PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('r') PORT_CHAR('R')
- PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('o') PORT_CHAR('O')
- PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('l') PORT_CHAR('L')
- PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('d') PORT_CHAR('D')
- PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('v') PORT_CHAR('V')
+ PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_F) PORT_CHAR('F') PORT_CHAR('f')
+ PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y') PORT_CHAR('y')
+ PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_W) PORT_CHAR('W') PORT_CHAR('w')
+ PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_A) PORT_CHAR('A') PORT_CHAR('a')
+ PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_P) PORT_CHAR('P') PORT_CHAR('p')
+ PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_R) PORT_CHAR('R') PORT_CHAR('r')
+ PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_O) PORT_CHAR('O') PORT_CHAR('o')
+ PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_L) PORT_CHAR('L') PORT_CHAR('l')
+ PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_D) PORT_CHAR('D') PORT_CHAR('d')
+ PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_V) PORT_CHAR('V') PORT_CHAR('v')
PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR('\\') PORT_CHAR('|')
PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Backspace") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
@@ -258,18 +212,18 @@ static INPUT_PORTS_START( ie15_keyboard )
PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ins") PORT_CODE(KEYCODE_INSERT) PORT_CHAR(UCHAR_MAMEKEY(INSERT))
PORT_START("TERM_LINE3")
- PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('q') PORT_CHAR('Q')
+ PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q') PORT_CHAR('q')
PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('^') PORT_CHAR('~')
- PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('s') PORT_CHAR('S')
- PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('m') PORT_CHAR('M')
- PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('i') PORT_CHAR('I')
- PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('t') PORT_CHAR('T')
- PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('x') PORT_CHAR('X')
- PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('b') PORT_CHAR('B')
- PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR(UCHAR_MAMEKEY(SLASH_PAD)) // PORT_CHAR('`') PORT_CHAR('@') // XXX
+ PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_S) PORT_CHAR('S') PORT_CHAR('s')
+ PORT_BIT(0x000008, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_M) PORT_CHAR('M') PORT_CHAR('m')
+ PORT_BIT(0x000010, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_I) PORT_CHAR('I') PORT_CHAR('i')
+ PORT_BIT(0x000020, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_T) PORT_CHAR('T') PORT_CHAR('t')
+ PORT_BIT(0x000040, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_X) PORT_CHAR('X') PORT_CHAR('x')
+ PORT_BIT(0x000080, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_B) PORT_CHAR('B') PORT_CHAR('b')
+ PORT_BIT(0x000100, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH_PAD) PORT_CHAR('@') PORT_CHAR('`')
PORT_BIT(0x000200, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
PORT_BIT(0x000400, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
- PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('=') PORT_CHAR('_') // XXX
+ PORT_BIT(0x000800, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('_')
PORT_BIT(0x001000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
PORT_BIT(0x002000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR(UCHAR_MAMEKEY(0_PAD))
PORT_BIT(0x004000, IP_ACTIVE_HIGH, IPT_UNUSED)
@@ -284,10 +238,9 @@ static INPUT_PORTS_START( ie15_keyboard )
PORT_BIT(0x800000, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("PgUp") PORT_CODE(KEYCODE_PGUP) PORT_CHAR(UCHAR_MAMEKEY(PGUP))
PORT_START("TERM_LINEC")
- PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CODE(KEYCODE_RCONTROL)
-// PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
- PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SetUp") PORT_CODE(KEYCODE_RSHIFT) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(RSHIFT))
- PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SetUp") PORT_CODE(KEYCODE_PRTSCR) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(PRTSCR))
+ PORT_BIT(0x000001, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Ctrl") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_SHIFT_2)
+ PORT_BIT(0x000002, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("Shift") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1) // PORT_TOGGLE
+ PORT_BIT(0x000004, IP_ACTIVE_HIGH, IPT_KEYBOARD) PORT_NAME("SetUp") PORT_CODE(KEYCODE_MINUS_PAD) PORT_TOGGLE PORT_CHAR(UCHAR_MAMEKEY(MINUS_PAD)) PORT_CHANGED_MEMBER(DEVICE_SELF, ie15_keyboard_device, dip_changed, 0)
INPUT_PORTS_END
ioport_constructor ie15_keyboard_device::device_input_ports() const
diff --git a/src/devices/machine/ie15_kbd.h b/src/devices/machine/ie15_kbd.h
index 9b7a4d802e4..3302bbda8a2 100644
--- a/src/devices/machine/ie15_kbd.h
+++ b/src/devices/machine/ie15_kbd.h
@@ -5,7 +5,9 @@
#pragma once
-class ie15_keyboard_device : public device_t
+#include "machine/keyboard.h"
+
+class ie15_keyboard_device : public device_t, protected device_matrix_keyboard_interface<4U>
{
public:
enum
@@ -27,41 +29,34 @@ public:
IE_KB_DK_BIT = 5,
IE_KB_PCH_BIT = 6,
IE_KB_NR_BIT = 7,
-
- IE_KB_SI = 0x0f,
- IE_KB_SO = 0x0e
};
-
ie15_keyboard_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
auto keyboard_cb() { return m_keyboard_cb.bind(); }
+ auto sdv_cb() { return m_sdv_cb.bind(); }
+
+ void set_ruslat(bool state) { m_ruslat = state; }
+
+ DECLARE_INPUT_CHANGED_MEMBER(dip_changed);
protected:
ie15_keyboard_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
virtual void device_start() override;
virtual void device_reset() override;
- virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual ioport_constructor device_input_ports() const override;
- virtual void device_add_mconfig(machine_config &config) override;
virtual const tiny_rom_entry *device_rom_region() const override;
- virtual void send_key(uint16_t code) { m_keyboard_cb(offs_t(0), code); }
+ virtual void key_make(uint8_t row, uint8_t column) override;
- required_ioport_array<4> m_io_kbd;
required_ioport m_io_kbdc;
- emu_timer *m_timer;
-
private:
- virtual uint16_t keyboard_handler(uint16_t last_code, uint8_t *scan_line);
- uint8_t row_number(uint32_t code);
- uint16_t m_last_code;
- uint8_t m_scan_line;
- uint8_t m_ruslat;
+ bool m_ruslat;
uint8_t *m_rom;
devcb_write16 m_keyboard_cb;
+ devcb_write_line m_sdv_cb;
};
DECLARE_DEVICE_TYPE(IE15_KEYBOARD, ie15_keyboard_device)