home *** CD-ROM | disk | FTP | other *** search
/ MS DOS Archives 1 / MS-DOS_Archives_Volume_One_Walnut_Creek.iso / msdos / at / swpkeyat.arc / SWPKEYAT.DOC < prev   
Text File  |  1989-02-26  |  6KB  |  140 lines

  1. Date: 10 Jul 1985 19:19:24 PDT
  2. Subject: Swapping "Esc" and "~" on AT -- SWPKEYAT
  3. From: Craig Milo Rogers  <ROGERS@USC-ISIB.ARPA>
  4.  
  5.  
  6.     I've recently gotten an IBM-PC/AT.  Boy, am I burned by the
  7. ill-positioned "Esc" key.  So, I decided to "fix" things.
  8.  
  9.     I started by prying up the key tops of the "Esc" and "~" (tilde)
  10. keys, and swapping them.  Of course, that didn't really fix anything,
  11. but it did show me what my goal looked like.
  12.  
  13.     Next, I decided to write a low-level BIOS extension which intercepts
  14. and swaps key codes to implement the key cap swap I described above.  The
  15. result was SWPKEYAT.ASM, which has been submitted to the INFO-IBMPC library.
  16. SWPKEYAT swaps by intercepting the keyboard hardware interrupt, since
  17. I thought that would fool as much software as possible.  The program is
  18. rather ugly, though:  after swapping key scan codes it jumps into the
  19. AT's ROM BIOS keyboard hardware interrupt routine.
  20.  
  21.     So far, so good.  DOS is perfectly happy, and so are any programs
  22. which do DOS or BIOS keyboard I/O.  In particular, both VDTE and KERMIT
  23. run OK.
  24.  
  25.     But, what about programs that do their own sub-BIOS keyboard
  26. scan conversions?  Luckily for me, I don't run many programs like that.
  27. However, I absolutely had to fix my copy of Lugaru Epsilon.  So, I used
  28. DEBUG to disassemble and trace Epsilon until I found the (single) location
  29. where it was reading the keyboard port.
  30.  
  31.     It takes several instructions to swap the keyboard scan codes.
  32. I couldn't find an easy way to insert the entire sequence into Epsilon.
  33. So, I added an additional interrupt handler to SWPKEYAT.  The new interrupt
  34. does an IN AL,60 (reading the keyboard port) and swaps the appropriate
  35. pair of scan codes.  I selected INT 3FH from the end of the "Reserved for
  36. DOS" range for this function.
  37.  
  38.     The appropriate location to patch in Epsilon 2.02 is offset
  39. BDBE.  I copied EPSILON.EXE to EPSILON.XXX and ran DEBUG on EPSILON.XXX.
  40. The .EXE-file offset became C4BE.  I patched that location, wrote the
  41. file back out, and renamed the result to XXX.EXE.  Once I had confirmed
  42. that my patched version worked, I renamed XXX.EXE to EPSILON.EXE.
  43.  
  44.     So much for this hack.  If you use SWPKEYAT and run into a program
  45. which doesn't see the swap (CodeSmith ((tm) Visual Age) may be a candidate),
  46. I'll be interested in hearing about the problem (but probably won't fix it).
  47.  
  48.                     Craig Milo Rogers
  49.  
  50.  
  51.  
  52. ------------------------------
  53.  
  54. Date: 11 Jul 85 15:26:00 EDT
  55. From: TD9H@CMU-CC-TE.ARPA <TD9H@CMU-CC-TE>
  56. To: rogers%usc-isib@USC-MAILNET
  57. cc: brackenridge%usc-isib@USC-MAILNET
  58. Subject: Epsilon Patch for SWPKEYAT
  59.  
  60.  
  61. Epsilon 3.0 allows you to remap keys at the level of the keyboard
  62. interrupt (far below the command/key binding level).  It sounds like
  63. your patch will do till then.
  64.  
  65.  
  66. Todd Doucet
  67. Lugaru Software Ltd.
  68.  
  69. [Todd informs me version 3.0 of Epsilon will be released "real soon now". -wab]
  70.  
  71.  
  72. ------------------------------
  73. To: kpetersen@wsmr-simtel20.army.mil
  74. From: jrv@mitre-bedford.arpa
  75. Subject: SWPKEYAT
  76. -------
  77.  
  78. Keith:
  79.  
  80. I am submitting SWPKEYAT.ARC, which includes updated versions of two
  81. files listed in "nodescr.idx":
  82.  
  83. "PD1:","<MSDOS.KEYBOARD>","SWPKEYAT.ASM",1,7140,7,850710,""
  84. "PD1:","<MSDOS.KEYBOARD>","SWPKEYAT.DOC",1,2966,7,850715,""
  85.  
  86. SWPKEYAT swaps the escape and tilde (~) keys on the AT keyboard.  The
  87. version in the library conflicts with QuickBasic.  Therein lies a tale...
  88.  
  89. In SWPKEYAT, Craig Milo Rogers at USC/ISI implemented a new interrupt
  90. which acts like an IN from the keyboard data port with the appropriate
  91. scan codes swapped.  The new interrupt is for use in patching programs
  92. like EPSILON that have their own keyboard interrupt handlers.  For
  93. this, he picked interrupt 3FH, and states:
  94.  
  95.     "INT 3FH is the last 'Reserved for DOS' interrupt.  DOS 3.10
  96.     doesn't use it, but that's no guarantee about future availability."
  97.  
  98. From the phrase 'Reserved for DOS' I assumed that I needed to worry
  99. about compatibility only when upgrading to a new version of DOS. 
  100. However, I eventually discovered conflicts with QuickBasic and QuickC. 
  101. It turns out that they use interrupts 3DH, 3EH, and 3FH.  Apparently
  102. the warning should have been 'reserved for Microsoft'!
  103.  
  104. I rewrote SWPKEYAT to implement 3CH.  I also rewrote it so that
  105. SWPKEYAT itself never invokes that interrupt.  Now it would fail only
  106. if:
  107.  
  108.     1) some program changes 3CH,
  109.     2) that program doesn't restore 3CH
  110.     3) you run some third program which was patched to invoke 3CH.
  111.  
  112. SWPKEYAT runs on early ATs (BIOS ROM date 01/04/84), and finishes scan
  113. processing by jumping into the ROM at a magic address.  This is clearly
  114. not portable to other ROM BIOSs.  It was also the only reasonable way
  115. to accomplish the function.
  116.  
  117. Newer ATs implements a "keyboard intercept" feature (function 4FH of
  118. INT 15H) which make scan code swapping much cleaner.  To switch the
  119. escape and tilde keys on such a machine, see the program SWAPKEY in the
  120. same ARC file.
  121.  
  122. Here's the ARC file contents:
  123.  
  124. Filename        Length      Date   
  125. --------        ------      ----   
  126. SWAPKEY.ASM       2269    01-18-89 swap escape and tilde on new ATs 
  127. SWAPKEY.COM         70    01-13-89  with keyboard intercept feature
  128. SWPKEYAT.ASM      7783    01-18-89 swap escape and tilde
  129. SWPKEYAT.COM       131    07-07-88  on old ATs (BIOS
  130. SWPKEYAT.DOC      2894    02-26-89   dated 1/4/84)
  131. ----            ------  
  132. 0005             13147  
  133.  
  134.  
  135. I suggest the following entry for SIMIBM.IDX:
  136.  
  137. "PD1:","<MSDOS.KEYBOARD>","SWPKEYAT.ARC",1,,,,"swap ESC and tilde on AT kbd"
  138.  
  139.                                    - Jim Van Zandt
  140.