
  ;------------------------------------------ ;
  ; BASIC-Extension   ColorCycle  SMmagic'88  ;
  ;-------------------------------------------;
  ; Syntaxe: AddressRoutine WINDOW(7),de ,à   ;
  ; de =1ere couleur; à =dernière couleur     ;
  ; Toujours  "de" --> "à"                    ;
  ; de < à : Rotation vers le haut            ;
  ; de > à : Rotation vers le bas             ;
  ;-------------------------------------------;
Cycle:    MOVEM.L D0-A6,-(SP) ;Réserve registre sur pile
          MOVE.L 4,A6         ;Lit ExecBase dans A6
          LEA GFXNAME,A1      ;Nom des Biblio. dans A1
          MOVEQ #0,D0         ;Version est la même
          JSR -552(A6)        ;Appel à OpenLibrary
         TST.L D0            ;Test, Base est-il disponible
          BEQ.S Exit          ;Si non, alors fin
          MOVE.L D0,A6        ;GfxBase dans A6
          MOVE.L 64(SP),A0    ;Prise en charge de WindowBase
          MOVE.L 46(A0),A0    ;ScreenBase determinée
          ADD.L #44,A0        ;ViewPort de Screens dans A0
          MOVE.L 4(A0),A1     ;ColorTable dans A1
          MOVE.L 4(A1),A1     ;ColorMap determiné
          LEA CTab,A2         ;Buffer utilisateur dans A2
          MOVEQ #15,D0        ;15 Longs (32 Mots)
CopyCT:  MOVE.L (A1)+,(A2)+  ;ColorMap copié
         DBRA D0,CopyCT      ;(si non, alors
          MOVEM.L 68(SP),D0-D1 ;lire couleur de début et de fin
          ANDI.W #31,D0       ;si la valeur dépasse 31
          ANDI.W #31,D1       ;idem
          LSL.B #1,D0         ;*2 (utilise comme décalage)
          LSL.B #1,D1         ;idem
          LEA CTab,A1         ;Adresse de notre mém. tampon
          MOVE.W (A1,D1.W),D2 ;réserve dernière couleur
          CMP.B D0,D1         ;détermine sens de rotation
          BEQ.S ClLib         ;les deux couleurs son les mêmes?
         BGT.S Up            ;Rotation des coul. vers le haut
Down:    MOVE.W 2(A1,D1.W),(A1,D1.W) ;puis vers le bas
   ADDQ.B #2,D1        ;incrément du décalage
          CMP.B D0,D1         ;C'est la fin?
          BNE.S Down          ;non? alors couleur suivante
          BRA.S SetLC         ;fermé
Up:      MOVE.W -2(A1,D1.W),(A1,D1.W) ;couleurs vers le bas
         SUBQ.B #2,D1        ;incrément du décalage
          CMP.B D0,D1         ;c'est la fin
          BNE.S Up            ;non? alors couleur suivante
SetLC:   MOVE.W D2,(A1,D1.W) ;couleur réservée
         MOVEQ #32,D0        ;32 couleurs
          JSR -192(A6)        ;LoadRGB4 (a0=VP,a1=Ctab,d0)
ClLib:   MOVE.L A6,A1        ;GfxBase dans A1

         MOVE.L 4,A6         ;Lire ExecBase
          JSR -414(A6)        ;Bibliothèque fermée
Exit:    MOVEM.L (SP)+,D0-A6 ;Registre à partir de la pile                               
         RTS                 ;Fin
GFXNAME: DC.B "graphics.library",0,0 ;Library-Name
CTab:    DS.W 32                     ;Mémoire tampon de 32 mots
         END 
