| version 1.3, 2003/11/13 07:47:17 | version 1.7, 2003/12/04 16:48:15 | 
| Line 9 | Line 9 | 
 |  |  | 
 | #define         NC              0xff | #define         NC              0xff | 
 |  |  | 
 |  | typedef struct { | 
 |  | BYTE    f11[4]; | 
 |  | BYTE    f12[4]; | 
 |  | } BINDTBL; | 
 |  |  | 
 |  | static const BINDTBL bindtbl = { | 
 |  | //   ¥«¥Ê  Stop  [¡á]  NFER | 
 |  | {0x72, 0x60, 0x4d, 0x51}, | 
 |  | //         Copy  [¡¤]  XFER | 
 |  | {NC,   0x61, 0x4f, 0x35}}; | 
 |  |  | 
 |  | void mackbd_resetf11(void) { | 
 |  |  | 
 |  | UINT    i; | 
 |  |  | 
 |  | for (i=1; i<(sizeof(bindtbl.f11)/sizeof(BYTE)); i++) { | 
 |  | keystat_forcerelease(bindtbl.f11[i]); | 
 |  | } | 
 |  | } | 
 |  |  | 
 |  | void mackbd_resetf12(void) { | 
 |  |  | 
 |  | UINT    i; | 
 |  |  | 
 |  | for (i=1; i<(sizeof(bindtbl.f12)/sizeof(BYTE)); i++) { | 
 |  | keystat_forcerelease(bindtbl.f12[i]); | 
 |  | } | 
 |  | } | 
 |  |  | 
 |  |  | 
 | #if TARGET_API_MAC_CARBON | #if TARGET_API_MAC_CARBON | 
 |  |  | 
| static  BYTE    keymap[16]; | typedef struct { | 
| static  UINT32  shiftchktick = 0; | UINT32  tick; | 
|  | BYTE    keymap[16]; | 
|  | BOOL    active; | 
|  | UINT32  repbase; | 
|  | UINT32  reptick; | 
|  | BYTE    repkey; | 
|  | } MACKBD; | 
|  |  | 
|  | static  MACKBD          mackbd; | 
 |  |  | 
 | static const BYTE keymac[128] = { | static const BYTE keymac[128] = { | 
 | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 | 
| Line 41  static const BYTE keymac[128] = { | Line 78  static const BYTE keymac[128] = { | 
 | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 | 
 | 0x48,0x42,  NC,0x43,0x44,0x0d,0x33,0x4f, | 0x48,0x42,  NC,0x43,0x44,0x0d,0x33,0x4f, | 
 | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 | 
| 0x66,0x67,0x68,0x64,0x69,0x6a,  NC,0x72, | 0x66,0x67,0x68,0x64,0x69,0x6a,  NC,  NC, | 
 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | 
 | NC,  NC,  NC,  NC,  NC,0x6b,  NC,  NC, | NC,  NC,  NC,  NC,  NC,0x6b,  NC,  NC, | 
 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | 
| Line 49  static const BYTE keymac[128] = { | Line 86  static const BYTE keymac[128] = { | 
 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | 
 | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 
 |  |  | 
 |  | static const BYTE repkey[16] = { | 
 |  | 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, | 
 |  | 0xff, 0xff, 0xc1, 0xff, 0xc0, 0x0f, 0x07, 0x07}; | 
 |  |  | 
 |  |  | 
 | void mackbd_initialize(void) { | void mackbd_initialize(void) { | 
 |  |  | 
| shiftchktick = GETTICK(); | mackbd.tick = GETTICK(); | 
| ZeroMemory(&keymap, sizeof(keymap)); | ZeroMemory(&mackbd.keymap, sizeof(mackbd.keymap)); | 
|  | mackbd.active = TRUE; | 
|  | mackbd.repkey = NC; | 
 | } | } | 
 |  |  | 
 | void mackbd_callback(void) { | void mackbd_callback(void) { | 
| Line 64  void mackbd_callback(void) { | Line 108  void mackbd_callback(void) { | 
 | UINT    j; | UINT    j; | 
 | BYTE    keycode; | BYTE    keycode; | 
 |  |  | 
 |  | if (!mackbd.active) { | 
 |  | return; | 
 |  | } | 
 |  |  | 
 | tick = GETTICK(); | tick = GETTICK(); | 
| if (shiftchktick == tick) { | if (mackbd.tick == tick) { | 
 | return; | return; | 
 | } | } | 
| shiftchktick = tick; | mackbd.tick = tick; | 
 | #if TARGET_API_MAC_CARBON | #if TARGET_API_MAC_CARBON | 
 | GetKeys((long *)key); | GetKeys((long *)key); | 
 | #else | #else | 
 | GetKeys((unsigned long *)key); | GetKeys((unsigned long *)key); | 
 | #endif | #endif | 
 | for (i=0; i<16; i++) { | for (i=0; i<16; i++) { | 
| update = keymap[i] ^ key[i]; | update = mackbd.keymap[i] ^ key[i]; | 
 | if (update) { | if (update) { | 
| keymap[i] = key[i]; | mackbd.keymap[i] = key[i]; | 
 | for (j=0; j<8; j++) { | for (j=0; j<8; j++) { | 
 | if (update & (1 << j)) { | if (update & (1 << j)) { | 
 | TRACEOUT(("key %x %d", i * 8 + j, (key[i] & (1 << j))?1:0)); |  | 
 | keycode = keymac[i * 8 + j]; | keycode = keymac[i * 8 + j]; | 
 | if (keycode != NC) { | if (keycode != NC) { | 
 | if (key[i] & (1 << j)) { | if (key[i] & (1 << j)) { | 
 | keystat_senddata(keycode); | keystat_senddata(keycode); | 
 |  | if ((repkey[keycode >> 3] << (keycode & 7)) | 
 |  | & 0x80) { | 
 |  | mackbd.repkey = keycode; | 
 |  | mackbd.repbase = tick; | 
 |  | mackbd.reptick = 500; | 
 |  | } | 
 | } | } | 
 | else { | else { | 
 |  | if (mackbd.repkey == keycode) { | 
 |  | mackbd.repkey = NC; | 
 |  | } | 
 | keystat_senddata(keycode + 0x80); | keystat_senddata(keycode + 0x80); | 
 | } | } | 
 | } | } | 
| Line 94  TRACEOUT(("key %x %d", i * 8 + j, (key[i | Line 150  TRACEOUT(("key %x %d", i * 8 + j, (key[i | 
 | } | } | 
 | } | } | 
 | } | } | 
 |  |  | 
 |  | // ¥¡¼¥ê¥Ô¡¼¥È½èÍý | 
 |  | if (mackbd.repkey != NC) { | 
 |  | if ((tick - mackbd.repbase) >= mackbd.reptick) { | 
 |  | keystat_senddata(mackbd.repkey);                // keystat¦¤Çbreak¤¹¤ë | 
 |  | mackbd.repbase = tick; | 
 |  | mackbd.reptick = 40; | 
 |  | } | 
 |  | } | 
 | } | } | 
 |  |  | 
| BOOL mackbd_keydown(int keycode) { | BOOL mackbd_keydown(int keycode, BOOL cmd) { | 
|  |  | 
|  | BYTE    data; | 
 |  |  | 
| if (keycode == 0x6f) { | data = NC; | 
| if (np2oscfg.F12COPY == 1) { | if (keycode == 0x67) { | 
| keystat_senddata(0x61); | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(BYTE)) { | 
| return(TRUE); | data = bindtbl.f11[np2oscfg.F11KEY]; | 
| } | } | 
| else if (np2oscfg.F12COPY == 2) { | } | 
| keystat_senddata(0x60); | else if (keycode == 0x6f) { | 
| return(TRUE); | if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(BYTE)) { | 
| } | data = bindtbl.f12[np2oscfg.F12KEY]; | 
|  | } | 
|  | } | 
|  | if (data != NC) { | 
|  | keystat_senddata(NC); | 
|  | return(TRUE); | 
 | } | } | 
 |  | (void)cmd; | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
 |  |  | 
 | BOOL mackbd_keyup(int keycode) { | BOOL mackbd_keyup(int keycode) { | 
 |  |  | 
| if (keycode == 0x6f) { | BYTE    data; | 
| if (np2oscfg.F12COPY == 1) { |  | 
| keystat_senddata(0x61 | 0x80); | data = NC; | 
| return(TRUE); | if (keycode == 0x67) { | 
| } | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(BYTE)) { | 
| else if (np2oscfg.F12COPY == 2) { | data = bindtbl.f11[np2oscfg.F11KEY]; | 
| keystat_senddata(0x60 | 0x80); |  | 
| return(TRUE); |  | 
 | } | } | 
 | } | } | 
 |  | else if (keycode == 0x6f) { | 
 |  | if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(BYTE)) { | 
 |  | data = bindtbl.f12[np2oscfg.F12KEY]; | 
 |  | } | 
 |  | } | 
 |  | if (data != NC) { | 
 |  | keystat_senddata(NC | 0x80); | 
 |  | return(TRUE); | 
 |  | } | 
 | return(FALSE); | return(FALSE); | 
 | } | } | 
 |  |  | 
 |  | void mackbd_activate(BOOL active) { | 
 |  |  | 
 |  | if (mackbd.active != active) { | 
 |  | mackbd.active = active; | 
 |  | if (!active) { | 
 |  | ZeroMemory(&mackbd.keymap, sizeof(mackbd.keymap)); | 
 |  | keystat_allrelease(); | 
 |  | } | 
 |  | } | 
 |  | } | 
 |  |  | 
 | #else | #else | 
 |  |  | 
 | enum { | enum { | 
| Line 176  static const BYTE keymac[128] = { | Line 267  static const BYTE keymac[128] = { | 
 | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 | 
 | 0x48,0x42,  NC,0x43,0x44,0x0d,0x33,0x4f, | 0x48,0x42,  NC,0x43,0x44,0x0d,0x33,0x4f, | 
 | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 | 
| 0x66,0x67,0x68,0x64,0x69,0x6a,  NC,0x72, | 0x66,0x67,0x68,0x64,0x69,0x6a,  NC,  NC, | 
 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | 
 | NC,  NC,  NC,  NC,  NC,0x6b,  NC,  NC, | NC,  NC,  NC,  NC,  NC,0x6b,  NC,  NC, | 
 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | 
| Line 184  static const BYTE keymac[128] = { | Line 275  static const BYTE keymac[128] = { | 
 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | 
 | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 0x63,0x36,0x62,0x3b,0x3c,0x3d,0x3a,  NC}; | 
 |  |  | 
 |  | // ÎӸ饡¼²¡²¼ | 
 |  | static const BYTE keymac2[128] = { | 
 |  | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 | 
 |  | NC,  NC,  NC,  NC,0x3f,  NC,  NC,  NC, | 
 |  | //        £Ã,  £Ö,    ,  £Â,  £Ñ,  £×,  £Å,  £Ò         ; 0x08 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //        £Ù,  £Ô,  £±,  £²,  £³,  £´,  £¶,  £µ         ; 0x10 | 
 |  | NC,  NC,0x62,0x63, 0x64,0x65,0x67,0x66, | 
 |  | //        ¡°,  £¹,  £·,  ¡Ý,  £¸,  £°,  ¡Î,  £Ï         ; 0x18 | 
 |  | NC,0x6a,0x68,  NC,0x69,0x6b,  NC,  NC, | 
 |  | //        £Õ,  ¡÷,  £É,  £Ð, ret,  £Ì,  £Ê,  ¡§         ; 0x20 | 
 |  | NC,  NC,  NC,  NC,  NC,0x3e,  NC,  NC, | 
 |  | //        £Ë,  ¡¨,  ¡Ï,  ¡¤,  ¡¿,  £Î,  £Í,  ¡¥         ; 0x28 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //       TAB, SPC,    ,  BS,    , ESC,    , apl         ; 0x30 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //       sft, cps, alt, ctl,    ,    ,    ,             ; 0x38 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //          , [.],    , [*],    ,    , [+],             ; 0x40 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //          ,    ,    ,    , ret,    , [-], clr         ; 0x48 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //          , [=], [0], [1], [2], [3], [4], [5]         ; 0x50 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //          , F13,    , F14,    , F10,    , F12         ; 0x68 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, | 
 |  | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 | 
 |  | NC,  NC,  NC,  NC,  NC,0x38,  NC,  NC, | 
 |  | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 | 
 |  | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC}; | 
 |  |  | 
 | typedef struct { | typedef struct { | 
 | UINT32  tick; | UINT32  tick; | 
 | UINT16  shift; | UINT16  shift; | 
 |  | BOOL    active; | 
 | } MACKBD; | } MACKBD; | 
 |  |  | 
 | static  MACKBD          mackbd; | static  MACKBD          mackbd; | 
| Line 194  static MACKBD  mackbd; | Line 321  static MACKBD  mackbd; | 
 | void mackbd_initialize(void) { | void mackbd_initialize(void) { | 
 |  |  | 
 | ZeroMemory(&mackbd, sizeof(mackbd)); | ZeroMemory(&mackbd, sizeof(mackbd)); | 
 |  | mackbd.active = TRUE; | 
 | } | } | 
 |  |  | 
 | void mackbd_callback(void) { | void mackbd_callback(void) { | 
| Line 204  void mackbd_callback(void) { | Line 332  void mackbd_callback(void) { | 
 | UINT16  shiftchg; | UINT16  shiftchg; | 
 | UINT    i; | UINT    i; | 
 |  |  | 
 |  | if (!mackbd.active) { | 
 |  | return; | 
 |  | } | 
 |  |  | 
 | tick = GETTICK(); | tick = GETTICK(); | 
 | if (mackbd.tick != tick) { | if (mackbd.tick != tick) { | 
 | mackbd.tick = tick; | mackbd.tick = tick; | 
| Line 224  void mackbd_callback(void) { | Line 356  void mackbd_callback(void) { | 
 | } | } | 
 | } | } | 
 |  |  | 
| BOOL mackbd_keydown(int keycode) { | BOOL mackbd_keydown(int keycode, BOOL cmd) { | 
 |  |  | 
 | BYTE    data; | BYTE    data; | 
 |  |  | 
 | data = NC; | data = NC; | 
| if (keycode == 0x6f) { | if (keycode == 0x67) { | 
| if (np2oscfg.F12COPY == 1) { | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(BYTE)) { | 
| data = 0x61; | data = bindtbl.f11[np2oscfg.F11KEY]; | 
 | } | } | 
| else if (np2oscfg.F12COPY == 2) { | } | 
| data = 0x60; | else if (keycode == 0x6f) { | 
|  | if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(BYTE)) { | 
|  | data = bindtbl.f12[np2oscfg.F12KEY]; | 
 | } | } | 
 | } | } | 
 | else if (keycode < 0x80) { | else if (keycode < 0x80) { | 
| data = keymac[keycode]; | if (!cmd) { | 
|  | data = keymac[keycode]; | 
|  | } | 
|  | else { | 
|  | data = keymac2[keycode]; | 
|  | } | 
 | } | } | 
 | if (data != NC) { | if (data != NC) { | 
 | keystat_senddata(data); | keystat_senddata(data); | 
| Line 252  BOOL mackbd_keydown(int keycode) { | Line 391  BOOL mackbd_keydown(int keycode) { | 
 | BOOL mackbd_keyup(int keycode) { | BOOL mackbd_keyup(int keycode) { | 
 |  |  | 
 | BYTE    data; | BYTE    data; | 
 |  | BOOL    ret; | 
 |  |  | 
 | data = NC; | data = NC; | 
| if (keycode == 0x6f) { | ret = FALSE; | 
| if (np2oscfg.F12COPY == 1) { | if (keycode == 0x67) { | 
| data = 0x61; | if (np2oscfg.F11KEY < (sizeof(bindtbl.f11)/sizeof(BYTE)) { | 
|  | data = bindtbl.f11[np2oscfg.F11KEY]; | 
 | } | } | 
| else if (np2oscfg.F12COPY == 2) { | } | 
| data = 0x60; | else if (keycode == 0x6f) { | 
|  | if (np2oscfg.F12KEY < (sizeof(bindtbl.f12)/sizeof(BYTE)) { | 
|  | data = bindtbl.f12[np2oscfg.F12KEY]; | 
 | } | } | 
 | } | } | 
 | else if (keycode < 0x80) { | else if (keycode < 0x80) { | 
 | data = keymac[keycode]; | data = keymac[keycode]; | 
 |  | if (data != NC) { | 
 |  | keystat_senddata(data | 0x80); | 
 |  | ret = TRUE; | 
 |  | } | 
 |  | data = keymac2[keycode]; | 
 | } | } | 
 | if (data != NC) { | if (data != NC) { | 
 | keystat_senddata(data | 0x80); | keystat_senddata(data | 0x80); | 
| return(TRUE); | ret = TRUE; | 
| } |  | 
| else { |  | 
| return(FALSE); |  | 
 | } | } | 
 |  | return(ret); | 
 | } | } | 
 |  |  | 
| #endif | void mackbd_activate(BOOL active) { | 
 |  |  | 
 |  | if (mackbd.active != active) { | 
 |  | mackbd.active = active; | 
 |  | if (!active) { | 
 |  | keystat_allrelease(); | 
 |  | } | 
 |  | } | 
 |  | } | 
 |  |  | 
 | #if 0 |  | 
 | // ÎӸ饡¼²¡²¼ |  | 
 | static const BYTE keymac2[128] = { |  | 
 | //        £Á,  £Ó,  £Ä,  £Æ,  £È,  £Ç,  £Ú,  £Ø         ; 0x00 |  | 
 | NC,  NC,  NC,  NC,0x3f,  NC,  NC,  NC, |  | 
 | //        £Ã,  £Ö,    ,  £Â,  £Ñ,  £×,  £Å,  £Ò         ; 0x08 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //        £Ù,  £Ô,  £±,  £²,  £³,  £´,  £¶,  £µ         ; 0x10 |  | 
 | NC,  NC,0x62,0x63, 0x64,0x65,0x67,0x66, |  | 
 | //        ¡°,  £¹,  £·,  ¡Ý,  £¸,  £°,  ¡Î,  £Ï         ; 0x18 |  | 
 | NC,0x6a,0x68,  NC,0x69,0x6b,  NC,  NC, |  | 
 | //        £Õ,  ¡÷,  £É,  £Ð, ret,  £Ì,  £Ê,  ¡§         ; 0x20 |  | 
 | NC,  NC,  NC,  NC,  NC,0x3e,  NC,  NC, |  | 
 | //        £Ë,  ¡¨,  ¡Ï,  ¡¤,  ¡¿,  £Î,  £Í,  ¡¥         ; 0x28 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //       TAB, SPC,    ,  BS,    , ESC,    , apl         ; 0x30 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //       sft, cps, alt, ctl,    ,    ,    ,             ; 0x38 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //          , [.],    , [*],    ,    , [+],             ; 0x40 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //          ,    ,    ,    , ret,    , [-], clr         ; 0x48 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //          , [=], [0], [1], [2], [3], [4], [5]         ; 0x50 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //       [6], [7],    , [8], [9],  ¡ï,  ¡², [,]         ; 0x58 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //        F5,  F6,  F7,  F3,  F8,  F9,    , F11         ; 0x60 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //          , F13,    , F14,    , F10,    , F12         ; 0x68 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC, |  | 
 | //          , F15, hlp, hom,  ru, del,  F4, end         ; 0x70 |  | 
 | NC,  NC,  NC,  NC,  NC,0x38,  NC,  NC, |  | 
 | //        F2,  rd,  F1,  ¢«,  ¢ª,  ¢,  ¢¬,             ; 0x78 |  | 
 | NC,  NC,  NC,  NC,  NC,  NC,  NC,  NC}; |  | 
 | #endif | #endif | 
 |  |  |