home *** CD-ROM | disk | FTP | other *** search
/ TopWare Tools / TOOLS.iso / tools / top1022 / mausresi.doc < prev   
Encoding:
Text File  |  1990-02-07  |  12.5 KB  |  179 lines

  1.                                                                    Dipl.Ing.
  2.                                                             Franz Wunderlich
  3.                                                                 Blumenweg 18
  4.                                                               8912 Kaufering
  5.  
  6.   ┌───────────────────────────────────────────────────────────────────────┐
  7.   │   M e i n    e r s t e r   k o n s t r u k t i v e r   B e i t r a g  │
  8.   └───────────────────────────────────────────────────────────────────────┘
  9.  
  10. MAUSBEDIENUNG RESIDENT
  11. ======================
  12.  
  13. Meistens ist die Mausbedienung fest mit einem Programm verknüpft, so daß sie
  14. nur dort verwendet werden kann. Für das nachfolgende Assemblerprogramm wurde
  15. ein anderer Weg gewählt. Man wird es vielleicht nicht glauben, aber die ge-
  16. samte Bedienung wurde in einem "Maschinenprogrämmchen" mit 239 Bytes unter-
  17. gebracht (inklusive Copyright-Vermerk) und heißt
  18.  
  19.                               MAUSRESI.ASM
  20.  
  21. Wie man vielleicht dem Namen entnehmen kann, legt es sich einmal geladen im
  22. Speicherhintergrund resident zur Ruhe und lauert auf Bewegungen der Maus bzw.
  23. der Mausknöpfe. Das ganze geschieht interruptgesteuert, so daß quasi gleich-
  24. zeitig Tastatur und Maus zur Cursorsteuerung bedient werden können.
  25.  
  26. Bewegt man die Maus vor und zurück, so bewegt sich der Cursor am Bildschirm
  27. nach oben oder unten. Bewegungen der Maus nach links oder rechts, ziehen
  28. entsprechende Richtungsbewegungen des Cursors nach sich. Der linke Mausknopf
  29. simuliert die "RETURN"-Taste, während der rechte Mausknopf "ESC" nachahmt.
  30.  
  31.  
  32. INSTALLATION
  33.  
  34. Die Maussteuerung läßt sich ganz einfach installieren. Sie muß nur einmal
  35. geladen worden sein. Danach steht sie sofort zur Verfügung. Da die Programm-
  36. größe den Arbeitsspeicher mit 239 Bytes kaum belastet, kann man sich ruhig
  37. dafür entscheiden, den Programmstart nach "AUTOEXEC" zu verlagern.
  38.  
  39.  
  40. VORTEILE
  41.  
  42. Da die Maussteuerung resident arbeitet, kann man diese nicht nur für CREATE
  43. verwenden, sondern auch in allen Programmen, die sich mit den Cursorsteuer-
  44. tasten, Return und Esc bedienen lassen. Besonders in Textprogrammen oder in
  45. Maskengeneratoren wirken sich die mit Maus zu steuernden Cursorsteuerungen
  46. sehr erleichternd aus.
  47.  
  48.  
  49. ASSEMBLER LISTING
  50.  
  51. Der nachfolgende Ausdruck ist das nach einem Assemblerlauf entstandene
  52. Listing. Da auch die Hex-Werte angegeben sind, kann man das Programm auf
  53. 2 Arten generieren.
  54.  
  55.   a) Quelltext eingeben und mit MASM oder TASM compilieren und Linken.
  56.   b) Mit Debug die Hex-Werte in eine ".COM"-Datei eingeben und abspeichern.
  57.  
  58. Turbo Assembler  Version 1.01        07/02/90 21:14:06        Page 1
  59. MAUSRESI.ASM
  60.  
  61.       1                              ;NAME:             MAUSRESI.COM
  62.       2                              ;DATEILAENGE:      000EFh - 239d
  63.       3                              ;START (CS:IP):    00100h
  64.       4                              ;CODE ENDE:        001EFh
  65.       5                              ;CODE ANFANG:      00100h
  66.       6                              ;DATUM:            Mittwoch, der 25.Oktober 1989
  67.       7
  68.       8 0000                         CODE    SEGMENT BYTE PUBLIC 'CODE'
  69.       9                              ASSUME  CS:CODE,DS:CODE,ES:NOTHING,SS:NOTHING
  70.      10
  71.      11 0000                         MAUSPG  PROC    FAR
  72.      12                                      ORG     0100h
  73.      13
  74.      14 0100  E9 00AB                ANFANG: JMP     AUFRUF
  75.      15                              ;--------------------------------------------------------------------------
  76.      16 0103  28 43 29 20 42 59 20 +         DB      "(C) BY FRANZ WUNDERLICH"
  77.      17       46 52 41 4E 5A 20 57 +
  78.      18       55 4E 44 45 52 4C 49 +
  79.      19       43 48
  80.      20                              ;--------------------------------------------------------------------------
  81.      21 011A  03                     OFSCUR  DB      03h             ;Offset auf Cursorrichtungszeichen
  82.      22 011B  0000                   XKOORD  DW      0000h           ;Zeiger für horizontale Richtung
  83.      23 011D  0000                   YKOORD  DW      0000h           ;Zeiger für vertikale Richtung
  84.      24 011F  4D 4B 50 48            CURSOR  DB      4Dh,4Bh,50h,48h ;Cursorrichtungszeichen
  85.      25                              ;--------------------------------------------------------------------------
  86.      26 0123  A9 0002                SUBADR: TEST    AX,0002h        ;Linker Knopf betätigt ?
  87.      27 0126  75 55                          JNZ     LINKS           ;Ja Aktion aufrufen
  88.      28 0128  A9 0008                        TEST    AX,0008h        ;Rechter Knopf betätigt ?
  89.      29 012B  75 55                          JNZ     RECHTS          ;Ja Aktion aufrufen
  90.      30 012D  B8 000B                        MOV     AX,000Bh        ;Kein Knopf, Funktion 11
  91.      31 0130  CD 33                          INT     33h             ;wenn Maus bewegt wurde
  92.      32 0132  2E: C7 06 011Br 0000           MOV     WORD PTR CS:[XKOORD],0000h
  93.      33                                                              ;X-Zeiger initialisieren
  94.      34 0139  2E: C7 06 011Dr 0002           MOV     Word Ptr CS:[YKOORD],0002h
  95.      35                                                              ;Y-Zeiger initialisieren
  96.      36 0140  32 C0                          XOR     AL,AL           ;Carry und Overflow auf Null setzen
  97.      37 0142  83 F9 00                       CMP     CX,+00h         ;Ist ein X-Bewegung nach rechts erfolgt ?
  98.      38 0145  7D 07                          JGE     YBEWEG          ;Ja, dann Y-Bewegung abfragen
  99.      39 0147  2E: FF 06 011Br                INC     Word Ptr CS:[XKOORD]
  100.      40                                                              ;nein, Offset auf Linksbewegung zeigen lassen
  101.      41 014C  F7 D9                          NEG     CX              ;X-Offset neutralisieren
  102.      42 014E  83 FA 00               YBEWEG: CMP     DX,+00h         ;Ist eine Y-Bewegung nach unten erfolgt ?
  103.      43 0151  7D 07                          JGE     BEWEGN          ;Ja, dann in den Tastaturpuffer transferieren
  104.      44 0153  2E: FF 06 011Dr                INC     Word Ptr CS:[YKOORD]
  105.      45                                                              ;nein, Offset auf Bewegung nach oben setzen
  106.      46 0158  F7 DA                          NEG     DX              ;Y-Offset neutralisieren
  107.      47 015A  2E: 8B 1E 011Br        BEWEGN: MOV     BX,CS:[XKOORD]  ;X zwischenspeichern
  108.      48 015F  3B CA                          CMP     CX,DX           ;überhaupt eine Bewegung
  109.      49 0161  73 0D                          JNB     CSLOAD          ;ja, Cursorrichtung laden
  110.      50 0163  2E: 8B 1E 011Dr                MOV     BX,CS:[YKOORD]  ;nein, Y zwischenspeichern
  111.      51 0168  2E: FE 0E 011Ar                DEC     Byte Ptr CS:[OFSCUR]
  112.      52                                                              ;und Offset zurücksetzen
  113.      53 016D  74 01                          JZ      CSLOAD          ;lag eine Bewegung vor
  114.      54 016F  CB                             RET                     ;Mausbehandlung fertig
  115.      55                              ;--------------------------------------------------------------------------
  116.      56 0170  2E: C6 06 011Ar 03     CSLOAD: MOV     Byte Ptr CS:[OFSCUR],03h
  117.      57                                                              ;Cursorrichtungsoffset feststellen und
  118.      58 0176  2E: 8A A7 011Fr                MOV     AH,CS:[BX+CURSOR]
  119.      59                                                              ;Richtungscode laden
  120.      60 017B  EB 08                          JMP     SHORT DOSADR    ;Tastaturbehandlung
  121.      61                              ;--------------------------------------------------------------------------
  122.      62 017D  B8 1C0D                 LINKS: MOV     AX,1C0Dh        ;Tastaturcode für PgUp
  123.      63 0180  EB 03                          JMP     SHORT DOSADR    ;Tastaturbehandlung
  124.      64                              ;--------------------------------------------------------------------------
  125.      65 0182  B8 011B                RECHTS: MOV     AX,011Bh        ;Tastaturcode für PgDwn
  126.      66 0185  BB 0040                DOSADR: MOV     BX,0040h        ;Segment DOS-Adressen
  127.      67 0188  8E DB                          MOV     DS,BX           ;als Datensegment
  128.      68 018A  FA                             CLI                     ;externe Interrupts sperren
  129.      69 018B  8B 1E 001C                     MOV     BX,DS:[001Ch]   ;Schreib-Offset für nächstes Zeichen
  130.      70 018F  8B D3                          MOV     DX,BX           ;laden,
  131.      71 0191  83 C2 02                       ADD     DX,+02h         ;inkrementieren und
  132.      72 0194  3B 16 0082                     CMP     DX,DS:[0082h]   ;vergleichen mit Tastaturpuffer-Ende
  133.      73 0198  75 04                          JNZ     TASTAN          ;Wenn nicht gleich, dann mit Anfang vergleichen
  134.      74 019A  8B 16 0080                     MOV     DX,DS:[0080h]   ;sonst Tastaturpuffer Startadresse laden
  135.      75 019E  3B 16 001A             TASTAN: CMP     DX,DS:[001Ah]   ;gelesenes Zeichen vergleichen
  136.      76 01A2  74 08                          JZ      FERTIG          ;Wenn gleich dann fertig
  137.      77 01A4  89 07                          MOV     [BX],AX         ;sonst Tastaturcode laden
  138.      78 01A6  8B DA                          MOV     BX,DX           ;Offset wieder holen
  139.      79 01A8  89 1E 001C                     MOV     DS:[001Ch],BX   ;und zurückschreiben
  140.      80 01AC  FB                     FERTIG: STI                     ;externe interrupts zulassen
  141.      81 01AD  CB                             RET                     ;fertig
  142.      82                              ;--------------------------------------------------------------------------
  143.      83 01AE  EB 1C                  AUFRUF: JMP     SHORT  START    ;
  144.      84                              ;--------------------------------------------------------------------------
  145.      85 01B0  0D                     FEHLER: DB      0Dh             ;Wagenrücklauf
  146.      86 01B1  0A                             DB      0Ah             ;Zeilenvorschub
  147.      87 01B2  4D 61 75 73 20 6E 69 +         DB      "Maus nicht installiert."
  148.      88       63 68 74 20 69 6E 73 +
  149.      89       74 61 6C 6C 69 65 72 +
  150.      90       74 2E
  151.      91 01C9  0D                             DB      0Dh             ;Wagenrücklauf
  152.      92 01CA  0A                             DB      0Ah             ;Zeilenvorschub
  153.      93 01CB  24                             DB      "$"             ;Ende des Fehlerausgabestring
  154.      94                              ;--------------------------------------------------------------------------
  155.      95 01CC  B8 0000                 START: MOV     AX,0000h        ;Funktion 0 Reset
  156.      96 01CF  CD 33                          INT     33h             ;Aufruf Maustreiber
  157.      97 01D1  0B C0                          OR      AX,AX           ;ist Maus installiert ?
  158.      98 01D3  75 09                          JNZ     WEITER          ;Ja, Masken- plus Adreßübergabe und Aufruf
  159.      99 01D5  B4 09                          MOV     AH,09h          ;Nein, folgende Stringausgabe
  160.     100 01D7  8D 16 01B0r                    LEA     DX,DS:[FEHLER]  ;Fehlerausgabestring laden und
  161.     101 01DB  CD 21                          INT     21h             ;ausgeben
  162.     102 01DD  CB                             RET                     ;Programmrückkehr
  163.     103                              ;--------------------------------------------------------------------------
  164.     104 01DE  B8 000C                WEITER: MOV     AX,000Ch        ;Funktion 12 Aufruf Unterprogramm
  165.     105 01E1  B9 000B                        MOV     CX,000Bh        ;Bit 0=1 Maus wird bewegt
  166.     106                                                              ;Bit 1=1 Druck Linker Knopf
  167.     107                                                              ;Bit 3=1 Druck Rechter Knopf
  168.     108 01E4  BA 0123r                       MOV     DX,OFFSET SUBADR;Adresse der Subroutine und
  169.     109 01E7  CD 33                          INT     33h             ;Aufruf wenn obige Aktionen auftreten
  170.     110 01E9  8D 16 01AEr                    LEA     DX,DS:[AUFRUF]  ;Aufrufadresse laden
  171.     111 01ED  CD 27                          INT     27h             ;Programm beenden und im Speicher lassen (TSR)
  172.     112                              ;--------------------------------------------------------------------------
  173.     113
  174.     114 01EF                         MAUSPG  ENDP
  175.     115
  176.     116 01EF                         CODE    ENDS
  177.     117                                      END     ANFANG
  178.  
  179.