home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / database / loadcall.zip / CONTROL.TXT < prev    next >
Text File  |  1987-04-06  |  8KB  |  284 lines

  1. Keyboard and Cursor Control on the IBM PC
  2.  
  3.    by Ralph Davis, Steve Kurasch, and Olivier Biggerstaff
  4.  
  5. The following assembly language routines toggle certain hardware
  6. features on and off.  The first two sets of routines go into the
  7. system data segment (at absolute address 400H) and change the
  8. keyboard flag, which resides at offset 17H in this segment.  This
  9. flag sets its bits to inform the system which Shift keys are on
  10. and which are off.  Bit 6 reflects the state of the Capslock key,
  11. and Bit 5 that of the Numlock key.  Therefore, the masks are as
  12. follows: to turn the Capslock key on, 40H; to turn it off, 0BFH
  13. (the one's complement of 40H; to turn the Numlock key on, 20H; to
  14. turn it off, 0DFH.
  15.  
  16. The byte at offset 18H is referred to in the IBM Technical
  17. Reference Manual as KB_FLAG_1, and it also records the state of
  18. the Shift keys.  Therefore, these routines also change this byte.
  19.  
  20. The third set of routines uses BIOS interrupt 10H to turn the
  21. cursor off and on.  They also use interrupt 11H to see if you are
  22. using a color monitor, as the masks are different for color and
  23. monochrome.
  24.  
  25.  
  26. Turning the Capslock Key On and Off
  27.  
  28.  
  29. ; Program ...: Caps.ASM
  30. ; Author ....: Ralph Davis
  31. ; Date ......: September 1, 1985
  32. ; Note ......: Turns the Capslock key on or off.  Note that this
  33. ;              listing includes the set of instructions for
  34. ;              turning the Capslock key both on and off.
  35. ;
  36. ;
  37.     .LFCOND            ; List false conditionals.
  38.     PAGE 60,132        ; Page length 60, width 132
  39.  
  40. COM    EQU     0        ; Assemble as .BIN file
  41. D3    EQU     1        ; for Developer's Release.
  42.         
  43. CODESEG SEGMENT BYTE PUBLIC 'CODE'
  44. CAPSLOCK PROC    FAR
  45.     ASSUME CS:CODESEG
  46.     IF    COM
  47.        ORG    100H        ; ORG at 100H for .COM file.
  48.     ENDIF
  49. START:    PUSH    AX        ; Save registers.
  50.     PUSH     DS
  51.     PUSH     SI
  52.      PUSH     CX
  53.     MOV     AX,40H          ; Point DS to system data segment
  54.     MOV     DS,AX
  55.     MOV    SI,17H        ; and SI to KB_FLAG.
  56.     MOV     CX,2        ; Set counter to perform
  57.                 ; loop twice.
  58. LOOPER:    MOV    BL,[SI]        ; Load flag contents 
  59.     AND     BL,0BFH        ; and turn off Capslock bit.
  60.                 ; Note that the instruction 
  61.                 ; to turn the Capslock key on
  62.                 ; is  OR BL,40H.
  63.                 ; Every other instruction is
  64.                 ; identical.
  65.     MOV    [SI],BL        ; Replace flag.
  66.     INC    SI        ; Point to KB_FLAG_1
  67.     LOOP    LOOPER        ; and do the same thing.
  68.     POP    CX        ; Restore registers.
  69.     POP    SI
  70.     POP    DS
  71.     POP    AX
  72.     IF    COM
  73.        INT    20H        ; INT 20H if .COM file.
  74.     ELSE
  75.        RET            ; Far return to dBASE III.
  76.     ENDIF
  77. ;
  78. CAPSLOCK ENDP
  79. CODESEG ENDS
  80.     END    START
  81.  
  82.  
  83. dBASE II POKE sequence to turn off the Capslock key:
  84.  
  85. SET CALL TO 61440
  86. *-----------0---1---2---3---4---5---6---7---8---9
  87. POKE 61440, 80, 30, 86, 81,184, 64,  0,142,216,190
  88. POKE 61450, 23,  0,185,  2,  0,138, 28,128,227,191
  89. POKE 61460,136, 28, 70,226,246, 89, 94, 31, 88,195
  90.  
  91. dBASE II POKE sequence to turn on the Capslock key:
  92.  
  93. SET CALL TO 61440
  94. * -----------0---1---2---3---4---5---6---7---8---9
  95. POKE 61440, 80, 30, 86, 81,184, 64,  0,142,216,190
  96. POKE 61450, 23,  0,185,  2,  0,138, 28,128,203, 64
  97. POKE 61460,136, 28, 70,226,246, 89, 94, 31, 88,195
  98.  
  99.  
  100. Turning the Numlock Key On and Off
  101.  
  102. ; Program ...: Numlock.ASM
  103. ; Author ....: Ralph Davis
  104. ; Date ......: September 1, 1985
  105. ; Note ......: Turns the Numlock on or off.  Note that this
  106. ;              listing includes the set of instructions for
  107. ;              turning the Numlock key both on and off.
  108. ;
  109. ;
  110.     .LFCOND            ; List false conditionals.
  111.     PAGE 60,132        ; Page length 60, width 132.
  112.  
  113. COM    EQU     0        ; Assemble as .BIN file
  114. D3    EQU     1        ; for Developer's Release.
  115.         
  116. CODESEG SEGMENT BYTE PUBLIC 'CODE'
  117. NUMLOCK PROC    FAR
  118.     ASSUME CS:CODESEG
  119.     IF    COM
  120.        ORG    100H        ; ORG at 100H for .COM file.
  121.     ENDIF
  122. START:    PUSH    AX        ; Save registers.
  123.     PUSH     DS
  124.     PUSH     SI
  125.      PUSH     CX
  126.     MOV     AX,40H        ; Point DS to system data segment
  127.     MOV     DS,AX
  128.     MOV    SI,17H        ; and SI to KB_FLAG.
  129.     MOV     CX,2        ; Set counter to perform
  130.                 ; loop twice.
  131. LOOPER:    MOV    BL,[SI]        ; Load flag contents
  132.     AND     BL,0DFH     ; and turn off Numlock bit.
  133.                 ; Note that the instruction
  134.                 ; to turn the Numlock key on 
  135.                 ; is  OR BL,20H.
  136.  
  137.     MOV    [SI],BL        ; Replace flag.
  138.     INC    SI        ; Point to KB_FLAG_1
  139.     LOOP    LOOPER        ; and do the same thing.
  140.     POP    CX        ; Restore registers.
  141.     POP    SI
  142.     POP    DS
  143.     POP    AX
  144.     IF    COM        
  145.        INT    20H        ; INT 20H if .COM file.
  146.     ELSE
  147.        RET            ; Far return to dBASE III.
  148.     ENDIF
  149. ;
  150. NUMLOCK    ENDP
  151. CODESEG    ENDS
  152.     END    START
  153.  
  154.  
  155. dBASE II POKE sequence to turn off the Numlock key:
  156.  
  157. SET CALL TO 61440
  158. * -----------0---1---2---3---4---5---6---7---8---9
  159. POKE 61440, 80, 30, 86, 81,184, 64,  0,142,216,190
  160. POKE 61450, 23,  0,185,  2,  0,138, 28,128,227,223
  161. POKE 61460,136, 28, 70,226,246, 89, 94, 31, 88,195
  162.  
  163. dBASE II POKE sequence to turn on the Numlock key:
  164.  
  165. SET CALL TO 61440
  166. * -----------0---1---2---3---4---5---6---7---8---9
  167. POKE 61440, 80, 30, 86, 81,184, 64,  0,142,216,190
  168. POKE 61450, 23,  0,185,  2,  0,138, 28,128,203, 32
  169. POKE 61460,136, 28, 70,226,246, 89, 94, 31, 88,195
  170.  
  171.  
  172. Turning the Cursor On and Off
  173.  
  174. Turn cursor off:
  175.  
  176. ; Program ...: Curoff.ASM
  177. ; Author ....: Steve Kurasch and Olivier Biggerstaff
  178. ; Date ......: September 1, 1985
  179. ; Note ......: Turns the cursor off.
  180.  
  181.     .LFCOND            ; List false conditionals.
  182.     PAGE 60,132        ; Page length 60, width 132.
  183.  
  184. COM    EQU     0        ; Assemble as .BIN file
  185. D3    EQU     1        ; for Developer's Release.
  186.         
  187. CODESEG SEGMENT BYTE PUBLIC 'CODE'
  188. CURSOFF PROC    FAR
  189.     ASSUME CS:CODESEG
  190.     IF    COM
  191.        ORG    100H        ; ORG at 100H for .COM file.
  192.     ENDIF
  193. START:  PUSH     AX        ; Save registers.
  194.     PUSH     CX
  195.     MOV    AH,1        ; SET CURSOR TYPE function.
  196.     MOV    CX,8F8FH    ; Cursor specifications in CH
  197.                 ; & CL.
  198.     INT    10H        ; Call ROM BIOS.
  199.     POP    CX        ; Restore register.
  200.     POP    AX
  201.     IF    COM
  202.        INT    20H        ; INT 20H if .COM file.
  203.     ELSE
  204.        RET            ; Far return to dBASE III.
  205.     ENDIF
  206. ;
  207. CURSOFF ENDP
  208. CODESEG ENDS
  209.     END    START
  210.  
  211.  
  212. Turn cursor on:
  213.  
  214. ; Program ...: Curon.ASM
  215. ; Author ....: Steve Kurash and Olivier Biggerstaff
  216. ; Date ......: September 1, 1985
  217. ; Note ......: Turns the cursor on.
  218.  
  219.     .LFCOND            ; List false conditionals.
  220.     PAGE 60,132        ; Page length 60, width 132.
  221.  
  222. COM    EQU     1        ; Assemble as .COM file.
  223. D3    EQU     0
  224.         
  225. CODESEG SEGMENT BYTE PUBLIC 'CODE'
  226. CURSON  PROC    FAR
  227.     ASSUME CS:CODESEG
  228.     IF    COM
  229.        ORG    100H        ; ORG at 100H for .COM file.
  230.     ENDIF
  231. START:  PUSH    AX        ; Save registers.
  232.     PUSH    CX
  233.     INT     11H        ; 
  234.     MOV    CX,8687H    ; Mask for color monitor.
  235.     AND    AL,10H        ; Check bit for color card.
  236.     JZ    CALL_ROM    ; JMP if color
  237.     MOV    CX,8B8CH    ; otherwise set up mask for
  238.                 ; monochrome.
  239. CALL_ROM:
  240.     MOV    AH,1        ; Set cursor type function.
  241.     INT    10H        ; Call ROM BIOS.
  242.     POP    CX        ; Restore registers.
  243.     POP    AX
  244.     IF    COM        
  245.        INT    20H        ; INT 20H if .COM file.
  246.     ELSE
  247.        RET            ; Far return to dBASE III.
  248.     ENDIF
  249. ;
  250. CURSON    ENDP
  251. CODESEG    ENDS
  252.     END    START
  253.  
  254.  
  255. dBASE II POKE sequence to turn the Cursor off:
  256.  
  257. SET CALL TO 61440
  258. * -----------0---1---2---3---4---5---6---7---8---9
  259. POKE 61440, 80, 81,180,  1,185,143,143,205, 16, 89
  260. POKE 61450, 88,195
  261.  
  262. dBASE II POKE sequence to turn the Cursor on:
  263.  
  264. SET CALL TO 61440
  265. * -----------0---1---2---3---4---5---6---7---8---9
  266. POKE 61440, 80, 81,205, 17,185,135,134, 36, 16,116
  267. POKE 61450,  3,185,140,139,180,  1,205, 16, 89, 88
  268. POKE 61460,195
  269.  
  270. You have two ways to execute these routines from dBASE II.  You
  271. can enter the poke sequences, then type CALL from the dot prompt.
  272. Or, you can assemble them as .COM files, then type
  273.  
  274.      QUIT TO '<program>'
  275.  
  276. From dBASE III versions 1.0 and 1.1, you use the RUN command to
  277. execute them as .COM files.
  278.  
  279. From the Developer's Release of dBASE III, after assembling the
  280. programs as .BIN files, you type
  281.  
  282.      LOAD <module>
  283.      CALL <module>
  284.