**************************************************** 
*                                                  * 
*    Proceduren für Universellen Speicherzugriff   * 
*                                                  * 
**************************************************** 
*                                                  * 
* Spezifikation im Systemteil :                    * 
*                                                  * 
* SPC POKE ENTRY (FIXED(31),FIXED(15),FIXED(31))   * 
*                                      GLOBAL;     * 
*                                                  * 
* SPC PEEK ENTRY (FIXED(31),FIXED(15))             * 
*                    RETURNS(FIXED(31)) GLOBAL;    * 
*                                                  * 
**************************************************** 
*                                                  * 
* Aufruf im Programm :                             * 
*                                                  * 
*                                                  * 
* CALL POKE ( ADR,FLAG,WERT )                      * 
*                                                  * 
* VAL:=PEEK ( ADR,FLAG )                           * 
*                                                  * 
*      ADR         FIXED(31)                       * 
*      FLAG        FIXED(15)                       * 
*      WERT        FIXED(31)                       * 
*      VAL         FIXED(31)                       * 
*                                                  * 
*                                                  * 
*          FLAG:   -1   Byteweiser     Zugriff     * 
*                   0   Wortweiser     Zugriff     * 
*                   1   Langwortweiser Zugriff     * 
*                                                  * 
*                                                  * 
*         A C H T U N G - A C H T U N G            * 
*                                                  * 
*    Keine überprüfung auf Sinnvolle Adressen.     * 
*    Wort und Langwortzugriffe nur auf gerade      * 
*    Adressen möglich (68000) sonst Buserror.      * 
*    Da der Zugriff im Supervisormode erfolgt      * 
*    besteht auch kein Schutz für irgendwelche     * 
*    Systemwerte, sodaß es ein Systemabsturtz      * 
*    durch einen Poke in eine der Zeigertabellen   * 
*    sehr leicht erreicht werden kann.             * 
*                                                  * 
**************************************************** 
*                                                  * 
*     Bernhard Leikauf                             * 
*     In den Haseln 17                             * 
*     7 8 0 1  Wittnau                             * 
*                                                  * 
**************************************************** 


MODL:  DC.L 0 
       DC.L 0 
       DC   $0010              Typeindikator MODULE 
       DC.B 'DMA   '           Module-Name 

OFF    OPD     $4E4F           Disp.Irq.Off,Super on 
RETN   OPD     $4E4C           Return von PROC 
ENTR   OPD.V   29              Proc-Start+PWSP Org. 
EPAR   OPD.V   19              Ende der Par.-Liste 

VARX   OPD.V   11              Param. XFER FIXED(31) 
VARW   OPD.V   10              Param. XFER FIXED(15) 

* PWSP-Allocation ********************************** 

ADR    EQU     0               Langwort 4 Bytes 
FLAG   EQU     ADR+4           Wort     2 Bytes 
WERT   EQU     FLAG+2          Langwort 4 Bytes 
WSPSZ  EQU     WERT+4 

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

>POKE: ENTR    WSPSZ.L 
       VARX    ADR.X 
       VARW    FLAG.X 
       VARX    WERT.X 
       EPAR 

       OFF                     Supervisormode an 

       MOVEA.L ADR.X,A1        A1: Speicheradresse 
       MOVE.L  WERT.X,D1       D1: Wert 
       MOVE.W  FLAG.X,D0       D0: Übertragungsart 

       BMI     POKEB 
       BEQ     POKEW 

POKEL: MOVE.L  D1,(A1) 
       BRA     POEX 

POKEW: MOVE.W  D1,(A1) 
       BRA     POEX 

POKEB: MOVE.B  D1,(A1) 
       BRA     POEX 

>PEEK: ENTR    WSPSZ.L 
       VARX    ADR.X 
       VARW    FLAG.X 
       VARX    WERT.Z 
       EPAR 

       OFF                     Supervisormode an 

       MOVEA.L ADR.X,A1        A1: Speicheradresse 
       MOVEA.L WERT.X,A2       A2: Adr. des Wertes 
       MOVE.W  FLAG.X,D0       D0: Übertragungsart 

       BMI     PEEKB 
       BEQ     PEEKW 

PEEKL: MOVE.L  (A1),D0         D0: Speicherinhalt 
       BRA     PEEX 

PEEKW: CLR.L   D0 
       MOVE.W  (A1),D0 
       BRA     PEEX 

PEEKB: CLR.L   D0 
       MOVE.B  (A1),D0 
PEEX:  MOVE.L  D0,(A2) 
POEX:  ANDI    =$D8FF,SR 
       RETN 

       END 
