home *** CD-ROM | disk | FTP | other *** search
/ The Unsorted BBS Collection / thegreatunsorted.tar / thegreatunsorted / programming / misc_programming / int9.spc < prev    next >
Text File  |  1990-01-05  |  13KB  |  250 lines

  1.         Specification of Keyboard Hardware Interrupt ( INT 9H )
  2.         -------------------------------------------------------
  3.  
  4. Description:
  5.         This routine supports an interface between system and keyboard.
  6.         When you strike a key, an interrupt occurs, which invokes the
  7.         routine to put ASCII code and scan code in keyboard buffer or
  8.         set keyboard flag ("Shift", "Alt, "Crtl"...).
  9.  
  10. function:       keyboard handler
  11.                 ----------------
  12. input:
  13.                 none
  14. output:
  15.                 none
  16.  
  17. reference BIOS data area:
  18.  
  19.         40:17   keyboard flag 1
  20.         40:18   keyboard flag 2
  21.         40:19   input number of Alternate key
  22.         40:1A   keyboard buffer head pointer
  23.         40:1C   keyboard buffer tail pointer
  24.         40:1E - 3D keyboard buffer
  25.         40:71   break key state
  26.         40:72   warm start flag
  27.         40:80   keyboard buffer starting address
  28.         40:82   keyboard buffer ending address
  29.         40:96   keyboard flag 3
  30.         40:97   keyboard LED flag
  31.        *40:b6   Keyboard active (bit 7)  (For 1100LX only)
  32.         40:D2   bios_d
  33.      
  34. port defined:
  35.  
  36.         60h --- Input/Output Buffer
  37.  
  38.         64h --- 8042 Command Port (WRITE)
  39.                 8042 Status  Port (READ)
  40.  
  41.  
  42.  
  43. Programming:
  44.     The main structure of INT 9 is as follows:
  45.     - enable H/W interrupt
  46.     - save registers
  47.     - disable keyboard interface
  48.     - read keyboard code
  49.     - set carry flag then call Keyboard Intercept function (INT 15h,AH=4Fh)
  50.     - IF return carry THEN
  51.          analyze the keyboard code and do the relative process
  52.       ELSE
  53.          nothing to process because Keyboard Intercept function has already
  54.          been processed 
  55.       ENDIF
  56.     - disable H/W interrupt
  57.     - enable keyboard interface
  58.     - call Interrupt Complete function (INT 15h, AX=9102h)
  59.     - send EOI
  60.     - restore registers
  61.     - IRET
  62.  
  63. Note:
  64.  1. Enable H/W interrupt allows the coming of the higher priority H/W
  65.     interrupt.
  66.  2. Disable keyboard interface before reading keyboard code to avoid the
  67.     reentry of keyborad code during analyzing and processing time.
  68.  
  69.  3. Set carry flag before calling the Keyboard Intercept function to solve
  70.     IBM 3270 SDLC (no add-on card version) problem.
  71.  
  72.  4. Disable H/W interrupt before enabling keyboard interface to avoid the
  73.     reentry of keyborad code too quickly and causing a stack overflow.
  74.  
  75.  5. When a make key is read from I/O port 60h, the ASCII and scan code
  76.     are placed in keyboard buffer (40:1e - 3d) at address keyboard_tail
  77.     pointer. The keyboard_tail pointer is increased by two unless it wraps
  78.     past the end of the buffer.
  79.  
  80.  6. It will issue a short beep when the keyboard buffer is full or when it
  81.     received a keyboard overrun code (code 0FFh).
  82.  
  83.  7. For shift state (ctrl, shift and alt),  will update the keyboard flag 1
  84.     (40:17) keyboard flag 2(40:18), keyboard flag 3(40:96), and keyboard
  85.     LED flag(40:97).
  86.  
  87.  8. Check the mode_indicator_update flag (bit 6 of 40:97) before update
  88.     the LED.
  89.  
  90.  9. The Ctrl-Alt-Del sequence places 1234h in the warm start flag (40:72),
  91.     then jumps to the POST.
  92.     It will bypass when in setup (bit 7 of 40:D2 is set), to prevent a
  93.     warm start during setup time.
  94.  
  95. 10. The Pause key causes the handler to loop until a valid key is entered.
  96.  
  97. 11. The PrintScreen key will invoke INT 5h.
  98.  
  99. 12. The Ctrl-Break sequence sets bit 7 of break key state (40:71), places
  100.     0000h in keyboard buffer, and then invokes INT 1Bh.
  101.  
  102. 13. The SysRq make key invokes INT 15h, AX=8500h.
  103.     The SysRq break key invokes INT 15h, AX=8501h.
  104.  
  105. 14. The Ctrl-Alt-Esc sequence jumps to the setup routine.
  106.     It will bypass in setup (bit 7 of 40:D2 is set), to prevent the
  107.     reentry during Setup time.
  108.  
  109. 15. The Ctrl-Alt-"+" sequence toggles the CPU speed.
  110.  
  111. 16. This routine sets the active flag (40:b6h bit 7) on the Laptop 1100LX 
  112.     model.
  113.  
  114. ---------------------------------------------------------------------------
  115. :scan   :84-Key:101-Key:Base  :  Upper:Number : Ctrl :Alt   :  key        :
  116. :code   :      :       :case  :  case :Lock   :      :      :             :
  117. ---------------------------------------------------------------------------
  118. (00) 00                                                             
  119. (01) 01  110     90     011B     011B           011B  01F0    ESC
  120. (02) 02    2      2     0231     0221            -1   7800    1  !
  121. (03) 03    3      3     0332     0340           0300  7900    2  @
  122. (04) 04    4      4     0433     0423            -1   7A00    3  #
  123. (05) 05    5      5     0534     0524            -1   7B00    4  $
  124. (06) 06    6      6     0635     0625            -1   7C00    5  %
  125. (07) 07    7      7     0736     075E           071E  7D00    6  ^
  126. (08) 08    8      8     0837     0826            -1   7E00    7  &
  127. (09) 09    9      9     0938     092A            -1   7F00    8  *
  128. (0A) 10   10     10     0A39     0A28            -1   8000    9  (
  129. (0B) 11   11     11     0B30     0B29            -1   8100    0  )
  130. (0C) 12   12     12     0C2D     0C5F           0C1F  8200    -  _
  131. (0D) 13   13     13     0D3D     0D2B            -1   8300    =  +
  132. (0E) 14   15     15     0E08     0E08           0E7F  0EF0    BackSpace
  133. (0F) 15   16     16     0F09     0F00           9400  A500    Tab
  134. (10) 16   17     17     1071     1051           1011  1000    Q
  135. (11) 17   18     18     1177     1157           1117  1100    W
  136. (12) 18   19     19     1265     1245           1205  1200    E
  137. (13) 19   20     20     1372     1352           1312  1300    R
  138.  
  139. (14) 20   21     21     1474     1454           1414  1400    T
  140. (15) 21   22     22     1579     1559           1519  1500    Y
  141. (16) 22   23     23     1675     1655           1615  1600    U
  142. (17) 23   24     24     1769     1749           1709  1700    I
  143. (18) 24   25     25     186F     184F           180F  1800    O
  144. (19) 25   26     26     1970     1950           1910  1900    P
  145. (1A) 26   27     27     1A5B     1A7B           1A1B  1AF0    [  {
  146. (1B) 27   28     28     1B5D     1B7D           1B1D  1BF0    ]  }
  147. (1C) 28   43     43     1C0D     1C0D           1C0A  1CF0    Enter
  148. (1D) 29   30     58      ##       ##             ##    ##     L-CTL
  149. (1E) 30   31     31     1E61     1E41           1E01  1E00    A
  150. (1F) 31   32     32     1F73     1F53           1F13  1F00    S
  151. (20) 32   33     33     2064     2044           2004  2000    D
  152. (21) 33   34     34     2166     2146           2106  2100    F
  153. (22) 34   35     35     2267     2247           2207  2200    G
  154. (23) 35   36     36     2368     2348           2308  2300    H
  155. (24) 36   37     37     246A     244A           240A  2400    J
  156. (25) 37   38     38     256B     254B           250B  2500    K
  157. (26) 38   39     39     266C     264C           260C  2600    L
  158. (27) 39   40     40     273B     273A            -1   27F0    ;  :
  159. (28) 40   41     41     2827     2822            -1   28F0    '  "
  160. (29) 41    1      1     2960     297E            -1   29F0    `  ~
  161. (2A) 42   44     44      ##       ##             ##    ##     L-SHIFT
  162. (2B) 43   14    2/42    2B5C     2B7C           2B1C  2BF0    \  |
  163. (2C) 44   46     46     2C7A     2C5A           2C1A  2C00    Z
  164. (2D) 45   47     47     2D78     2D58           2D18  2D00    X
  165. (2E) 46   48     48     2E63     2E43           2E03  2E00    C
  166. (2F) 47   49     49     2F76     2F56           2F16  2F00    V
  167. (30) 48   50     50     3062     3042           3002  3000    B
  168. (31) 49   51     51     316E     314E           310E  3100    N
  169. (32) 50   52     52     326D     324D           320D  3200    M
  170. (33) 51   53     53     332C     333C            -1   33F0    ,  <
  171. (34) 52   54     54     342E     343E            -1   34F0    .  >
  172. (35) 53   55     55     352F     353F            -1   35F0    /  ?
  173. (36) 54   57     57      ##       ##             ##    ##     R-SHIFT
  174. (37) 55   -      -      372A      ##            7200  37F0    PrtSc (PC)
  175. (38) 56   58     60      ##       ##             ##    ##     L-ALT
  176. (39) 57   61     61     3920     3920           3920  3920    Space Bar
  177. (3A) 58   64     30      ##       ##             ##    ##     CAP-LOCK
  178. (3B) 59   70     12     3B00     5400           5E00  6800    F1
  179. (3C) 60   65     13     3C00     5500           5F00  6900    F2
  180. (3D) 61   71     14     3D00     5600           6000  6A00    F3
  181. (3E) 62   66     15     3E00     5700           6100  6B00    F4
  182. (3F) 63   72     16     3F00     5800           6200  6C00    F5
  183. (40) 64   67     17     4000     5900           6300  6D00    F6
  184. (41) 65   73     18     4100     5A00           6400  6E00    F7
  185. (42) 66   68     19     4200     5B00           6500  6F00    F8
  186. (43) 67   74     20     4300     5C00           6600  7000    F9
  187. (44) 68   69     21     4400     5D00           6700  7100    F10
  188.  
  189. (45) 69   95     90      ##       ##             ##    ##     NUM-LOCK     
  190. (46) 70  100     25      ##       ##             ##    ##     SCROLL-LOCK
  191. (47) 71   91     91     4700     4737    4737   7700  Buf-    Home (Keypad)
  192. (48) 72   96     96     4800     4838    4838   8D00  Buf-    Up   (Keypad)
  193. (49) 73  101     01     4900     4939    4939   8400  Buf-    PgUp (Keypad)
  194. (4A) 74  107     05     4A2D     4A2D    4A2D   8E00  4AF0    -    (Keypad)
  195. (4B) 75   92     92     4B00     4B34    4B34   7300  Buf-    <--  (Keypad)
  196. (4C) 76   97     97     4CF0     4C35    4C35   8F00  Buf-    enter(Keypad)
  197. (4D) 77  102     02     4D00     4D36    4D36   7400  Buf-    -->  (Keypad)
  198. (4E) 78  108     06     4E2B     4E2B    4E2B   9000  4EF0    +    (Keypad)
  199. (4F) 79   93     93     4F00     4F31    4F31   7500  Buf-    End  (Keypad)
  200. (50) 80   98     98     5000     5032    5032   9100  Buf-    Down (Keypad)
  201. (51) 81  103    103     5100     5133    5133   7600  Buf-    PgDn (Keypad)
  202. (52) 82   99     99     5200     5230    5230   9200  Buf-    INS  (Keypad)
  203. (53) 83  104    104     5300     532E    532E   9300   -1     DEL  (Keypad)
  204. (54) 84  105     -       ##       ##             ##    ##     SYS (PC)
  205. (55) 85   -      -      4A00     4B00           4300   -1      
  206. (56) 86   -      -      565C     567C            -1    -1     KEY-102 Only
  207. (57) 87   -     122     8500     8700           8900  8B00    F11
  208. (58) 88   -     123     8600     8800           8A00  8C00    F12
  209.  59-FF    -      -                                            
  210.  E0 1C    -     108     E00D     E00D           E00A  A600    Enter(Keypad)
  211.  E0 1D    -      64      ##       ##             ##    ##     R-CTL
  212.  E0 35    -      95     E02F     E02F           9500  A400    / (Keypad)
  213.  37       -     100     372A     372A           9600  37F0    * (Keypad)
  214.  E0 38    -      62      ##       ##             ##    ##     R-ALT
  215.  E0 47    -      80     47E0     47E0    47E0   77E0  9700    Home (New)
  216.  E0 48    -      83     48E0     48E0    48E0   8DE0  9800    Up (New)
  217.  E0 49    -      85     49E0     49E0    49E0   84E0  9900    PageUp (New)
  218.  E0 4B    -      79     4BE0     4BE0    4BE0   73E0  9B00    <-- (New)
  219.  E0 4D    -      89     4DE0     4DE0    4DE0   74E0  9D00    --> (New)
  220.  E0 4F    -      81     4FE0     4FE0    4FE0   75E0  9F00    End (New)
  221.  E0 50    -      84     50E0     50E0    50E0   91E0  A000    Down (New)
  222.  E0 51    -      86     51E0     51E0    51E0   76E0  A100    PageDown(New)
  223.  E0 52    -      75     52E0     52E0    52E0   92E0  A200    Insert (New)
  224.  E0 53    -      76     53E0     53E0    53E0   93E0  A300    Delete (New)
  225.  
  226.  Note:
  227.     (1) Symbol Definition:
  228.         '-'    = not defined
  229.         '-1'   = INT 9 service routine will not do anything
  230.         '##'   = special actions such as setting keyboard flags, print 
  231.                  screen, system request
  232.         'Buf-' = accumulate the input number before releasing the Alt key
  233.  
  234.     (2) Scan codes of special 101/102 keys combination:
  235.  
  236.         Key         :  PrintScreen
  237.         Key No.     :      124                     
  238.         Base Case   :  E0 2A E0 37/E0 B7 E0 AA     (PrintScreen)
  239.         Shift Case  :  E0 37/E0 B7                 (PrintScreen)
  240.         Ctrl Case   :  E0 37/E0 B7                 (7200)
  241.         Alt Case    :  54/D4                       (System Request)
  242.  
  243.         Key         :  Pause
  244.         Key No.     :   126
  245.         Base Case   :  E1 1D 45 E1 9D C5           (Pause, Ctrl-NumLock)
  246.         Shift Case  :  E1 1D 45 E1 9D C5           (Pause, Ctrl-NumLock)
  247.         Ctrl Case   :  E0 46 E0 C6                 (Break)
  248.         Alt Case    :  E1 1D 45 E1 9D C5           (Pause, Ctrl-NumLock)
  249. --------------------------------------------------------------------------
  250.