home *** CD-ROM | disk | FTP | other *** search
/ Enigma Amiga Life 109 / EnigmaAmiga109CD.iso / software / testi / corsoasm / sorgenti6 / lezione10m2.s < prev    next >
Text File  |  1995-10-23  |  21KB  |  793 lines

  1.  
  2. ; Lezione10m2.s    Routine Universale Bob - versione INTERLEAVED
  3. ;        Tasto sinistro per uscire.
  4.  
  5.     SECTION    CiriCop,CODE
  6.  
  7. ;    Include    "DaWorkBench.s"    ; togliere il ; prima di salvare con "WO"
  8.  
  9. *****************************************************************************
  10.     include    "startup1.s"    ; Salva Copperlist Etc.
  11. *****************************************************************************
  12.  
  13.         ;5432109876543210
  14. DMASET    EQU    %1000001111000000    ; copper,bitplane,blitter DMA
  15.  
  16.  
  17. START:
  18.  
  19.     MOVE.L    #BITPLANE,d0    ; dove puntare
  20.     LEA    BPLPOINTERS,A1    ; puntatori COP
  21.     MOVEQ    #2-1,D1        ; numero di bitplanes
  22. POINTBP:
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.     swap    d0
  27.     ADD.L    #40,d0        ; + lunghezza riga
  28.     addq.w    #8,a1
  29.     dbra    d1,POINTBP
  30.  
  31.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  32.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  33.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  34.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  35.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  36.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  37.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  38.  
  39. mouse:
  40.  
  41. ; parametri per routine SalvaSfondo
  42.  
  43.     move.w    ogg_x(pc),d0        ; posizione X
  44.     move.w    ogg_y(pc),d1        ; posizione Y
  45.     move.w    #32,d2            ; dimensione X
  46.     move.w    #30,d3            ; dimensione Y
  47.     bsr.w    SalvaSfondo        ; salva lo sfondo
  48.  
  49. ; parametri per routine UniBob
  50.  
  51.     move.l    Frametab(pc),a0        ; mette il puntatore al fotogramma
  52.                     ; da disegnare in A0
  53.     lea    2*4*30(a0),a1        ; puntatore alla maschera in A1
  54.     move.w    ogg_x(pc),d0        ; posizione X
  55.     move.w    ogg_y(pc),d1        ; posizione Y
  56.     move.w    #32,d2            ; dimensione X
  57.     move.w    #30,d3            ; dimensione Y
  58.     bsr.w    UniBob            ; disegna il bob con la routine
  59.                     ; universale
  60.  
  61.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  62.     MOVE.L    #$13000,d2    ; linea da aspettare = $130
  63. Waity1:
  64.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  65.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  66.     CMPI.L    D2,D0
  67.     BNE.S    Waity1
  68.  
  69. ; parametri per routine RipristinaSfondo
  70.  
  71.     move.w    ogg_x(pc),d0        ; posizione X
  72.     move.w    ogg_y(pc),d1        ; posizione Y
  73.     move.w    #32,d2            ; dimensione X
  74.     move.w    #30,d3            ; dimensione Y
  75.     bsr.w    RipristinaSfondo    ; ripristina lo sfondo
  76.  
  77.     bsr.s    MuoviOggetto    ; sposta l'oggetto sullo schermo
  78.     bsr.s    Animazione    ; sposta i fotogrammi nella tabella
  79.  
  80.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  81.     bne.s    mouse        ; se no, torna a mouse
  82.     rts
  83.  
  84.  
  85. ;****************************************************************************
  86. ; Questa routine muove il bob sullo schermo.
  87. ;****************************************************************************
  88.  
  89. MuoviOggetto:
  90.     addq.w    #1,ogg_x    ; sposta in basso il bob
  91.     cmp.w    #320-32,ogg_x    ; e` arrivato al bordo basso ?
  92.     bls.s    EndMuovi    ; se no fine
  93.     clr.w    ogg_x        ; altrimenti riparti dall'alto
  94. EndMuovi
  95.     rts
  96.  
  97. ;****************************************************************************
  98. ; Questa routine crea l'animazione, spostando gli indirizzi dei fotogrammi
  99. ; in maniera che ogni volta il primo della tabella vada all'ultimo posto,
  100. ; mentra gli altri scorrono tutti di un posto in direzione del primo
  101. ;****************************************************************************
  102.  
  103. Animazione:
  104.     addq.b    #1,ContaAnim    ; queste tre istruzioni fanno si' che il
  105.     cmp.b    #4,ContaAnim    ; fotogramma venga cambiato una volta
  106.     bne.s    NonCambiare     ; si e 3 no.
  107.     clr.b    ContaAnim
  108.     LEA    FRAMETAB(PC),a0 ; tabella dei fotogrammi
  109.     MOVE.L    (a0),d0        ; salva il primo indirizzo in d0
  110.     MOVE.L    4(a0),(a0)    ; sposta indietro gli altri indirizzi
  111.     MOVE.L    4*2(a0),4(a0)    ; Queste istruzioni "ruotano" gli indirizzi
  112.     MOVE.L    4*3(a0),4*2(a0) ; della tabella.
  113.     MOVE.L    d0,4*3(a0)    ; metti l'ex primo indirizzo all'ottavo posto
  114.  
  115. NonCambiare:
  116.     rts
  117.  
  118. ContaAnim:
  119.     dc.w    0
  120.  
  121. ; Questa e` la tabella degli indirizzi dei fotogrammi. Gli indirizzi
  122. ; presenti nella tabella vengono "ruotati" all'interno della tabella dalla
  123. ; routine Animazione, in modo che il primo nella lista sia la prima volta il
  124. ; fotogramma1, la volta dopo il Fotogramma2, poi il 3, il 4 e di nuovo il
  125. ; primo, ciclicamente. In questo modo basta prendere l'indirizzo che sta
  126. ; all'inizio della tabella ogni volta dopo il "rimescolamento" per avere gli
  127. ; indirizzi dei fotogrammi in sequenza.
  128.  
  129. FRAMETAB:
  130.     DC.L    Frame1
  131.     DC.L    Frame2
  132.     DC.L    Frame3
  133.     DC.L    Frame4
  134.  
  135. ; variabili posizione BOB
  136. OGG_Y:        dc.w    100    ; qui viene memorizzata la Y dell'oggetto
  137. OGG_X:        dc.w    10    ; qui viene memorizzata la X dell'oggetto
  138.  
  139. ;***************************************************************************
  140. ; Questa e` la routine universale per disegnare bob di forma e dimensioni
  141. ; arbitrarie. Tutti i parametri sono passati tramite registri.
  142. ; La routine funziona su schermo INTERLEAVED
  143. ;
  144. ; A0 - indirizzo figura bob
  145. ; A1 - indirizzo maschera bob
  146. ; D0 - coordinata X del vertice superiore sinistro
  147. ; D1 - coordinata Y del vertice superiore sinistro
  148. ; D2 - larghezza rettangolo in pixel
  149. ; D3 - altezza rettangolo
  150. ;****************************************************************************
  151.  
  152. ;           ___  Oo          .:/
  153. ;          (___)o_o        ,,///;,   ,;/
  154. ;     //====--//(_)       o:::::::;;///
  155. ;             \\ ^       >::::::::;;\\\
  156. ;                          ''\\\\\'" ';\
  157.  
  158. UniBob:
  159.  
  160. ; calcolo indirizzo di partenza del blitter
  161.  
  162.     lea    bitplane,a2    ; indirizzo bitplane
  163.     mulu.w    #2*40,d1    ; calcola indirizzo: ogni riga e` costituita da
  164.                 ; 2 planes di 40 bytes ciascuno
  165.     add.l    d1,a2        ; aggiungi ad indirizzo
  166.     move.w    d0,d6        ; copia la X
  167.     lsr.w    #3,d0        ; dividi per 8 la X
  168.     and.w    #$fffe,d0    ; rendilo pari
  169.     add.w    d0,a2        ; somma all'indirizzo del bitplane, trovando
  170.                 ; l'indirizzo giusto di destinazione
  171.  
  172.     and.w    #$000f,d6    ; si selezionano i primi 4 bit della X perche'
  173.                 ; vanno inseriti nello shifter dei canali A,B 
  174.     lsl.w    #8,d6        ; i 4 bit vengono spostati sul nibble alto
  175.     lsl.w    #4,d6        ; della word. Questo e` il valore di BLTCON1
  176.  
  177.     move.w    d6,d5        ; copia per calcolare il valore di BLTCON0 
  178.     or.w    #$0FCA,d5    ; valori da mettere in BLTCON0
  179.  
  180. ; calcolo modulo blitter
  181.  
  182.     lsr.w    #3,d2        ; dividi per 8 la larghezza
  183.     and.w    #$fffe,d2    ; azzerro il bit 0 (rendo pari)
  184.     addq.w    #2,d2        ; la blittata e` una word piu` larga 
  185.     move.w    #40,d4        ; larghezza schermo in bytes
  186.     sub.w    d2,d4        ; modulo=larg. schermo-larg. rettangolo
  187.  
  188. ; calcolo dimensione blittata
  189.  
  190.     mulu    #2,d3        ; moltiplica altezza per numero di planes
  191.                 ; (per schermo interleaved)
  192.                 ; in questo caso poiche` abbiamo 2 planes
  193.                 ; si potrebbe usare la asl, ma in generale
  194.                 ; (es. 3 planes) si deve usare la mulu
  195.  
  196.     lsl.w    #6,d3        ; altezza per 64
  197.     lsr.w    #1,d2        ; larghezza in pixel diviso 16
  198.                 ; cioe` larghezza in words
  199.     or    d2,d3        ; metti insieme le dimensioni
  200.  
  201. ; inizializza i registri
  202.     btst    #6,2(a5)
  203. WBlit_u1:
  204.     btst    #6,2(a5)         ; attendi che il blitter abbia finito
  205.     bne.s    wblit_u1
  206.  
  207.     move.l    #$ffff0000,$44(a5)    ; BLTAFWM = $ffff fa passare tutto
  208.                     ; BLTALWM = $0000 azzera l'ultima word
  209.  
  210.     move.w    d6,$42(a5)        ; BLTCON1 - valore di shift
  211.                     ; nessun modo speciale
  212.  
  213.     move.w    d5,$40(a5)        ; BLTCON0 - valore di shift
  214.                     ; cookie-cut
  215.  
  216.     move.l    #$fffefffe,$62(a5)    ; BLTBMOD e BLTAMOD=$fffe=-2 torna
  217.                     ; indietro all'inizio della riga.
  218.  
  219.     move.w    d4,$60(a5)        ; BLTCMOD valore calcolato
  220.     move.w    d4,$66(a5)        ; BLTDMOD valore calcolato
  221.  
  222.     move.l    a1,$50(a5)        ; BLTAPT  (maschera)
  223.     move.l    a2,$54(a5)        ; BLTDPT  (linee di schermo)
  224.     move.l    a2,$48(a5)        ; BLTCPT  (linee di schermo)
  225.     move.l    a0,$4c(a5)        ; BLTBPT  (figura bob)
  226.     move.w    d3,$58(a5)        ; BLTSIZE (via al blitter !)
  227.  
  228.     rts
  229.  
  230. ;****************************************************************************
  231. ; Questa routine copia il rettangolo di sfondo che verra` sovrascritto dal
  232. ; BOB in un buffer. La routine gestisce un bob di dimensioni arbitrarie.
  233. ; Se usate questa routine per bob di dimensioni diverse, fate attenzione
  234. ; che il buffer possa contenere il bob di dimensione massima!
  235. ; La posizione e la dimensione del rettangolo sono dei parametri
  236. ;
  237. ; D0 - coordinata X del vertice superiore sinistro
  238. ; D1 - coordinata Y del vertice superiore sinistro
  239. ; D2 - larghezza rettangolo in pixel
  240. ; D3 - altezza rettangolo
  241. ;****************************************************************************
  242.  
  243. SalvaSfondo:
  244. ; calcolo indirizzo di partenza del blitter
  245.  
  246.     lea    bitplane,a1    ; indirizzo bitplane
  247.     mulu.w    #2*40,d1    ; calcola indirizzo: ogni riga e` costituita da
  248.                 ; 2 planes di 40 bytes ciascuno
  249.     add.l    d1,a1        ; aggiungi ad indirizzo
  250.     lsr.w    #3,d0        ; dividi per 8 la X
  251.     and.w    #$fffe,d0    ; rendilo pari
  252.     add.w    d0,a1        ; somma all'indirizzo del bitplane, trovando
  253.                 ; l'indirizzo giusto di destinazione
  254.  
  255. ; calcolo modulo blitter
  256.     lsr.w    #3,d2        ; dividi per 8 la larghezza
  257.     and.w    #$fffe,d2    ; azzerro il bit 0 (rendo pari)
  258.     addq.w    #2,d2        ; la blittata e` larga 1 word in piu`
  259.     move.w    #40,d4        ; larghezza schermo in bytes
  260.     sub.w    d2,d4        ; modulo=larg. schermo-larg. rettangolo
  261.  
  262. ; calcolo dimensione blittata
  263.     mulu    #2,d3        ; moltiplica altezza per numero di planes
  264.                 ; (per schermo interleaved)
  265.                 ; in questo caso poiche` abbiamo 2 planes
  266.                 ; si potrebbe usare la asl, ma in generale
  267.                 ; (es. 3 planes) si deve usare la mulu
  268.     lsl.w    #6,d3        ; altezza per 64
  269.     lsr.w    #1,d2        ; larghezza in pixel diviso 16
  270.                 ; cioe` larghezza in words
  271.     or    d2,d3        ; metti insieme le dimensioni
  272.  
  273.     lea    Buffer,a2    ; indirizzo destinazione
  274.  
  275.     btst    #6,2(a5) ; dmaconr
  276. WBlit3:
  277.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  278.     bne.s    wblit3
  279.  
  280.     move.l    #$ffffffff,$44(a5)    ; BLTAFWM = $ffff fa passare tutto
  281.                     ; BLTALWM = $ffff fa passare tutto
  282.  
  283.     move.l    #$09f00000,$40(a5)    ; BLTCON0 e BLTCON1 copia da A a D
  284.     move.w    d4,$64(a5)        ; BLTAMOD valore calcolato
  285.     move.w    #$0000,$66(a5)        ; BLTDMOD=0 nel buffer
  286.     move.l    a1,$50(a5)        ; BLTAPT - ind. sorgente
  287.     move.l    a2,$54(a5)        ; BLTDPT - buffer
  288.     move.w    d3,$58(a5)        ; BLTSIZE (via al blitter !)
  289.  
  290.     rts
  291.  
  292. ;****************************************************************************
  293. ; Questa routine copia il contenuto del buffer nel rettangolo di schermo
  294. ; che lo conteneva prima del disegno del BOB. In questo modo viene anche
  295. ; cancellato il BOB dalla vecchia posizione. La routine gestisce un bob di
  296. ; dimensioni arbitrarie.
  297. ; Se usate questa routine per bob di dimensioni diverse, fate attenzione
  298. ; che il buffer possa contenere il bob di dimensione massima!
  299. ; La posizione e la dimensione del rettangolo sono dei parametri
  300. ;
  301. ; D0 - coordinata X del vertice superiore sinistro
  302. ; D1 - coordinata Y del vertice superiore sinistro
  303. ; D2 - larghezza rettangolo in pixel
  304. ; D3 - altezza rettangolo
  305. ;****************************************************************************
  306.  
  307. RipristinaSfondo:
  308. ; calcolo indirizzo di partenza del blitter
  309.  
  310.     lea    bitplane,a1    ; indirizzo bitplane
  311.     mulu.w    #2*40,d1    ; calcola indirizzo: ogni riga e` costituita da
  312.                 ; 2 planes di 40 bytes ciascuno
  313.     add.l    d1,a1        ; aggiungi ad indirizzo
  314.     lsr.w    #3,d0        ; dividi per 8 la X
  315.     and.w    #$fffe,d0    ; rendilo pari
  316.     add.w    d0,a1        ; somma all'indirizzo del bitplane, trovando
  317.                 ; l'indirizzo giusto di destinazione
  318.  
  319. ; calcolo modulo blitter
  320.     lsr.w    #3,d2        ; dividi per 8 la larghezza
  321.     and.w    #$fffe,d2    ; azzerro il bit 0 (rendo pari)
  322.     addq.w    #2,d2        ; la blittata e` larga 1 word in piu`
  323.     move.w    #40,d4        ; larghezza schermo in bytes
  324.     sub.w    d2,d4        ; modulo=larg. schermo-larg. rettangolo
  325.  
  326. ; calcolo dimensione blittata
  327.     mulu    #2,d3        ; moltiplica altezza per numero di planes
  328.                 ; (per schermo interleaved)
  329.                 ; in questo caso poiche` abbiamo 2 planes
  330.                 ; si potrebbe usare la asl, ma in generale
  331.                 ; (es. 3 planes) si deve usare la mulu
  332.     lsl.w    #6,d3        ; altezza per 64
  333.     lsr.w    #1,d2        ; larghezza in pixel diviso 16
  334.                 ; cioe` larghezza in words
  335.     or    d2,d3        ; metti insieme le dimensioni
  336.  
  337.     lea    Buffer,a2    ; indirizzo destinazione
  338.  
  339.     btst    #6,2(a5) ; dmaconr
  340. WBlit4:
  341.     btst    #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
  342.     bne.s    wblit4
  343.  
  344.     move.l    #$ffffffff,$44(a5)    ; BLTAFWM = $ffff fa passare tutto
  345.                     ; BLTALWM = $ffff fa passare tutto
  346.  
  347.     move.l    #$09f00000,$40(a5)    ; BLTCON0 e BLTCON1 copia da A a D
  348.     move.w    d4,$66(a5)        ; BLTDMOD valore calcolato
  349.     move.w    #$0000,$64(a5)        ; BLTAMOD=0 nel buffer
  350.     move.l    a2,$50(a5)        ; BLTAPT - buffer
  351.     move.l    a1,$54(a5)        ; BLTDPT - schermo
  352.     move.w    d3,$58(a5)        ; BLTSIZE (via al blitter !)
  353.  
  354.     rts
  355.  
  356.  
  357. ;****************************************************************************
  358.  
  359.     SECTION    GRAPHIC,DATA_C
  360.  
  361. COPPERLIST:
  362.     dc.w    $8E,$2c81    ; DiwStrt
  363.     dc.w    $90,$2cc1    ; DiwStop
  364.     dc.w    $92,$38        ; DdfStart
  365.     dc.w    $94,$d0        ; DdfStop
  366.     dc.w    $102,0        ; BplCon1
  367.     dc.w    $104,0        ; BplCon2
  368.     dc.w    $108,40        ; Bpl1Mod
  369.     dc.w    $10a,40        ; Bpl2Mod
  370.  
  371.     dc.w    $100,$2200    ; bplcon0
  372.  
  373. BPLPOINTERS:
  374.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  375.     dc.w $e4,$0000,$e6,$0000
  376.  
  377.     dc.w    $180,$000    ; color0
  378.     dc.w    $182,$00b    ; color1
  379.     dc.w    $184,$cc0    ; color2
  380.     dc.w    $186,$b00    ; color3
  381.  
  382.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  383.  
  384. ;****************************************************************************
  385. ; Questi sono i frames che compongono l'animazione
  386.  
  387. Frame1:
  388.  
  389.     dc.l    $00000000,$00020000
  390.     dc.l    $00000000,$00070000
  391.     dc.l    $00000000,$000f8000
  392.     dc.l    $00000000,$001fc000
  393.     dc.l    $00000000,$003fe000
  394.     dc.l    $00000000,$007ff000
  395.     dc.l    $00000000,$00fff800
  396.     dc.l    $00000000,$01fffc00
  397.     dc.l    $00000000,$03fffe00
  398.     dc.l    $00000000,$07ffff00
  399.     dc.l    $07ffff00,$07ffff00
  400.     dc.l    $07ffff00,$07ffff00
  401.     dc.l    $07ffff00,$07ffff00
  402.     dc.l    $07ffff00,$07ffff00
  403.     dc.l    $07ffff00,$07ffff00
  404.     dc.l    $07ffff00,$07ffff00
  405.     dc.l    $07ffff00,$07ffff00
  406.     dc.l    $07ffff00,$07ffff00
  407.     dc.l    $07ffff00,$07ffff00
  408.     dc.l    $07ffff00,$07ffff00
  409.     dc.l    $00000000,$07ffff00
  410.     dc.l    $00000000,$03fffe00
  411.     dc.l    $00000000,$01fffc00
  412.     dc.l    $00000000,$00fff800
  413.     dc.l    $00000000,$007ff000
  414.     dc.l    $00000000,$003fe000
  415.     dc.l    $00000000,$001fc000
  416.     dc.l    $00000000,$000f8000
  417.     dc.l    $00000000,$00070000
  418.     dc.l    $00000000,$00020000
  419.  
  420. ; maschera
  421.     dc.l    $00020000
  422.     dc.l    $00020000
  423.     dc.l    $00070000
  424.     dc.l    $00070000
  425.     dc.l    $000f8000
  426.     dc.l    $000f8000
  427.     dc.l    $001fc000
  428.     dc.l    $001fc000
  429.     dc.l    $003fe000
  430.     dc.l    $003fe000
  431.     dc.l    $007ff000
  432.     dc.l    $007ff000
  433.     dc.l    $00fff800
  434.     dc.l    $00fff800
  435.     dc.l    $01fffc00
  436.     dc.l    $01fffc00
  437.     dc.l    $03fffe00
  438.     dc.l    $03fffe00
  439.     dc.l    $07ffff00
  440.     dc.l    $07ffff00
  441.     dc.l    $07ffff00
  442.     dc.l    $07ffff00
  443.     dc.l    $07ffff00
  444.     dc.l    $07ffff00
  445.     dc.l    $07ffff00
  446.     dc.l    $07ffff00
  447.     dc.l    $07ffff00
  448.     dc.l    $07ffff00
  449.     dc.l    $07ffff00
  450.     dc.l    $07ffff00
  451.     dc.l    $07ffff00
  452.     dc.l    $07ffff00
  453.     dc.l    $07ffff00
  454.     dc.l    $07ffff00
  455.     dc.l    $07ffff00
  456.     dc.l    $07ffff00
  457.     dc.l    $07ffff00
  458.     dc.l    $07ffff00
  459.     dc.l    $07ffff00
  460.     dc.l    $07ffff00
  461.     dc.l    $07ffff00
  462.     dc.l    $07ffff00
  463.     dc.l    $03fffe00
  464.     dc.l    $03fffe00
  465.     dc.l    $01fffc00
  466.     dc.l    $01fffc00
  467.     dc.l    $00fff800
  468.     dc.l    $00fff800
  469.     dc.l    $007ff000
  470.     dc.l    $007ff000
  471.     dc.l    $003fe000
  472.     dc.l    $003fe000
  473.     dc.l    $001fc000
  474.     dc.l    $001fc000
  475.     dc.l    $000f8000
  476.     dc.l    $000f8000
  477.     dc.l    $00070000
  478.     dc.l    $00070000
  479.     dc.l    $00020000
  480.     dc.l    $00020000
  481.  
  482. Frame2:
  483.     dc.l    $00000000,$00000000
  484.     dc.l    $00000000,$00000000
  485.     dc.l    $00000000,$00000000
  486.     dc.l    $00000000,$00000000
  487.     dc.l    $00000000,$001fffc0
  488.     dc.l    $00300000,$003fffc0
  489.     dc.l    $00780000,$007fffc0
  490.     dc.l    $00fc0000,$00ffffc0
  491.     dc.l    $01fe0000,$01ffffc0
  492.     dc.l    $03ff0000,$03ffffc0
  493.     dc.l    $07ff8000,$07ffffc0
  494.     dc.l    $0fffc000,$0fffffc0
  495.     dc.l    $07ffe000,$0fffffc0
  496.     dc.l    $03fff000,$0fffffc0
  497.     dc.l    $01fff800,$0fffffc0
  498.     dc.l    $00fffc00,$0fffffc0
  499.     dc.l    $007ffe00,$0fffffc0
  500.     dc.l    $003fff00,$0fffffc0
  501.     dc.l    $001fff80,$0fffff80
  502.     dc.l    $000fff00,$0fffff00
  503.     dc.l    $0007fe00,$0ffffe00
  504.     dc.l    $0003fc00,$0ffffc00
  505.     dc.l    $0001f800,$0ffff800
  506.     dc.l    $0000f000,$0ffff000
  507.     dc.l    $00006000,$0fffe000
  508.     dc.l    $00000000,$00000000
  509.     dc.l    $00000000,$00000000
  510.     dc.l    $00000000,$00000000
  511.     dc.l    $00000000,$00000000
  512.     dc.l    $00000000,$00000000
  513.  
  514.     dc.l    $00000000
  515.     dc.l    $00000000
  516.     dc.l    $00000000
  517.     dc.l    $00000000
  518.     dc.l    $00000000
  519.     dc.l    $00000000
  520.     dc.l    $00000000
  521.     dc.l    $00000000
  522.     dc.l    $001fffc0
  523.     dc.l    $001fffc0
  524.     dc.l    $003fffc0
  525.     dc.l    $003fffc0
  526.     dc.l    $007fffc0
  527.     dc.l    $007fffc0
  528.     dc.l    $00ffffc0
  529.     dc.l    $00ffffc0
  530.     dc.l    $01ffffc0
  531.     dc.l    $01ffffc0
  532.     dc.l    $03ffffc0
  533.     dc.l    $03ffffc0
  534.     dc.l    $07ffffc0
  535.     dc.l    $07ffffc0
  536.     dc.l    $0fffffc0
  537.     dc.l    $0fffffc0
  538.     dc.l    $0fffffc0
  539.     dc.l    $0fffffc0
  540.     dc.l    $0fffffc0
  541.     dc.l    $0fffffc0
  542.     dc.l    $0fffffc0
  543.     dc.l    $0fffffc0
  544.     dc.l    $0fffffc0
  545.     dc.l    $0fffffc0
  546.     dc.l    $0fffffc0
  547.     dc.l    $0fffffc0
  548.     dc.l    $0fffffc0
  549.     dc.l    $0fffffc0
  550.     dc.l    $0fffff80
  551.     dc.l    $0fffff80
  552.     dc.l    $0fffff00
  553.     dc.l    $0fffff00
  554.     dc.l    $0ffffe00
  555.     dc.l    $0ffffe00
  556.     dc.l    $0ffffc00
  557.     dc.l    $0ffffc00
  558.     dc.l    $0ffff800
  559.     dc.l    $0ffff800
  560.     dc.l    $0ffff000
  561.     dc.l    $0ffff000
  562.     dc.l    $0fffe000
  563.     dc.l    $0fffe000
  564.     dc.l    $00000000
  565.     dc.l    $00000000
  566.     dc.l    $00000000
  567.     dc.l    $00000000
  568.     dc.l    $00000000
  569.     dc.l    $00000000
  570.     dc.l    $00000000
  571.     dc.l    $00000000
  572.     dc.l    $00000000
  573.     dc.l    $00000000
  574.  
  575. Frame3:
  576.  
  577.     dc.l    $00000000,$00000000
  578.     dc.l    $00000000,$00000000
  579.     dc.l    $00000000,$00000000
  580.     dc.l    $00000000,$00000000
  581.     dc.l    $00000000,$00000000
  582.     dc.l    $003ff000,$007ff800
  583.     dc.l    $003ff000,$00fffc00
  584.     dc.l    $003ff000,$01fffe00
  585.     dc.l    $003ff000,$03ffff00
  586.     dc.l    $003ff000,$07ffff80
  587.     dc.l    $003ff000,$0fffffc0
  588.     dc.l    $003ff000,$1fffffe0
  589.     dc.l    $003ff000,$3ffffff0
  590.     dc.l    $003ff000,$7ffffff8
  591.     dc.l    $003ff000,$fffffffc
  592.     dc.l    $003ff000,$7ffffff8
  593.     dc.l    $003ff000,$3ffffff0
  594.     dc.l    $003ff000,$1fffffe0
  595.     dc.l    $003ff000,$0fffffc0
  596.     dc.l    $003ff000,$07ffff80
  597.     dc.l    $003ff000,$03ffff00
  598.     dc.l    $003ff000,$01fffe00
  599.     dc.l    $003ff000,$00fffc00
  600.     dc.l    $003ff000,$007ff800
  601.     dc.l    $00000000,$00000000
  602.     dc.l    $00000000,$00000000
  603.     dc.l    $00000000,$00000000
  604.     dc.l    $00000000,$00000000
  605.     dc.l    $00000000,$00000000
  606.     dc.l    $00000000,$00000000
  607.  
  608.     dc.l    $00000000
  609.     dc.l    $00000000
  610.     dc.l    $00000000
  611.     dc.l    $00000000
  612.     dc.l    $00000000
  613.     dc.l    $00000000
  614.     dc.l    $00000000
  615.     dc.l    $00000000
  616.     dc.l    $00000000
  617.     dc.l    $00000000
  618.     dc.l    $007ff800
  619.     dc.l    $007ff800
  620.     dc.l    $00fffc00
  621.     dc.l    $00fffc00
  622.     dc.l    $01fffe00
  623.     dc.l    $01fffe00
  624.     dc.l    $03ffff00
  625.     dc.l    $03ffff00
  626.     dc.l    $07ffff80
  627.     dc.l    $07ffff80
  628.     dc.l    $0fffffc0
  629.     dc.l    $0fffffc0
  630.     dc.l    $1fffffe0
  631.     dc.l    $1fffffe0
  632.     dc.l    $3ffffff0
  633.     dc.l    $3ffffff0
  634.     dc.l    $7ffffff8
  635.     dc.l    $7ffffff8
  636.     dc.l    $fffffffc
  637.     dc.l    $fffffffc
  638.     dc.l    $7ffffff8
  639.     dc.l    $7ffffff8
  640.     dc.l    $3ffffff0
  641.     dc.l    $3ffffff0
  642.     dc.l    $1fffffe0
  643.     dc.l    $1fffffe0
  644.     dc.l    $0fffffc0
  645.     dc.l    $0fffffc0
  646.     dc.l    $07ffff80
  647.     dc.l    $07ffff80
  648.     dc.l    $03ffff00
  649.     dc.l    $03ffff00
  650.     dc.l    $01fffe00
  651.     dc.l    $01fffe00
  652.     dc.l    $00fffc00
  653.     dc.l    $00fffc00
  654.     dc.l    $007ff800
  655.     dc.l    $007ff800
  656.     dc.l    $00000000
  657.     dc.l    $00000000
  658.     dc.l    $00000000
  659.     dc.l    $00000000
  660.     dc.l    $00000000
  661.     dc.l    $00000000
  662.     dc.l    $00000000
  663.     dc.l    $00000000
  664.     dc.l    $00000000
  665.     dc.l    $00000000
  666.     dc.l    $00000000
  667.     dc.l    $00000000
  668.  
  669. Frame4:
  670.  
  671.     dc.l    $00000000,$00000000
  672.     dc.l    $00000000,$00000000
  673.     dc.l    $00000000,$00000000
  674.     dc.l    $00000000,$00000000
  675.     dc.l    $00006000,$0fffe000
  676.     dc.l    $0000f000,$0ffff000
  677.     dc.l    $0001f800,$0ffff800
  678.     dc.l    $0003fc00,$0ffffc00
  679.     dc.l    $0007fe00,$0ffffe00
  680.     dc.l    $000fff00,$0fffff00
  681.     dc.l    $001fff80,$0fffff80
  682.     dc.l    $003fff00,$0fffffc0
  683.     dc.l    $007ffe00,$0fffffc0
  684.     dc.l    $00fffc00,$0fffffc0
  685.     dc.l    $01fff800,$0fffffc0
  686.     dc.l    $03fff000,$0fffffc0
  687.     dc.l    $07ffe000,$0fffffc0
  688.     dc.l    $0fffc000,$0fffffc0
  689.     dc.l    $07ff8000,$07ffffc0
  690.     dc.l    $03ff0000,$03ffffc0
  691.     dc.l    $01fe0000,$01ffffc0
  692.     dc.l    $00fc0000,$00ffffc0
  693.     dc.l    $00780000,$007fffc0
  694.     dc.l    $00300000,$003fffc0
  695.     dc.l    $00000000,$001fffc0
  696.     dc.l    $00000000,$00000000
  697.     dc.l    $00000000,$00000000
  698.     dc.l    $00000000,$00000000
  699.     dc.l    $00000000,$00000000
  700.     dc.l    $00000000,$00000000
  701.  
  702.     dc.l    $00000000
  703.     dc.l    $00000000
  704.     dc.l    $00000000
  705.     dc.l    $00000000
  706.     dc.l    $00000000
  707.     dc.l    $00000000
  708.     dc.l    $00000000
  709.     dc.l    $00000000
  710.     dc.l    $0fffe000
  711.     dc.l    $0fffe000
  712.     dc.l    $0ffff000
  713.     dc.l    $0ffff000
  714.     dc.l    $0ffff800
  715.     dc.l    $0ffff800
  716.     dc.l    $0ffffc00
  717.     dc.l    $0ffffc00
  718.     dc.l    $0ffffe00
  719.     dc.l    $0ffffe00
  720.     dc.l    $0fffff00
  721.     dc.l    $0fffff00
  722.     dc.l    $0fffff80
  723.     dc.l    $0fffff80
  724.     dc.l    $0fffffc0
  725.     dc.l    $0fffffc0
  726.     dc.l    $0fffffc0
  727.     dc.l    $0fffffc0
  728.     dc.l    $0fffffc0
  729.     dc.l    $0fffffc0
  730.     dc.l    $0fffffc0
  731.     dc.l    $0fffffc0
  732.     dc.l    $0fffffc0
  733.     dc.l    $0fffffc0
  734.     dc.l    $0fffffc0
  735.     dc.l    $0fffffc0
  736.     dc.l    $0fffffc0
  737.     dc.l    $0fffffc0
  738.     dc.l    $07ffffc0
  739.     dc.l    $07ffffc0
  740.     dc.l    $03ffffc0
  741.     dc.l    $03ffffc0
  742.     dc.l    $01ffffc0
  743.     dc.l    $01ffffc0
  744.     dc.l    $00ffffc0
  745.     dc.l    $00ffffc0
  746.     dc.l    $007fffc0
  747.     dc.l    $007fffc0
  748.     dc.l    $003fffc0
  749.     dc.l    $003fffc0
  750.     dc.l    $001fffc0
  751.     dc.l    $001fffc0
  752.     dc.l    $00000000
  753.     dc.l    $00000000
  754.     dc.l    $00000000
  755.     dc.l    $00000000
  756.     dc.l    $00000000
  757.     dc.l    $00000000
  758.     dc.l    $00000000
  759.     dc.l    $00000000
  760.     dc.l    $00000000
  761.     dc.l    $00000000
  762.  
  763. ;****************************************************************************
  764.  
  765.     SECTION    bitplane,BSS_C
  766.  
  767. ; Questo e` il buffer nel quale salviamo di volta in volta lo sfondo.
  768. ; ha le stesse dimensioni di una blittata: altezza 30, larghezza 3 words
  769. ; 2 bitplanes
  770.  
  771. Buffer:
  772.     ds.w    30*3*2
  773.  
  774. BITPLANE:
  775.  
  776. ; 2 planes 
  777.     ds.b    40*256
  778.     ds.b    40*256
  779.  
  780. ;****************************************************************************
  781.  
  782.     end
  783.  
  784. In questo esempio mostriamo la versione rawblit della routine universale
  785. per disegnare i bob. Il programma e` identico a lezione10m1.s solo
  786. che viene impiegato uno schermo rawblit e di conseguenza, come sapete, cambiano
  787. un po' le formule per il calcolo di valori che vanno scritti nei registri.
  788. Anche se in questo caso non utilizziamo un'immagine di sfondo, le routine
  789. effettuano comunque il salvataggio e il ripristino. Potete disegnare
  790. voi un'immagine di sfondo (in versione rawblit) e mettercela senza modificare
  791. il sorgente!
  792.  
  793.