OSDN Git Service

[VM][FAMILYBASIC][WIP] Fix wrong string for romaji-kana (and auto key).Still imcoplet...
[csp-qt/common_source_project-fm7.git] / source / src / vm / familybasic / familybasic.h
index 67a0e94..8ad766e 100644 (file)
@@ -30,7 +30,7 @@
 #define USE_BOOT_MODE          6
 #define USE_TAPE               1
 #define USE_AUTO_KEY           5
-#define USE_AUTO_KEY_RELEASE   6
+#define USE_AUTO_KEY_RELEASE   8
 #define USE_AUTO_KEY_NO_CAPS
 #define USE_SOUND_VOLUME       4
 #define USE_JOYSTICK
@@ -38,6 +38,9 @@
 #define USE_DEBUGGER
 #define USE_STATE
 #define USE_CPU_N2A03
+#define USE_VM_AUTO_KEY_TABLE
+#define USE_TWO_STROKE_AUTOKEY_HANDAKUON
+#define USE_TWO_STROKE_AUTOKEY_DAKUON
 
 #include "../../common.h"
 #include "../../fileio.h"
@@ -62,6 +65,127 @@ static const _TCHAR *joy_button_captions[] = {
 };
 #endif
 
+#ifdef USE_VM_AUTO_KEY_TABLE
+static const int vm_auto_key_table_base[][2] = {
+       // A,I,U,E,O -> 1,2,3,4,5
+       {0xb1, 0x200 | 0x31},
+       {0xb2, 0x200 | 0x32},
+       {0xb3, 0x200 | 0x33},
+       {0xb4, 0x200 | 0x34},
+       {0xb5, 0x200 | 0x35},
+       // KA,KI,KU,KE,KO -> Q,W,E,R,T
+       {0xb6, 0x200 | ((int)'Q')},
+       {0xb7, 0x200 | ((int)'W')},
+       {0xb8, 0x200 | ((int)'E')},
+       {0xb9, 0x200 | ((int)'R')},
+       {0xba, 0x200 | ((int)'T')},
+       // SA,SI,SU,SE,SO -> A,S,D,F,G
+       {0xbb, 0x200 | ((int)'A')},
+       {0xbc, 0x200 | ((int)'S')},
+       {0xbd, 0x200 | ((int)'D')},
+       {0xbe, 0x200 | ((int)'F')},
+       {0xbf, 0x200 | ((int)'G')},
+       // TA,TI,TU,TE,TO -> Z, X, C, V, B
+       {0xc0, 0x200 | ((int)'Z')},
+       {0xc1, 0x200 | ((int)'X')},
+       {0xc2, 0x200 | ((int)'C')},
+       {0xc3, 0x200 | ((int)'V')},
+       {0xc4, 0x200 | ((int)'B')},
+       // NA,NI,NU,NE,NO -> 6,7,8,9,0
+       {0xc5, 0x200 | 0x36},
+       {0xc6, 0x200 | 0x37},
+       {0xc7, 0x200 | 0x38},
+       {0xc8, 0x200 | 0x39},
+       {0xc9, 0x200 | 0x30},
+       // HA,HI,HU,HE,HO -> Y,U,I,O,P
+       {0xca, 0x200 | ((int)'Y')},
+       {0xcb, 0x200 | ((int)'U')},
+       {0xcc, 0x200 | ((int)'I')},
+       {0xcd, 0x200 | ((int)'O')},
+       {0xce, 0x200 | ((int)'P')},
+       // MA,MI,MU,ME,MO -> H,J,K,L,;
+       {0xcf, 0x200 | ((int)'H')},
+       {0xd0, 0x200 | ((int)'J')},
+       {0xd1, 0x200 | ((int)'K')},
+       {0xd2, 0x200 | ((int)'L')},
+       {0xd3, 0x200 | ((int)';')},
+       // YA,YU,YO,WA,W0,NN -> N,M,,,.,/,_
+       {0xd4, 0x200 | ((int)'N')},
+       {0xd5, 0x200 | ((int)'M')},
+       {0xd6, 0x200 | 0xbc},
+       {0xdc, 0x200 | 0xbe},
+       {0xa6, 0x200 | 0xbf},
+       {0xdd, 0x200 | 0xe2},
+       // RA,RI,RU,RE,RO -> -, ^, ¥, @, [
+       {0xd7, 0x200 | 0xbd},
+       {0xd8, 0x200 | 0xde},
+       {0xd9, 0x200 | 0xdc},
+       {0xda, 0x200 | 0xc0},
+       {0xdb, 0x200 | 0xdb},
+       // XA,XI,XU,XE,XO -> SHIFT+1, SHIFT+2, SHIFT+3, SHIFT+4, SHIFT+5
+       {0xa7, 0x300 | 0x31},
+       {0xa8, 0x300 | 0x32},
+       {0xa9, 0x300 | 0x33},
+       {0xaa, 0x300 | 0x34},
+       {0xab, 0x300 | 0x35},
+       // XYA,XYU,XYO -> SHIFT+N,SHIFT+M,SHIFT+,
+       {0xac, 0x300 | ((int)'N')},
+       {0xad, 0x300 | ((int)'M')},
+       {0xae, 0x300 | 0xbc},
+       // XTU -> SHIFT + C
+       {0xaf, 0x300 | ((int)'C')},
+       // _, MARU -> :, ]
+       {0x5f, 0x200 | 0xbd},
+       {0xa1, 0x200 | 0xdd},
+       // KAGIKAKKO
+       {0xa2, 0x300 | 0xbd},
+       {0xa3, 0x300 | 0xdd},
+       // '゙' -> Double Quotation
+//     {0xde,  0x100 | 0x32},  
+       {-1, -1}
+};
+#endif
+#ifdef USE_TWO_STROKE_AUTOKEY_HANDAKUON
+static const int kana_handakuon_keyboard_table[][6] = {
+       // PA,PI,PU,PE,PO -> Y,U,I,O,P
+       {0xca, 0x300 | ((int)'Y'), 0x00, 0x00, 0x00, 0x00},
+       {0xcb, 0x300 | ((int)'U'), 0x00, 0x00, 0x00, 0x00},
+       {0xcc, 0x300 | ((int)'I'), 0x00, 0x00, 0x00, 0x00},
+       {0xcd, 0x300 | ((int)'O'), 0x00, 0x00, 0x00, 0x00},
+       {0xce, 0x300 | ((int)'P'), 0x00, 0x00, 0x00, 0x00},
+       {-1, -1}
+};
+#endif
+#ifdef USE_TWO_STROKE_AUTOKEY_DAKUON
+static const int kana_dakuon_keyboard_table[][6] = {
+       // GA,GI,GU,GE,GO -> Q,W,E,R,T
+       {0xb6, 0x1000 | 0x12, 0x200 | ((int)'Q'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xb7, 0x1000 | 0x12, 0x200 | ((int)'W'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xb8, 0x1000 | 0x12, 0x200 | ((int)'E'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xb9, 0x1000 | 0x12, 0x200 | ((int)'R'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xba, 0x1000 | 0x12, 0x200 | ((int)'T'), 0x2000 | 0x12, 0x00, 0x00},
+       // ZA,ZI,ZU,ZE,ZO -> A,S,D,F,G
+       {0xbb, 0x1000 | 0x12, 0x200 | ((int)'A'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xbc, 0x1000 | 0x12, 0x200 | ((int)'S'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xbd, 0x1000 | 0x12, 0x200 | ((int)'D'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xbe, 0x1000 | 0x12, 0x200 | ((int)'F'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xbf, 0x1000 | 0x12, 0x200 | ((int)'G'), 0x2000 | 0x12, 0x00, 0x00},
+       // DA,DI,DU,DE,DO -> Z, X, C, V, B
+       {0xc0, 0x1000 | 0x12, 0x200 | ((int)'Z'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xc1, 0x1000 | 0x12, 0x200 | ((int)'X'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xc2, 0x1000 | 0x12, 0x200 | ((int)'C'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xc3, 0x1000 | 0x12, 0x200 | ((int)'V'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xc4, 0x1000 | 0x12, 0x200 | ((int)'B'), 0x2000 | 0x12, 0x00, 0x00},
+       // BA,BI,BU,BE,BO -> Y,U,I,O,P
+       {0xca, 0x1000 | 0x12, 0x200 | ((int)'Y'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xcb, 0x1000 | 0x12, 0x200 | ((int)'U'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xcc, 0x1000 | 0x12, 0x200 | ((int)'I'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xcd, 0x1000 | 0x12, 0x200 | ((int)'O'), 0x2000 | 0x12, 0x00, 0x00},
+       {0xce, 0x1000 | 0x12, 0x200 | ((int)'P'), 0x2000 | 0x12, 0x00, 0x00},
+       {-1, -1}
+};
+#endif
+       
 typedef struct header_s {
        uint8_t id[3];  // 'NES'
        uint8_t ctrl_z; // control-z