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