home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Amiga Demo Collection
/
TheAmigaDemoCollectionCDCUE.img
/
S
/
showtime05
/
Bonus
/
BScreen.lha
/
Blitterscreen
/
SetPalette.i
< prev
next >
Wrap
Text File
|
1992-12-20
|
2KB
|
71 lines
;**********************************
; Inserisce una palette a 24 bit nella copper list AGA
;in: a0 ^palette 24 bit ($00rrggbb)
; a1 ^copperlist sezione colori (sul primo dc.w $180,$0)
; d0.w numero di colori
SetPalette
movem.l d2-d3/d6-d7/a2-a3,-(sp)
move.w d0,d6 ;numero di colori che mancano
move.l a1,a3 ;metto da parte
addq.l #2,a3 ;porto sula word da riempire
.bankloop
move.l a3,a1 ;faccio una copia del puntatore
move.l a3,a2
cmp.w #32,d6
bge.s .morethan32 ;ci sono almeno 32 colori ancora da settare
move.w d6,d7 ;colori rimanenti per il ciclo
subq.w #1,d7 ;a posto per il dbra
lsl.w #2,d6 ;colori * 4 (offset)
addq.w #4,d6 ;per saltare $106,$xx00
adda.w d6,a2
moveq.l #0,d6 ;azzero per il test in fondo
bra.s .setdone
.morethan32
sub.w #32,d6 ;numero colori corrente a posto
move.w #32-1,d7 ;numero colori nel banco
adda.w #(128+4),a2 ;indirizzo nibble bassi
.setdone
moveq #0,d0 ; Azzeriamo d0,d2,d3
moveq #0,d2
moveq #0,d3
.copy
;-------------------- copio nibble bassi in copperlist
move.b 3(a0),d2 ; Bb in d2
andi.b #%00001111,d2 ; nibble basso 0b
move.b 2(a0),d3 ; Gg in d3
lsl.b #4,d3 ; 4 bit a sinistra per g0
or.b d2,d3 ; nibble 0b in d2 e g0 per gb in d3
move.b d3,1(a2) ; Copiamo il byte in copperlist
move.b 1(a0),(a2) ; Rr in copperlist
andi.b #%00001111,(a2) ; nibble basso per 0r
;------------------------------- copio nibble alti in copperlist
move.b 3(a0),d2 ; Bb in d2
lsr.b #4,d2 ; 4 bit a destra per 0b
move.b 2(a0),d3 ; Gg in d3
andi.b #%11110000,d3 ; nibble alto per g0
or.b d2,d3 ; 0B in d2 con G0 in d3 per gb in d3
move.b d3,1(a1) ; GB in copperlist
move.b 1(a0),d2 ; Rr in d2
lsr.b #4,d2 ; destra di 4 bit per 0r
move.b d2,(a1) ; 0r in copperlist
;-----------------------------
addq.w #4,a0 ; Prossimo colore palette
addq.w #4,a1 ; Prossimo registro colore nibble alti
addq.w #4,a2 ; Prossimo registro colore nibble bassi
dbra d7,.copy ; Ripetiamo il loop
lea.l (128+4)*2(a3),a3 ;prossimo banco nibble alti
tst.w d6 ;quanti colori mancano ???
bne.s .bankloop
movem.l (sp)+,d2-d3/d6-d7/a2-a3
rts
;****************************************