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

  1.  
  2. ; Lezione15f5.s        Routine UniMuoviSprite fixata per fare lo scroll AGA
  3. ;            orizzontale a step di 1/4 di pixel. Con una tabella
  4. ;            rendiamo piu' evidente la maggiore fluidita'.
  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 tutti gli sprite allo sprite nullo
  30.  
  31.     MOVE.L    #SpriteNullo,d0        ; indirizzo dello sprite in d0
  32.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  33.     MOVEQ    #8-1,d1            ; tutti gli 8 sprite
  34. NulLoop:
  35.     move.w    d0,6(a1)
  36.     swap    d0
  37.     move.w    d0,2(a1)
  38.     swap    d0
  39.     addq.w    #8,a1
  40.     dbra    d1,NulLoop
  41.  
  42. ;    Puntiamo lo sprite
  43.  
  44.     MOVE.L    #MIOSPRITE64,d0        ; indirizzo dello sprite in d0
  45.     LEA    SpritePointers,a1    ; Puntatori in copperlist
  46.     move.w    d0,6(a1)
  47.     swap    d0
  48.     move.w    d0,2(a1)
  49.  
  50.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  51.     move.l    #CopList,$80(a5)    ; Puntiamo la nostra COP
  52.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  53.     move.w    #0,$1fc(a5)        ; Fmode azzerato, burst normale
  54.     move.w    #$c00,$106(a5)        ; BPLCON3 resettato
  55.     move.w    #$11,$10c(a5)        ; BPLCON4 resettato
  56.  
  57. mouse:
  58.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  59.     MOVE.L    #$12000,d2    ; linea da aspettare = $120
  60. Waity1:
  61.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  62.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  63.     CMPI.L    D2,D0        ; aspetta la linea $120
  64.     BNE.S    Waity1
  65.  
  66.     bsr.s    MuoviSpriteX    ; Legge dalla tabella e muove lo sprite
  67.  
  68.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  69.     MOVE.L    #$12000,d2    ; linea da aspettare = $120
  70. Aspetta:
  71.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  72.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  73.     CMPI.L    D2,D0        ; aspetta la linea $120
  74.     BEQ.S    Aspetta
  75.  
  76.     btst.b    #2,$dff016    ; Tasto destro premuto?
  77.     bne.s    NonScambiareRes    ; Se no non cambiare risuluzione allo sprite
  78.  
  79.     bchg.b    #7,BplCon3    ; Se si, cambia da LowRes a Hires o viceversa.
  80.  
  81. NonScambiareRes:
  82.     btst.b    #6,$bfe001    ; mouse premuto?
  83.     bne.s    mouse
  84.     rts
  85.  
  86. MuoviSpriteX:
  87.     ADDQ.L    #2,TABXPOINT     ; Fai puntare alla word successiva
  88.     MOVE.L    TABXPOINT(PC),A0 ; indirizzo contenuto in long TABXPOINT
  89.                  ; copiato in a0
  90.     CMP.L    #FINETABX-2,A0  ; Siamo all'ultima word della TAB?
  91.     BNE.S    NOBSTARTX    ; non ancora? allora continua
  92.     MOVE.L    #TABX-2,TABXPOINT ; Riparti a puntare dalla prima word-2
  93. NOBSTARTX:
  94.     moveq    #0,d1        ; azzeriamo d0
  95.     MOVE.w    (A0),d1        ; poniamo il valore della tabella in d0
  96. ;    add.w    #128*4,D1    ; 128*4 - per centrare lo sprite.
  97.     moveq    #100,d0        ; Posizione Y
  98.     moveq    #52,d2        ; altezza sprite
  99.     lea    miosprite64,a1    ; indirizzo sprite
  100.     bsr.w    UniMuoviSprite64F ; chiama la routine universale
  101.     rts
  102.  
  103. TABXPOINT:
  104.     dc.l    TABX-2        ; NOTA: i valori della tabella qua sono word,
  105.  
  106. ; Ecco come ottenere la tabella:
  107.  
  108. ;                        ___1280
  109. ; DEST> tabx                       /   \ 640 (1280/2)
  110. ; BEG> 0              \___/     0
  111. ; END> 360
  112. ; AMOUNT> 150*4
  113. ; AMPLITUDE> (1280-64*4)/2 ; ampiezza sia sopra zero che sotto zero, allora
  114.              ; bisogna che faccia meta' sopra zero e meta' sotto,
  115.              ; ossia dividiamo per 2 l'AMPIEZZA
  116. ; YOFFSET> (1280-64*4)/2 ; e spostiamo tutto sopra
  117. ; SIZE (B/W/L)> w
  118. ; MULTIPLIER> 1
  119.  
  120. TABX:
  121.     DC.W    $0203,$0208,$020D,$0213,$0218,$021D,$0223,$0228,$022E,$0233
  122.     DC.W    $0238,$023E,$0243,$0248,$024D,$0253,$0258,$025D,$0263,$0268
  123.     DC.W    $026D,$0272,$0278,$027D,$0282,$0287,$028C,$0291,$0297,$029C
  124.     DC.W    $02A1,$02A6,$02AB,$02B0,$02B5,$02BA,$02BF,$02C4,$02C9,$02CE
  125.     DC.W    $02D3,$02D8,$02DC,$02E1,$02E6,$02EB,$02F0,$02F4,$02F9,$02FE
  126.     DC.W    $0302,$0307,$030C,$0310,$0315,$0319,$031E,$0322,$0326,$032B
  127.     DC.W    $032F,$0333,$0338,$033C,$0340,$0344,$0348,$034D,$0351,$0355
  128.     DC.W    $0359,$035D,$0360,$0364,$0368,$036C,$0370,$0373,$0377,$037B
  129.     DC.W    $037E,$0382,$0385,$0389,$038C,$0390,$0393,$0396,$0399,$039D
  130.     DC.W    $03A0,$03A3,$03A6,$03A9,$03AC,$03AF,$03B2,$03B5,$03B7,$03BA
  131.     DC.W    $03BD,$03BF,$03C2,$03C4,$03C7,$03C9,$03CC,$03CE,$03D0,$03D3
  132.     DC.W    $03D5,$03D7,$03D9,$03DB,$03DD,$03DF,$03E1,$03E3,$03E4,$03E6
  133.     DC.W    $03E8,$03E9,$03EB,$03EC,$03EE,$03EF,$03F1,$03F2,$03F3,$03F4
  134.     DC.W    $03F5,$03F6,$03F7,$03F8,$03F9,$03FA,$03FB,$03FC,$03FC,$03FD
  135.     DC.W    $03FD,$03FE,$03FE,$03FF,$03FF,$03FF,$0400,$0400,$0400,$0400
  136.     DC.W    $0400,$0400,$0400,$0400,$03FF,$03FF,$03FF,$03FE,$03FE,$03FD
  137.     DC.W    $03FD,$03FC,$03FC,$03FB,$03FA,$03F9,$03F8,$03F7,$03F6,$03F5
  138.     DC.W    $03F4,$03F3,$03F2,$03F1,$03EF,$03EE,$03EC,$03EB,$03E9,$03E8
  139.     DC.W    $03E6,$03E4,$03E3,$03E1,$03DF,$03DD,$03DB,$03D9,$03D7,$03D5
  140.     DC.W    $03D3,$03D0,$03CE,$03CC,$03C9,$03C7,$03C4,$03C2,$03BF,$03BD
  141.     DC.W    $03BA,$03B7,$03B5,$03B2,$03AF,$03AC,$03A9,$03A6,$03A3,$03A0
  142.     DC.W    $039D,$0399,$0396,$0393,$0390,$038C,$0389,$0385,$0382,$037E
  143.     DC.W    $037B,$0377,$0373,$0370,$036C,$0368,$0364,$0360,$035D,$0359
  144.     DC.W    $0355,$0351,$034D,$0348,$0344,$0340,$033C,$0338,$0333,$032F
  145.     DC.W    $032B,$0326,$0322,$031E,$0319,$0315,$0310,$030C,$0307,$0302
  146.     DC.W    $02FE,$02F9,$02F4,$02F0,$02EB,$02E6,$02E1,$02DC,$02D8,$02D3
  147.     DC.W    $02CE,$02C9,$02C4,$02BF,$02BA,$02B5,$02B0,$02AB,$02A6,$02A1
  148.     DC.W    $029C,$0297,$0291,$028C,$0287,$0282,$027D,$0278,$0272,$026D
  149.     DC.W    $0268,$0263,$025D,$0258,$0253,$024D,$0248,$0243,$023E,$0238
  150.     DC.W    $0233,$022E,$0228,$0223,$021D,$0218,$0213,$020D,$0208,$0203
  151.     DC.W    $01FD,$01F8,$01F3,$01ED,$01E8,$01E3,$01DD,$01D8,$01D2,$01CD
  152.     DC.W    $01C8,$01C2,$01BD,$01B8,$01B3,$01AD,$01A8,$01A3,$019D,$0198
  153.     DC.W    $0193,$018E,$0188,$0183,$017E,$0179,$0174,$016F,$0169,$0164
  154.     DC.W    $015F,$015A,$0155,$0150,$014B,$0146,$0141,$013C,$0137,$0132
  155.     DC.W    $012D,$0128,$0124,$011F,$011A,$0115,$0110,$010C,$0107,$0102
  156.     DC.W    $00FE,$00F9,$00F4,$00F0,$00EB,$00E7,$00E2,$00DE,$00DA,$00D5
  157.     DC.W    $00D1,$00CD,$00C8,$00C4,$00C0,$00BC,$00B8,$00B3,$00AF,$00AB
  158.     DC.W    $00A7,$00A3,$00A0,$009C,$0098,$0094,$0090,$008D,$0089,$0085
  159.     DC.W    $0082,$007E,$007B,$0077,$0074,$0070,$006D,$006A,$0067,$0063
  160.     DC.W    $0060,$005D,$005A,$0057,$0054,$0051,$004E,$004B,$0049,$0046
  161.     DC.W    $0043,$0041,$003E,$003C,$0039,$0037,$0034,$0032,$0030,$002D
  162.     DC.W    $002B,$0029,$0027,$0025,$0023,$0021,$001F,$001D,$001C,$001A
  163.     DC.W    $0018,$0017,$0015,$0014,$0012,$0011,$000F,$000E,$000D,$000C
  164.     DC.W    $000B,$000A,$0009,$0008,$0007,$0006,$0005,$0004,$0004,$0003
  165.     DC.W    $0003,$0002,$0002,$0001,$0001,$0001,$0000,$0000,$0000,$0000
  166.     DC.W    $0000,$0000,$0000,$0000,$0001,$0001,$0001,$0002,$0002,$0003
  167.     DC.W    $0003,$0004,$0004,$0005,$0006,$0007,$0008,$0009,$000A,$000B
  168.     DC.W    $000C,$000D,$000E,$000F,$0011,$0012,$0014,$0015,$0017,$0018
  169.     DC.W    $001A,$001C,$001D,$001F,$0021,$0023,$0025,$0027,$0029,$002B
  170.     DC.W    $002D,$0030,$0032,$0034,$0037,$0039,$003C,$003E,$0041,$0043
  171.     DC.W    $0046,$0049,$004B,$004E,$0051,$0054,$0057,$005A,$005D,$0060
  172.     DC.W    $0063,$0067,$006A,$006D,$0070,$0074,$0077,$007B,$007E,$0082
  173.     DC.W    $0085,$0089,$008D,$0090,$0094,$0098,$009C,$00A0,$00A3,$00A7
  174.     DC.W    $00AB,$00AF,$00B3,$00B8,$00BC,$00C0,$00C4,$00C8,$00CD,$00D1
  175.     DC.W    $00D5,$00DA,$00DE,$00E2,$00E7,$00EB,$00F0,$00F4,$00F9,$00FE
  176.     DC.W    $0102,$0107,$010C,$0110,$0115,$011A,$011F,$0124,$0128,$012D
  177.     DC.W    $0132,$0137,$013C,$0141,$0146,$014B,$0150,$0155,$015A,$015F
  178.     DC.W    $0164,$0169,$016F,$0174,$0179,$017E,$0183,$0188,$018E,$0193
  179.     DC.W    $0198,$019D,$01A3,$01A8,$01AD,$01B3,$01B8,$01BD,$01C2,$01C8
  180.     DC.W    $01CD,$01D2,$01D8,$01DD,$01E3,$01E8,$01ED,$01F3,$01F8,$01FD
  181. FINETABX:
  182.  
  183.  
  184. ; Routine universale di posizionamento degli sprite larghi 64 pixel, con
  185. ; posizione X da 0 a 1280, che usa il nuovo scroll AGA ad 1/4 di pixel
  186.  
  187. ;
  188. ;    Parametri in entrata di UniMuoviSprite64F:
  189. ;
  190. ;    a1 = Indirizzo dello sprite
  191. ;    d0 = posizione verticale Y dello sprite sullo schermo (0-1280)
  192. ;    d1 = posizione orizzontale X dello sprite sullo schermo (0-320)
  193. ;    d2 = altezza dello sprite
  194. ;
  195.  
  196. UniMuoviSprite64F:
  197. ; posizionamento verticale
  198.     ADD.W    #$2c,d0        ; aggiungi l'offset dell'inizio dello schermo
  199.  
  200. ; a1 contiene l'indirizzo dello sprite
  201.     MOVE.b    d0,(a1)        ; copia il byte in VSTART
  202.     btst.l    #8,d0
  203.     beq.s    NonVSTARTSET
  204.     bset.b    #2,3+4+2(a1)    ; Setta il bit 8 di VSTART (numero > $FF)
  205.     bra.s    ToVSTOP
  206. NonVSTARTSET:
  207.     bclr.b    #2,3+4+2(a1)    ; Azzera il bit 8 di VSTART (numero < $FF)
  208. ToVSTOP:
  209.     ADD.w    D2,D0        ; Aggiungi l'altezza dello sprite per
  210.                 ; determinare la posizione finale (VSTOP)
  211.     move.b    d0,2+4+2(a1)    ; Muovi il valore giusto in VSTOP
  212.     btst.l    #8,d0
  213.     beq.s    NonVSTOPSET
  214.     bset.b    #1,3+4+2(a1)    ; Setta il bit 8 di VSTOP (numero > $FF)
  215.     bra.w    VstopFIN
  216. NonVSTOPSET:
  217.     bclr.b    #1,3+4+2(a1)    ; Azzera il bit 8 di VSTOP (numero < $FF)
  218. VstopFIN:
  219.  
  220. ; posizionamento orizzontale - qua ci sono le modifiche!!!
  221.  
  222.     add.w    #128*4,D1        ; 128*4 - per centrare lo sprite.
  223.     btst.l    #0,D1        ; bit basso 0 della coordinata X azzerato?
  224.     beq.s    BitBassoZERO
  225.     bset.b    #3,3+4+2(a1)    ; SH0 - Settiamo il bit piu' basso di HSTART
  226.     bra.w    PlaceCoords1
  227.  
  228. BitBassoZERO:
  229.     bclr.b    #3,3+4+2(a1)    ; Azzeriamo il bit basso di HSTART
  230. PlaceCoords1:
  231.     btst.l    #1,D1        ; bit basso 1 della coordinata X azzerato?
  232.     beq.s    BitBassoZERO1
  233.     bset.b    #4,3+4+2(a1)    ; SH1 - Settiamo il bit basso di HSTART
  234.     bra.w    PlaceCoords2
  235.  
  236. BitBassoZERO1:
  237.     bclr.b    #4,3+4+2(a1)    ; SH1 - Azzeriamo il bit basso di HSTART
  238. PlaceCoords2:
  239.     btst.l    #2,D1        ; bit basso 2 della coordinata X azzerato?
  240.     beq.s    BitBassoZERO2
  241.     bset.b    #0,3+4+2(a1)    ; SH2 - Settiamo il bit basso di HSTART
  242.     bra.w    PlaceCoords3
  243.  
  244. BitBassoZERO2:
  245.     bclr.b    #0,3+4+2(a1)    ; SH2 - Azzeriamo il bit basso di HSTART
  246. PlaceCoords3:
  247.     lsr.w    #3,D1        ; SHIFTIAMO, ossia spostiamo di 1 bit a destra
  248.                 ; il valore di HSTART, per "trasformarlo" nel
  249.                 ; valore fa porre nel byte HSTART, senza cioe'
  250.                 ; i 3 bit bassi.
  251.     move.b    D1,1(a1)    ; Poniamo il valore XX nel byte HSTART
  252.     rts
  253.  
  254. ;*****************************************************************************
  255. ;*                COPPERLIST                     *
  256. ;*****************************************************************************
  257.  
  258.     CNOP    0,8    ; Allineo a 64 bit
  259.  
  260.     section    coppera,data_C
  261.  
  262. COPLIST:
  263. SpritePointers:
  264.     dc.w    $120,0,$122,0,$124,0,$126,0,$128,0 ; SPRITE
  265.     dc.w    $12a,0,$12c,0,$12e,0,$130,0,$132,0
  266.     dc.w    $134,0,$136,0,$138,0,$13a,0,$13c,0
  267.     dc.w    $13e,0
  268.  
  269.     dc.w    $8E,$2c81    ; DiwStrt
  270.     dc.w    $90,$2cc1    ; DiwStop
  271.  
  272.     dc.w    $92,$0038    ; DdfStart
  273.     dc.w    $94,$00d0    ; DdfStop
  274.     dc.w    $102,0        ; BplCon1
  275.     dc.w    $104,0        ; BplCon2
  276.     dc.w    $108,-8        ; Bpl1Mod (burst 64bit, modulo=modulo-8)
  277.     dc.w    $10a,-8        ; Bpl2Mod (come sopra)
  278.  
  279.             ; 5432109876543210
  280.     dc.w    $100,%0001001000000001    ; 1 bitplane LORES 320x256.
  281.  
  282.     dc.w    $1fc,%1111    ; Burst mode a 64 bit, sprite larghi 64 pixel
  283.  
  284.  
  285. BPLPOINTERS:
  286.     dc.w $e0,0,$e2,0    ; primo     bitplane
  287.     dc.w $e4,0,$e6,0    ; secondo       "
  288.     dc.w $e8,0,$ea,0    ; terzo           "
  289.     dc.w $ec,0,$ee,0    ; quarto       "
  290.     dc.w $f0,0,$f2,0    ; quinto       "
  291.     dc.w $f4,0,$f6,0    ; sesto           "
  292.     dc.w $f8,0,$fA,0    ; settimo       "
  293.     dc.w $fC,0,$fE,0    ; ottavo       "
  294.  
  295. ; Da notare che i colori dello sprite sono a 24 bit, anche se sono solo 3.
  296.  
  297.     DC.W    $106,$c00    ; SELEZIONA PALETTE 0 (0-31), NIBBLE ALTI
  298. COLP0:
  299.     dc.w    $180,$000    ; color0    ; sfondo nero
  300.     dc.w    $182,$123    ; color1    ; colore 1 del bitplane, che
  301.                         ; in questo caso e' vuoto,
  302.                         ; per cui non compare.
  303.  
  304.     dc.w    $1A2,$F00    ; color17, ossia COLOR1 dello sprite0 - ROSSO
  305.     dc.w    $1A4,$0F0    ; color18, ossia COLOR2 dello sprite0 - VERDE
  306.     dc.w    $1A6,$FF0    ; color19, ossia COLOR3 dello sprite0 - GIALLO
  307.  
  308.  
  309.     DC.W    $106,$e00    ; SELEZIONA PALETTE 0 (0-31), NIBBLE BASSI
  310. COLP0B:
  311.     dc.w    $180,$000    ; color0    ; sfondo nero
  312.     dc.w    $182,$000    ; color1    ; colore 1 del bitplane, che
  313.                         ; in questo caso e' vuoto,
  314.                         ; per cui non compare.
  315.  
  316.     dc.w    $1A2,$462    ; color17, nibble bassi
  317.     dc.w    $1A4,$2e4    ; color18, nibble bassi
  318.     dc.w    $1A6,$672    ; color19, nibble bassi
  319.  
  320.     dc.w    $106    ; BPLCON3
  321.     dc.b    0
  322. BplCon3:
  323.            ; 76543210
  324.     dc.b    %00000000    ; bit 7: sprites hires o lowres. Se si
  325.                 ; settano sia il bit 7 che il bit 6 lo sprite
  326.                 ; e' in superhires (1280x256), ma viene troppo
  327.                 ; "stretto", credo sia inutile, basta hires!
  328.  
  329.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  330.  
  331.  
  332. ;*****************************************************************************
  333. ;************ Ecco gli sprite: OVVIAMENTE devono essere in CHIP RAM! *********
  334. ;*****************************************************************************
  335.  
  336.     cnop    0,8
  337.  
  338. SpriteNullo:            ; Sprite nullo da puntare in copperlist
  339.     dc.l    0,0,0,0        ; negli eventuali puntatori inutilizzati
  340.  
  341.  
  342.     cnop    0,8
  343.  
  344. MIOSPRITE64:        ; lunghezza 13*4 linee
  345. VSTART:
  346.     dc.b $50    ; Posizione verticale di inizio sprite (da $2c a $f2)
  347. HSTART:
  348.     dc.b $90    ; Posizione orizzontale di inizio sprite (da $40 a $d8)
  349.     dc.w 0        ; Word + longword aggiunte per raggiungere la doppia
  350.     dc.l 0        ; longword nello sprite largo 64 pixel (2 long!)
  351. VSTOP:
  352.     dc.b $5d    ; $50+13=$5d    ; posizione verticale di fine sprite
  353. VHBITS:
  354.     dc.b $00    ; bit
  355.     dc.w 0        ; Word + longword aggiunte per raggiungere la doppia
  356.     dc.l 0        ; longword nello sprite largo 64 pixel (2 long!)
  357.  
  358.     dc.l    $00000000,$00000000,$00003000,$000c0000 ; Salvato con PicCon
  359.     dc.l    $00000000,$00000000,$00003800,$001c0000
  360.     dc.l    $00000000,$00000000,$00001c00,$00380000
  361.     dc.l    $00000000,$00000000,$00000e00,$00700000
  362.     dc.l    $00000000,$00000000,$00000700,$00e00000
  363.     dc.l    $00000000,$00000000,$00000380,$01c00000
  364.     dc.l    $00000000,$00000000,$000001c0,$03800000
  365.     dc.l    $00000000,$00000000,$000000e0,$07000000
  366.     dc.l    $00000000,$00000000,$00000070,$0e000000
  367.     dc.l    $00000000,$00000000,$00000038,$1c000000
  368.     dc.l    $00000000,$00000000,$00000038,$1c000000
  369.     dc.l    $00000000,$00000000,$0000001c,$38000000
  370.     dc.l    $0000000f,$f0000000,$000f001f,$f800f000
  371.     dc.l    $0000003f,$fc000000,$003f003f,$fc00fc00
  372.     dc.l    $0000007f,$fe000000,$007c007f,$fe003e00
  373.     dc.l    $000000ff,$ff000000,$00f800ff,$ff001f00
  374.     dc.l    $000001ff,$ff800000,$01f001ff,$ff800f80
  375.     dc.l    $000003ff,$ffc00000,$03e003ff,$ffc007c0
  376.     dc.l    $000007ff,$ffe00000,$07c007ff,$ffe003e0
  377.     dc.l    $00000fff,$fff00000,$0f800fff,$fff001f0
  378.     dc.l    $00001fff,$fff80000,$1f001c3f,$fc3800f8
  379.     dc.l    $00003fff,$fffc0000,$3e00381f,$f81c007c
  380.     dc.l    $00003fff,$fffc0000,$7c00300f,$f00c003e
  381.     dc.l    $00007fff,$fffe0000,$fc00700f,$f00e003f
  382.     dc.l    $00007f8f,$f1fe0000,$fffff00f,$f00fffff
  383.     dc.l    $00007f0f,$f0fe0000,$fffff00f,$f00fffff
  384.     dc.l    $00007f0f,$f0fe0000,$fffff80f,$f01fffff
  385.     dc.l    $00007f1f,$f8fe0000,$7ffffc1f,$f83ffffe
  386.     dc.l    $00003fff,$fffc0000,$00003fff,$fffc0000
  387.     dc.l    $00003fff,$fffc0000,$00003fff,$fffc0000
  388.     dc.l    $00001fff,$fff80000,$00007fff,$fffe0000
  389.     dc.l    $00001fff,$fff80000,$0000ffff,$ffff0000
  390.     dc.l    $00000fff,$fff00000,$0001ff80,$01ff8000
  391.     dc.l    $00000fff,$fff00000,$0003ffc0,$03ffc000
  392.     dc.l    $000007ff,$ffe00000,$0007ffe0,$07ffe000
  393.     dc.l    $000003ff,$ffc00000,$0007fff0,$0fffe000
  394.     dc.l    $000001ff,$ff800000,$000ff1ff,$ff8ff000
  395.     dc.l    $000001ff,$ff800000,$001fe1ff,$ff87f800
  396.     dc.l    $000000ff,$ff000000,$003fc0ff,$ff03fc00
  397.     dc.l    $0000007f,$fe000000,$003fc07f,$fe03fc00
  398.     dc.l    $0000003f,$fc000000,$007f803f,$fc01fe00
  399.     dc.l    $0000001f,$f8000000,$007f801f,$f801fe00
  400.     dc.l    $0000000f,$f0000000,$00ff000f,$f000ff00
  401.     dc.l    $00000003,$c0000000,$00ff0003,$c000ff00
  402.     dc.l    $00000000,$00000000,$03fe0000,$00007fc0
  403.     dc.l    $00000000,$00000000,$0ffe0000,$00007ff0
  404.     dc.l    $00000000,$00000000,$3ffe0000,$00007ffc
  405.     dc.l    $00000000,$00000000,$7fff0000,$0000fffe
  406.     dc.l    $00000000,$00000000,$ffff0000,$0000ffff
  407.     dc.l    $00000000,$00000000,$ffff8000,$0001ffff
  408.     dc.l    $00000000,$00000000,$ffff8000,$0001ffff
  409.     dc.l    $00000000,$00000000,$ffff8000,$0001ffff
  410.  
  411.     dc.l    0,0,0,0        ; Fine dello sprite (2 doppie longword).
  412.  
  413.     cnop    0,8
  414.  
  415.     SECTION    PLANEVUOTO,BSS_C    ; Il bitplane azzerato che usiamo,
  416.                     ; perche' per vedere gli sprite
  417.                     ; e' necessario che ci siano bitplanes
  418.                     ; abilitati
  419. BITPLANE:
  420.     ds.b    40*256        ; bitplane azzerato lowres
  421.  
  422.     end
  423.  
  424. Da notare che uno scroll del genere non e' possibile su PC MSDOS, e neanche
  425. sul super nintendo, per non parlare del sega megadrive...
  426.  
  427.