home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti3 / lezione7b.s < prev    next >
Text File  |  1995-09-29  |  5KB  |  203 lines

  1.  
  2. ; Lezione7b.s    VISUALIZZAZIONE DI UNO SPRITE - TASTO DESTRO PER MUOVERLO
  3.  
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. Inizio:
  8.     move.l    4.w,a6        ; Execbase
  9.     jsr    -$78(a6)    ; Disable
  10.     lea    GfxName(PC),a1    ; Nome lib
  11.     jsr    -$198(a6)    ; OpenLibrary
  12.     move.l    d0,GfxBase
  13.     move.l    d0,a6
  14.     move.l    $26(a6),OldCop    ; salviamo la vecchia COP
  15.  
  16. ;    Puntiamo la PIC "vuota"
  17.  
  18.     MOVE.L    #BITPLANE,d0    ; dove puntare
  19.     LEA    BPLPOINTERS,A1    ; puntatori COP
  20.     move.w    d0,6(a1)
  21.     swap    d0
  22.     move.w    d0,2(a1)
  23.  
  24. ;    Puntiamo lo sprite
  25.  
  26.     MOVE.L    #MIOSPRITE,d0        ; indirizzo dello sprite in d0
  27.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  28.     move.w    d0,6(a1)
  29.     swap    d0
  30.     move.w    d0,2(a1)
  31.  
  32.     move.l    #COPPERLIST,$dff080    ; nostra COP
  33.     move.w    d0,$dff088        ; START COP
  34.     move.w    #0,$dff1fc        ; NO AGA!
  35.     move.w    #$c00,$dff106        ; NO AGA!
  36.  
  37. mouse:
  38.     cmpi.b    #$ff,$dff006    ; Linea 255?
  39.     bne.s    mouse
  40.  
  41.     btst    #2,$dff016    ; Tasto destro del mouse premuto?
  42.     bne.s    Aspetta        ; se no, salta la routine che muove lo sprite
  43.  
  44.     bsr.s    MuoviSprite    ; Muovi lo sprite 0 a destra
  45.  
  46. Aspetta:
  47.     cmpi.b    #$ff,$dff006    ; linea 255?
  48.     beq.s    Aspetta
  49.  
  50.     btst    #6,$bfe001    ; mouse premuto?
  51.     bne.s    mouse
  52.  
  53.     move.l    OldCop(PC),$dff080    ; Puntiamo la cop di sistema
  54.     move.w    d0,$dff088        ; facciamo partire la vecchia cop
  55.  
  56.     move.l    4.w,a6
  57.     jsr    -$7e(a6)    ; Enable
  58.     move.l    gfxbase(PC),a1
  59.     jsr    -$19e(a6)    ; Closelibrary
  60.     rts
  61.  
  62. ;    Dati
  63.  
  64. GfxName:
  65.     dc.b    "graphics.library",0,0
  66.  
  67. GfxBase:
  68.     dc.l    0
  69.  
  70. OldCop:
  71.     dc.l    0
  72.  
  73. ; Questa routine sposta a destra lo sprite agendo sul suo byte HSTART, ossia
  74. ; il byte della sua posizione X. Da notare che scorre di 2 pixel ogni volta
  75.  
  76.  
  77. MuoviSprite:
  78.     addq.b    #1,HSTART    ; (come scrivere addq.b #1,MIOSPRITE+1)
  79.     rts
  80.  
  81.  
  82.     SECTION    GRAPHIC,DATA_C
  83.  
  84. COPPERLIST:
  85. SpritePointers:
  86.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  87.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  88.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  89.     dc.w    $13e,0
  90.  
  91.     dc.w    $8E,$2c81    ; DiwStrt
  92.     dc.w    $90,$2cc1    ; DiwStop
  93.     dc.w    $92,$38        ; DdfStart
  94.     dc.w    $94,$d0        ; DdfStop
  95.     dc.w    $102,0        ; BplCon1
  96.     dc.w    $104,0        ; BplCon2
  97.     dc.w    $108,0        ; Bpl1Mod
  98.     dc.w    $10a,0        ; Bpl2Mod
  99.  
  100.             ; 5432109876543210
  101.     dc.w    $100,%0001001000000000    ; bit 12 acceso!! 1 bitplane lowres
  102.  
  103. BPLPOINTERS:
  104.     dc.w $e0,0,$e2,0    ;primo     bitplane
  105.  
  106.     dc.w    $180,$000    ; color0    ; sfondo nero
  107.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  108.                         ; in questo caso e' vuoto,
  109.                         ; per cui non compare.
  110.  
  111.     dc.w    $1A2,$F00    ; color17, ossia COLOR1 dello sprite0 - ROSSO
  112.     dc.w    $1A4,$0F0    ; color18, ossia COLOR2 dello sprite0 - VERDE
  113.     dc.w    $1A6,$FF0    ; color19, ossia COLOR3 dello sprite0 - GIALLO
  114.  
  115.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  116.  
  117.  
  118. ; ************ Ecco lo sprite: OVVIAMENTE deve essere in CHIP RAM! ************
  119.  
  120. MIOSPRITE:        ; lunghezza 13 linee
  121. VSTART:
  122.     dc.b $30    ; Posizione verticale di inizio sprite (da $2c a $f2)
  123. HSTART:
  124.     dc.b $90    ; Posizione orizzontale di inizio sprite (da $40 a $d8)
  125. VSTOP:
  126.     dc.b $3d    ; $30+13=$3d    ; posizione verticale di fine sprite
  127.     dc.b $00
  128.  dc.w    %0000000000000000,%0000110000110000 ; Formato binario per modifiche
  129.  dc.w    %0000000000000000,%0000011001100000
  130.  dc.w    %0000000000000000,%0000001001000000
  131.  dc.w    %0000000110000000,%0011000110001100 ;BINARIO 00=COLORE 0 (TRASPARENTE)
  132.  dc.w    %0000011111100000,%0110011111100110 ;BINARIO 10=COLORE 1 (ROSSO)
  133.  dc.w    %0000011111100000,%1100100110010011 ;BINARIO 01=COLORE 2 (VERDE)
  134.  dc.w    %0000110110110000,%1111100110011111 ;BINARIO 11=COLORE 3 (GIALLO)
  135.  dc.w    %0000011111100000,%0000011111100000
  136.  dc.w    %0000011111100000,%0001111001111000
  137.  dc.w    %0000001111000000,%0011101111011100
  138.  dc.w    %0000000110000000,%0011000110001100
  139.  dc.w    %0000000000000000,%1111000000001111
  140.  dc.w    %0000000000000000,%1111000000001111
  141.  dc.w    0,0    ; 2 word azzerate definiscono la fine dello sprite.
  142.  
  143.  
  144.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  145.                     ; perche' per vedere gli sprite
  146.                     ; e' necessario che ci siano bitplanes
  147.                     ; abilitati
  148. BITPLANE:
  149.     ds.b    40*256        ; bitplane azzerato lowres
  150.  
  151.     end
  152.  
  153. Si puo' facilmente muovere lo sprite, provate con queste modifiche per la
  154. routine MuoviSprite:
  155.  
  156.  
  157.     subq.b    #1,HSTART    ; Spostamento a sinistra dello sprite
  158.  
  159. *
  160.  
  161.     ADDQ.B    #1,VSTART    ; \ sposta lo sprite in basso
  162.     ADDQ.B    #1,VSTOP    ; / (bisogna agire sia su VSTART che su VSTOP!)
  163.  
  164. *
  165.     SUBQ.B    #1,VSTART    ; \ sposta lo sprite in alto
  166.     SUBQ.B    #1,VSTOP    ; / (bisogna agire sia su VSTART che su VSTOP!)
  167.  
  168. *
  169.  
  170.     ADDQ.B    #1,HSTART    ;\
  171.     ADDQ.B    #1,VSTART    ; \ sposta in diagonale basso-destra
  172.     ADDQ.B    #1,VSTOP    ; /
  173.  
  174. *
  175.  
  176.     SUBQ.B    #1,HSTART    ;\
  177.     ADDQ.B    #1,VSTART    ; \ sposta  in diagonale basso-sinistra
  178.     ADDQ.B    #1,VSTOP    ; /
  179.  
  180. *
  181.  
  182.     ADDQ.B    #1,HSTART    ;\
  183.     SUBQ.B    #1,VSTART    ; \ sposta in diagonale alto-destra
  184.     SUBQ.B    #1,VSTOP    ; /
  185.  
  186. *
  187.  
  188.     SUBQ.B    #1,HSTART    ;\
  189.     SUBQ.B    #1,VSTART    ; \ sposta  in diagonale alto-sinistra
  190.     SUBQ.B    #1,VSTOP    ; /
  191.  
  192. *
  193.  
  194. Provate poi a cambiare il valore aggiunto/sottratto per fare traiettorie piu'
  195. insolite.
  196.  
  197.     SUBQ.B    #3,HSTART    ;\
  198.     SUBQ.B    #1,VSTART    ; \ sposta  in diagonale alto-molto sinistra
  199.     SUBQ.B    #1,VSTOP    ; /
  200.  
  201. Eccetera Eccetera.
  202.  
  203.