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

