OSDN Git Service

[VM][STATE] Use namespace {VMNAME} to separate per VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / n5200 / keyboard.cpp
index b18ff04..afcba7f 100644 (file)
@@ -1,96 +1,99 @@
-/*\r
-       NEC N5200 Emulator 'eN5200'\r
-\r
-       Author : Takeda.Toshiya\r
-       Date   : 2008.06.10 -\r
-\r
-       [ keyboard ]\r
-*/\r
-\r
-#include "keyboard.h"\r
-#include "../i8251.h"\r
-\r
-static const int key_table[256] = {\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x0e,0x0f,  -1,  -1,  -1,0x1c,  -1,  -1,\r
-       0x70,0x74,0x73,0x60,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x00,0x35,0x51,  -1,  -1,\r
-       0x34,0x36,0x37,0x3f,0x3e,0x3b,0x3a,0x3c,0x3d,  -1,  -1,  -1,  -1,0x38,0x39,  -1,\r
-       0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,  -1,  -1,  -1,  -1,  -1,  -1,\r
-       0x0a,0x1d,0x2d,0x2b,0x1f,0x12,0x20,0x21,0x22,0x17,0x23,0x24,0x25,0x2f,0x2e,0x18,\r
-       0x19,0x10,0x13,0x1e,0x14,0x16,0x2c,0x11,0x2a,0x15,0x29,  -1,  -1,  -1,  -1,  -1,\r
-       0x4e,0x4a,0x4b,0x4c,0x46,0x47,0x48,0x42,0x43,0x44,0x45,0x49,  -1,0x40,0x50,0x41,\r
-       0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x60,0x61,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x27,0x26,0x30,0x0b,0x31,0x32,\r
-       0x1a,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x1b,0x0d,0x28,0x0c,  -1,\r
-         -1,  -1,0x33,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,\r
-         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1\r
-};\r
-\r
-void KEYBOARD::initialize()\r
-{\r
-       memset(flag, 0, sizeof(flag));\r
-}\r
-\r
-void KEYBOARD::reset()\r
-{\r
-       kana = caps = rst = false;\r
-}\r
-\r
-void KEYBOARD::write_signal(int id, uint32 data, uint32 mask)\r
-{\r
-       if(id == SIG_KEYBOARD_RST) {\r
-               bool next = ((data & mask) != 0);\r
-               if(rst && !next) {\r
-                       // keyboard reset\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);\r
-               }\r
-               rst = next;\r
-       } else if(id == SIG_KEYBOARD_RECV) {\r
-               // receive command\r
-               data &= mask;\r
-               if(data == 0) {\r
-                       // keyboard reset\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);\r
-                       d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);\r
-               }\r
-       }\r
-}\r
-\r
-void KEYBOARD::key_down(int code)\r
-{\r
-       if(code == 0x14) {\r
-               caps = !caps;\r
-               d_sio->write_signal(SIG_I8251_RECV, 0x71 | (caps ? 0 : 0x80), 0xff);\r
-       } else if(code == 0x15) {\r
-               kana = !kana;\r
-               d_sio->write_signal(SIG_I8251_RECV, 0x72 | (kana ? 0 : 0x80), 0xff);\r
-       } else if((code = key_table[code & 0xff]) != -1) {\r
-               if(flag[code]) {\r
-                       d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);\r
-               }\r
-               d_sio->write_signal(SIG_I8251_RECV, code, 0xff);\r
-//             if(!flag[code]) {\r
-//                     d_sio->write_signal(SIG_I8251_RECV, code, 0xff);\r
-//             }\r
-               flag[code] = 1;\r
-       }\r
-}\r
-\r
-void KEYBOARD::key_up(int code)\r
-{\r
-       if((code = key_table[code & 0xff]) != -1) {\r
-               if(flag[code]) {\r
-                       d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);\r
-               }\r
-               flag[code] = 0;\r
-       }\r
-}\r
-\r
+/*
+       NEC N5200 Emulator 'eN5200'
+
+       Author : Takeda.Toshiya
+       Date   : 2008.06.10 -
+
+       [ keyboard ]
+*/
+
+#include "keyboard.h"
+#include "../i8251.h"
+
+namespace N5200 {
+
+static const int key_table[256] = {
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x0e,0x0f,  -1,  -1,  -1,0x1c,  -1,  -1,
+       0x70,0x74,0x73,0x60,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x00,0x35,0x51,  -1,  -1,
+       0x34,0x36,0x37,0x3f,0x3e,0x3b,0x3a,0x3c,0x3d,  -1,  -1,  -1,  -1,0x38,0x39,  -1,
+       0x0a,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,  -1,  -1,  -1,  -1,  -1,  -1,
+       0x0a,0x1d,0x2d,0x2b,0x1f,0x12,0x20,0x21,0x22,0x17,0x23,0x24,0x25,0x2f,0x2e,0x18,
+       0x19,0x10,0x13,0x1e,0x14,0x16,0x2c,0x11,0x2a,0x15,0x29,  -1,  -1,  -1,  -1,  -1,
+       0x4e,0x4a,0x4b,0x4c,0x46,0x47,0x48,0x42,0x43,0x44,0x45,0x49,  -1,0x40,0x50,0x41,
+       0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x60,0x61,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x27,0x26,0x30,0x0b,0x31,0x32,
+       0x1a,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,0x1b,0x0d,0x28,0x0c,  -1,
+         -1,  -1,0x33,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,
+         -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1,  -1
+};
+
+void KEYBOARD::initialize()
+{
+       memset(flag, 0, sizeof(flag));
+}
+
+void KEYBOARD::reset()
+{
+       kana = caps = rst = false;
+}
+
+void KEYBOARD::write_signal(int id, uint32_t data, uint32_t mask)
+{
+       if(id == SIG_KEYBOARD_RST) {
+               bool next = ((data & mask) != 0);
+               if(rst && !next) {
+                       // keyboard reset
+                       d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);
+               }
+               rst = next;
+       } else if(id == SIG_KEYBOARD_RECV) {
+               // receive command
+               data &= mask;
+               if(data == 0) {
+                       // keyboard reset
+                       d_sio->write_signal(SIG_I8251_RECV, 0xa0, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0x81, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0xc0, 0xff);
+                       d_sio->write_signal(SIG_I8251_RECV, 0xe0, 0xff);
+               }
+       }
+}
+
+void KEYBOARD::key_down(int code)
+{
+       if(code == 0x14) {
+               caps = !caps;
+               d_sio->write_signal(SIG_I8251_RECV, 0x71 | (caps ? 0 : 0x80), 0xff);
+       } else if(code == 0x15) {
+               kana = !kana;
+               d_sio->write_signal(SIG_I8251_RECV, 0x72 | (kana ? 0 : 0x80), 0xff);
+       } else if((code = key_table[code & 0xff]) != -1) {
+               if(flag[code]) {
+                       d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);
+               }
+               d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
+//             if(!flag[code]) {
+//                     d_sio->write_signal(SIG_I8251_RECV, code, 0xff);
+//             }
+               flag[code] = 1;
+       }
+}
+
+void KEYBOARD::key_up(int code)
+{
+       if((code = key_table[code & 0xff]) != -1) {
+               if(flag[code]) {
+                       d_sio->write_signal(SIG_I8251_RECV, code | 0x80, 0xff);
+               }
+               flag[code] = 0;
+       }
+}
+
+}