Index: keyboard.c
===================================================================
--- keyboard.c	(revision 135)
+++ keyboard.c	(working copy)
@@ -29,10 +29,11 @@
 int mousehackon = 1;
 int kbdenable=0,kbdreset;
 unsigned char kbdstat;
-unsigned char kbdpacket[3]={0,0,0};
+unsigned char kbdpacket[5]={0,0,0,0,0};
 int kbdpacketsize=0,kbdpacketpos=0;
 unsigned char kbdcommand;
 int keys2[128];
+int release_pausekey=0;
 
 int msenable=0,msreset;
 unsigned char msstat,mscommand;
@@ -63,6 +64,7 @@
         mcallback=0;
         msreset=0;
         msstat=0;
+        release_pausekey=0;
         for (c=0;c<128;c++)
             keys2[c]=0;
 }
@@ -439,14 +441,14 @@
         {KEY_ENTER,0x5A},{KEY_ESC,0x76},{KEY_STOP,0x49},{KEY_COMMA,0x41},
         {KEY_SLASH,0x4A},{KEY_OPENBRACE,0x54},{KEY_CLOSEBRACE,0x5B},
         {KEY_SPACE,0x29},{KEY_TAB,0x0D},{KEY_CAPSLOCK,0x58},{KEY_BACKSPACE,0x66},
-        {KEY_MINUS,0x4E},{KEY_EQUALS,0x55},{KEY_BACKSLASH,0x61},
+        {KEY_MINUS,0x4E},{KEY_EQUALS,0x55},{KEY_BACKSLASH,0x5D},
         {KEY_LSHIFT,0x12},{KEY_LCONTROL,0x14},{KEY_ALT,0x11},{KEY_RSHIFT,0x59},
         {KEY_COLON,0x4C},{KEY_QUOTE,0x52},{KEY_TILDE,0x0E},
         {KEY_ASTERISK,0x7C},{KEY_MINUS_PAD,0x7B},{KEY_PLUS_PAD,0x79},
         {KEY_DEL_PAD,0x71},{KEY_0_PAD,0x70},{KEY_1_PAD,0x69},{KEY_2_PAD,0x72},
         {KEY_3_PAD,0x7A},{KEY_4_PAD,0x6B},{KEY_5_PAD,0x73},{KEY_6_PAD,0x74},
         {KEY_7_PAD,0x6C},{KEY_8_PAD,0x75},{KEY_9_PAD,0x7D},{KEY_NUMLOCK,0x77},
-        {KEY_SCRLOCK,0x7E},{KEY_BACKSLASH2,0x5D},
+        {KEY_SCRLOCK,0x7E},{KEY_BACKSLASH2,0x61},
         {KEY_SEMICOLON,0x4C},
         {-1,-1}
 };
@@ -477,6 +479,7 @@
         {-1,-1,-1}
 };
 
+
 int findextkey(int c)
 {
         int d=0;
@@ -496,6 +499,24 @@
 {
         int c;
         int temp;
+
+        if (release_pausekey)
+        { 
+        	// Force Pause key to release it's state for ARM
+                printf("Pause key released for ARM\n");
+                kbdpacket[0]=0xE1;
+                kbdpacket[1]=0xF0;
+                kbdpacket[2]=0x14;
+                kbdpacket[3]=0xF0;
+                kbdpacket[4]=0x77;
+                kbdpacketsize=5;
+                kbdpacketpos=0;
+                kcallback=20;
+                kbdcommand=0xFE;
+                release_pausekey=0;
+                return;
+        }
+
         for (c=0;c<128;c++)
         {
 //				if (c==KEY_X) c++;
@@ -509,12 +530,14 @@
                         {
                                 if (!keys2[c])
                                 {
+                                        // when key released
                                         kbdpacket[0]=0xF0;
                                         kbdpacket[1]=temp;
                                         kbdpacketsize=2;
                                 }
                                 else
                                 {
+                                        // when key pressed
                                         kbdpacket[0]=temp;
                                         kbdpacketsize=1;
                                 }
@@ -532,6 +555,7 @@
                                 {
                                         if (!keys2[c])
                                         {
+                                                // when key released
                                                 kbdpacket[0]=kbdtemp;
                                                 kbdpacket[1]=0xF0;
                                                 kbdpacket[2]=temp;
@@ -539,6 +563,7 @@
                                         }
                                         else
                                         {
+                                                // when key pressed
                                                 kbdpacket[0]=kbdtemp;
                                                 kbdpacket[1]=temp;
                                                 kbdpacketsize=2;
@@ -549,6 +574,27 @@
 //                                        rpclog("Sending packet %02X %02X %02X %i\n",kbdpacket[0],kbdpacket[1],kbdpacket[2],kbdpacketsize);
                                         return;
                                 }
+				else
+                                {
+                                        if (c==KEY_PAUSE)
+                                        {
+                                                printf("Found Pause/Break key %i\n",c);
+                                                printf("Force key on for ARM\n");
+						// Force Pause key for ARM alway on even if allegro sets it's state off
+                                                kbdpacket[0]=0xE1;
+                                                kbdpacket[1]=0x14;
+                                                kbdpacket[2]=0x77;
+                                                kbdpacketsize=3;
+                                                release_pausekey=-1; //Set release state so that on the next poll de key will be released
+
+                                                kbdpacketpos=0;
+                                                kcallback=20;
+                                                kbdcommand=0xFE;
+//                                                rpclog("Sending packet %02X %02X %02X %i\n",kbdpacket[0],kbdpacket[1],kbdpacket[2],kbdpacket[3],kbdpacketsize);
+                                        return;                                              		
+                                        }                                        
+                                        
+                                }
                         }
                 }
         }
