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

  1.  
  2. ; Lezione15f7.s        Palette degli sprite AGA spostata con $dff10c.
  3. ;            Tasto sinistro per assegnare 2 palette diverse
  4. ;            agli sprite pari e dispari, destro per uscire.
  5.  
  6.     SECTION    AgaRulez,CODE
  7.  
  8. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  9.  
  10. *****************************************************************************
  11.     include    "startup2.s"    ; Salva Copperlist Etc.
  12. *****************************************************************************
  13.  
  14.         ;5432109876543210
  15. DMASET    EQU    %1000001110100000    ; copper, bitplane, sprite DMA
  16.  
  17. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  18.  
  19. START:
  20.  
  21. ;    Puntiamo la PIC "vuota"
  22.  
  23.     MOVE.L    #BITPLANE,d0    ; dove puntare
  24.     LEA    BPLPOINTERS,A1    ; puntatori COP
  25.     move.w    d0,6(a1)
  26.     swap    d0
  27.     move.w    d0,2(a1)
  28.  
  29. ;    Puntiamo gli sprite
  30.  
  31.     MOVE.L    #MIOSPRITE0,d0        ; indirizzo dello sprite in d0
  32.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  33.     move.w    d0,6(a1)
  34.     swap    d0
  35.     move.w    d0,2(a1)
  36.     MOVE.L    #MIOSPRITE1,d0        ; indirizzo dello sprite in d0
  37.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  38.     move.w    d0,6(a1)
  39.     swap    d0
  40.     move.w    d0,2(a1)
  41.     MOVE.L    #MIOSPRITE2,d0        ; indirizzo dello sprite in d0
  42.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  43.     move.w    d0,6(a1)
  44.     swap    d0
  45.     move.w    d0,2(a1)
  46.     MOVE.L    #MIOSPRITE3,d0        ; indirizzo dello sprite in d0
  47.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  48.     move.w    d0,6(a1)
  49.     swap    d0
  50.     move.w    d0,2(a1)
  51.     MOVE.L    #MIOSPRITE4,d0        ; indirizzo dello sprite in d0
  52.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  53.     move.w    d0,6(a1)
  54.     swap    d0
  55.     move.w    d0,2(a1)
  56.     MOVE.L    #MIOSPRITE5,d0        ; indirizzo dello sprite in d0
  57.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  58.     move.w    d0,6(a1)
  59.     swap    d0
  60.     move.w    d0,2(a1)
  61.     MOVE.L    #MIOSPRITE6,d0        ; indirizzo dello sprite in d0
  62.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  63.     move.w    d0,6(a1)
  64.     swap    d0
  65.     move.w    d0,2(a1)
  66.     MOVE.L    #MIOSPRITE7,d0        ; indirizzo dello sprite in d0
  67.     addq.w    #8,a1            ; prossimi SPRITEPOINTERS
  68.     move.w    d0,6(a1)
  69.     swap    d0
  70.     move.w    d0,2(a1)
  71.  
  72.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  73.     move.l    #CopList,$80(a5)    ; Puntiamo la nostra COP
  74.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  75.     move.w    #0,$1fc(a5)        ; Fmode azzerato, burst normale
  76.     move.w    #$c00,$106(a5)        ; BPLCON3 resettato
  77.     move.w    #$11,$10c(a5)        ; BPLCON4 resettato
  78.  
  79.     move.w    #%11101110,bplcon4+2    ; stessa palette per sprite pari
  80.                     ; e dispari
  81.  
  82. mouseS:
  83.     btst.b    #6,$bfe001    ; mouse sin. premuto?
  84.     bne.s    mouseS
  85.  
  86.     move.w    #%11101111,bplcon4+2    ; palette diversa per sprite pari
  87.                     ; e dispari
  88.  
  89. mouseD:
  90.     btst.b    #2,$dff016    ; mouse dest. premuto?
  91.     bne.s    mouseD
  92.  
  93.     rts
  94.  
  95. ;*****************************************************************************
  96. ;*                COPPERLIST                     *
  97. ;*****************************************************************************
  98.  
  99.     CNOP    0,8    ; Allineo a 64 bit
  100.  
  101.     section    coppera,data_C
  102.  
  103. COPLIST:
  104. SpritePointers:
  105.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  106.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  107.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  108.     dc.w    $13e,0
  109.  
  110.     dc.w    $8E,$2c81    ; DiwStrt
  111.     dc.w    $90,$2cc1    ; DiwStop
  112.  
  113.     dc.w    $92,$0038    ; DdfStart
  114.     dc.w    $94,$00d0    ; DdfStop
  115.     dc.w    $102,0        ; BplCon1
  116.     dc.w    $104,0        ; BplCon2
  117.     dc.w    $108,-8        ; Bpl1Mod (burst 64bit, modulo=modulo-8)
  118.     dc.w    $10a,-8        ; Bpl2Mod (come sopra)
  119.  
  120.             ; 5432109876543210
  121.     dc.w    $100,%0001001000000001    ; 1 bitplane LORES 320x256.
  122.  
  123.     dc.w    $1fc,%0011    ; Burst mode a 64 bit, sprite larghi 16 pixel
  124.  
  125.  
  126. BPLPOINTERS:
  127.     dc.w $e0,0,$e2,0    ; primo     bitplane
  128.     dc.w $e4,0,$e6,0    ; secondo       "
  129.     dc.w $e8,0,$ea,0    ; terzo           "
  130.     dc.w $ec,0,$ee,0    ; quarto       "
  131.     dc.w $f0,0,$f2,0    ; quinto       "
  132.     dc.w $f4,0,$f6,0    ; sesto           "
  133.     dc.w $f8,0,$fA,0    ; settimo       "
  134.     dc.w $fC,0,$fE,0    ; ottavo       "
  135.  
  136. ; Da notare che i colori dello sprite sono a 24 bit, anche se sono solo 3.
  137.  
  138.     DC.W    $106,$c00    ; SELEZIONA PALETTE 0 (0-31), NIBBLE ALTI
  139. COLP0:
  140.     dc.w    $180,$000    ; color0    ; sfondo nero
  141.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  142.                         ; in questo caso e' vuoto,
  143.                         ; per cui non compare.
  144.  
  145.     DC.W    $106,$EC00    ; SELEZIONA PALETTE 7 (224-255), NIBBLE ALTI
  146.  
  147. bplcon4:
  148.     dc.w    $10c,%11101111    ; BPLCON4 - Palette sprite pari = 224-240
  149.                 ;         Palette sprite dispari = 240-256
  150.  
  151. ; Ora il banco della palette sprite pari
  152.  
  153.     dc.w    $182,$F00    ; color225, - COLOR1 dello sprite0 -ROSSO
  154.     dc.w    $184,$0F0    ; color226, - COLOR2 dello sprite0 -VERDE
  155.     dc.w    $186,$FF0    ; color227, - COLOR3 dello sprite0 -GIALLO
  156.  
  157.     dc.w    $18A,$FFF    ; color229, - COLOR1 dello sprite2 -BIANCO
  158.     dc.w    $18C,$0BD    ; color230, - COLOR2 dello sprite2 -ACQUA
  159.     dc.w    $18E,$D50    ; color231, - COLOR3 dello sprite2 -ARANCIO
  160.  
  161.     dc.w    $192,$00F    ; color233, - COLOR1 dello sprite4 -BLU
  162.     dc.w    $194,$F0F    ; color234, - COLOR2 dello sprite4 -VIOLA
  163.     dc.w    $196,$BBB    ; color235, - COLOR3 dello sprite4 -GRIGIO
  164.  
  165.     dc.w    $19A,$8E0    ; color237, - COLOR1 dello sprite6 -VERDE CH.
  166.     dc.w    $19C,$a70    ; color238, - COLOR2 dello sprite6 -MARRONE
  167.     dc.w    $19E,$d00    ; color239, - COLOR3 dello sprite6 -ROSSO SC.
  168.  
  169. ; Ora il banco della palette sprite dispari
  170.  
  171.     dc.w    $1A2,$555    ; color241, - COLOR1 dello sprite1 -grigio
  172.     dc.w    $1A4,$aa0    ; color242, - COLOR2 dello sprite1 -giallo
  173.     dc.w    $1A6,$0af    ; color243, - COLOR3 dello sprite1 -azzurro
  174.  
  175.     dc.w    $1AA,$a0a    ; color245, - COLOR1 dello sprite3 -...
  176.     dc.w    $1AC,$3fa    ; color246, - COLOR2 dello sprite3 -...
  177.     dc.w    $1AE,$faf    ; color247, - COLOR3 dello sprite3 -...
  178.  
  179.     dc.w    $1B2,$254    ; color249, - COLOR1 dello sprite5 -...
  180.     dc.w    $1B4,$5a3    ; color250, - COLOR2 dello sprite5 -...
  181.     dc.w    $1B6,$4ee    ; color251, - COLOR3 dello sprite5 -...
  182.  
  183.     dc.w    $1BA,$22c    ; color253, - COLOR1 dello sprite7 -...
  184.     dc.w    $1BC,$381    ; color354, - COLOR2 dello sprite7 -...
  185.     dc.w    $1BE,$fe9    ; color255, - COLOR3 dello sprite7 -...
  186.  
  187.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  188.  
  189.  
  190. ;*****************************************************************************
  191. ;************ Ecco gli sprite: OVVIAMENTE devono essere in CHIP RAM! *********
  192. ;*****************************************************************************
  193.  
  194. MIOSPRITE0:        ; lunghezza 13 linee
  195. VSTART0:
  196.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  197. HSTART0:
  198.     dc.b $60    ; Pos. orizzontale (da $40 a $d8)
  199. VSTOP0:
  200.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  201.     dc.b $00
  202.  dc.w    %0000001111000000,%0111110000111110
  203.  dc.w    %0000111111110000,%1111001110001111
  204.  dc.w    %0011111111111100,%1100010001000011
  205.  dc.w    %0111111111111110,%1000010001000001
  206.  dc.w    %0111111111111110,%1000010001000001
  207.  dc.w    %0011111111111100,%1100010001000011
  208.  dc.w    %0000111111110000,%1111001110001111
  209.  dc.w    %0000001111000000,%0111110000111110
  210.  dc.w    0,0    ; fine sprite
  211.  
  212.  
  213. MIOSPRITE1:        ; lunghezza 13 linee
  214. VSTART1:
  215.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  216. HSTART1:
  217.     dc.b $60+14    ; Pos. orizzontale (da $40 a $d8)
  218. VSTOP1:
  219.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  220.     dc.b $00
  221.  dc.w    %0000001111000000,%0111110000111110
  222.  dc.w    %0000111111110000,%1111000010001111
  223.  dc.w    %0011111111111100,%1100000110000011
  224.  dc.w    %0111111111111110,%1000000010000001
  225.  dc.w    %0111111111111110,%1000000010000001
  226.  dc.w    %0011111111111100,%1100000010000011
  227.  dc.w    %0000111111110000,%1111000111001111
  228.  dc.w    %0000001111000000,%0111110000111110
  229.  dc.w    0,0    ; fine sprite
  230.  
  231.  ; per gli sprite 2 e 3
  232.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  233.  ;BINARIO 10=COLORE 1 (BIANCO)
  234.  ;BINARIO 01=COLORE 2 (ACQUA)
  235.  ;BINARIO 11=COLORE 3 (ARANCIO)
  236.  
  237. MIOSPRITE2:        ; lunghezza 13 linee
  238. VSTART2:
  239.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  240. HSTART2:
  241.     dc.b $60+(14*2)    ; Pos. orizzontale (da $40 a $d8)
  242. VSTOP2:
  243.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  244.     dc.b $00
  245.  dc.w    %0000001111000000,%0111110000111110
  246.  dc.w    %0000111111110000,%1111000111001111
  247.  dc.w    %0011111111111100,%1100001000100011
  248.  dc.w    %0111111111111110,%1000000000100001
  249.  dc.w    %0111111111111110,%1000000111000001
  250.  dc.w    %0011111111111100,%1100001000000011
  251.  dc.w    %0000111111110000,%1111001111101111
  252.  dc.w    %0000001111000000,%0111110000111110
  253.  dc.w    0,0    ; fine sprite
  254.  
  255. MIOSPRITE3:        ; lunghezza 13 linee
  256. VSTART3:
  257.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  258. HSTART3:
  259.     dc.b $60+(14*3)    ; Pos. orizzontale (da $40 a $d8)
  260. VSTOP3:
  261.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  262.     dc.b $00
  263.  dc.w    %0000001111000000,%0111110000111110
  264.  dc.w    %0000111111110000,%1111001111101111
  265.  dc.w    %0011111111111100,%1100000000100011
  266.  dc.w    %0111111111111110,%1000000111100001
  267.  dc.w    %0111111111111110,%1000000000100001
  268.  dc.w    %0011111111111100,%1100000000100011
  269.  dc.w    %0000111111110000,%1111001111101111
  270.  dc.w    %0000001111000000,%0111110000111110
  271.  dc.w    0,0    ; fine sprite
  272.  
  273.  ; per gli sprite 4 e 5
  274.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  275.  ;BINARIO 10=COLORE 1 (BLU)
  276.  ;BINARIO 01=COLORE 2 (VIOLA)
  277.  ;BINARIO 11=COLORE 3 (GRIGIO)
  278.  
  279. MIOSPRITE4:        ; lunghezza 13 linee
  280. VSTART4:
  281.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  282. HSTART4:
  283.     dc.b $60+(14*4)    ; Pos. orizzontale (da $40 a $d8)
  284. VSTOP4:
  285.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  286.     dc.b $00
  287.  dc.w    %0000001111000000,%0111110000111110
  288.  dc.w    %0000111111110000,%1111001001001111
  289.  dc.w    %0011111111111100,%1100001001000011
  290.  dc.w    %0111111111111110,%1000001111000001
  291.  dc.w    %0111111111111110,%1000000001000001
  292.  dc.w    %0011111111111100,%1100000001000011
  293.  dc.w    %0000111111110000,%1111000001001111
  294.  dc.w    %0000001111000000,%0111110000111110
  295.  dc.w    0,0    ; fine sprite
  296.  
  297. MIOSPRITE5:        ; lunghezza 13 linee
  298. VSTART5:
  299.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  300. HSTART5:
  301.     dc.b $60+(14*5)    ; Pos. orizzontale (da $40 a $d8)
  302. VSTOP5:
  303.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  304.     dc.b $00
  305.  dc.w    %0000001111000000,%0111110000111110
  306.  dc.w    %0000111111110000,%1111001111001111
  307.  dc.w    %0011111111111100,%1100001000000011
  308.  dc.w    %0111111111111110,%1000001111000001
  309.  dc.w    %0111111111111110,%1000000001000001
  310.  dc.w    %0011111111111100,%1100000001000011
  311.  dc.w    %0000111111110000,%1111001111001111
  312.  dc.w    %0000001111000000,%0111110000111110
  313.  dc.w    0,0    ; fine sprite
  314.  
  315.  ; per gli sprite 6 e 7
  316.  ;BINARIO 00=COLORE 0 (TRASPARENTE)
  317.  ;BINARIO 10=COLORE 1 (VERDE CHIARO)
  318.  ;BINARIO 01=COLORE 2 (MARRONE)
  319.  ;BINARIO 11=COLORE 3 (ROSSO SCURO)
  320.  
  321. MIOSPRITE6:        ; lunghezza 13 linee
  322. VSTART6:
  323.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  324. HSTART6:
  325.     dc.b $60+(14*6)    ; Pos. orizzontale (da $40 a $d8)
  326. VSTOP6:
  327.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  328.     dc.b $00
  329.  dc.w    %0000001111000000,%0111110000111110
  330.  dc.w    %0000111111110000,%1111001111001111
  331.  dc.w    %0011111111111100,%1100001000000011
  332.  dc.w    %0111111111111110,%1000001111000001
  333.  dc.w    %0111111111111110,%1000001001000001
  334.  dc.w    %0011111111111100,%1100001001000011
  335.  dc.w    %0000111111110000,%1111001111001111
  336.  dc.w    %0000001111000000,%0111110000111110
  337.  dc.w    0,0    ; fine sprite
  338.  
  339. MIOSPRITE7:        ; lunghezza 13 linee
  340. VSTART7:
  341.     dc.b $60    ; Pos. verticale (da $2c a $f2)
  342. HSTART7:
  343.     dc.b $60+(14*7)    ; Pos. orizzontale (da $40 a $d8)
  344. VSTOP7:
  345.     dc.b $68    ; $60+13=$6d    ; fine verticale.
  346.     dc.b $00
  347.  dc.w    %0000001111000000,%0111110000111110
  348.  dc.w    %0000111111110000,%1111001111001111
  349.  dc.w    %0011111111111100,%1100000001000011
  350.  dc.w    %0111111111111110,%1000000001000001
  351.  dc.w    %0111111111111110,%1000000001000001
  352.  dc.w    %0011111111111100,%1100000001000011
  353.  dc.w    %0000111111110000,%1111000001001111
  354.  dc.w    %0000001111000000,%0111110000111110
  355.  dc.w    0,0    ; fine sprite
  356.  
  357.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  358.                     ; perche' per vedere gli sprite
  359.                     ; e' necessario che ci siano bitplanes
  360.                     ; abilitati
  361. BITPLANE:
  362.     ds.b    40*256        ; bitplane azzerato lowres
  363.  
  364.     end
  365.  
  366. Tutto il listato e' basato su questi due registri in copperlist:
  367.  
  368.     DC.W    $106,$EC00    ; SELEZIONA PALETTE 7 (224-255), NIBBLE ALTI
  369.  
  370.     dc.w    $10c,%11101111    ; BPLCON4 - Palette sprite pari = 224-240
  371.                 ;         Palette sprite dispari = 240-256
  372.  
  373. Poi vengono settati i colori dal 225 a 255 (solo i nibble alti, non avevo
  374. voglia di mettere anche quelli bassi!).
  375.  
  376. "Spostare" la palette degli sprite in fondo alla palette puo' essere utile nel
  377. caso si visualizzino figure fino a 128 colori, per cui la palette dei nostri
  378. sprite e' totalmente indipendente. Nel caso la figura sia a 256 colori, si
  379. puo' optare per un qualsiasi banco di 16 colori usabili anche per gli sprite.
  380.  
  381.