home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / tpfast.zip / FASTKBD.ASM < prev    next >
Assembly Source File  |  1990-09-26  |  22KB  |  523 lines

  1. ;   _______________________________________________________________
  2. ;  |                                                               |
  3. ;  |            Copyright (C) 1989,1990  Steven Lutrov             |
  4. ;  |_______________________________________________________________|____
  5. ;  |                                                               |    |
  6. ;  |  Program Title : FastKbd.Asm                                  |    | ___
  7. ;  |  Author        : Steven Lutrov                                |    |    |
  8. ;  |  Revision      : 2.01                                         |    |    |
  9. ;  |  Date          : 1990-03-16                                   |    |    |
  10. ;  |  Language      : Turbo Assembler                              |    |    |
  11. ;  |                                                               |    |    |
  12. ;  |                                                               |    |    |
  13. ;  |  Description   : Assembly functions  For Keyboard Operations. |    |    |
  14. ;  |                : Using Int 16H or Dos 21H.                    |    |    |
  15. ;  |                : Tested on Turbo Pascal 5.0 & 5.5             |    |    |
  16. ;  |_______________________________________________________________|    |    |
  17. ;      |                                                                |    |
  18. ;      |________________________________________________________________|    |
  19. ;          |                                                                 |
  20. ;          |_________________________________________________________________|
  21. ;
  22.  
  23.  
  24. Code Segment Word Public
  25.  
  26. Assume Cs:Code, Ds:Data
  27.  
  28. Public  Altkeydown,Capslockdown,Capslockon,Freshchar,Clearbuffer
  29. Public  Clearcapslock,Clearins,Clearnumlock,Clearscrolllock,Ctrlkeydown
  30. Public  Getscan,Inskeydown,Inskeyon,Keypause
  31. Public  Leftshiftdown,Nextkey,Lastkey,Numlockdown,Numlockon,Readchar
  32. Public  Readchar,Rightshiftdown,Scrolllockdown,Scrolllockon,Setcapslock
  33. Public  Setins,Setnumlock,Setscrolllock
  34.  
  35. Data    Segment
  36.         Extrn  Errreturn : Byte
  37. Data    Ends
  38.  
  39.  
  40. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  41. ;Function Altkeydown: Boolean;
  42. ;
  43. ;
  44. Altkeydown Proc Far
  45.                 Mov  Ah,2                       ;Bios Kybd Status Func
  46.                 Int  16H                        ;Call The Interrupt
  47.                 Mov  Bl,1                       ;True Value
  48.                 Test Al,8                       ;Test Bit 3
  49.                 Jnz  Altkeydownl1               ;Jump If True
  50.                 Mov  Bl,0                       ;False Value
  51. Altkeydownl1:   Mov  Al,Bl                      ;Place Value For Return
  52.                 Ret
  53. Altkeydown Endp
  54.  
  55.  
  56.  
  57. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  58. ;Function Capslockdown: Boolean;
  59. ;
  60. ;
  61. Capslockdown Proc Far
  62.                 Sub  Ax,Ax                      ;Clear Ax
  63.                 Mov  Es,Ax                      ;Point Es To 0000:0000
  64.                 Mov  Si,418H                    ;Offset Of Status Byte
  65.                 Mov  Bl,64                      ;Test Bit 6
  66.                 Mov  Al,1                       ;True Value
  67.                 Test Es:[Si],Bl                 ;Test The Bit
  68.                 Jnz  Capslockdownl1             ;Jump If True
  69.                 Mov  Al,0                       ;False Value
  70. Capslockdownl1: Ret
  71. Capslockdown Endp
  72.  
  73.  
  74. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  75. ;Function Capslockon: Boolean;
  76. ;
  77. ;
  78. Capslockon Proc Far
  79.                 Mov  Ah,2                       ;Bios Kybd Status Func
  80.                 Int  16H                        ;Call The Interrupt
  81.                 Mov  Bl,1                       ;True Value
  82.                 Test Al,64                      ;Test Bit 6
  83.                 Jnz  Capslockonl1               ;Jump If True
  84.                 Mov  Bl,0                       ;False Value
  85. Capslockonl1:   Mov  Al,Bl                      ;Place Value For Return
  86.                 Ret
  87. Capslockon Endp
  88.  
  89.  
  90. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  91. ;Function Freshchar: Char;
  92. ;
  93. ;
  94. Freshchar Proc Far
  95.                 Mov  Ah,0Ch                     ;Dos Function Number
  96.                 Mov  Al,7                       ;Keyboard Read Function
  97.                 Int  21H                        ;Wait For A Keystroke
  98.                 Ret
  99. Freshchar Endp
  100.  
  101.  
  102. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  103. ;Procedure Clearbuffer;
  104. ;
  105. ;
  106. Clearbuffer Proc Far
  107. Clrbufferl1:    Mov  Ah,6                       ;Function Number
  108.                 Mov  Dl,0Ffh                    ;Subfunction Number
  109.                 Int  21H                        ;Seek Keystroke
  110.                 Jnz  Clrbufferl1                ;Repeat If One Found
  111.                 Ret
  112. Clearbuffer Endp
  113.  
  114.  
  115. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  116. ;Procedure Clearcapslock;
  117. ;
  118. ;
  119. Clearcapslock Proc Far
  120.                 Sub  Ax,Ax                      ;Clear Ax
  121.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  122.                 Mov  Al,10111111B               ;Bit 6
  123.                 And  Es:[417H],Al               ;Clear The Bit
  124.                 Ret
  125. Clearcapslock Endp
  126.  
  127.  
  128. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  129. ;Procedure Clearins;
  130. ;
  131. ;
  132. Clearins  Proc Far
  133.                 Sub  Ax,Ax                      ;Clear Ax
  134.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  135.                 Mov  Al,01111111B               ;Bit 7
  136.                 And  Es:[417H],Al               ;Clear The Bit
  137.                 Ret
  138. Clearins  Endp
  139.  
  140.  
  141. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  142. ;Procedure Clearnumlock;
  143. ;
  144. ;
  145. Clearnumlock Proc Far
  146.                 Sub  Ax,Ax                      ;Clear Ax
  147.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  148.                 Mov  Al,11011111B               ;Bit 5
  149.                 And  Es:[417H],Al               ;Clear The Bit
  150.                 Ret
  151. Clearnumlock Endp
  152.  
  153.  
  154. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  155. ;Procedure Clearscrolllock;
  156. ;
  157. ;
  158. Clearscrolllock Proc Far
  159.                 Sub  Ax,Ax                      ;Clear Ax
  160.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  161.                 Mov  Al,11101111B               ;Bit 4
  162.                 And  Es:[417H],Al               ;Clear The Bit
  163.                 Ret
  164. Clearscrolllock Endp
  165.  
  166.  
  167. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  168. ;Function Ctrlkeydown: Boolean;
  169. ;
  170. ;
  171. Ctrlkeydown Proc Far
  172.                 Mov  Ah,2                       ;Bios Kybd Status Func
  173.                 Int  16H                        ;Call The Interrupt
  174.                 Mov  Bl,1                       ;True Value
  175.                 Test Al,4                       ;Test Bit 2
  176.                 Jnz  Ctrlkeydownl1              ;Jump If True
  177.                 Mov  Bl,0                       ;False Value
  178. Ctrlkeydownl1:  Mov  Al,Bl                      ;Place Value For Return
  179.                 Ret
  180. Ctrlkeydown Endp
  181.  
  182.  
  183.  
  184. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  185. ;Function Getscan: Byte;
  186. ;
  187. ;
  188. Getscan Proc Far
  189.                 Mov  Dx,0Ffh                    ;Assume No Keystroke
  190.                 Mov  Ah,1                       ;Bios Func To Chk Buffer
  191.                 Int  16H                        ;Chk For Keystroke
  192.                 Jz   Getscanl4                  ;Jump If Buffer Empty
  193.                 Mov  Dl,Ah                      ;Assume Ascii Code
  194.                 Or   Al,Al                      ;Test For Extended Code
  195.                 Jnz  Getscanl4                  ;Jump If Ascii Code
  196.                 Cmp  Ah,84                      ;Test For Func+Shift Keys
  197.                 Jb   Getscanl3                  ;Jump Ahead If Below
  198.                 Cmp  Ah,94                      ;Test If Func + Shift
  199.                 Jnb  Getscanl1                  ;Jump Ahead If Not
  200.                 Sub  Ah,25                      ;Figure The Scan Code
  201.                 Jmp  Short Getscanl3            ;Jump Ahead And Adjust
  202. Getscanl1:      Cmp  Ah,104                     ;Test If Func + Ctrl
  203.                 Jnb  Getscanl2                  ;Jump Ahead If Not
  204.                 Sub  Ah,35                      ;Figure The Scan Code
  205.                 Jmp  Short Getscanl3            ;Jump Ahead And Adjust
  206. Getscanl2:      Cmp  Ah,114                     ;Test If Func + Alt
  207.                 Jnb  Getscanl3                  ;Jump Ahead If Not
  208.                 Sub  Ah,45                      ;Figure The Scan Code
  209. Getscanl3:      Add  Ah,128                     ;Add 128 To Extended Code
  210.                 Mov  Dl,Ah                      ;Move Value To Dl
  211. Getscanl4:      Mov  Al,Dl                      ;Set For Return
  212.                 Ret
  213. Getscan Endp
  214.  
  215.  
  216. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  217. ;Function Inskeydown: Boolean;
  218. ;
  219. ;
  220. Inskeydown Proc Far
  221.                 Sub  Ax,Ax                      ;Clear Ax
  222.                 Mov  Es,Ax                      ;Point Es To 0000:0000
  223.                 Mov  Si,418H                    ;Offset Of Status Byte
  224.                 Mov  Bl,128                     ;Test Bit 7
  225.                 Mov  Al,1                       ;True Value
  226.                 Test Es:[Si],Bl                 ;Test The Bit
  227.                 Jnz  Inskeydownl1               ;Jump If True
  228.                 Mov  Al,0                       ;False Value
  229. Inskeydownl1:   Ret
  230. Inskeydown Endp
  231.  
  232.  
  233. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  234. ;Function Inskeyon: Boolean;
  235. ;
  236. ;
  237. Inskeyon Proc Far
  238.                 Mov  Ah,2                       ;Bios Kybd Status Func
  239.                 Int  16H                        ;Call The Interrupt
  240.                 Mov  Bl,1                       ;True Value
  241.                 Test Al,128                     ;Test Bit 7
  242.                 Jnz  Inskeyonl1                 ;Jump If True
  243.                 Mov  Bl,0                       ;False Value
  244. Inskeyonl1:     Mov  Al,Bl                      ;Place Value For Return
  245.                 Ret
  246. Inskeyon Endp
  247.  
  248.  
  249. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  250. ;Procedure Keypause(Code: Char; Ascii: Boolean; Wait_A,Wait_B: Byte);
  251. ;
  252. ;
  253. Keypause Proc Far
  254.                 Sti                             ;Enable Interrupts
  255.                 Push Bp                         ;Save Bp
  256.                 Mov  Bp,Sp                      ;Set Up Stack Frame
  257.                 Mov  Bh,[Bp+12]                 ;Code To Bh
  258.                 Mov  Bl,[Bp+10]                 ;Extended Code Flag To Bl
  259.                 Sub  Ax,Ax                      ;Get Wait_A
  260.                 Mov  Al,[Bp+8]                  ;
  261.                 Mov  Si,Ax                      ;First Char Delay
  262. Keypausel1:     Mov  Ah,0                       ;Function To Read Timer
  263.                 Int  1Ah                        ;Time To Cx:Dx
  264.                 Add  Dx,Si                      ;Add Delay To Low Word
  265.                 Mov  Di,Dx                      ;Copy To Di
  266. Keypausel2:     Int  1Ah                        ;Keep Reading Time...
  267.                 Cmp  Dx,Di                      ;Delay Complete?
  268.                 Jne  Keypausel2                 ;Jump If Not
  269.                 Mov  Ah,1                       ;Bios Func To Chk Buffer
  270.                 Int  16H                        ;Check For Character
  271.                 Jz   Keypausel5                 ;Quit If Buffer Empty
  272.                 Cmp  Al,Bl                      ;See If Extended Code
  273.                 Jne  Keypausel3                 ;Jump If Not Extended
  274.                 Mov  Al,Ah                      ;Else Shift Code To Al
  275. Keypausel3:     Cmp  Al,Bh                      ;Is It The Right Code?
  276.                 Jne  Keypausel5                 ;Quit Routine If Not
  277. Keypausel4:     Mov  Ah,6                       ;Now Clear Buffer
  278.                 Mov  Dl,0Ffh                    ;Dos Func To Read Char
  279.                 Int  21H                        ;Read Char W.O. Waiting
  280.                 Jnz  Keypausel4                 ;Read Again If Char Found
  281.                 Sub  Ax,Ax                      ;Fetch Wait_B
  282.                 Mov  Al,[Bp+6]                  ;
  283.                 Mov  Si,Ax                      ;Typematic Delay
  284.                 Jmp  Short Keypausel1           ;Go Check Buffer Again
  285. Keypausel5:     Pop  Bp                         ;Restore Bp And Quit
  286.                 Ret  4
  287. Keypause Endp
  288.  
  289.  
  290. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  291. ;Function Leftshiftdown: Boolean;
  292. ;
  293. ;
  294. Leftshiftdown Proc Far
  295.                 Mov  Ah,2                       ;Bios Kybd Status Func
  296.                 Int  16H                        ;Call The Interrupt
  297.                 Mov  Bl,1                       ;True Value
  298.                 Test Al,2                       ;Test Bit 1
  299.                 Jnz  Leftshiftdownl1            ;Jump If True
  300.                 Mov  Bl,0                       ;False Value
  301. Leftshiftdownl1:        Mov  Al,Bl              ;Place Value For Return                 
  302.                 Ret
  303. Leftshiftdown Endp
  304.  
  305.  
  306.  
  307. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  308. ;Function Nextkey: Char;
  309. ;
  310. ;
  311. ;
  312. ;
  313. Nextkey Proc Far
  314.                 Mov  Errreturn,2                ;2 = No Keystroke In Buffer
  315.                 Mov  Al,0Ffh                    ;Assume No Keystroke
  316.                 Mov  Ah,1                       ;Bios Func To Chk Buffer
  317.                 Int  16H                        ;Chk For Keystroke
  318.                 Jz   Nextkeyl1                  ;Jump If Buffer Empty
  319.                 Mov  Errreturn,0                ;0 = Not Extended Code
  320.                 Or   Al,Al                      ;Test For Extended Code
  321.                 Jne  Nextkeyl1                  ;Quit If Ascii Code
  322.                 Inc  Errreturn                  ;1 = Extended Code
  323.                 Mov  Al,Ah                      ;Move Extended Code To Al
  324. Nextkeyl1:      Ret     
  325. Nextkey Endp
  326.  
  327.  
  328. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  329. ;Function Lastkey: Char;
  330. ;
  331. ;
  332. Lastkey Proc Far
  333.                 Mov  Ah,6                       ;Dos Func To Chk For Key
  334.                 Mov  Dl,0Ffh                    ;Subfunction Number
  335.                 Int  21H                        ;Seek A Keystroke
  336.                 Jnz  Lastkey1                   ;Jump If Keystroke Found
  337.                 Mov  Al,0Ffh                    ;Else Flag  That No Char
  338. Lastkey1:       Ret
  339. Lastkey Endp
  340.  
  341.  
  342. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  343. ;Function Numlockdown: Boolean;
  344. ;
  345. ;
  346. Numlockdown Proc Far
  347.                 Sub  Ax,Ax                      ;Clear Ax
  348.                 Mov  Es,Ax                      ;Point Es To 0000:0000
  349.                 Mov  Si,418H                    ;Offset Of Status Byte
  350.                 Mov  Bl,32                      ;Test Bit 5
  351.                 Mov  Al,1                       ;True Value
  352.                 Test Es:[Si],Bl                 ;Test The Bit
  353.                 Jnz  Numlockdown                ;Jump If True
  354.                 Mov  Al,0                       ;False Value
  355. Numlockdownl1:  Ret
  356. Numlockdown Endp
  357.  
  358.  
  359. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  360. ;Function Numlockon: Boolean;
  361. ;
  362. ;
  363. Numlockon Proc Far
  364.                 Mov  Ah,2                       ;Bios Kybd Status Func
  365.                 Int  16H                        ;Call The Interrupt
  366.                 Mov  Bl,1                       ;True Value
  367.                 Test Al,32                      ;Test Bit 5
  368.                 Jnz  Numlockonl1                ;Jump If True
  369.                 Mov  Bl,0                       ;False Value
  370. Numlockonl1:    Mov  Al,Bl                      ;Place Value For Return
  371.                 Ret
  372. Numlockon Endp
  373.  
  374.  
  375. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  376. ;Function Readchar: Char;
  377. ;
  378. ;
  379. Readchar Proc Far
  380. Readcharl1:     Mov  Ah,1                       ;Func To Check For Char
  381.                 Int  16H                        ;Find Out Next Char
  382.                 Jz   Readcharl1                 ;Loop If No Char
  383.                 Or   Al,Al                      ;Is It Extended?
  384.                 Jz   Readcharl6                 ;Read By Dos Func If So
  385.                 Sub  Ah,Ah                      ;Bios Func To Read Key
  386.                 Int  16H                        ;Get The Ascii Code
  387.                 Cmp  Al,8                       ;Is It Backspace?
  388.                 Jne  Readcharl2                 ;Jump Ahead If Not
  389.                 Cmp  Ah,14                      ;Is It From Backspc Key?
  390.                 Je   Readcharl7                 ;Jump Ahead If So
  391.                 Jmp  Short Readcharl5           ;Else Make It 208
  392. Readcharl2:     Cmp  Al,9                       ;Is It Tab?
  393.                 Jne  Readcharl3                 ;Jump Ahead If Not
  394.                 Cmp  Ah,15                      ;Is It From Tab Key?
  395.                 Je   Readcharl7                 ;Jump Ahead If So
  396.                 Jmp  Short Readcharl5           ;Else Make It 209
  397. Readcharl3:     Cmp  Al,13                      ;Is It Carriage Return?
  398.                 Jne  Readcharl4                 ;Jump Ahead If Not
  399.                 Cmp  Ah,28                      ;Is It From Cr Key?
  400.                 Je   Readcharl7                 ;Jump Ahead If So
  401.                 Jmp  Short Readcharl5           ;Else Make It 213
  402. Readcharl4:     Cmp  Al,27                      ;Is It Escape?
  403.                 Jne  Readcharl7                 ;Jump Ahead If Not
  404.                 Cmp  Ah,1                       ;Is It From Escape Key?
  405.                 Je   Readcharl7                 ;Jump Ahead If So
  406. Readcharl5:     Add  Al,200                     ;Inc Key Code By 200
  407.                 Jmp  Short Readcharl7           ;Go Set Char For Return
  408. Readcharl6:     Mov  Ah,7                       ;Dos Keyboard Read Func
  409.                 Int  21H                        ;Get The Initial 0
  410. Readcharl7:     Ret
  411. Readchar Endp
  412.  
  413.  
  414.  
  415. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  416. ;Function Rightshiftdown: Boolean;
  417. ;
  418. ;
  419. Rightshiftdown Proc Far
  420.                 Mov  Ah,2                       ;Bios Kybd Status Func
  421.                 Int  16H                        ;Call The Interrupt
  422.                 Mov  Bl,1                       ;True Value
  423.                 Test Al,1                       ;Test Bit 0
  424.                 Jnz  Rightshiftdownl1           ;Jump If True
  425.                 Mov  Bl,0                       ;False Value
  426. Rightshiftdownl1:       Mov  Al,Bl              ;Place Value For Return
  427.                 Ret
  428. Rightshiftdown Endp
  429.  
  430.  
  431. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  432. ;Function Scrolllockdown: Boolean;
  433. ;
  434. ;
  435. Scrolllockdown Proc Far
  436.                 Sub  Ax,Ax                      ;Clear Ax
  437.                 Mov  Es,Ax                      ;Point Es To 0000:0000
  438.                 Mov  Si,418H                    ;Offset Of Status Byte
  439.                 Mov  Bl,16                      ;Test Bit 4
  440.                 Mov  Al,1                       ;True Value
  441.                 Test Es:[Si],Bl                 ;Test The Bit
  442.                 Jnz  Scrollldownl1              ;Jump If True
  443.                 Mov  Al,0                       ;False Value
  444. Scrollldownl1:  Ret
  445. Scrolllockdown Endp
  446.  
  447.  
  448. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  449. ;Function Scrolllockon: Boolean;
  450. ;
  451. ;
  452. Scrolllockon Proc Far
  453.                 Mov  Ah,2                       ;Bios Kybd Status Func
  454.                 Int  16H                        ;Call The Interrupt
  455.                 Mov  Bl,-1                      ;True Value
  456.                 Test Al,16                      ;Test Bit 4
  457.                 Jnz  Scrolllockonl1             ;Jump If True
  458.                 Mov  Bl,0                       ;False Value
  459. Scrolllockonl1: Mov  Al,Bl                      ;Place Value For Return
  460.                 Ret
  461. Scrolllockon Endp
  462.  
  463.  
  464. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  465. ;Procedure Setcapslock;
  466. ;
  467. ;
  468. Setcapslock Proc Far
  469.                 Sub  Ax,Ax                      ;Clear Ax
  470.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  471.                 Mov  Al,64                      ;Bit 6
  472.                 Or   Es:[417H],Al               ;Set The Bit
  473.                 Ret
  474. Setcapslock Endp
  475.  
  476.  
  477. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  478. ;Procedure Setins;
  479. ;
  480. ;
  481. Setins  Proc Far
  482.                 Sub  Ax,Ax                      ;Clear Ax
  483.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  484.                 Mov  Al,128                     ;Bit 7
  485.                 Or   Es:[417H],Al               ;Set The Bit
  486.                 Ret
  487. Setins  Endp
  488.  
  489.  
  490.  
  491. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  492. ;Procedure Setnumlock;
  493. ;
  494. ;
  495. Setnumlock Proc Far
  496.                 Sub  Ax,Ax                      ;Clear Ax
  497.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  498.                 Mov  Al,32                      ;Bit 5
  499.                 Or   Es:[417H],Al               ;Set The Bit
  500.                 Ret
  501. Setnumlock Endp
  502.  
  503.  
  504. ;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
  505. ;Procedure Setscrolllock;
  506. ;
  507. ;
  508. Setscrolllock Proc Far
  509.                 Sub  Ax,Ax                      ;Clear Ax
  510.                 Mov  Es,Ax                      ;Es Pts To 0000:0000
  511.                 Mov  Al,16                      ;Bit 4
  512.                 Or   Es:[417H],Al               ;Set The Bit
  513.                 Ret
  514. Setscrolllock Endp
  515.  
  516.  
  517.  
  518. Code    Ends
  519.  
  520.         End
  521.  
  522.  
  523.