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
;-------------------------------------------------------------------------