Contents of the NMIEXIT1.DOC file
TITLE: How to Cure the Dreaded "LOCKED KEYBOARD" Condition.
An Installation and User's Guide for the NMIEXIT program.
The NMIEXIT program and this documentation may be used, copied and shared
without fee under the following conditions:
You may not sell or distribute these materials for profit.
These materials are provided on an "as is" basis.
No warranty is expressed or implied.
The author assumes no responsibility for any damages that may occur as a
result of using these materials.
The author will attempt to answer any written questions concerning these
If you use these materials and find then useful,
You may send a $20. contribution to:
1729 Mayflower Dr.
Carrollton, Tx 75007
Ah yes, here we are trying to debug that new program that is going to sell
a million copies and ARGGGG, the keyboard just locked up. Well its out
there some where looping out of control with all the interrupts turned off.
If you could just look at that last file buffer, or examine a key location
for clues. But alas no, its power off, power on, and start single stepping.
Perhaps your not a programmer, but have just purchased a wonderful new
integrated spreadsheet and calorie counting package. Each time you try to
compute the bottom line on your dinner menu it locks up. If only Alt-Ctrl-
Del would work.
Well have I got good news for you. For the price of a simple push button
switch, a very minor hardware modification to your IBM PC and the NMIEXIT
program, your prayers are answered.
HOW DOES IT WORK
The NMIEXIT program takes advantage of a special line on the 8088 called
the Non-Maskable Interrupt line. It is, as the name implies, non-maskable
by normal software. This line appears on the IBM PC bus at pin A1 on every
card in the IBM PC. This line is normally used by memory boards to signal
another dreaded condition, the PARITY CHECK. In most other respects the NMI
behaves much the same as any other 8088 interrupt. It has a vector at
location 0000:0008 which normally points to a routine in BIOS that simply
prints out the dreaded "PARITY CHECK" message and halts the machine.
A push button switch may be wired from pin A1 of any PC board to ground.
Pushing the switch will then simulate the parity check condition and the PC
will go running off to the BIOS NMI routine, print out the "PARITY CHECK"
message and halt. What good is that you ask? Well not much, but that is
where the NMIEXIT program comes into play. Before you invoke the program
that is giving you trouble, issue the NMIEXIT command. The command requires
one operand, the name of any DOS com type program. NMIEXIT makes itself
resident along with the com program you supplied as an argument. The NMI
vector is altered to point to the NMIEXIT program.
Now you invoke your program and the keyboard locks up, simply push the
button. The NMIEXIT program gets control. It first cleans house a little so
that the display and keyboard are usable again. Next NMIEXIT displays all
of the registers and flags as they were at the time the button was pushed.
The com program that you provided as an operand to the command is now given
control. If that program happened to be DEBUG.COM you are now in fat city.
Display that buffer, dump that stack, look at those counters, and maybe you
will find the clue.
The ability to specify any DOS com type program to NMIEXIT is extremely
flexible. For the non-programmer we talked about earlier who only wanted to
get his machine restarted, I have provided REBOOT.COM. This simple program
simply jumps to the restart vector. You should never have to power off your
However, even this wonderful scheme has a weak spot. What if the rouge
program wipes out NMIEXIT or the copy of DEBUG you made resident? There is
a last resort, not pleasant though. For that last resort case I have
provided CASBAS.COM. A routine that gets you to cassette BASIC. Since
cassette BASIC is in rom it can not get wiped out. Now you can PEEK, MID$
and HEX$ yourself up a little dump routine to look at the remains of your
The DOS com program that you specify as an operand to the NMIEXIT command
must contain a drive identifier and a path specification if they are other
that the default. The extension COM must also be included.
Oh yes, it only runs under DOS 2.0 or 2.1. DOS 1.1 users, upgrade. I do not
know if NMIEXIT will work on any IBM compatible. I have tested it only on
IBM PC and IBM PC-XT.
NOTES ON INSTALLING THE PUSH BUTTON
The installation of the push button is a simple task for anyone with even
the most basic electrical and mechanical skills. However if you have never
had a soldering iron in your hands, enlist the aid of a friend who has.
Here is a list of the stuff you will need:
A push button switch, momentary contact, SPST, normally open
A box to mount the button in
A 2 ft. length of single conductor shielded cable
A short length (several inches) of 30 or 40 GA wire
An RCA phono jack and female connector that can be mounted on the
faceplate of one of your PC boards.
All of these items are available at any RADIO SHACK store. Of course if you
are not into neatness, you can get by with only the button and wire.
First mount the button in the box, connect the shielded cable and mount the
male RCA phono jack to the end of the cable. If you have a ohm meter or
continuity checker of some kind, it is a good to check out the operation of
the button at this time.
The next step is to select which board in you PC you are going to modify.
Since the NMI signal appears on all boards it does not really matter which
one you chose. However, pick one that has room to mount the phono jack.
Remove the faceplate from the board, drill a hole and mount the jack.
Reinstall the faceplate.
Now lets find pin A1 and the ground pin on the board. Lay the board flat on
a table with the component side up and the faceplate on your right. The A1
pin will be the first pin on the right end of the board fingers. The ground
pin will be on the other side of the board directly opposite the A1 pin.
The plated paths will usually run from the connector fingers to a row of
circular thru connects located just above the fingers. Some boards will
have etched labels on the board to help you locate the pins. The circular
thru connects are the best place to solder and connect your wires. Use
small gauge wire (30 or 40) and run a connection from ground to the shell
or outside of the phono jack. Run the other connection from pin A1 to the
center terminal on the phono jack. Use solder sparingly on the board.
CHECKING IT OUT
Re-install the board and put everything back together. Do not plug in your
button yet. Power up the system and watch for smoke (just kidding). The
machine should power up cleanly. If you get a PARITY CHECK error you have
shorted the NMI lead (pin A1) to ground somewhere. Now plug in your button.
If you get a PARITY CHECK then there is a short somewhere in the cable or
plug. Assuming all is still well and your system is up and running, now
press the button. You should get a PARITY CHECK message and your system
will lock up. This confirms that your button is doing what it is suppose
to. Now repower the system and invoke NMIEXIT specifying DEBUG.COM as an
operand. Remember to include any drive and path identifiers if required.
NMIEXIT will give a confirmation message if all went well. Now hit the
button. The screen will clear and NMIEXIT will display the registers and
flags at the time the button was hit. At this time you should be in DEBUG.
Try some of your favorite DEBUG commands. Entering the DEBUG "Q" command
should return you to DOS.