summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/x1.cpp88
1 files changed, 81 insertions, 7 deletions
diff --git a/src/mame/drivers/x1.cpp b/src/mame/drivers/x1.cpp
index 741895f5a5b..cde608c590a 100644
--- a/src/mame/drivers/x1.cpp
+++ b/src/mame/drivers/x1.cpp
@@ -574,6 +574,62 @@ uint16_t x1_state::check_keyboard_press()
uint32_t f_key = ioport("f_keys")->read();
scancode = 0;
+ static const uint8_t kanatable[52][3] = {
+ // normal, kana, kana + shift
+ {0x2c,0xc8,0xa4}, // , / ne / japanese comma
+ {0x2d,0xce,0x00}, // - / ho
+ {0x2e,0xd9,0xa1}, // . / ru / japanese period
+ {0x2f,0xd2,0xa5}, // / / me / nakaguro
+ {0x30,0xdc,0xa6}, // 0 / wa / wo
+ {0x31,0xc7,0x00}, // 1 / nu
+ {0x32,0xcc,0x00}, // 2 / fu
+ {0x33,0xb1,0xa7}, // 3 / a / small a
+ {0x34,0xb3,0xa9}, // 4 / u / small u
+ {0x35,0xb4,0xaa}, // 5 / e / small e
+ {0x36,0xb5,0xab}, // 6 / o / small o
+ {0x37,0xd4,0xac}, // 7 / ya / small ya
+ {0x38,0xd5,0xad}, // 8 / yu / small yu
+ {0x39,0xd6,0xae}, // 9 / yo / small yo
+ {0x3a,0xb9,0x00}, // : / ke
+ {0x3b,0xda,0x00}, // ; / re
+ {0x3c,0x00,0x00},
+ {0x3d,0x00,0x00},
+ {0x3e,0x00,0x00},
+ {0x3f,0x00,0x00},
+ {0x40,0xde,0x00}, // @ / dakuten
+ {0x41,0xc1,0x00}, // A / chi
+ {0x42,0xba,0x00}, // B / ko
+ {0x43,0xbf,0x00}, // C / so
+ {0x44,0xbc,0x00}, // D / shi
+ {0x45,0xb2,0xa8}, // E / i / small i
+ {0x46,0xca,0x00}, // F / ha
+ {0x47,0xb7,0x00}, // G / ki
+ {0x48,0xb8,0x00}, // H / ku
+ {0x49,0xc6,0x00}, // I / ni
+ {0x4a,0xcf,0x00}, // J / ma
+ {0x4b,0xc9,0x00}, // K / no
+ {0x4c,0xd8,0x00}, // L / ri
+ {0x4d,0xd3,0x00}, // M / mo
+ {0x4e,0xd0,0x00}, // N / mi
+ {0x4f,0xd7,0x00}, // O / ra
+ {0x50,0xbe,0x00}, // P / se
+ {0x51,0xc0,0x00}, // Q / ta
+ {0x52,0xbd,0x00}, // R / su
+ {0x53,0xc4,0x00}, // S / to
+ {0x54,0xb6,0x00}, // T / ka
+ {0x55,0xc5,0x00}, // U / na
+ {0x56,0xcb,0x00}, // V / hi
+ {0x57,0xc3,0x00}, // W / te
+ {0x58,0xbb,0x00}, // X / sa
+ {0x59,0xdd,0x00}, // Y / n
+ {0x5a,0xc2,0xaf}, // Z / tsu / small tsu
+ {0x5b,0xdf,0xa2}, // [ / handakuten / opening quotation mark
+ {0x5c,0xb0,0x00}, // yen symbol / long vowel mark
+ {0x5d,0xd1,0xa3}, // ] / mu / closing quotation mark
+ {0x5e,0xcd,0x00}, // ^ / he
+ {0x5f,0xdb,0x00} // _ / ro
+ };
+
for(port_i=0;port_i<3;port_i++)
{
for(i=0;i<32;i++)
@@ -583,11 +639,26 @@ uint16_t x1_state::check_keyboard_press()
//key_flag = 1;
if(keymod & 0x02) // shift not pressed
{
- if(scancode >= 0x41 && scancode < 0x5a)
+ if ((keymod & 0x04) == 0) // kana on
+ {
+ if (scancode >= 0x2c && scancode <= 0x5f)
+ scancode = kanatable[scancode - 0x2c][1];
+ }
+
+ if (scancode >= 0x41 && scancode < 0x5a)
scancode += 0x20; // lowercase
}
else
{
+ if ((keymod & 0x04) == 0) // kana on
+ {
+ if (scancode >= 0x2c && scancode <= 0x5f)
+ {
+ if (kanatable[scancode - 0x2c][2] != 0)
+ scancode = kanatable[scancode - 0x2c][2];
+ }
+ }
+
if(scancode >= 0x31 && scancode < 0x3a)
scancode -= 0x10;
if(scancode == 0x30)
@@ -595,6 +666,9 @@ uint16_t x1_state::check_keyboard_press()
scancode = 0x3d;
}
}
+
+
+
if((keymod & 0x10) == 0) // graph on
scancode |= 0x80;
@@ -2026,10 +2100,10 @@ INPUT_PORTS_START( x1 )
PORT_BIT(0x00000200,IP_ACTIVE_HIGH,IPT_UNUSED) //0x29 )
PORT_BIT(0x00000400,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2a *
PORT_BIT(0x00000800,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2b +
- PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2c ,
+ PORT_BIT(0x00001000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')
PORT_BIT(0x00002000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("-") PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-')
- PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2e .
- PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_UNUSED) //0x2f /
+ PORT_BIT(0x00004000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(".") PORT_CODE(KEYCODE_STOP) PORT_CHAR('.')
+ PORT_BIT(0x00008000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("/") PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/')
PORT_BIT(0x00010000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("0") PORT_CODE(KEYCODE_0) PORT_CHAR('0')
PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("1") PORT_CODE(KEYCODE_1) PORT_CHAR('1')
@@ -2077,7 +2151,7 @@ INPUT_PORTS_START( x1 )
PORT_BIT(0x02000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Y") PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
PORT_BIT(0x04000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("Z") PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
PORT_BIT(0x08000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("[") PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR('[')
- PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_UNUSED)
+ PORT_BIT(0x10000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("\xc2\xa5") // yen
PORT_BIT(0x20000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("]") PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(']')
PORT_BIT(0x40000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("^") PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^')
PORT_BIT(0x80000000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME("_")
@@ -2108,9 +2182,9 @@ INPUT_PORTS_START( x1 )
PORT_START("key_modifiers")
PORT_BIT(0x00000001,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CTRL") PORT_CODE(KEYCODE_LCONTROL)
PORT_BIT(0x00000002,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT)
- PORT_BIT(0x00000004,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_RCONTROL)
+ PORT_BIT(0x00000004,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("KANA") PORT_CODE(KEYCODE_RCONTROL) PORT_TOGGLE
PORT_BIT(0x00000008,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("CAPS") PORT_CODE(KEYCODE_CAPSLOCK) PORT_TOGGLE
- PORT_BIT(0x00000010,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("GRPH") PORT_CODE(KEYCODE_LALT)
+ PORT_BIT(0x00000010,IP_ACTIVE_LOW,IPT_KEYBOARD) PORT_NAME("GRAPH") PORT_CODE(KEYCODE_LALT)
#if 0
PORT_BIT(0x00020000,IP_ACTIVE_HIGH,IPT_KEYBOARD) PORT_NAME(",") PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',')