**************************************************** 
*                                                  * 
*   Proceduren für Universalinterface -- Zugriff   * 
*                                                  * 
**************************************************** 
*                                                  * 
* Spezifikation im Systemteil :                    * 
*                                                  * 
* SPC WRIBM ENTRY (FIXED(31),FIXED(15))    GLOBAL; * 
*                                                  * 
* SPC WRECB ENTRY (FIXED(31),FIXED(15))    GLOBAL; * 
*                                                  * 
* SPC RDIBM ENTRY (FIXED(31)) RETURNS(FIXED(15))   * 
*                                          GLOBAL; * 
*                                                  * 
* SPC RDECB ENTRY (FIXED(31)) RETURNS(FIXED(15))   * 
*                                          GLOBAL; * 
*                                                  * 
* SPC STATUS ENTRY RETURNS(FIXED(15))      GLOBAL; * 
*                                                  * 
* SPC SELECT ENTRY (FIXED(15))             GLOBAL; * 
*                                                  * 
**************************************************** 
*                                                  * 
* Aufruf im Programm :                             * 
*                                                  * 
* CALL WRIBM ( ADR,WERT );                         * 
* CALL WRECB ( ADR,WERT );                         * 
* WERT:=RDIBM ( ADR );                             * 
* WERT:=RDECB ( ADR );                             * 
* VAL:=STATUS;                                     * 
* CALL SELECT ( BANK );                            * 
*                                                  * 
**************************************************** 
*      ADR         FIXED(31)                       * 
*                  Das oberste Bit entscheidet ob  * 
*                  ein Zugriff auf den Speicher    * 
*                  (MEMORY READ,WRITE : BIT 32=0), * 
*                  oder auf den I/O Bereich erfolgt* 
*                  ( I/O   READ,WRITE : BIT 32=1). * 
*      WERT        FIXED(15)                       * 
*                  Enthält den zu speichernden     * 
*                  Wert, oder den gelesenen.       * 
*      VAL         FIXED(15)                       * 
*                  Enthält den STATUS-Wert des     * 
*                  Universalinterfaces.            * 
*      BANK        FIXED(15)                       * 
*                  Enthält die Nummer der zu       * 
*                  selektierenden EPROM-Bank.      * 
*                  Sinnvolle Werte sind 0 - 15.    * 
**************************************************** 
*                                                  * 
*     Bernhard Leikauf                             * 
*     In den Haseln 17                             * 
*     7 8 0 1  Wittnau                             * 
*                                                  * 
**************************************************** 


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

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 
WERT    EQU     ADR+4          Wort     2 Bytes 
WSPWR   EQU     WERT+2            oder 
WSPRD   EQU     WERT+4         Langwort 4 Bytes 

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

>WRIBM  ENTR    WSPWR.L 
        VARX    ADR.X 
        VARW    WERT.X 
        EPAR 

        MOVE.L  ADR.X,D0       D0: Speicheradresse 
        MOVE.W  WERT.X,D1      D1: Wert 
        ANDI.W  =$00FF,D1 

        BSR     ADDR           Adresse einstellen 

        MOVEA.L =$FB0000,A0 
        TST.B   0(A0,D1.W)     Datum ablegen 
        TST.B   $FB020F        IBM,Datentr.  on 

        BTST    =31,D0 
        BNE     MARK1 
        EORI.B  =$10,D3        Mem Write 
        BRA     WIBM 
MARK1:  EORI.B  =$40,D3        I/O Write 

WIBM:   TST.B   0(A1,D3.W)     Schreibsignal on 
        ORI.B   =$F0,D3 
        TST.B   0(A1,D3.W)     Schreibsignal off 
        TST.B   $FB022F        IBM on,Datentr. off 

        RETN 


>RDIBM  ENTR    WSPRD.L 
        VARX    ADR.X 
        VARW    WERT.Z 
        EPAR 

        MOVE.L  ADR.X,D0       D0:Speicheradresse 
        MOVEA.L WERT.X,A3      A3:Zeiger auf Wert 

        BSR     ADDR           Adresse einstellen 

        TST.B   $FB022F        IBM on,Datentr. off 

        BTST    =31,D0 
        BNE     MARK2 
        EORI.B  =$20,D3        Mem Read 
        BRA     RIBM 
MARK2:  EORI.B  =$80,D3        I/O Read 

RIBM:   TST.B   0(A1,D3.W)     Lesesignal on 
        CLR.L   D0             Datum löschen 
        MOVE.B  $FB0101,D0     Datum lesen 
        MOVE.W  D0,(A3)        Datum übertragen 
        ORI.B   =$F0,D3 
        TST.B   0(A1,D3.W)     Lesesignal off 

        RETN 


>WRECB  ENTR    WSPWR.L 
        VARX    ADR.X 
        VARW    WERT.X 
        EPAR 

        MOVE.L  ADR.X,D0       D0: Speicheradresse 
        MOVE.W  WERT.X,D1      D1: Wert 
        ANDI.W  =$00FF,D1 

        BSR     ADDR           Adresse einstellen 

        MOVEA.L =$FB0000,A0 
        TST.B   0(A0,D1.W)     Datum ablegen 
        TST.B   $FB021F        ECB,Datentr.  on 

        BTST    =31,D0 
        BNE     MARK3 
        TST.B   $FB0216        MREQ,WR aktiv 
        BRA     WECB 
MARK3:  TST.B   $FB0215        IORQ,WR aktiv 
WECB:   TST.B   $FB021F        Schreibsignal off 
        TST.B   $FB023F        ECB on,Datentr. off 

        RETN 


>RDECB  ENTR    WSPRD.L 
        VARX    ADR.X 
        VARW    WERT.Z 
        EPAR 

        MOVE.L  ADR.X,D0       D0:Speicheradresse 
        MOVEA.L WERT.X,A3      A3:Zeiger auf Wert 

        BSR     ADDR           Adresse einstellen 

        TST.B   $FB023F        ECB on,Datentr. off 

        BTST    =31,D0 
        BNE     MARK4 
        TST.B   $FB023A        MREQ,RD aktiv 
        BRA     RECB 
MARK4:  TST.B   $FB0239        IORQ,RD aktiv 
RECB:   CLR.L   D0             Datum löschen 
        MOVE.B  $FB0101,D0     Datum lesen 
        MOVE.W  D0,(A3)        Datum übertragen 
        TST.B   $FB023F        Lesesignale off 

        RETN 


>STATUS ENTR    WSPRD.L 
        VARW    WERT.Z 
        EPAR 

        MOVEA.L WERT.X,A3      A3:Zeiger auf Wert 

        CLR.L   D0             Datum löschen 
        MOVE.B  $FB0601,D0     Datum lesen 
        MOVE.W  D0,(A3)        Datum übertragen 

        RETN 


>SELECT ENTR    WSPWR.L 
        VARW    WERT.X 
        EPAR 

        MOVE.W  WERT.X,D0      D0:Banknummer 
        ANDI.L  =$F,D0               max. 15 

        ROR.L   =1,D0 
        ROL.W   =7,D0 
        ROL.L   =1,D0 

        MOVEA.L =$FB0800,A0 
        TST.B   0(A0,D0.W)     aktiviere Bank 

        RETN 


ADDR:   CLR.L   D3 
        MOVEA.L =$FB0500,A1 
        MOVE.B  D0,D3 
        TST.B   0(A1,D3.W)     (  A0- A7 ) 

        ASR.L   =8,D0 
        MOVEA.L =$FB0400,A1 
        MOVE.B  D0,D3 
        TST.B   0(A1,D3.W)     (  A8-A15 ) 

        ASR.L   =8,D0 
        MOVEA.L =$FB0300,A1 
        MOVE.B  D0,D3 
        ORI.B   =$F0,D3 
        TST.B   0(A1,D3.W)     ( A16-A19 ) 

        RTS 


        END 


