home *** CD-ROM | disk | FTP | other *** search
/ Simtel MSDOS 1993 May / SIMTEL_0593.ISO / msdos / keyboard / capsctrl.asm < prev    next >
Assembly Source File  |  1988-01-19  |  2KB  |  66 lines

  1. From:  Hess@MIT-Multics.ARPA
  2. Subject:  capsctrl.asm
  3.   
  4. ;         CapsCtrl.asm
  5. ;
  6. ;         This tiny tsr makes the "caps-lock" key act like the "Ctrl" key on
  7. ;         the IBM 101-key keyboards.
  8. ;         To get a real caps-lock, type shift+caps-lock.
  9. ;
  10. ;         Warning: this one MUST be loaded before any other TSR's that replace
  11. ;         the keyboard BIOS call!
  12. ;
  13. code_seg  segment
  14.           assume  CS:code_seg
  15.           org     100H
  16.  
  17. old_int   label dword
  18. begin:    jmp       short init
  19.           dw 0
  20. upcode    db 80H+3AH
  21.  
  22. ; Int 15H points here:
  23. bint:     cmp       AH,4FH              ; is this the "bios" keyboard interrupt?
  24.           jnz       bint0               ; no, act normal.
  25.           cmp       AL,3AH              ; is it the "caps-lock" key
  26.           je        bint1
  27.           cmp       AL,80H+3AH          ; is it the "release" key?
  28.           jne       bint0
  29.           xchg      al,upcode
  30.           jmp       short bint2
  31. bint0:    jmp       [old_int]
  32. bint1:    push      ES
  33.           push      AX
  34.           xor       AX,AX
  35.           mov       ES,AX
  36.           test      byte ptr ES:[417H],1011B      ; see if Alt or Shift
  37.           pop       AX
  38.           pop       ES
  39.           jnz       bint0
  40.           mov       AL,1DH              ; turn into ctrl key
  41.           mov       upcode,80H+1DH
  42. bint2:    stc                                     ; tell "bios" to use this new code
  43.           iret
  44.  
  45. ;--- end of TSR portion ---
  46.  
  47.      assume CS:code_seg,DS:code_seg
  48. init:     xor       AX,AX
  49.           mov       ES,AX
  50.           mov       AX,ES:[54H]; copy old int pointer
  51.           mov       word ptr old_int,AX
  52.           mov       AX,ES:[56H]
  53.           mov       word ptr old_int[2],AX
  54.           cli
  55.           mov       AX,offset bint
  56.           mov       ES:[54H],AX
  57.           mov       AX,CS
  58.           mov       ES:[56H],AX
  59.           sti
  60.           mov       DX,offset init
  61.           int       27H
  62.  
  63. code_seg  ends
  64.  
  65.      end begin
  66.