home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1989 / 08 / grdlagen / mf2kbd.asm < prev    next >
Encoding:
Assembly Source File  |  1989-05-24  |  4.5 KB  |  118 lines

  1. ;* ------------------------------------------------------- *
  2. ;*                     MF2KBD.ASM                          *
  3. ;* Nutzung der erweiterten MF-2-Tastaturcodes in normalen  *
  4. ;*                    BIOS-Aufrufen                        *
  5. ;* Compiler:  MASM 4/5  oder Turbo Assembler (TASM)        *
  6. ;*                                                         *
  7. ;*      (c) 1989  Karsten Gieselmann & TOOLBOX             *
  8. ;* ------------------------------------------------------- *
  9.  
  10. ;----------------------------------------------------------
  11. ;          Allgemeine Deklarationen
  12. ;----------------------------------------------------------
  13.  
  14. WPTR               EQU  WORD PTR
  15. BPTR               EQU  BYTE PTR
  16. SetIntVec          EQU  25h
  17. GetIntVec          EQU  35h
  18. KeepProcess        EQU  31h
  19. ParasToKeep        EQU  ((OFFSET Install - OFFSET MF2Kbd) + 10Fh) SHR 4
  20.  
  21. DosCall    MACRO   FuncNo              ;Aufruf DOS-Funktion
  22.            mov     ah,FuncNo
  23.            int     21h
  24.            ENDM
  25.  
  26. jmps       MACRO   Label
  27.            jmp     short Label
  28.            ENDM
  29.  
  30. ;----------------------------------------------------------
  31. ;          Programm
  32. ;----------------------------------------------------------
  33.  
  34. CODE       SEGMENT BYTE PUBLIC
  35.  
  36.            ASSUME  CS:CODE
  37.  
  38.            ORG     100h                ; .COM-Programm
  39.  
  40. MF2Kbd:    jmps    Install
  41.  
  42. ;----------------------------------------------------------
  43. ;          Neue Serviceroutine für den Interrupt 16h
  44. ;----------------------------------------------------------
  45. Int16      PROC    FAR
  46.  
  47.            sti                         ;weitere Interrupts
  48.  
  49. Try0:      or      ah,ah               ;Funktion Nr.00h?
  50.            jne     Try1                ;nein, dann eventuell
  51.                                        ;Funktion Nr.01h
  52.            or      ah,10h              ;sonst erweitertes
  53.                                        ;BIOS benutzen
  54.            pushf                       ;Flags für
  55.                                        ;Interrupt-Aufruf
  56.            call    cs:[SaveInt16]      ;BIOS-Routine rufen
  57.            or      ah,ah               ;ist Taste ALT-Code?
  58.            je      Done0               ;ja, dann fertig
  59.            cmp     al,0E0h             ;ist Erweiterungs-
  60.                                        ;Kennbyte gesetzt?
  61.            jne     Done0               ;nein, dann fertig
  62.            xor     al,al               ;Kennbyte auf Null
  63. Done0:     iret
  64.  
  65. Try1:      cmp     ah,1                ;Funktion Nr.01h?
  66.            jne     ChainInt            ;nein, weiter -> BIOS
  67.            or      ah,10h              ;sonst erw. BIOS
  68.            pushf                       ;Flags für
  69.                                        ;Interrupt-Aufruf
  70.            call    cs:[SaveInt16]      ;BIOS-Routine rufen
  71.            pushf                       ;Flags auf Stapel
  72.            jz      Done1               ;keine Tastencodes da
  73.                                        ;dann fertig
  74.            or      ah,ah               ;ALT-Code bereit?
  75.            je      Done1               ;ja, dann fertig
  76.            cmp     al,0E0h             ;Erweiterungs-
  77.                                        ;Kennbyte gesetzt?
  78.            jne     Done1               ;nein, dann fertig
  79.            xor     al,al               ;Kennbyte auf Null
  80. Done1:     popf                        ;Flags restaurieren
  81.            ret     2                   ;Rückkehr und alte
  82.                                        ;Flags entfernen
  83.  
  84. ChainInt:  db      0EAh                ;Opcode (JMP FAR)
  85.                                        ;für Sprung ins BIOS
  86. SaveInt16  dd      ?                   ;hier kommt der alte
  87.                                        ;Vektor hin
  88.  
  89. Int16      ENDP
  90.  
  91.  
  92. ;----------------------------------------------------------
  93. ;          Installationsteil
  94. ;----------------------------------------------------------
  95.  
  96.            ASSUME  DS:CODE
  97.  
  98. Install    PROC    NEAR
  99.  
  100.            mov     al,16h
  101.            DosCall GetIntVec
  102.            mov     WPTR SaveInt16[0],bx
  103.            mov     WPTR SaveInt16[2],es
  104.            mov     al,16h
  105.            mov     dx,OFFSET Int16
  106.            DosCall SetIntVec
  107.                                   ;neue ISR installieren...
  108.            mov     aX,KeepProcess
  109.            mov     dx,ParasToKeep
  110.            DosCall KeepProcess    ;...und resident machen!
  111.  
  112. Install    ENDP
  113.  
  114. CODE       ENDS
  115.  
  116.            END     MF2Kbd
  117. ;* ------------------------------------------------------- *
  118.