home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti9 / lezione15c2.s < prev    next >
Text File  |  1995-04-28  |  12KB  |  303 lines

  1.  
  2. ; Lezione15c2.s        - colori salvati in fondo alla pic con AGAconv.
  3.  
  4.     SECTION    AgaRulez,CODE
  5.  
  6. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  7.  
  8. *****************************************************************************
  9.     include    "startup2.s"    ; Salva Copperlist Etc.
  10. *****************************************************************************
  11.  
  12.         ;5432109876543210
  13. DMASET    EQU    %1000001110000000    ; copper, bitplane DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. START:
  18.  
  19. ;    Puntiamo la pic AGA
  20.  
  21.     MOVE.L    #PICTURE,d0
  22.     LEA    BPLPOINTERS,A1    
  23.     MOVEQ    #8-1,D7            ;num of bitplanes -1
  24. POINTB:
  25.     move.w    d0,6(a1)        
  26.     swap    d0            
  27.     move.w    d0,2(a1)        
  28.     swap    d0            
  29.     addi.l    #10240,d0        ;lenght of bitplane
  30.     addq.w    #8,a1
  31.     dbra    d7,POINTB        ;Rifai D1 volte (D1=num of bitplanes)
  32.  
  33.     bsr.s    MettiColori
  34.  
  35.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  36.     move.l    #CopList,$80(a5)    ; Puntiamo la nostra COP
  37.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  38.     move.w    #0,$1fc(a5)        ; Fmode azzerato, burst normale
  39.     move.w    #$c00,$106(a5)        ; BPLCON3 resettato
  40.     move.w    #$11,$10c(a5)        ; BPLCON4 resettato
  41.  
  42. LOOP:
  43.     BTST    #6,$BFE001
  44.     BNE.S    LOOP
  45.     RTS
  46.  
  47.  
  48. ; Questa routine, che e' presente anche nella mia demo WORLD OF MANGA, serve
  49. ; per leggere la palette a 24 bit salvata "attaccata" in fondo alla PIC RAW
  50. ; con l'AGAconv. Non e' ottimizzata, per rendere piu' chiaro il funzionamento.
  51. ; In pratica converte ogni colore a 24 bit, che si presenta nel formato di
  52. ; una long $00RrGgBb, dove R = nibble alto di RED, r = nibble basso di RED,
  53. ; G = nibble alto di GREEN eccetera, nel formato della copperlist aga, ossia
  54. ; in due word $0RGB con i nibble alti e $0rgb con i nibble bassi.
  55. ; Da notare che puo' essere usata anche per prendere i colori da tabelle con
  56. ; la palette a 24 bit salvata in questo formato, o come base per routines
  57. ; di ogni genere che riguardi la palette.
  58.  
  59. MettiColori:
  60.     LEA    PICTURE+(10240*8),A0    ; indirizzo della color palette alla
  61.                     ; fine della figura -> in A0
  62.     LEA    COLP0+2,A1        ; Indirizzo del primo registro
  63.                     ; settato per i nibble ALTI
  64.     LEA    COLP0B+2,A2        ; Indirizzo del primo registro
  65.                     ; settato per i nibble BASSI
  66.     MOVEQ    #8-1,d7            ; 8 banchi da 32 registri ciascuno
  67. ConvertiPaletteBank:
  68.     moveq    #0,d0
  69.     moveq    #0,d2
  70.     moveq    #0,d3
  71.     moveq    #32-1,d6    ; 32 registri colore per banco
  72.  
  73. DaLongARegistri:    ; loop che trasforma i colori $00RrGgBb.l nelle 2
  74.             ; word $0RGB, $0rgb adatte ai registri copper.
  75.  
  76. ; Conversione dei nibble bassi da $00RgGgBb (long) al colore aga $0rgb (word)
  77.  
  78.     MOVE.B    1(A0),(a2)    ; Byte alto del colore $00Rr0000 copiato
  79.                 ; nel registro cop per nibble bassi
  80.     ANDI.B    #%00001111,(a2) ; Seleziona solo il nibble BASSO ($0r)
  81.     move.b    2(a0),d2    ; Prendi il byte $0000Gg00 dal colore a 24bit
  82.     lsl.b    #4,d2        ; Sposta a sinistra di 4 bit il nibble basso
  83.                 ; del GREEN, "trasformandolo" in nibble alto
  84.                 ; di del byte basso di D2 ($g0)
  85.     move.b    3(a0),d3    ; Prendi il byte $000000Bb dal colore a 24bit
  86.     ANDI.B    #%00001111,d3    ; Seleziona solo il nibble BASSO ($0b)
  87.     or.b    d2,d3        ; "FONDI" i nibble bassi di green e blu...
  88.     move.b    d3,1(a2)    ; Formando il byte basso finale $gb da mettere
  89.                 ; nel registro colore, dopo il byte $0r, per
  90.                 ; formare la word $0rgb dei nibble bassi
  91.  
  92. ; Conversione dei nibble alti da $00RgGgBb (long) al colore aga $0RGB (word)
  93.  
  94.     MOVE.B    1(A0),d0    ; Byte alto del colore $00Rr0000 in d0
  95.     ANDI.B    #%11110000,d0    ; Seleziona solo il nibble ALTO ($R0)
  96.     lsr.b    #4,d0        ; Shifta a destra di 4 bit il nibble, in modo
  97.                 ; che diventi il nibble basso del byte ($0R)
  98.     move.b    d0,(a1)        ; Copia il byte alto $0R nel color register
  99.     move.b    2(a0),d2    ; Prendi il byte $0000Gg00 dal colore a 24bit
  100.     ANDI.B    #%11110000,d2    ; Seleziona solo il nibble ALTO ($G0)
  101.     move.b    3(a0),d3    ; Prendi il byte $000000Bb dal colore a 24 bit
  102.     ANDI.B    #%11110000,d3    ; Seleziona solo il nibble ALTO ($B0)
  103.     lsr.b    #4,d3        ; Shiftalo di 4 bit a destra trasformandolo in
  104.                 ; nibble basso del byte basso di d3 ($0B)
  105.     ori.b    d2,d3        ; Fondi i nibble alti di green e blu ($G0+$0B)
  106.     move.b    d3,1(a1)    ; Formando il byte basso finale $GB da mettere
  107.                 ; nel registro colore, dopo il byte $0R, per
  108.                 ; formare la word $0RGB dei nibble alti.
  109.  
  110.     addq.w    #4,a0        ; Saltiamo al prossimo colore .l della palette
  111.                 ; attaccata in fondo alla pic
  112.     addq.w    #4,a1        ; Saltiamo al prossimo registro colore per i
  113.                 ; nibble ALTI in Copperlist
  114.     addq.w    #4,a2        ; Saltiamo al prossimo registro colore per i
  115.                 ; nibble BASSI in Copperlist
  116.  
  117.     dbra    d6,DaLongARegistri
  118.  
  119.     add.w    #(128+8),a1    ; salta i registri colore + il dc.w $106,xxx
  120.                 ; dei nibble ALTI
  121.     add.w    #(128+8),a2    ; salta i registri colore + il dc.w $106,xxx
  122.                 ; dei nibble BASSI
  123.  
  124.     dbra    d7,ConvertiPaletteBank    ; Converte un banco da 32 colori per
  125.     rts                ; loop. 8 loop per i 256 colori.
  126.  
  127.  
  128. ;*****************************************************************************
  129. ;*                COPPERLIST                     *
  130. ;*****************************************************************************
  131.  
  132.     CNOP    0,8    ; Allineo a 64 bit
  133.  
  134.     section    coppera,data_C
  135.  
  136. COPLIST:
  137.     dc.w    $8E,$2c81    ; DiwStrt
  138.     dc.w    $90,$2cc1    ; DiwStop
  139.     dc.w    $92,$0038    ; DdfStart
  140.     dc.w    $94,$00d0    ; DdfStop
  141.     dc.w    $102,0        ; BplCon1
  142.     dc.w    $104,0        ; BplCon2
  143.     dc.w    $108,0        ; Bpl1Mod
  144.     dc.w    $10a,0        ; Bpl2Mod
  145.  
  146.             ; 5432109876543210
  147.     dc.w    $100,%0000001000010001    ; 8 bitplane LOWRES 320x256. Per
  148.                     ; settare 8 planes setto il bit 4 e
  149.                     ; azzero i bit 12,13,14. Il bit 0 e'
  150.                     ; settato dato che abilita molte
  151.                     ; funzioni AGA che vedremo dopo.
  152.  
  153.     dc.w    $1fc,0        ; Burst mode azzerato (per ora!)
  154.  
  155. BPLPOINTERS:
  156.     dc.w $e0,0,$e2,0    ; primo     bitplane
  157.     dc.w $e4,0,$e6,0    ; secondo       "
  158.     dc.w $e8,0,$ea,0    ; terzo           "
  159.     dc.w $ec,0,$ee,0    ; quarto       "
  160.     dc.w $f0,0,$f2,0    ; quinto       "
  161.     dc.w $f4,0,$f6,0    ; sesto           "
  162.     dc.w $f8,0,$fA,0    ; settimo       "
  163.     dc.w $fC,0,$fE,0    ; ottavo       "
  164.  
  165. ; In questo caso la palette viene aggiornata da una routine, per cui basta
  166. ; lasciare azzerati i valori dei registri.
  167.  
  168.     DC.W    $106,$c00    ; SELEZIONA PALETTE 0 (0-31), NIBBLE ALTI
  169. COLP0:
  170.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  171.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  172.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  173.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  174.  
  175.     DC.W    $106,$e00    ; SELEZIONA PALETTE 0 (0-31), NIBBLE BASSI
  176. COLP0B:
  177.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  178.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  179.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  180.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  181.  
  182.     DC.W    $106,$2C00    ; SELEZIONA PALETTE 1 (32-63), NIBBLE ALTI
  183.  
  184.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  185.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  186.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  187.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  188.  
  189.     DC.W    $106,$2E00    ; SELEZIONA PALETTE 1 (32-63), NIBBLE BASSI
  190.  
  191.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  192.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  193.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  194.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  195.  
  196.     DC.W    $106,$4C00    ; SELEZIONA PALETTE 2 (64-95), NIBBLE ALTI
  197.  
  198.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  199.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  200.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  201.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  202.  
  203.     DC.W    $106,$4E00    ; SELEZIONA PALETTE 2 (64-95), NIBBLE BASSI
  204.  
  205.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  206.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  207.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  208.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  209.  
  210.     DC.W    $106,$6C00    ; SELEZIONA PALETTE 3 (96-127), NIBBLE ALTI
  211.  
  212.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  213.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  214.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  215.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  216.  
  217.     DC.W    $106,$6E00    ; SELEZIONA PALETTE 3 (96-127), NIBBLE BASSI
  218.  
  219.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  220.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  221.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  222.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  223.  
  224.     DC.W    $106,$8C00    ; SELEZIONA PALETTE 4 (128-159), NIBBLE ALTI
  225.  
  226.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  227.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  228.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  229.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  230.  
  231.     DC.W    $106,$8E00    ; SELEZIONA PALETTE 4 (128-159), NIBBLE BASSI
  232.  
  233.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  234.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  235.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  236.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  237.  
  238.     DC.W    $106,$AC00    ; SELEZIONA PALETTE 5 (160-191), NIBBLE ALTI
  239.  
  240.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  241.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  242.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  243.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  244.  
  245.     DC.W    $106,$AE00    ; SELEZIONA PALETTE 5 (160-191), NIBBLE BASSI
  246.  
  247.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  248.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  249.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  250.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  251.  
  252.     DC.W    $106,$CC00    ; SELEZIONA PALETTE 6 (192-223), NIBBLE ALTI
  253.  
  254.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  255.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  256.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  257.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  258.  
  259.     DC.W    $106,$CE00    ; SELEZIONA PALETTE 6 (192-223), NIBBLE BASSI
  260.  
  261.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  262.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  263.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  264.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  265.  
  266.     DC.W    $106,$EC00    ; SELEZIONA PALETTE 7 (224-255), NIBBLE ALTI
  267.  
  268.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  269.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  270.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  271.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  272.  
  273.     DC.W    $106,$EE00    ; SELEZIONA PALETTE 7 (224-255), NIBBLE BASSI
  274.  
  275.     DC.W    $180,0,$182,0,$184,0,$186,0,$188,0,$18A,0,$18C,0,$18E,0
  276.     DC.W    $190,0,$192,0,$194,0,$196,0,$198,0,$19A,0,$19C,0,$19E,0
  277.     DC.W    $1A0,0,$1A2,0,$1A4,0,$1A6,0,$1A8,0,$1AA,0,$1AC,0,$1AE,0
  278.     DC.W    $1B0,0,$1B2,0,$1B4,0,$1B6,0,$1B8,0,$1BA,0,$1BC,0,$1BE,0
  279.  
  280.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  281.  
  282. ;******************************************************************************
  283.  
  284. ; Figura RAW ad 8 bitplanes, cioe' a 256 colori
  285.  
  286.     CNOP    0,8    ; allineo a 64 bit
  287.  
  288. PICTURE:
  289.     INCBIN    "MURALE320*256*256c.RAW"
  290.  
  291.     end
  292.  
  293. la PIC in RAW e' 1024 bytes piu' lunga di quanto dovrebbe essere, infatti la
  294. lunghezza di un bitplane lowres e' 10240, moltiplicato per 8 darebbe 81920, ma
  295. la pic e' lunga 82944. Quelle 256 longwords (1024 bytes=512 words=256 longs)
  296. non sono altro che la palette a 24 bit salvata in fondo alla pic, come abbiamo
  297. fatto con il kefcon per le pic non aga. La possibilita' di salvare la palette
  298. in fondo o all'inizio di una pic e' data dall'AGAconv, basta settare le sue
  299. Preferences (premendo Amiga+P) in questo modo:
  300.  
  301.     Palette informations    -    Behind.24
  302.  
  303.