IS01のキーボードが正常に認識しない問題ですが、まずはSDLの仕様で「/」が認識しないため以下を修正。
SDL_androidkeyboard.c
static SDL_scancode TranslateKeycode(int keycode) { SDL_scancode scancode = SDL_SCANCODE_UNKNOWN; if (keycode < SDL_arraysize(Android_Keycodes)) { scancode = Android_Keycodes[keycode]; } if (scancode == SDL_SCANCODE_UNKNOWN) { return SDL_SCANCODE_SLASH; } return scancode; }
また、IS01の仕様で特殊キーや、足りないキーに対応する。具体的には「Alt」で切り替える。
SDLgfx.c
#include <SDL.h> #ifdef _IS01 static int alt=0; #endif (省略) /***********************************/ /* OTHER KEYS: reset bit in KeyMap */ /***********************************/ #ifdef _IS01 if (key==SDLK_LALT) { key=SDLK_UNKNOWN; } if (key==0x7f) key=0x8; if (key==0x400000e1) key=0x130; if (key==0x400000e5) key=0x13f; if (key==0x4000004e) key=0x133; if (key==0x4000004b) key=0x134; if (key==0x4000010c) { XKeyMap[Keys[0x132][0]]&=~Keys[0x132][1]; key=0x121; } if (key==0x40000051) key=0x112; if (key==0x40000052) key=0x111; if (key==0x4000004f) key=0x113; if (key==0x40000050) key=0x114; if (key==0x40000076) key=0x116; // MENU if (alt && key==SDLK_l) key=SDLK_SEMICOLON; if (alt && key==SDLK_SLASH) key=SDLK_QUOTE; if (alt && key==SDLK_COMMA) key=SDLK_RIGHTBRACKET; if (alt && key==SDLK_PERIOD) key=0x60; if (alt && key==SDLK_p) key=SDLK_LEFTBRACKET; if (alt && key==SDLK_MINUS) key=SDLK_BACKSLASH; if (alt && key==SDLK_0) key=SDLK_EQUALS; if (alt && key==SDLK_q) key=SDLK_TAB; if (alt && key==SDLK_1) key=0x11a; if (alt && key==SDLK_2) key=0x11b; if (alt && key==SDLK_3) key=0x11c; if (alt && key==SDLK_4) key=0x11d; if (alt && key==SDLK_5) key=0x11e; if (alt && key==0x8) key=0x115; if (alt && key==SDLK_m) key=0x131; if(key<0x150) XKeyMap[Keys[key][0]]&=~Keys[key][1]; #else if (key==SDLK_END) key=0x60; if (key==SDLK_RCTRL) key=0x131; if(key<0x150) XKeyMap[Keys[key][0]]&=~Keys[key][1]; #endif } /****************/ /* KEY RELEASED */ /****************/ if(event.type==SDL_KEYUP) { /* Special keys released... */ switch(key) { case SDLK_UP: JoyState&=0xFE;break; case SDLK_DOWN: JoyState&=0xFD;break; case SDLK_LEFT: JoyState&=0xFB;break; case SDLK_RIGHT: JoyState&=0xF7;break; case SDLK_LALT: JoyState&=0xEF;break; case SDLK_LCTRL: JoyState&=0xDF;Control=0;break; } #ifdef _IS01 if (key==SDLK_LALT) { key=SDLK_UNKNOWN; alt++; if (alt > 1) alt=0; } if (key==0x7f) key=0x8; if (key==0x400000e1) key=0x130; if (key==0x400000e5) key=0x13f; if (key==0x4000004e) key=0x133; if (key==0x4000004b) key=0x134; if (key==0x4000010c) { XKeyMap[Keys[0x132][0]]|=Keys[0x132][1]; key=0x121; } if (key==0x40000051) key=0x112; if (key==0x40000052) key=0x111; if (key==0x4000004f) key=0x113; if (key==0x40000050) key=0x114; if (key==0x40000076) key=0x116; // MENU if (alt && key==SDLK_l) key=SDLK_SEMICOLON; if (alt && key==SDLK_SLASH) key=SDLK_QUOTE; if (alt && key==SDLK_COMMA) key=SDLK_RIGHTBRACKET; if (alt && key==SDLK_PERIOD) key=0x60; if (alt && key==SDLK_p) key=SDLK_LEFTBRACKET; if (alt && key==SDLK_MINUS) key=SDLK_BACKSLASH; if (alt && key==SDLK_0) key=SDLK_EQUALS; if (alt && key==SDLK_q) key=SDLK_TAB; if (alt && key==SDLK_1) key=0x11a; if (alt && key==SDLK_2) key=0x11b; if (alt && key==SDLK_3) key=0x11c; if (alt && key==SDLK_4) key=0x11d; if (alt && key==SDLK_5) key=0x11e; if (alt && key==0x8) key=0x115; if (alt && key==SDLK_m) key=0x131; if(key<0x150) XKeyMap[Keys[key][0]]|=Keys[key][1]; #else if (key==SDLK_END) key=0x60; if (key==SDLK_RCTRL) key=0x131; /* Key released: set bit in KeyMap */ if(key<0x150) XKeyMap[Keys[key][0]]|=Keys[key][1]; #endif