************************************************************* *                                                           * *                   P U T C E                               * *                  -----------                              * *                                                           * *                                                           * *      von PEARL :   CALL PUTCE ( NACH     DURATION,        * *                                 FELD     FIXED IDENT,     * *                                 LAENG    FIXED ,          * *                                 LND      FIXED ,          * *                                 ANZ      FIXED IDENT);    * *                                                           * *       NACH:   Abgabe des CE's nach n Sekunden             * *       FELD:   Adresse eines Feldes (erstes element)       * *       LAENG:  ...des Feldes                               * *       LND:    der Empfaengertask                          * *       ANZ:    Anzeigen                                    * *                                                           * *                                                           * *       ANZ :   1  Laenge ist 0                             * *               2  LND ist groesser als groesste LND        * *               3  fuer Sohn kein Platz                     * *                                                           * ************************************************************* *    M. Leufgen    8551 Pinzgerg   / 15.01.1989    * *--------------------------------------------------* *      Module Kopf fuer RTOS - UH                  * *                                                  * *                                                  * MDLE:  DC.L   0                                    *        DC.L   0                                    *        DC     $10                                  *        DC.B   'PUTCE '                             * ****************************************************   PAGE **************************************************** *      hyperprocessor and trap definitions         * *                                                  * TERMI  OPD    $4E41          Terminate             * TERV   OPD    $A010          Terminate and Delete  * TIRE   OPD    $A02C          RESUME AFTER ...      * DPC    OPD    $4E43          Dispatcher call       * GAPST  OPD    $A00E          Generate Tasdk        * PROC   OPD.V  18             CALL PROCEDURE        * ENTR   OPD.V  29             Eingang               * VARW   OPD.V  10             FIXED(15) per IDENT   * INVW   OPD.V  14             FIXED(15)             * MPXF   OPD.V  139            fuer DURATION         * EPAR   OPD.V  19             Parameterende         * RETN   OPD    $4E4C          Ausgang               * *                                                  * XIO    OPD    $4E4A          CE an RTOS uebergeben * FETCE  OPD    $4E48          neues CE holen        * *                                                  * TID    EQU    $802           Aktual runing Task    * *                                                  * **************************************************** *>>>>> Groesste TASK im System festlegen <<<<<<<<<<* *                                                  * MAXLND     EQU     50        groesste Task : 49    * *                                                  * **************************************************** *      Lagebeschreibung im PWS                     * *                                                  * NACH      EQU     0                Value           * FELD      EQU     NACH+4           Adress          * LAENG     EQU     FELD+4           Value           * LND       EQU    LAENG+2           Value           * ANZ       EQU      LND+2           Value           * WSPSZ     EQU      ANZ+4           Adress          * *                                                  * **************************************************** *      Lagebeschreibung im TASK-KOPF               * *                                                  * TPRIO     EQU     $10              Lage der Prio   * TWS       EQU     $62              Start der Vari. * OPFATI    EQU     $6C              verzoegerung    * OPNAME    EQU     $66              Taskname        * *                                                  * **************************************************** *      Lagebeschreibung im TASK-WS                 * *                                                  * TNACH     EQU     0                Verzoegerungzeit* TLAENG    EQU     TNACH+4          Laenge          * TLND      EQU     TLAENG+2         LND             * TANZ      EQU     TLND+2           ANZEIGEN        * TDATEN    EQU     TANZ+2           Daten           * *                                                  * **************************************************** *      Lagebeschreibung im CE                      * *                                                  * BUADR     EQU     $20                              * BULNG     EQU     $24                              * STATUS    EQU     $26                              * CELND     EQU     $27                              * MODE      EQU     $28                              * CENAME    EQU     $2C                              * *                                                  * ****************************************************    PAGE **************************************************** *                                                  * *      P U T C E    P R O C E D U R E              * *                                                  * **************************************************** *                                                  * *                                                  * *     Procedure fuer Lader bekannt machen          * *    -------------------------------------         * *                                                  * *                                                  * *                                                  *         DC     $AEB1,$BF95,(17*2+1)*37             *         DC.B   'PUTCE '                            *         DC     PUTCE-$                             * *                                                  * *                                                  * **************************************************** *                                                  * DU      DC.W  $000E     uebernahme DUR per MPXF    * *                                                  * *                                                  * >PUTCE  ENTR   WSPSZ.L                             *         MPXF   DU,NACH.X                           *         VARW   FELD.Z                              *         INVW   LAENG.X                             *         INVW   LND.X                               *         VARW   ANZ.Z                               *         EPAR                                       * *                                                  * **************************************************** *                                                  * *  Frei :     D0....D7  /  A0....A3                * *                                                  * *    A5 :     Zeiger auf PWS                       * *    A1 :     Zeiger auf CE                        * *                                                  * *--------------------------------------------------* *                                                  *         MOVE.W   LAENG.X,D1     Adresse der Laenge *         CMPI.W   =0,D1          Laenge 0 ?         *         BNE      LOK            --> Laenge OK      *         MOVE.W   =1,D0          Anzeigen auf 4     *         BRA      EXIT           ende               * *                                                  * *--------------------------------------------------* *    Pruefen ob LND im zulaessigen Bereich liegt   * *                                                  * LOK     CMPI     =MAXLND,LND.X  LND zulaessig ?    *         BLT      LNDOK          LND ist OK         *         MOVE.W   =2,D0          Anzeigen auf 4     *         BRA      EXIT           ende               * *                                                  * *--------------------------------------------------* *             Mit verzoegerung ?                   * *                                                  * LNDOK   CMPI.L   =0,NACH.X      Mit verzoegerung ? *         BEQ.S    NOW            :-> NEIN           *         BRA      CRTASK         verzoegerungstask  * *                                                  * *--------------------------------------------------* *                CE anfordern                      * *                                                  * NOW     CLR.L    D1             D1 ganz loeschen   *         MOVE.W   LAENG.X,D1     laenge der Daten   * *                                                  *         FETCE                   CE anfordern       * *                                                  * *                                                  * *--------------------------------------------------* *             CE Parametrieren                     * *                                                  *         CLR.L    D1             D1 ganz loeschen   * *                               Laenge eintragen   *         MOVE.W   LAENG.X,BULNG(A1)                 * *                                                  *         MOVE.B   =2,STATUS(A1)  Verschrotten       * *                                                  *         MOVE.W   LND.X,D1                          *         MOVE.B   D1,CELND(A1)    LND eintragen     * *                                                  *         MOVE.B   =$C3,MODE(A1)  Mode: kein Echo    * *                                     wait until IO* *                                     Binaertransf * *                                     Richtung PUT * *                                                  *         MOVE.B   =$FF,CENAME(A1)  Kein Name        * *                                                  * *                                                  * *--------------------------------------------------* *       Daten in Puffer einschreiben               * *                                                  *         MOVEA.L   FELD.X,A3     Adresse der Puf.adr*         MOVEA.L   BUADR(A1),A2  Adresse des CE PUF *         MOVE.W    LAENG.X,D1    D1 ist Laenge      * *                                                  * *--------------------------------------------------* *       Daten vom Anwenderpuffer ins CE            * *                                                  * *                                                  *         SUBQ     =1,D1          fuer DBF           * *                               ******************** LOOP    MOVE.B   (A3)+,(A2)+    von  CE ....       * *                               nach Puffer        *         DBF      D1,LOOP        ******************** *                                                  * *--------------------------------------------------* *                                                  * *               CE senden                          * *                                                  *         XIO                                        * *                                                  *         MOVE.W   =0,D0        keine Fehler         * *                                                  * *--------------------------------------------------* *                                                  * EXIT    MOVEA.L  ANZ.X,A3     Adresse der Anzeigen *         MOVE.W   D0,(A3)      Anzeigen eintragen   *         RETN                                       * *                                                  * ****************************************************   PAGE **************************************************** *                                                  * *    VERZOEGERUNGSTASK GENERIEREN UND STARTEN      * *                                                  * *                                                  * **************************************************** *                                                  * *                                                  * *                                                  * CRTASK    CLR.L   D1             1 loeschen        *           MOVE.W  LAENG.X,D1    Datenlaenge        *           ADDI.L  =$72+16,D1    min. an TWS...     * *                               + Variablen        * *                                                  *           MOVEA.L TID,A1        eigene Prio...     *           MOVE.W  TPRIO(A1),D6  ...nach D6         * *                                                  *           MOVE.L  =$54494D45,D2 Taskname           *           MOVE.L  D2,OPNAME.T                      *           MOVE.W  =$2020,D2     Taskname           *           MOVE.W  D2,OPNAME+4.T                    * *                                                  *           GAPST                 Generate Task      * *                                                  *           BEQ     GENOK         Task ist generiert * *                                                  *           MOVE.W  =3,D0         Fehlernummer 3     *           BRA     CREXIT        --> ende           * *                                                  * *--------------------------------------------------* *                                                  * *        Zeiger auf Taskkopf in A1                 * *                                                  * GENOK    LEA      TASK,A2        Start PC....      *          MOVE.L   A2,$20(A1)     ...in Taskkopf    * *                                                  *          MOVE.L    NACH.X,TWS+TNACH(A1)            *          MOVE.W   LAENG.X,TWS+TLAENG(A1)           *          MOVE.W     LND.X,TWS+TLND(A1)             * *                                                  *          LEA      TWS+TDATEN(A1),A2                *          MOVEA.L  FELD.X,A3                        *          MOVE.W   LAENG.X,D1                       * *                                                  *          CMPI.W   =0,D1                            *          BEQ      GOTASK                           * *                                                  * *--------------------------------------------------* *       Daten vom Anwenderpuffer in  TWS           * *                                                  * *                                                  *         SUBQ     =1,D1          fuer DBF           * *                               ******************** LOOP1   MOVE.B   (A3)+,(A2)+    von  Puffer..      * *                               nach TWS           *         DBF      D1,LOOP1       ******************** *                                                  * *--------------------------------------------------* *             Task starten                         * *                                                  * *                                                  * GOTASK  CLR.B   $24(A1)         Blockbyte loeschen *         DPC                     Dispatcher Call    * *                                                  * *--------------------------------------------------* *      Der neuen Task Zeit geben sich einzuplanen  * *                                                  *         MOVE.L =$80000001,OPFATI.T                 * *                                                  *         TIRE                    After 1 ms resume  * *                                                  * *--------------------------------------------------* *                                                  *         MOVE.W   =0,D0        keine Fehler         * *                                                  * *--------------------------------------------------* *                                                  * CREXIT  MOVEA.L  ANZ.X,A3     Adresse der Anzeigen *         MOVE.W   D0,(A3)      Anzeigen eintragen   *         RETN                                       * *                                                  * ****************************************************   PAGE **************************************************** *                                                  * *                                                  * *       V E R Z O E G E R U N G S T A S K          * *                                                  * *                                                  * *--------------------------------------------------* *                                                  * *                                                  * *                                                  * TASK     MOVE.L  TWS+TNACH(A0),D1 Verzoegerungszeit*          ORI.L   =$80000000,D1    fuer RESUME      *          MOVE.L  D1,OPFATI.T      NACH TKOPF       * *                                                  *          MOVEA.L TID,A1           TID in A1        * *                                                  *          TIRE                     WARTEN AUF FORTS.* *                                                  * *--------------------------------------------------* *                                                  * *       Auftrag jetzt ueber PUTCE ausgeben         * *                                                  * *                                                  *         MOVEA.L    TID,A5         Adr Taskkopf     * *                                                  *         CLR.L      TWS+TNACH.X                     * *                                                  *         TV                        TO VIRTUAL       * *                                                  *         PROC       PUTCE                           *         MPXF       DU,TWS+TNACH.X                  *         VARW       TWS+TDATEN.X                    *         VARW       TWS+TLAENG.X                    *         VARW       TWS+TLND.X                      *         VARW       TWS+TANZ.X                      *         EPAR                                       * *                                                  * *                                                  * *--------------------------------------------------* *                                                  *         TERV                      End und Vini     * *                                                  * *                                                  * ****************************************************   END 