************************************ 
*                                  * 
*      MASCHINENCODE-MODUL ZU      * 
*         KIO'S MAUSTREIBER        * 
*     VERSION DATE: 07-07-1987     * 
*                                  * 
*           PUBLIC DOMAIN          * 
*                                  * 
************************************ 

TERMI  OPD    $4E41          TERMINATE TASK 
TRIGEV OPD    $A026          INTERRUPT TRIGGERN 
RETN   OPD    $4E4C          UNLINK LWSP & RETURN 
REQU   OPD    $4E46          REQUEST SEMAPHORE 
RELEA  OPD    $4E47          RELEASE SEMAPHORE 

EPAR   OPD.V  19             HYP: END OF PARAMETER-LIST 
ENTR   OPD.V  29             HYP: ALLOC LWSP 

*      INTERRUPTS: 
*      ----------- 
* 
* EV 00000001 WENN RECHTE MAUSTASTE GEDRUECKT WIRD 
* EV 00000002 WENN LINKE  MAUSTASTE GEDRUECKT WIRD 
* EV 00000004 WENN        MAUS      BEWEGT    WIRD 
* EV 00000008 WENN AUF EINEM BUTTON GEKLICKT  WIRD ( -> PROC 'KLICK' ) 

*      BENÖTIGTE GLOBALE VARIABLEN: 
*      ---------------------------- 
* 
*      MSEM: SEMA            = ZUGRIFFSSEMAPHORE FÜR GLOBALE 
*                              VARIABLEN IN DIESEM PACK 
*      MX,MY:    FIXED(15)   = AKTUELLE MAUSPOSITION 
*      LMT,RMT:  BIT         = STATUS DER MAUSTASTEN 
*                        LMT = LINKE  MAUSTASTE 
*                        RMT = RECHTE MAUSTASTE 

* MODUL-KOPF: ****************************************************** 

MDLE:  DC.L   MAUS           VORWARD-LINK 
       DC.L   0              BACK-LINK 
       DC.W   $10            TYP: MODUL 
       DC.B   'MAUS  '       NAME (DIREKT ANGEGEBEN) 

* MAUS-TASK-KOPF: ************************************************** 

MAUS:  DC.L   0              VORWARD-LINK 
       DC.L   MDLE           BACK-LINK 
       DC.W   $81            RESIDENT TASK 
       DC.B   'MAUS  '       NAME 
       DC.W   -6             PRIO  > #ACIA1  (GUTE IDEE ?) 
       DC.L   120            WSP-LAENGE (!>=120) 
       DC.L   0,0 
       DC.W   -6             AKT. LAUFPRIO 
       DC.L   MTASK          ADR. DER TASK 
       DC.L   0,0,0,0        64 BYTES FUER DISPATCHER-PUFFER 
       DC.L   0,0,0,0 
       DC.L   0,0,0,0 
       DC.L   0,0,0,0 

* START DER MAUS-TASK: ********************************************* 

MTASK: LEA    >MSEM,A1 
       REQU                  GLOBALE VARIABLEN REQUEST 

       MOVE.B $8E6,D0        MAUSSTATUS HOLEN 
       MOVE.B >RMT,D1        RECHTE MAUSTASTE BEHANDELN 
       EOR.B  D0,D1 
       BTST   =0,D1          AENDERTE SICH DIE RECHTE TASTE ? 
       BEQ.S  MT1            WENN NEIN 
       NOT    >RMT           RECHTE TASTE WURDE VERAENDERT 
       BEQ.S  MT99           WENN LOSGELASSEN 
       MOVE.L =$00000001,D1  WENN GEDRÜCKT: INTERRUPT 
       BRA.S  MT90 

MT1:   LSR.B  =1,D0 
       MOVE.B >LMT,D1        LINKE MAUSTASTE BEHANDELN 
       EOR.B  D0,D1 
       BTST   =0,D1          AENDERTE SICH DIESE TASTE ? 
       BEQ.S  MT2            NEIN 
       NOT    >LMT           LINKE TASTE WURDE VERAENDERT 
       BEQ.S  MT99           WENN LOSGELASSEN 
       MOVE.L =$00000002,D1  WENN GEDRÜCKT: INTERRUPT 

MT90:  TRIGEV                IRPT, WENN TASTE GEDRUECKT WURDE 
MT99:  LEA    >MSEM,A1 
       RELEA                 SEMAPHORE FREIGEBEN 
       TERMI 

MT2:   MOVE.B $8E7,D0        X-BEWEGUNG BEARBEITEN 
       EXT.W  D0             ERWEITERN AUF WORD-BREITE 
       ADD.W  D0,>MX 

       MOVE.B $8E8,D0        Y-BEWEGUNG BEARBEITEN 
       EXT.W  D0             DITTO 
       ADD.W  D0,>MY 

       MOVE.L =$00000004,D1  INTERRUPT 4 TRIGGERN 
       BRA.S  MT90 

******************************************************************** 

* PROZEDUR TRIGGERT $00000008 

>KICK: ENTR   2.L            DUMMY ... &%$§&%$§&$ 
       EPAR 
       MOVE.L =$00000008,D1 
       TRIGEV 
       RETN 

******************************************************************** 

       END    MAUS  












