DosBox Turbo‎ > ‎

gamekeyboard

GameKeyboard is a Virtual Gamepad application.

Since version 1.6.0 GameKeyboard has not worked with DosBox Turbo.  Users writing the author of GameKeyboard have been told that the problem is within DosBox Turbo.  I too, reached out to the author of GameKeyboard, only to be told the problem must be somewhere in DosBox Turbo.  So, with several user complaints that GameKeyboard is not working in DosBox Turbo, and many many hours spent debugging the problem, I have finally determined the cause of the problem.  

GameKeyboard Version 1.6.0 and above have been programmed to break down and prevent certain keystrokes (currently all DPAD movement) from reaching DosBox Turbo.  The way this blocking scheme functions is by detecting the installation of DosBox Turbo through the Android Package Manager.  When GameKeyboard detects it is being run on DosBox Turbo, it then actively stops sending the up/down/left/right keystrokes, making it appear as though there is something wrong in DosBox Turbo.

If you are already a user of GameKeyboard, I suggest you either stick with 1.4.0 (released before DosBox Turbo hit the market) which does not have this blocking scheme, or ask the author to remove the active blocking of DosBox Turbo in his newer versions.  For new users, I recommend avoiding GameKeyboard for now.

The active blocking scheme can be verified in two ways:
  1. When the package signature of DosBox Turbo is changed, GameKeyboard 1.6.0+ suddenly starts working as intended.
  2. After many many hours of debugging the issue and not finding any problem with DB Turbo, I looked into the events GameKeyboard was sending and noticed when it detected DB Turbo, it would no longer send certain events.  Debugging/Decompiling GameKeyboard 2.0.0 turned up the following active blocking scheme:
gamekeyboard/SoftKeyboard.java:
if ((str.endsWith(".dosbox")) && (str.charAt(6) == 's') && (str.charAt(8) == 's') && (str.charAt(7) == 'h') && (str.charAt(5) == 'i') && (str.charAt(10) == 'i') && (str.charAt(9) == 't') && (str.charAt(4) == 'f') && (str.charAt(11) == 'x'))
{
   ... <code to break usage in DosBox Turbo removed> ...
}

What the above code does is when GameKeyboard detects that it is running inside of DosBox Turbo (package manager signature: "com.fishstix.dosbox"), it "breaks" itself and stops sending certain key events.  


You can verify the above by taking your purchased APK of GameKeyboard (1.6.0 or newer) then decompiling it, and searching for the string "dosbox". You will not be able to search for "fishstix", because that string is being hidden and built character by character.

Comments