[Prev][Next][Index][Thread]

HOW TO RESOLVE CAPS LOG BUG



Hi!
I have spend a few minutes making some asm tricks to see how Executor answer
to Caps lock key and I have a solution. In fact I have done a little TSR
program that allows me to use Caps lock perfect under text processors.

What follows is technical description, maybe not everyone can understand it
perfectly . if anyone want this info in Spanish, please e-mail me.

The PC computers stores the state of the keys on two bytes in RAM

The byte 0040H:0017H stores the following info:

7th bit Insert status
6th bit Caps Lock status 
5th bit Num Lock status
4th bit Scroll Lock status
3rd bit Alt Pressed
2nd bit Ctrl Pressed
1st bit Left Shift pressed
0  bit  Right Shift pressed

If you change the 6th bit you will see how the keyboard led change.
This bit only informs about if the ROM routines have to generate a Cap key
or not, but not about if it still is pressed, So the following info is usefull

Byte 0040H:0018H
7th bit Insert skey hold
6th bit Caps Lock hold 
5th bit Num Lock shold
4th bit Scroll Lock hold
3rd bit Pause active
2nd bit Sys Req hold
1st bit Left Alt hold
0  bit  Left ctrl hold

The solution for the problem is the following:
Check the 6th bit at 0040h:0017H. If it is set, you must set the 6th bit at
0018H, and Executor will think the Caps key is pressed and phisically
manteined down, just like a real MAc.

I did a little resident program wich traped the Int 09, and every time a key
is pressed, my routine check the state of the 6th bit of 0017H and set the
6th bit of the 0018H byte ON or OFF, as needed. (This is a little more
complicated, due to the SCAN codes and some other stuff, but this is
basically how it works).

This routine only works for the Text processors, on wich the caps key is
used for generate caps letters as they are pressed. (the Int 09 is generated
every time a key is pressed on the keyboard)

It wont works on Maelstrom, because you dont press any key!

I try to trap the int 1Ch, for checking the state 18.2 times per second, to
see how it works with Maelstrom, but the Way Executors traps int 08H (If I
am right they modify directly the vector table, or at least not using int
21H) does not allow me to do it

Well, with all the info (I am sure lots of people knew that) I dont think
that Mat or Cliff takes more that 10 minutes on fix that!


Sorry for my English, but this is not my native language (as everyone can
see)  8-)
Emilio Moreno

 ------------------------------------------------------------------------------
  ___                _                                             
 / (_)           o  | | o       
 \__   _  _  _      | |     __  
 /    / |/ |/ |  |  |/  |  /  \_
 \___/  |  |  |_/|_/|__/|_/\__/ 
                                      ,__ __                               
  Technical Engineering  Student     /|  |  |                              
       Emoreno@encomix.es             |  |  |   __   ,_    _   _  _    __  
   Emilio.Moreno@mest.unizar.es       |  |  |  /  \_/  |  |/  / |/ |  /  \_
  http://www.encomix.es/~emoreno      |  |  |_/\__/    |_/|__/  |  |_/\__/