File: ART_CYCL.S - Tab length: 1 2 4 8 - Lines: on off - No wrap: on off

;rockyone                       pour MI-3                      
;
;
;       CYCLE COULEURS  : ART DIRECTOR  : ART  ( basse r�solution )
;       ------------------------------------------------------------
;
;Anime          buffer 512 octets
;       +0    8 palette 16 words colors
;       +256  8 octets   1 octet par palette valeur 0 � 9
                         nombre de vbl pour chaque palette
;                        0 = pal not display
;    
;       +287  1 byte    numero de la palette de l'image   0 � 8
;                        
;       +288 a +512     inutilis�
;                              
;                       call Art_cycle( L Anime)
;                      
;              
;------------------------------------------------------------------------
        movem.l d0-d7/a0-a6,-(a7)
        move.l  64(sp),a5

        lea.l   256(a5),a6      ; Adresse des nombres de vbl par palette
        moveq.l #0,d6
        move.b  287(a5),d6      ; Num�ro de la palette affich� 0 a 7
        move.w  d6,d7
       
        lsl.b   #5,d7           ; *32
        adda.w  d7,a5           ; addresse de la palette a l'�cran

*       d4                      ; Compteur vbl
        move.b  d6,d3           ; Compteur palette
        moveq.l #9,d7           ; Stop en fin de cycle quand  d7 = d3  
;                               ; apr�s barre espace
;
;........................................................................
next_pal:
        lea.l   32(a5),a5       ; Adresse Palette suivante
        addq.b  #1,d3           ; Conpteur palette +1
        cmpi.b  #8,d3           ; Derniere palette du buffer ?
        bne.s   nb_vbl

first_pal:
        moveq.l #0,d3           ; Compteur palette sur premi�re palette
        move.l  64(sp),a5       ; Adresse premi�re palette du buffer

nb_vbl:
        moveq.l #0,d4
        move.b  0(a6,d3.w),d4   ; Nombre de VBL pour cette palette
        beq.s   next_pal        ; 0 = not display this palettte

        lsl.b   #1,d4           ;
        subq.b  #1,d4           ; -1 pour dbra
                                                                                               
        moveq.l #7,d5           ; 16 couleurs
        movea.l #$ffff8240,a3
 pal_display:
        move.l  (a5)+,(a3)+
        dbra.w  d5,pal_display
        suba.l  #32,a5

        move.b  $fffffc02.w,d0
        cmp.b   #$39,d0         : barre espace ?
        bne.s   no_key
        move.b  d6,d7           ; Force fin cycle
no_key:
        cmp.b   d3,d7           ; Fin cycle ?
        beq.s   end_prg

vsync:  
        move.w  #37,-(sp)      
        trap    #14    
        addq.l  #2,sp
        dbra.w  d4,vsync

        bra.s   next_pal

;..............................
end_prg:
        movem.l (a7)+,d0-d7/a0-a6
        rts

        end
;-------------------------------------------------------------------------