home *** CD-ROM | disk | FTP | other *** search
/ The Amiga Demo Collection / TheAmigaDemoCollectionCDCUE.img / S / showtime05 / Bonus / BScreen.lha / Blitterscreen / SetPalette.i < prev    next >
Text File  |  1992-12-20  |  2KB  |  71 lines

  1. ;**********************************
  2. ; Inserisce una palette a 24 bit nella copper list AGA
  3. ;in: a0   ^palette 24 bit ($00rrggbb)
  4. ;    a1   ^copperlist sezione colori (sul primo dc.w $180,$0)
  5. ;    d0.w numero di colori
  6. SetPalette
  7.     movem.l    d2-d3/d6-d7/a2-a3,-(sp)
  8.  
  9.     move.w    d0,d6    ;numero di colori che mancano
  10.     move.l    a1,a3    ;metto da parte
  11.     addq.l    #2,a3    ;porto sula word da riempire
  12.  
  13. .bankloop
  14.     move.l    a3,a1        ;faccio una copia del puntatore
  15.     move.l    a3,a2
  16.  
  17.     cmp.w    #32,d6
  18.     bge.s    .morethan32    ;ci sono almeno 32 colori ancora da settare
  19.     move.w    d6,d7        ;colori rimanenti per il ciclo
  20.     subq.w    #1,d7        ;a posto per il dbra
  21.     lsl.w    #2,d6        ;colori * 4 (offset)
  22.     addq.w    #4,d6        ;per saltare $106,$xx00
  23.     adda.w    d6,a2
  24.     moveq.l    #0,d6        ;azzero per il test in fondo
  25.  
  26.     bra.s    .setdone
  27. .morethan32
  28.     sub.w    #32,d6        ;numero colori corrente a posto
  29.     move.w    #32-1,d7    ;numero colori nel banco
  30.     adda.w    #(128+4),a2    ;indirizzo nibble bassi
  31. .setdone
  32.     
  33.     moveq    #0,d0            ; Azzeriamo d0,d2,d3
  34.     moveq    #0,d2
  35.     moveq    #0,d3
  36.         
  37. .copy
  38. ;-------------------- copio nibble bassi in copperlist 
  39.     move.b    3(a0),d2        ; Bb in d2
  40.     andi.b    #%00001111,d2        ; nibble basso 0b
  41.     move.b    2(a0),d3        ; Gg in d3
  42.     lsl.b    #4,d3            ; 4 bit a sinistra per g0
  43.     or.b    d2,d3            ; nibble 0b in d2 e g0 per gb in d3
  44.     move.b    d3,1(a2)        ; Copiamo il byte in copperlist
  45.     move.b    1(a0),(a2)        ; Rr in copperlist
  46.     andi.b    #%00001111,(a2)        ; nibble basso per 0r
  47. ;------------------------------- copio nibble alti in copperlist
  48.     move.b    3(a0),d2        ; Bb in d2
  49.     lsr.b    #4,d2            ; 4 bit a destra per 0b
  50.     move.b    2(a0),d3        ; Gg in d3        
  51.     andi.b    #%11110000,d3        ; nibble alto per g0
  52.     or.b    d2,d3            ; 0B in d2 con G0 in d3 per gb in d3
  53.     move.b    d3,1(a1)        ; GB in copperlist
  54.     move.b    1(a0),d2        ; Rr in d2
  55.     lsr.b    #4,d2            ; destra di 4 bit per 0r
  56.     move.b    d2,(a1)            ; 0r in copperlist
  57. ;-----------------------------
  58.     addq.w    #4,a0            ; Prossimo colore palette
  59.     addq.w    #4,a1            ; Prossimo registro colore nibble alti
  60.     addq.w    #4,a2            ; Prossimo registro colore nibble bassi
  61.     dbra    d7,.copy        ; Ripetiamo il loop
  62.     
  63.     lea.l    (128+4)*2(a3),a3    ;prossimo banco nibble alti
  64.     tst.w    d6        ;quanti colori mancano ???
  65.     bne.s    .bankloop
  66.  
  67.     movem.l    (sp)+,d2-d3/d6-d7/a2-a3
  68.     rts
  69. ;****************************************
  70.  
  71.