home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Simtel MSDOS 1993 May
/
SIMTEL_0593.ISO
/
msdos
/
keyboard
/
swpkeyat.doc
< prev
next >
Wrap
Internet Message Format
|
1985-07-15
|
3KB
Date: 10 Jul 1985 19:19:24 PDT
Subject: Swapping "Esc" and "~" on AT -- SWPKEYAT
From: Craig Milo Rogers <ROGERS@USC-ISIB.ARPA>
I've recently gotten an IBM-PC/AT. Boy, am I burned by the
ill-positioned "Esc" key. So, I decided to "fix" things.
I started by prying up the key tops of the "Esc" and "~" (tilde)
keys, and swapping them. Of course, that didn't really fix anything,
but it did show me what my goal looked like.
Next, I decided to write a low-level BIOS extension which intercepts
and swaps key codes to implement the key cap swap I described above. The
result was SWPKEYAT.ASM, which has been submitted to the INFO-IBMPC library.
SWPKEYAT swaps by intercepting the keyboard hardware interrupt, since
I thought that would fool as much software as possible. The program is
rather ugly, though: after swapping key scan codes it jumps into the
AT's ROM BIOS keyboard hardware interrupt routine.
So far, so good. DOS is perfectly happy, and so are any programs
which do DOS or BIOS keyboard I/O. In particular, both VDTE and KERMIT
run OK.
But, what about programs that do their own sub-BIOS keyboard
scan conversions? Luckily for me, I don't run many programs like that.
However, I absolutely had to fix my copy of Lugaru Epsilon. So, I used
DEBUG to disassemble and trace Epsilon until I found the (single) location
where it was reading the keyboard port.
It takes several instructions to swap the keyboard scan codes.
I couldn't find an easy way to insert the entire sequence into Epsilon.
So, I added an additional interrupt handler to SWPKEYAT. The new interrupt
does an IN AL,60 (reading the keyboard port) and swaps the appropriate
pair of scan codes. I selected INT 3FH from the end of the "Reserved for
DOS" range for this function.
The appropriate location to patch in Epsilon 2.02 is offset
BDBE. I copied EPSILON.EXE to EPSILON.XXX and ran DEBUG on EPSILON.XXX.
The .EXE-file offset became C4BE. I patched that location, wrote the
file back out, and renamed the result to XXX.EXE. Once I had confirmed
that my patched version worked, I renamed XXX.EXE to EPSILON.EXE.
So much for this hack. If you use SWPKEYAT and run into a program
which doesn't see the swap (CodeSmith ((tm) Visual Age) may be a candidate),
I'll be interested in hearing about the problem (but probably won't fix it).
Craig Milo Rogers
------------------------------
Date: 11 Jul 85 15:26:00 EDT
From: TD9H@CMU-CC-TE.ARPA <TD9H@CMU-CC-TE>
To: rogers%usc-isib@USC-MAILNET
cc: brackenridge%usc-isib@USC-MAILNET
Subject: Epsilon Patch for SWPKEYAT
Epsilon 3.0 allows you to remap keys at the level of the keyboard
interrupt (far below the command/key binding level). It sounds like
your patch will do till then.
Todd Doucet
Lugaru Software Ltd.
[Todd informs me version 3.0 of Epsilon will be released "real soon now". -wab]
------------------------------