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

  1.  
  2. ;  Lezione11l1.s - cambiamo ad ogni linea il color0 e il bplcon1 ($dff102)
  3.  
  4.     SECTION    coplanes,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    ; solo copper e bitplane DMA
  14.  
  15. WaitDisk    EQU    30    ; 50-150 al salvataggio (secondo i casi)
  16.  
  17. scr_bytes    = 40    ; Numero di bytes per ogni linea orizzontale.
  18.             ; Da questa si calcola la larghezza dello schermo,
  19.             ; moltiplicando i bytes per 8: schermo norm. 320/8=40
  20.             ; Es. per uno schermo largo 336 pixel, 336/8=42
  21.             ; larghezze esempio:
  22.             ; 264 pixel = 33 / 272 pixel = 34 / 280 pixel = 35
  23.             ; 360 pixel = 45 / 368 pixel = 46 / 376 pixel = 47
  24.             ; ... 640 pixel = 80 / 648 pixel = 81 ...
  25.  
  26. scr_h        = 256    ; Altezza dello schermo in linee
  27. scr_x        = $81    ; Inizio schermo, posizione XX (normale $xx81) (129)
  28. scr_y        = $2c    ; Inizio schermo, posizione YY (normale $2cxx) (44)
  29. scr_res        = 1    ; 2 = HighRes (640*xxx) / 1 = LowRes (320*xxx)
  30. scr_lace    = 0    ; 0 = non interlace (xxx*256) / 1 = interlace (xxx*512)
  31. ham        = 0    ; 0 = non ham / 1 = ham
  32. scr_bpl        = 1    ; Numero Bitplanes
  33.  
  34. ; parametri calcolati automaticamente
  35.  
  36. scr_w        = scr_bytes*8        ; larghezza dello schermo
  37. scr_size    = scr_bytes*scr_h    ; dimensione in bytes dello schermo
  38. BPLC0    = ((scr_res&2)<<14)+(scr_bpl<<12)+$200+(scr_lace<<2)+(ham<<11)
  39. DIWS    = (scr_y<<8)+scr_x
  40. DIWSt    = ((scr_y+scr_h/(scr_lace+1))&255)<<8+(scr_x+scr_w/scr_res)&255
  41. DDFS    = (scr_x-(16/scr_res+1))/2
  42. DDFSt    = DDFS+(8/scr_res)*(scr_bytes/2-scr_res)
  43.  
  44. START:
  45. ;     PUNTIAMO IL NOSTRO BITPLANE
  46.  
  47.     MOVE.L    #BITPLANE,d0
  48.     LEA    BPLPOINTER,A1
  49.     move.w    d0,6(a1)
  50.     swap    d0
  51.     move.w    d0,2(a1)
  52.  
  53.     lea    $dff000,a5
  54.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  55.                     ; e sprites.
  56.  
  57.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  58.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  59.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  60.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  61.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  62.  
  63.     move.w    #11,ContaNumLoop1
  64.     move.w    #2,Contatore1
  65.     clr.w    Contatore2
  66.  
  67. mouse:
  68.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  69.     MOVE.L    #$12c00,d2    ; linea da aspettare = $12c
  70. Waity1:
  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 $12c
  74.     BNE.S    Waity1
  75. Aspetta:
  76.     MOVE.L    4(A5),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  77.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  78.     CMPI.L    D2,D0        ; aspetta la linea $12c
  79.     BEQ.S    Aspetta
  80.  
  81.     btst.b    #2,$dff016
  82.     beq.s    NoEff
  83.     bsr.s    Mainroutine    ; rulla i colori e rolla il bplcon1
  84. NoEff:
  85.     bsr.w    PrintCarattere    ; Stampa un carattere alla volta
  86.  
  87.     btst    #6,$bfe001    ; mouse premuto?
  88.     bne.s    mouse
  89.     rts
  90.  
  91. *****************************************************************************
  92. ; Questa routine non e' per niente ottimizzata, si potrebbe fare una
  93. ; routine che crea la copperlist, da chiamare all'inizio, poi un'altra
  94. ; che cambia solo i valori del color1 e del bplcon1.
  95. ; Gia' che era lenta, per peggiorarla e' stato usato un sistema che
  96. ; comunque puo' servire in certi casi: per "scorrere" le tabelle, viene
  97. ; usato un buffer lungo quanto la tabella in cui viene copiata la tabella
  98. ; stessa ruotata, poi da questa tabella i valori sono ricopiati nella
  99. ; tabella di partenza. Ma non si faceva prima senza il buffer? Si!
  100. ; Ma pensate ad una routine con tante tabelle, che possono tenere i valori
  101. ; nelle varie fasi della rotazione. In questo caso potermmo "precalcolarci"
  102. ; in tante tabelle i valori ruotati in ogni fase... ma forse si otterrebbe
  103. ; cosi' poca ottimizzazione che non varrebbe la pena... insomma date un
  104. ; occhiata alla routine, e' "strana" e si ingarbuglia per niente, proprio
  105. ; per mostrare tecniche "alternative"... (esagerato.. fa schifo e basta!).
  106. *****************************************************************************
  107.  
  108. ;        ______
  109. ;      .//_____\,
  110. ;       \\ ¦.¦ /
  111. ;       _\\_-_/_. dA!
  112. ;      ( /  :  \ \
  113. ;     / /   :   \ \
  114. ;     \,_,_,:,_,_\/`).
  115. ;       |   |   | (//\\
  116. ;    .-./,,_|__,,\.-. \\
  117. ;    `------`-------'  `
  118.  
  119. MainRoutine:
  120.     move.l    a5,-(sp)    ; salviamo a5
  121.     subq.w    #1,Contatore1    ; Segna questa esecuzione
  122.     tst.w    Contatore1    ; 2 frame passati?
  123.     bne.w    SaltaRull    ; Se non ancora non rullare
  124.     move.w    #2,Contatore1    ; Riparti, ad aspettare 2 frames
  125.     cmp.w    #15,Contatore2    ; Passati 15 frames?
  126.     beq.s    Rulla2
  127.     addq.w    #1,ContaNumLoop1
  128.     cmp.w    #30,ContaNumLoop1 ; siamo a 30 loops da fare?
  129.     bne.s    VaiARullare      ; se non ancora ok
  130.     move.w    #15,Contatore2      ; Altrimenti Contatore2=15
  131.     bra.s    VaiARullare
  132. Rulla2:
  133.     subq.w    #1,ContaNumLoop1    ; subbiamo
  134.     cmp.w    #3,ContaNumLoop1    ; siamo a 3?
  135.     bne.s    VaiARullare        ; Se non ancora RiRulla
  136.     clr.w    Contatore2        ; Altrimenti azzera contatore2
  137. VaiARullare:
  138.     lea    coltab(PC),a0    ; Tabella con i colori
  139.     lea    TabBuf(PC),a1
  140.     move.w    (a0)+,d0    ; Primo colore in d0
  141. CopiaColtabLoop:
  142.     move.w    (a0)+,d1    ; Prossimo colore in d1
  143.     cmp.w    #-2,d1    ; fine tabella?
  144.     beq.s    FiniTabCol    ; Se si, il lop e' finito
  145.     move.w    d1,(a1)+    ; se no, metti questo colore nella TabBuf
  146.     bra.s    CopiaColtabLoop
  147.  
  148. FiniTabCol:
  149.     move.w    d0,(a1)+    ; Metti il primo colore come ultimo
  150.     move.w    #-2,(a1)+    ; E poni il segno di fine tabella
  151.     lea    coltab(PC),a0    ; Tab colori
  152.     lea    TabBuf(PC),a1    ; Buffer tab
  153. RicopiaInColTabLoop:
  154.     move.w    (a1)+,d0    ; copia colore da TabBuf
  155.     move.w    d0,(a0)+    ; Mettilo in coltab
  156.     cmp.w    #-2,d0        ; Fine?
  157.     bne.s    RicopiaInColTabLoop
  158. SaltaRull:
  159.     lea    BplCon1Tab(PC),a0 ; Tab con valori per bplcon1
  160.     lea    TabBuf(PC),a1
  161.     move.w    (a0)+,d0    ; Privo val. della tab salvato in d0
  162. RullaLoop:
  163.     move.w    (a0)+,d1    ; Prossimo val. tab Bplcon1
  164.     cmp.w    #-2,d1        ; Fine tabella?
  165.     beq.s    rullFinito    ; Se si salta avanti
  166.     move.w    d1,(a1)+    ; Copia da BplCon1Tab a TabBuf
  167.     bra.s    RullaLoop
  168. rullFinito:
  169.     move.w    d0,(a1)+    ; Metti il primo valore come ultimo
  170.     move.w    #-2,(a1)+      ; metti flag di fine tabella
  171.     lea    BplCon1Tab(PC),a0 ; Tab valori bplcon1
  172.     lea    TabBuf(PC),a1      ; buffer
  173. RicopiaCon1:
  174.     move.w    (a1)+,d0    ; copia da tabbuf
  175.     move.w    d0,(a0)+    ; a bplcon1tab
  176.     cmp.w    #-2,d0        ; siamo alla fine?
  177.     bne.s    RicopiaCon1    ; se non ancora, ricopia!
  178. delayed:
  179.     lea    CopperEffect,a0
  180.  
  181. ; primo loop, che fa la parte ntsc (prime $ff linee)
  182.  
  183.     move.w    #$2007,d0    ; posizione wait start YY=$22
  184.     move.w    #$4007,d2    ; posizione wait step YY=$22
  185.     moveq    #7-1,d4        ; Numero di loops da $20 l'uno.
  186.                 ; $20*7=$e0, + $20 iniziale = $100, ossia
  187.                 ; tutta la zona NTSC
  188.     lea    FineTabCol(PC),a1
  189.     lea    BplCon1Tab(PC),a2 ; tab valori per bplcon1
  190. loop:
  191.     move.w    ContaNumLoop1(PC),d3
  192. main:
  193.     move.w    (a2)+,d5    ; Prissimo valore del bplcon1
  194.     cmp.w    #-2,d5        ; Fine tabella?
  195.     bne.s    initd        ; Se no, continua
  196.     lea    BplCon1Tab(PC),a2 ; Altrimenti, riparti da capo
  197.     move.w    (a2)+,d5    ; valore del bplcon1
  198. initd:
  199.     move.w    -(a1),d1    ; leggi il colore e vai indietro
  200.     cmp.w    #-2,d1        ; Fine tabella?
  201.     bne.s    initc        ; Se non ancora, metti il colore & bplcon1
  202.     lea    FineTabCol(PC),a1 ; Altrimenti riparti dalla fine della tabcol
  203.     move.w    -(a1),d1    ; leggi il colore e vai indietro
  204. initc:
  205.     move.w    d0,(a0)+    ; YYXX del wait
  206.     move.w    #$fffe,(a0)+    ; wait
  207.     move.w    #$0180,(a0)+    ; registro color0
  208.     move.w    d1,(a0)+    ; valore del color0
  209.     move.w    #$0102,(a0)+    ; bplcon1
  210.     move.w    d5,(a0)+    ; valore del bplcon1
  211.     add.w    #$0100,d0    ; fai waitare una linea sotto
  212.     dbra    d3,main
  213. second:
  214.     move.w    (a2)+,d5    ; Prossimo Bplcon1val
  215.     cmp.w    #-2,d5        ; Fine tabella?
  216.     bne.s    doned
  217.     lea    BplCon1Tab(PC),a2 ; riparti dall'inizio
  218.     move.w    (a2)+,d5    ; Prossimo valore Bplcon1
  219. doned:
  220.     move.w    (a1)+,d1    ; Prossimo colore
  221.     cmp.w    #-2,d1        ; Fine tabella?
  222.     bne.s    done
  223.     lea    coltab(PC),a1    ; riparti dall'inizio
  224.     move.w    (a1)+,d1    ; Prossimo colore in tab
  225. done:
  226.     move.w    d0,(a0)+    ; YYXX del wait
  227.     move.w    #$fffe,(a0)+    ; wait
  228.     move.w    #$0180,(a0)+    ; registro color0
  229.     move.w    d1,(a0)+    ; valore del color0
  230.     move.w    #$0102,(a0)+    ; registro bplcon1
  231.     move.w    d5,(a0)+    ; valore del reg. bplcon1
  232.     add.w    #$0100,d0    ; fai waitare una linea sotto
  233.     cmp.w    d2,d0        ; siamo alla fine del blocco da $20 linee?
  234.     bne.s    second
  235.     add.w    #$2000,d2    ; sposta il nuovo massimo $20 piu' in basso.
  236.     dbra    d4,loop
  237.     move.l    #$ffdffffe,(a0)+    ; Fine zona ntsc
  238.  
  239. ; Secondo loop, che fa la zona PAL, sotto la linea $FF
  240.  
  241.     move.w    #$0007,d0    ; Inizo wait, alla linea $00 (ossia 256)
  242.     move.w    #$2007,d2    ; Fine alla linea $20 (+$ff)
  243.     moveq    #2-1,d4        ; Numero loops
  244. loop2:
  245.     move.w    ContaNumLoop1(PC),d3
  246. main2:
  247.     move.w    -(a1),d1    ; colore precedente
  248.     cmp.w    #-2,d1        ; Fine tab?
  249.     bne.s    initc2
  250.     lea    FineTabCol(PC),a1 ; riparti dalla fine della tabCol
  251.     move.w    -(a1),d1    ; Colore precedente
  252. initc2:
  253.     move.w    d0,(a0)+    ; YYXX del wait
  254.     move.w    #$fffe,(a0)+    ; Wait
  255.     move.w    #$0180,(a0)+    ; registro color0
  256.     move.w    d1,(a0)+    ; valore del color0
  257.     add.w    #$0100,d0    ; fai waitare una linea sotto
  258.     dbra    d3,main2
  259. second2:
  260.     move.w    (a1)+,d1    ; Prossimo colore
  261.     cmp.w    #-2,d1        ; fine tab?
  262.     bne.s    done2
  263.     lea    coltab(PC),a1    ; Tabella colori -  riparti dall'inizio
  264.     move.w    (a1)+,d1    ; Prossimo colore in d1
  265. done2:
  266.     move.w    d0,(a0)+    ; coord YYXX del wait
  267.     move.w    #$fffe,(a0)+    ; seconda word del wait
  268.     move.w    #$0180,(a0)+    ; registro color0
  269.     move.w    d1,(a0)+    ; Valore del color0
  270.     add.w    #$0100,d0    ; Fai waitare una linea sotto
  271.     cmp.w    d2,d0        ; Siamo in fondo? ($20-$40-$60)
  272.     bne.s    second2        ; Se non ancora, insisti
  273.     add.w    #$2000,d2    ; Poni il massimo 20 piu' in basso
  274.     dbra    d4,loop2
  275.     move.l    (sp)+,a5    ; Ripristiniamo a5
  276.     rts
  277.  
  278. ContaNumLoop1:    dc.w    0
  279. Contatore1:    dc.w    0
  280. Contatore2:    dc.w    0
  281.  
  282.  
  283.     dc.w    -2    ; inizio tab
  284. coltab:
  285.     dc.w    $000,$000,$000,$000,$000,$000,$000,$000,$000,$000,$000
  286.     dc.w    $000,$001,$002,$003,$004,$005,$006,$007,$008,$009,$009
  287.     dc.w    $00a,$00a,$00b,$00b,$00b,$01c,$02c,$03c,$04c,$05d,$05d
  288.     dc.w    $06d,$06d,$07d,$07d,$07d,$08d,$08d,$08d,$09d,$09D,$09C
  289.     dc.w    $0aA,$0aA,$0a9,$0a8,$0a7,$0a6,$0a5,$0a4,$0a3,$0b2,$0b1
  290.     dc.w    $0b0,$1b0,$2b0,$3b0,$4b0,$5b0,$6b0,$7b0,$8b0,$9b0,$Ab0
  291.     dc.w    $Bb0,$Cb0,$Db0,$db0,$db0,$db0,$db0,$da0,$da0,$d90,$d90
  292.     dc.w    $d80,$d70,$d60,$d50,$d40,$d30,$d20,$d10,$d00,$d00,$D00
  293.     dc.w    $C00,$B00,$A00,$900,$800,$700,$600,$500,$400,$300,$200
  294.     dc.w    $100,$000,$000
  295. FineTabCol:
  296.     dc.w    -2    ; fine tab
  297.  
  298. ; Tabella dei valori per il bplcon1. Come notate si provoca un ondeggio.
  299.  
  300.     dc.w    -2    ; inizio tab
  301. BplCon1Tab:
  302.     dc.w    $11,$11,$11,$22,$22,$33,$44,$55,$55,$66,$66,$66,$077,$077
  303.     dc.w    $77,$77,$77,$77,$66,$66,$66,$55,$55,$44,$33,$33,$022,$022
  304.     dc.w    $22,$11,$11,$11,$11,$00,$00,$00,$00,$00,$00,$11,$011,$011
  305.     dc.w    $11,$11,$22,$22,$22,$22,$33,$33,$44,$44,$55,$55,$055,$055
  306.     dc.w    $66,$66,$66,$66,$66,$66,$77,$77,$77,$77,$77,$77,$077,$077
  307.     dc.w    $77,$77,$66,$66,$66,$66,$66,$66,$55,$55,$55,$55,$044,$044
  308.     dc.w    $33,$33,$33,$33,$22,$22,$22,$22,$22,$22,$11,$11,$011,$011
  309.     dc.w    -2    ; fine tab
  310.  
  311. ; In questo buffer vengono ricopiate le tabelle ruotate, che poi vengono
  312. ; ricopiate nelle tabelle stesse... un modo strano per scorrere, no?
  313.  
  314. TabBuf:
  315.     ds.w    128
  316.  
  317. *****************************************************************************
  318. ;            Routine di Print
  319. *****************************************************************************
  320.  
  321. PRINTcarattere:
  322.     movem.l    d2/a0/a2-a3,-(SP)
  323.     MOVE.L    PuntaTESTO(PC),A0 ; Indirizzo del testo da stampare in a0
  324.     MOVEQ    #0,D2        ; Pulisci d2
  325.     MOVE.B    (A0)+,D2    ; Prossimo carattere in d2
  326.     CMP.B    #$ff,d2        ; Segnale di fine testo? ($FF)
  327.     beq.s    FineTesto    ; Se si, esci senza stampare
  328.     TST.B    d2        ; Segnale di fine riga? ($00)
  329.     bne.s    NonFineRiga    ; Se no, non andare a capo
  330.  
  331.     ADD.L    #40*7,PuntaBITPLANE    ; ANDIAMO A CAPO
  332.     ADDQ.L    #1,PuntaTesto        ; primo carattere riga dopo
  333.                     ; (saltiamo lo ZERO)
  334.     move.b    (a0)+,d2        ; primo carattere della riga dopo
  335.                     ; (saltiamo lo ZERO)
  336.  
  337. NonFineRiga:
  338.     SUB.B    #$20,D2        ; TOGLI 32 AL VALORE ASCII DEL CARATTERE, IN
  339.                 ; MODO DA TRASFORMARE, AD ESEMPIO, QUELLO
  340.                 ; DELLO SPAZIO (che e' $20), in $00, quello
  341.                 ; DELL'ASTERISCO ($21), in $01...
  342.     LSL.W    #3,D2        ; MOLTIPLICA PER 8 IL NUMERO PRECEDENTE,
  343.                 ; essendo i caratteri alti 8 pixel
  344.     MOVE.L    D2,A2
  345.     ADD.L    #FONT,A2    ; TROVA IL CARATTERE DESIDERATO NEL FONT...
  346.  
  347.     MOVE.L    PuntaBITPLANE(PC),A3 ; Indir. del bitplane destinazione in a3
  348.  
  349.                 ; STAMPIAMO IL CARATTERE LINEA PER LINEA
  350.     MOVE.B    (A2)+,(A3)    ; stampa LA LINEA 1 del carattere
  351.     MOVE.B    (A2)+,40(A3)    ; stampa LA LINEA 2  " "
  352.     MOVE.B    (A2)+,40*2(A3)    ; stampa LA LINEA 3  " "
  353.     MOVE.B    (A2)+,40*3(A3)    ; stampa LA LINEA 4  " "
  354.     MOVE.B    (A2)+,40*4(A3)    ; stampa LA LINEA 5  " "
  355.     MOVE.B    (A2)+,40*5(A3)    ; stampa LA LINEA 6  " "
  356.     MOVE.B    (A2)+,40*6(A3)    ; stampa LA LINEA 7  " "
  357.     MOVE.B    (A2)+,40*7(A3)    ; stampa LA LINEA 8  " "
  358.  
  359.     ADDQ.L    #1,PuntaBitplane ; avanziamo di 8 bit (PROSSIMO CARATTERE)
  360.     ADDQ.L    #1,PuntaTesto    ; prossimo carattere da stampare
  361.  
  362. FineTesto:
  363.     movem.l    (SP)+,d2/a0/a2-a3
  364.     RTS
  365.  
  366.  
  367. PuntaTesto:
  368.     dc.l    TESTO
  369.  
  370. PuntaBitplane:
  371.     dc.l    BITPLANE
  372.  
  373. ;    $00 per "fine linea" - $FF per "fine testo"
  374.  
  375.         ; numero caratteri per linea: 40
  376. TESTO:         ;          1111111111222222222233333333334
  377.              ;   1234567890123456789012345678901234567890
  378.     dc.b    '                                        ',0 ; 1
  379.     dc.b    '    Questo listato cambia ad ogni       ',0 ; 2
  380.     dc.b    '                                        ',0 ; 3
  381.     dc.b    '    linea sia il color1 ($dff184),      ',0 ; 4
  382.     dc.b    '                                        ',0 ; 5
  383.     dc.b    '    che il bplcon1 ($dff102). Notate    ',0 ; 6
  384.     dc.b    '                                        ',0 ; 7
  385.     dc.b    '    come si possano "unire" listati     ',0 ; 8
  386.     dc.b    '                                        ',0 ; 9
  387.     dc.b    '    visti in precedenza in un solo      ',0 ; 10
  388.     dc.b    '                                        ',0 ; 11
  389.     dc.b    '    effetto. Si potrebbero cambiare     ',0 ; 12
  390.     dc.b    '                                        ',0 ; 13
  391.     dc.b    '    anche altri colori e i moduli per   ',0 ; 14
  392.     dc.b    '                                        ',0 ; 15
  393.     dc.b    '    ogni linea, se avete voglia         ',0 ; 16
  394.     dc.b    '                                        ',0 ; 17
  395.     dc.b    '    provate!                            ',$FF ; 18
  396.  
  397.     EVEN
  398.  
  399. ;    Il FONT caratteri 8x8 (copiato in CHIP dalla CPU e non dal blitter,
  400. ;    per cui puo' stare anche in fast ram. Anzi sarebbe meglio!
  401.  
  402. FONT:
  403.     incbin    "assembler2:sorgenti4/nice.fnt"
  404.  
  405. *****************************************************************************
  406.  
  407.     section    graficozza,data_C
  408.  
  409. COPPERLIST:
  410.     dc.w    $8e,DIWS    ; DiwStrt
  411.     dc.w    $90,DIWSt    ; DiwStop
  412.     dc.w    $92,DDFS    ; DdfStart
  413.     dc.w    $94,DDFSt    ; DdfStop
  414.     dc.w    $100,BPLC0    ; BplCon0
  415.     dc.w    $180,$000    ; color0 nero
  416.     dc.w    $182,$eee    ; color1 bianco
  417. BPLPOINTER:
  418.     dc.w    $E0,$0000    ; Bpl0h
  419.     dc.w    $E2,$0000    ; Bpl0l
  420.     dc.w    $102,$0        ; Bplcon1
  421.     dc.w    $104,$0        ; Bplcon2
  422.     dc.w    $108,$0        ; Bpl1mod
  423.     dc.w    $10a,$0        ; Bpl2mod
  424.  
  425. CopperEffect:
  426.     dcb.l    801,0        ; spazio per l'effetto (attenzione! se
  427.                 ; cambiate l'effetto puo' diventare piu'
  428.                 ; grande o piu' piccolo)
  429.     dc.w    $ffff,$fffe    ; Fine copperlist
  430.  
  431. *****************************************************************************
  432.  
  433.     SECTION    MIOPLANE,BSS_C
  434.  
  435. BITPLANE:
  436.     ds.b    40*256    ; un bitplane lowres 320x256
  437.  
  438.     end
  439.  
  440. Avrete notato che aggrovigliamento e quanti loop strani, regolati da contatori,
  441. faccia la routine. questo serve per creare quell'effeto dei colori, che non
  442. e' un semplice scorrimento in alto o in basso, ma "l'incrocio" di piu'
  443. scorrimenti, dato da vari passaggi.
  444.  
  445.