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

  1.  
  2. ; Lezione9n2.s    Ancora Scrolltext!! Quello nell'intro del disco 1!
  3. ;        Tasto sinistro per uscire.
  4.  
  5.     Section    BigScroll,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.  
  14. ; Con DMASET decidiamo quali canali DMA aprire e quali chiudere
  15.  
  16.         ;5432109876543210
  17. DMASET    EQU    %1000001111000000    ; blitter, copper, bitplane DMA
  18.  
  19. START:
  20.  
  21. ;     PUNTIAMO IL NOSTRO BITPLANE
  22.  
  23.     MOVE.L    #BITPLANE+100*44,d0    ; bitplane
  24.     LEA    BPLPOINTERS,A1
  25.     MOVEQ    #3-1,D1            ; numero di bitplanes
  26. POINTB:
  27.     move.w    d0,6(a1)
  28.     swap    d0
  29.     move.w    d0,2(a1)
  30.     swap    d0
  31.     addi.l    #44*256,d0        ; + LUNGHEZZA DI UNA PLANE !!!!!
  32.     addq.w    #8,a1
  33.     dbra    d1,POINTB
  34.  
  35.     bsr.s    makecolors        ; Fai effetto in copperlist
  36.  
  37.     lea    $dff000,a6
  38.     MOVE.W    #DMASET,$96(a6)        ; DMACON - abilita dma
  39.     move.l    #COPPERLIST,$80(a6)    ; Puntiamo la nostra COP
  40.     move.w    d0,$88(a6)        ; Facciamo partire la COP
  41.     move.w    #0,$1fc(a6)        ; Disattiva l'AGA
  42.     move.w    #$c00,$106(a6)        ; Disattiva l'AGA
  43.     move.w    #$11,$10c(a6)        ; Disattiva l'AGA
  44.  
  45. mouse:
  46.     MOVE.L    #$1ff00,d1    ; bit per la selezione tramite AND
  47.     MOVE.L    #$13000,d2    ; linea da aspettare = $130, ossia 304
  48. Waity1:
  49.     MOVE.L    4(A6),D0    ; VPOSR e VHPOSR - $dff004/$dff006
  50.     ANDI.L    D1,D0        ; Seleziona solo i bit della pos. verticale
  51.     CMPI.L    D2,D0        ; aspetta la linea $130 (304)
  52.     BNE.S    Waity1
  53.  
  54.     bsr.w    MainScroll    ; routine di gestione scroll
  55.  
  56.     BTST.B    #6,$bfe001    ; tasto del mouse premuto?
  57.     BNE.s    mouse
  58.     rts
  59.  
  60. ;*****************************************************************************
  61. ; questa routine crea una sfumatura di colore nella copperlist
  62. ; in pratica nella copperlist c'e` dello spazio vuoto che viene
  63. ; riempito da questa routine che mette le giuste istruzioni copper.
  64. ; Vedremo molte di queste routines in Lezione11.txt
  65. ;*****************************************************************************
  66.  
  67. MAKECOLORS:
  68.     lea    scol,a0        ; Indirizzo dove modificare copperlist
  69.     lea    coltab,a1    ; tabella colori 1
  70.     lea    coltab2,a2    ; tabella colori 2
  71.     move.l    #$a807,d1    ; riga di partenza = $A0
  72.     moveq    #63,d0        ; numero di righe
  73. col1:
  74.     move.w    d1,(a0)+    ; crea istruzione WAIT
  75.     move.w    #$fffe,(a0)+
  76.  
  77.     move.w    #$0182,(a0)+    ; istruzione che modifica COLOR01
  78.     move.w    (a1)+,(a0)+
  79.     move.w    #$018E,(a0)+    ; istruzione che modifica COLOR07
  80.     move.w    (a2)+,(a0)+
  81.  
  82.     add.w    #$100,d1    ; prossima riga
  83.     dbra    d0,col1
  84.     rts
  85.  
  86. coltab:
  87.      dc.w    $00,$11,$22,$33,$44,$55,$66,$77,$88,$99
  88.      dc.w    $aa,$bb,$cc,$dd,$ee,$ff,$ff,$ee,$dd,$cc
  89.      dc.w    $bb,$aa,$99,$88,$77,$66,$55,$44,$33,$22
  90.      dc.w    $11,$00
  91.      dc.w    $000,$110,$220,$330,$440,$550,$660,$770,$880,$990
  92.      dc.w    $aa0,$bb0,$cc0,$dd0,$ee0,$ff0,$ff0,$ee0,$dd0,$cc0
  93.      dc.w    $bb0,$aa0,$990,$880,$770,$660,$550,$440,$330,$220
  94.      dc.w    $110,$000
  95.      dc.w    $000,$101,$202,$303,$404,$505,$606,$707,$808,$909
  96.      dc.w    $a0a,$b0b,$c0c,$d0d,$e0e,$f0f,$f0f,$e0e,$d0d,$c0c
  97.      dc.w    $b0b,$a0a,$909,$808,$707,$606,$505,$404,$303,$202
  98.      dc.w    $101,$000,0,0
  99.  
  100. coltab2:
  101.      dc.w    $000,$101,$202,$303,$404,$505,$606,$707,$808,$909
  102.      dc.w    $a0a,$b0b,$c0c,$d0d,$e0e,$f0f,$f0f,$e0e,$d0d,$c0c
  103.      dc.w    $b0b,$a0a,$909,$808,$707,$606,$505,$404,$303,$202
  104.      dc.w    $101,$000,0,0
  105.      dc.w    $000,$011,$022,$033,$044,$055,$066,$077,$088,$099
  106.      dc.w    $0aa,$0bb,$0cc,$0dd,$0ee,$0ff,$0ff,$0ee,$0dd,$0cc
  107.      dc.w    $0bb,$0aa,$099,$088,$077,$066,$055,$044,$033,$022
  108.      dc.w    $011,$000
  109.      dc.w    $000,$110,$220,$330,$440,$550,$660,$770,$880,$990
  110.      dc.w    $aa0,$bb0,$cc0,$dd0,$ee0,$ff0,$ff0,$ee0,$dd0,$cc0
  111.      dc.w    $bb0,$aa0,$990,$880,$770,$660,$550,$440,$330,$220
  112.      dc.w    $110,$000
  113.  
  114. ;*****************************************************************************
  115. ;         ROUTINE PRINCIPALE DELLO SCROLLTEXT
  116. ;*****************************************************************************
  117.  
  118. MainScroll:
  119.     lea    $dff000,a6
  120.     btst.b    #10,$16(a6)        ; premuto il tasto destro?
  121.     beq.s    SaltaScroll        ; se si, sposta in verticale la scritta
  122.                     ; senza scrollarla
  123.  
  124.     move.l    noscroll(pc),d0        ; contatore di scroll
  125.     subq.l    #1,d0            ; decrementa il contatore
  126.     bmi.s    do_scrolling        ; se negativo scrolla
  127.     move.l    d0,noscroll        ; altrimenti sposta solo la scritta
  128.     bra.s    SaltaScroll
  129.  
  130. do_scrolling:                ; effettua lo scrolling
  131.     clr.l    noscroll        ; azzera il contatore
  132.  
  133.     bsr.w    PrintChar        ; stampa nuovo carattere
  134.     bsr.s    DoScroll        ; scrolla text
  135.  
  136. SaltaScroll:
  137.     bsr.s    Drawscroll        ; richiama la routine che disegna
  138.                     ; il testo sullo schermo
  139.  
  140.     lea    sinustab(PC),a0        ; queste istruzioni ruotano i valori
  141.     lea    4(a0),a1        ; della tabella delle posizioni
  142.     move.l    (a0),d0            ; verticali dello scrolltext
  143. copysinustab:
  144.     move.l    (a1)+,(a0)+
  145.     cmpi.l    #$ffff,(a1)        ; Flag di fine tabella? Se non ancora,
  146.     bne.s    copysinustab        ; continua a spostare...
  147.     move.l    d0,(a0)            ; Alla fine, metti il primo val. in
  148.     rts                ; fondo!
  149.  
  150. ;*****************************************************************************
  151. ; Questa routine effettua lo scrolling vero e proprio. Da notare che per
  152. ; stabilire la velocita' di scroll, si usa la label "speedlogic", che non
  153. ; e' altro che il valore da inserire nel BLTCON0, che a seconda delle varie
  154. ; velocita' ha un valore di shift diverso.
  155. ;*****************************************************************************
  156.  
  157. ;        _____________
  158. ;       /  ---  ____ ¬\
  159. ;     _/ ¬____,¬_____-'\_
  160. ;    (_   ¬(°T..(°)_¬   _)
  161. ;     T`--  ¯____¯ __,¬ T
  162. ;     l_ ,-¬/----\-`    !
  163. ;      \__ /______\-¯¯¬/
  164. ;        | `------'  T¯ xCz
  165. ;        `-----------'
  166.  
  167. DoScroll:
  168.     lea    BITPLANE+2,a0    ; Source (16 pixel piu' avanti)
  169.     lea    BITPLANE,a1    ; Dest   (inizio... quindi <- di 16 pixel!)
  170.     moveq    #3-1,d7        ; Numero blittate = 3 per 3 planes
  171. BlittaLoop1:
  172.     btst    #6,2(a6)    ; dmaconr - waitblit
  173. bltx:
  174.     btst    #6,2(a6)    ; dmaconr - waitblit
  175.     bne.s    bltx
  176.  
  177.     moveq    #0,d1
  178.     move.w    d1,$42(a6)        ; BLTCON1
  179.     move.l    d1,$64(a6)        ; BLTAMOD, BLTDMOD
  180.     moveq    #-1,d1            ; $FFFFFFFF
  181.     move.l    d1,$44(a6)        ; BLTAFWM, BLTALWM
  182.     move.w    speedlogic(PC),$40(a6)    ; BLTCON0 (stabilisce velocita' di
  183.                     ;          scroll tramite lo shift)
  184.  
  185.     btst    #6,2(a6)    ; dmaconr - waitblit
  186. blt23:
  187.     btst    #6,2(a6)    ; dmaconr - waitblit
  188.     bne.s    blt23
  189.  
  190.     move.l    a0,$50(a6)        ; BLTAPT
  191.     move.l    a1,$54(a6)        ; BLTDPT
  192.     move.w    #(32*64)+22,$58(a6)    ; BLTSIZE
  193.  
  194.     add.w    #32*44,a0    ; prossimo plane sorgente
  195.     add.w    #32*44,a1    ; prossimo plane destinazione
  196.  
  197.     dbra    d7,BlittaLoop1
  198.     rts
  199.  
  200. ;*****************************************************************************
  201. ; questa routine disegna sullo schermo lo scrolltext ad una posizione verticale
  202. ; variabile secondo i valori di una sinusoide (ossia una bella SIN TAB!).
  203. ; Da notare che anziche' copiarlo con lente blittate, avremmo potuto in modo
  204. ; piu' "economico" e "amighevole" cambiare solo i puntatori ai bitplanes,
  205. ; facendo lo stesso lavoro con pochi move. Pero' questo e' un sorgente
  206. ; dedicato al blitter, quindi blittiamo!
  207. ;*****************************************************************************
  208.  
  209. Drawscroll:
  210.     lea    BITPLANE,a0        ; puntatore sorgente
  211.     lea    sinustab(pc),a5        ; tabella seno
  212.     move.l    (a5),d4            ; leggi coordinata Y
  213.                     ; (la prima della tabella)
  214.     lea    BITPLANE+(112*44),a5    ; indirizzo destinazione
  215.     add.l    d4,a5            ; aggiungi coordinata Y
  216.  
  217.     btst    #6,2(a6)        ; aspetta che il blitter sia fermo
  218. blt1e:                    ; prima di modificare i registri
  219.     btst    #6,2(a6)
  220.     bne.s    blt1e
  221.  
  222.     moveq    #-1,d1
  223.     move.l    d1,$44(a6)        ; BLATLWM, BLTAFWM
  224.     moveq    #0,d1
  225.     move.l    d1,$64(a6)        ; BLTAMOD/BLTDMOD
  226.     move.l    #$09f00000,$40(a6)    ; BLTCON0 - copia normale
  227.  
  228.     moveq    #3-1,d7            ; Num. di planes
  229. copialoopa:
  230.     btst    #6,2(a6)        ; aspetta che il blitter sia fermo
  231. blt1f:
  232.     btst    #6,2(a6)
  233.     bne.s    blt1f
  234.  
  235.     move.l    a0,$50(a6)        ; BLTAPT
  236.     move.l    a5,$54(a6)        ; BLTDPT
  237.     move.w    #32*64+22,$58(a6)    ; BLTSIZE - copyscroll
  238.  
  239.     add.w    #32*44,a0        ; prossimo plane sorgente
  240.     add.w    #256*44,a5        ; prossimo plane dest.
  241.  
  242.     dbra    d7,copialoopa
  243.     rts
  244.  
  245. ; Questa tabella contiene gli offset per le coordinte Y per far andare su e
  246. ; giu' lo scroll.
  247.  
  248. sinustab:
  249.     dc.l    0,44,88,132,176,220,264,308,352,396
  250.     dc.l    440,484,528,572,616,660,704,748,792
  251.     dc.l    836,880,924,968,1012,1056,1100,1144,1188,1232
  252.     dc.l    1276,1276,1232
  253.     dc.l    1188,1144,1100,1056,1012,968,924,880,836,792,748,704
  254.     dc.l    660,616,572,528,484,440,396,352,308
  255.     dc.l    264,220,176,132,88,44,0
  256. sinusend:
  257.      dc.l    0
  258.      dc.l    $ffff    ; flag di fine tabella
  259.  
  260.  
  261. ;*****************************************************************************
  262. ; Questa routine stampa i nuovi caratteri. Da notare che nel testo ci sono
  263. ; anche dei FLAG, in questo caso dei numeri da 1 a 5, che cambiano la
  264. ; velocita' di scroll. Questo cambiando il valore di shift da mettere in
  265. ; bltcon0, nonche' il numero di caratteri da stampare ogni frame (e' chiaro
  266. ; che a velocita' supersonica occorre stampare piu' caratteri al frame!).
  267. ; Altro particolare da notare, e' che il sistema usato per costruire il
  268. ; font e' diverso da quelli visti fino ad ora. Infatti il font caratteri
  269. ; non e' altro che una schermata 320*200 a 8 colori, con i caratteri posti
  270. ; l'uno accanto all'altro, e una fila sotto l'altra. Questo rende piu' facile
  271. ; disegnarsi un proprio font, ma richiede una routine diversa per trovare il
  272. ; font. Infatti, occorre fare una tabella contenente gli offsets dall'inizio
  273. ; del font di ogni carattere, e a seconda del valore ascii che dobbiamo
  274. ; stampare, prendere il corrispondente valore dalla tabella per sapere
  275. ; la posizione del carattare in questione. Cio' puo' sembrare complesso, ma
  276. ; dato che i caratteri nel font sono messi nell'ordine ascii, vedrete che e'
  277. ; molto semplice scriversi la tabella con gli offset!
  278. ; Il font, comunque, e' presente anche in formato .iff, in modo da rendere
  279. ; piu' chiuaro il sistema, e piu' semplice il disegno di un nuovo font.
  280. ;*****************************************************************************
  281.  
  282. PrintChar:
  283.     tst.w    textctr        ; se il contatore e` positivo non stampa
  284.     bne.w    noPrint
  285.     move.l    textptr(PC),a0    ; legge il carattere da stampare
  286.     moveq    #0,d0
  287.     move.b    (a0)+,d0
  288.     cmp.l    #textend,textptr    ; siamo alla fine del testo ?
  289.     bne.s    noend
  290.     lea    scrollmsg(PC),a0    ; se si ricomincia da capo!
  291.     move.b    (a0)+,d0        ; carattere in d0
  292. noend:
  293.     cmp.b    #1,d0            ; FLAG 1? Allora speed = 1
  294.     bne.s    nots1
  295.     move.w    #32,scspeed        ; valore iniziale di textctr
  296.     move.w    #$f9f0,speedlogic    ; valore di BPLCON0
  297.     move.b    (a0)+,d0        ; prossimo carattere in d0
  298.     bra.s    contscroll
  299. nots1:
  300.     cmpi.b    #2,d0            ; FLAG 2? Allora speed = 2
  301.     bne.s    nots2
  302.     move.w    #16,scspeed
  303.     move.w    #$e9f0,speedlogic    ; valore di BPLCON0
  304.     move.b    (a0)+,d0
  305.     bra.s    contscroll
  306. nots2:
  307.     cmpi.b    #3,d0            ; FLAG 3? Allora speed = 3
  308.     bne.s    nots3
  309.     move.w    #8,scspeed
  310.     move.w    #$c9f0,speedlogic    ; valore di BPLCON0
  311.     move.b    (a0)+,d0
  312.     bra.s    contscroll
  313. nots3:
  314.     cmpi.b    #4,d0            ; FLAG 4? Allora speed = 4
  315.     bne.s    nots4
  316.     move.w    #4,scspeed
  317.     move.w    #$89f0,speedlogic    ; valore di BPLCON0
  318.     move.b    (a0)+,d0
  319.     bra.s    contscroll
  320. nots4:
  321.     cmpi.b    #5,d0            ; Flag 5? Allora speed = 5
  322.     bne.s    contscroll
  323.     move.w    #2,scspeed
  324.     move.w    #$19f0,speedlogic    ; valore di BPLCON0
  325.     move.b    (a0)+,d0
  326.  
  327. ; Qua, passato il controllo dei flag, si stampa il carattere. Si noti il modo
  328. ; in cui si trova il carattere, tramite la tabella con gli offsets.
  329.  
  330. contscroll:
  331.     move.l    a0,textptr    ; salva il puntatore al prossimo carattere
  332.     subi.b    #$20,d0        ; ascii - 20 = il primo carattere e' lo spazio
  333.     lsl.w    #2,d0        ; moltiplica * 4 per trovare l'address in tab,
  334.                 ; dato che ogni valore in tab e' .L (4 byte)
  335.     lea    addresses(PC),a0
  336.     move.l    0(a0,d0.w),a0    ; copia in a0 l'indirizzo del carattere, preso
  337.                 ; dalla tabella.
  338.  
  339.     btst    #6,2(a6)    ; dmaconr - waitblit
  340. blt30:
  341.     btst    #6,2(a6)    ; dmaconr - waitblit
  342.     bne.s    blt30
  343.  
  344.     moveq    #-1,d1
  345.     move.l    d1,$44(a6)         ; BLTALWM, BLTAFWM
  346.     move.l    #$09F00000,$40(a6)    ; BLTCON0/1 - copia normale
  347.     move.l    #$00240028,$64(a6)    ; BLTAMOD = 36, BLTDMOD = 40
  348.  
  349.     lea    BITPLANE+40,a1        ; puntatore destinazione
  350.     moveq    #3-1,d7            ; num. bitplanes
  351. CopyCharL:
  352.  
  353.     btst    #6,2(a6)    ; dmaconr - waitblit
  354. blt31:
  355.     btst    #6,2(a6)    ; dmaconr - waitblit
  356.     bne.s    blt31
  357.  
  358.     move.l    a0,$50(a6)        ; BLTAPT (carattere in font)
  359.     move.l    a1,$54(a6)        ; BLTDPT (bitplane)
  360.     move.w    #32*64+2,$58(a6)    ; BLTSIZE
  361.  
  362.     add.w    #32*44,a1    ; prossimo bitplane destinazione
  363.     lea    40*200(a0),a0    ; 1 bitplane della pic che contiene il font
  364.  
  365.     dbra    d7,copycharL
  366.  
  367.     move.w    scspeed(PC),textctr    ; valore iniziale contatore stampa
  368. noPrint:
  369.     subq.w    #1,textctr    ; decrementa il contatore che indica quando
  370.                 ; stampare
  371. endPrint:
  372.     rts
  373.  
  374. ; variabili
  375.  
  376. textptr:     dc.l    scrollmsg    ; puntatore al carattere da stampare
  377.  
  378. textctr:     dc.w    0        ; contatore che indica quando stampare
  379. noscroll:     dc.l    0        ; contatore che indica quando scrollare
  380.  
  381. scspeed:     dc.w    0        ; valore iniziale del contatore che
  382.                     ; indica quando stampare
  383.                     ; varia a seconda della velocita`
  384.  
  385. speedlogic:     dc.w    0        ; valore di BLTCON0
  386.                     ; varia a seconda della velocita`
  387.                     ; perche` varia il valore di shift
  388.  
  389. ;*****************************************************************************
  390. ; Questa tabella contiene una serie di indirizzi del font, che indicano la
  391. ; posizione dei caratteri ascii nel font stesso: per esempio, il primo e'
  392. ; Bigf senza altri offset, infatti il primo carattere che si trova nel font
  393. ; e' lo spazio, che e' anche il primo dell'ascii. Il secondo (che in ascii e'
  394. ; il punto esclamativo !) e' a bigf+4, infatti il ! nel font si trova al
  395. ; secondo posto, ossia 4 bytes (32 pixel) dopo il primo, essendo ogni
  396. ; carattere largo (e alto) 32 pixel.
  397. ; Dato che il font si trova in una figura 320*200, ci potranno stare solo
  398. ; 10 caratteri per fila orizzontale, per cui i caratteri dall'11 al 20
  399. ; dovranno essere in una fila sotto, quelli dal 22 al 30 sotto ancora, e
  400. ; cosi' via.
  401. ;*****************************************************************************
  402.  
  403. addresses:
  404.      dc.l BigF    ; primo carattere: " "
  405.      dc.l BigF+4    ; secondo carattere: "!"
  406.      dc.l BigF+8
  407.      dc.l BigF+12,BigF+16,BigF+20,BigF+24,BigF+28,BigF+32,BigF+36
  408.  
  409. ; seconda fila di caratteri nel font: si parte da 1280, ossia 32*40, infatti
  410. ; occorre saltare le 32 linee di altezza della prima fila di caratteri
  411.  
  412.      dc.l BigF+1280        ; undicesimo carattere: "
  413.      dc.l BigF+1284
  414.      dc.l BigF+1288
  415.      dc.l BigF+1292
  416.      dc.l BigF+1296,BigF+1300,BigF+1304,BigF+1308,BigF+1312,BigF+1316
  417.  
  418. ; terza fila di caratteri nel font
  419.  
  420.      dc.l BigF+2560,BigF+2564,BigF+2568,BigF+2572,BigF+2576,BigF+2580
  421.      dc.l BigF+2584,BigF+2588,BigF+2592,BigF+2596
  422. ; quarta
  423.      dc.l BigF+3840,BigF+3844,BigF+3848,BigF+3852,BigF+3856,BigF+3860
  424.      dc.l BigF+3864,BigF+3868,BigF+3872,BigF+3876
  425. ; quinta
  426.      dc.l BigF+5120,BigF+5124,BigF+5128,BigF+5132,BigF+5136,BigF+5140
  427.      dc.l BigF+5144,BigF+5148,BigF+5152,BigF+5156
  428. ; sesta
  429.      dc.l BigF+6400,BigF+6404,BigF+6408,BigF+6412,BigF+6416,BigF+6420
  430.      dc.l BigF+6424,BigF+6428,BigF+6432,BigF+6436
  431.  
  432.  
  433.  
  434. ;*****************************************************************************
  435. ; Ecco il testo: mettendo 1,2,3,4 si cambia la velocita' di scroll
  436. ;*****************************************************************************
  437.  
  438. scrollmsg:
  439.  dc.b 4,"AMIGA EXPERT TEAM",1,"        ",3
  440.  dc.b " IL NUOVO GRUPPO ITALIANO DI UTENTI AMIGA EVOLUTI  ",2
  441.  dc.b "       ",3
  442.  dc.b "  SE VUOI METTERTI IN CONTATTO CON APPASSIONATI DI AMIGA ",2
  443.  dc.b "CHE LO USANO PER FARCI MUSICA, GRAFICA, PROGRAMMAZIONE O ALTRO,"
  444.  dc.b " SIA PER HOBBY CHE PER LAVORO, SCRIVI A: (MOUSE DESTRO PER STOP) ",1
  445.  dc.b " MIRKO LALLI - VIA VECCHIA ARETINA 64 - 52020 LATERINA STAZIONE - ",2
  446.  dc.b "AREZZO - ",3
  447.  dc.b " CREDITI PER QUESTA DEMO: ",1
  448.  dc.b "PROGRAMMAZIONE ASSEBLER E GRAFICA BY FABIO CIUCCI -",2
  449.  dc.b " MUSICA PRESA DA UNA LIBRERIA PD ",3
  450.  dc.b "-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-",4
  451.  dc.b "=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-=+=-"
  452.  dc.b "                                                 "
  453. textend:
  454.  
  455. ; Nota: Altro CLUB per Amiga e' APU: per informazioni tel. 081/5700434
  456. ;                               081/7314158
  457. ; giovedi'-venerdi' ore 19-22
  458.  
  459. ******************************************************************************
  460. ;        COPPERLIST:
  461. ******************************************************************************
  462.  
  463.     section    copper,data_c
  464.  
  465. COPPERLIST:
  466.     dc.w    $8E,$2c81    ; DiwStrt
  467.     dc.w    $90,$2cc1    ; DiwStop
  468.     dc.w    $92,$0038    ; DdfStart
  469.     dc.w    $94,$00d0    ; DdfStop
  470.     dc.w    $102,0        ; BplCon1
  471.     dc.w    $104,$24    ; BplCon2 - Tutti gli sprite sopra i bitplane
  472.     dc.w    $108,0        ; Bpl1Mod
  473.     dc.w    $10a,0        ; Bpl2Mod
  474.     dc.w    $100,$200    ; BplCon0 - no bitplanes
  475.  
  476.     dc.w    $0180,$000    ; color0 - SFONDO
  477.     dc.w    $0182,$1af    ; color1 - SCRITTE
  478.  
  479.     dc.w    $9707,$FFFE    ; WAIT - disegna la barretta in alto
  480.     dc.w    $180,$110    ; Color0
  481.     dc.w    $9807,$FFFE    ; wait....
  482.     dc.w    $180,$120
  483.     dc.w    $9a07,$FFFE
  484.     dc.w    $180,$130
  485.     dc.w    $9b07,$FFFE
  486.     dc.w    $180,$240
  487.     dc.w    $9c07,$FFFE
  488.     dc.w    $180,$250
  489.     dc.w    $9d07,$FFFE
  490.     dc.w    $180,$370
  491.     dc.w    $9e07,$FFFE
  492.     dc.w    $180,$390
  493.     dc.w    $9f07,$FFFE
  494.     dc.w    $180,$4b0
  495.     dc.w    $a007,$FFFE
  496.     dc.w    $180,$5d0
  497.     dc.w    $a107,$FFFE
  498.     dc.w    $180,$4a0
  499.     dc.w    $a207,$FFFE
  500.     dc.w    $180,$380
  501.     dc.w    $a307,$FFFE
  502.     dc.w    $180,$360
  503.     dc.w    $a407,$FFFE
  504.     dc.w    $180,$240
  505.     dc.w    $a507,$FFFE
  506.     dc.w    $180,$120
  507.     dc.w    $a607,$FFFE
  508.     dc.w    $180,$110
  509.  
  510.     dc.w    $A707,$FFFE
  511.     dc.w    $180,$000
  512.  
  513. BPLPOINTERS:
  514.     dc.w $e0,0,$e2,0    ; primo      bitplane
  515.     dc.w $e4,0,$e6,0    ; secondo bitplane
  516.     dc.w $e8,0,$ea,0    ; terzo      bitplane
  517.  
  518.     dc.w    $100,$3200    ; bplcon0 - 3 bitplanes lowres
  519.  
  520.     dc.w    $108,4        ; bpl1mod - saltiamo i 4 bytes dove si
  521.     dc.w    $10a,4        ; bpl2mod - vedrebbe stampare il testo...
  522.                 ; Ricordatevi che lo schermo e' largo 44 bytes
  523.                 ; in realta', per lasciare all'estrema destra,
  524.                 ; fuori dal visibile, cio' che non deve essere
  525.                 ; visto. Tutti gli scrolltext fanno cosi'.
  526.  
  527.     dc.w    $180,$000    ; colori
  528.     dc.w    $182,$111
  529.     dc.w    $184,$233
  530.     dc.w    $186,$555
  531.     dc.w    $188,$778
  532.     dc.w    $18a,$aab
  533.     dc.w    $18c,$fff
  534.     dc.w    $18e,$fff
  535.  
  536. scol:
  537.     DCB.w    6*64,0        ; spazio per le sfumature di colore generate
  538.                 ; dalla routine "makecolors"
  539.  
  540.     dc.w    $EE07,$fffe
  541.     dc.w    $180,$004
  542.  
  543.     dc.w    $184,$023,$186,$118        ; Colori piu' "blu"
  544.     dc.w    $188,$25b,$18a,$38e,$18c,$acf
  545.  
  546.     dc.w    $182,$550    ; questa parte di copperlist
  547.     dc.w    $18e,$155    ; realizza l'effetto specchio, dovreste sapere
  548.     dc.w    $108,-84    ; in che modo!
  549.     dc.w    $10A,-84
  550.     dc.w    $F307,$fffe
  551.  
  552.     dc.w    $182,$440
  553.     dc.w    $18e,$144
  554.     dc.w    $108,-172
  555.     dc.w    $10A,-172
  556.     dc.w    $108,-84
  557.     dc.w    $10A,-84
  558.     dc.w    $180,$004
  559.     dc.w    $F407,$fffe
  560.     dc.w    $182,$330
  561.     dc.w    $18e,$133
  562.     dc.w    $108,-172
  563.     dc.w    $10A,-172
  564.     dc.w    $180,$005
  565.     dc.w    $F607,$fffe
  566.     dc.w    $182,$220
  567.     dc.w    $18e,$123
  568.     dc.w    $108,-84
  569.     dc.w    $10A,-84
  570.     dc.w    $180,$006
  571.     dc.w    $FA07,$fffe
  572.     dc.w    $182,$110
  573.     dc.w    $18e,$012
  574.     dc.w    $108,-172
  575.     dc.w    $10A,-172
  576.     dc.w    $180,$007
  577.     dc.w    $FD07,$fffe
  578.     dc.w    $182,$110
  579.     dc.w    $18e,$011
  580.     dc.w    $108,-84
  581.     dc.w    $10A,-84
  582.     dc.w    $180,$008
  583.     dc.w    $ffdf,$fffe
  584.     dc.w    $0107,$fffe
  585.     dc.w    $0407,$fffe
  586.     dc.w    $182,$001
  587.     dc.w    $18e,$011
  588.     dc.w    $108,-172
  589.     dc.w    $10A,-172
  590.     dc.w    $180,$009
  591.     dc.w    $0607,$fffe
  592.     dc.w    $182,$002
  593.     dc.w    $18e,$111
  594.     dc.w    $108,-84
  595.     dc.w    $10A,-84
  596.     dc.w    $180,$00A
  597.     dc.w    $0A07,$fffe
  598.     dc.w    $182,$003
  599.     dc.w    $18e,$101
  600.     dc.w    $108,-172
  601.     dc.w    $10A,-172
  602.     dc.w    $180,$00B
  603.     dc.w    $0D07,$fffe
  604.     dc.w    $182,$004
  605.     dc.w    $18e,$202
  606.     dc.w    $108,-84
  607.     dc.w    $10A,-84
  608.     dc.w    $180,$00e
  609.  
  610.     dc.w    $1307,$fffe
  611.     dc.w    $100,$200    ; no bitplanes
  612.  
  613.     dc.w    $FFFF,$FFFE    ; Fine copperlist
  614.  
  615. ;*****************************************************************************
  616.  
  617. ; Ecco il font, che sta in una immagine 320*200 a 3 bitplanes (8 colori)
  618.  
  619. BigF:
  620.     incbin    "font4"
  621.  
  622. ;*****************************************************************************
  623.  
  624.     SECTION    BUFY,BSS_C
  625.  
  626. BITPLANE:
  627.     ds.b    3*44*256    ; spazio per 3 bitplanes
  628.  
  629.     END
  630.  
  631. In questo listato vediamo un'altro esempio di scrolltext, piu` sofisticato
  632. del precedente.. Si tratta della routine di scroll usata nell'intro AMIGAET
  633. di Fabio Ciucci. In questo programma, lo scrolltext si sposta in alto e in
  634. basso. Per ottenere questo effetto vengono utilizzati 2 buffer per il testo.
  635. Nel primo (invisibile) vengono stampati i caratteri e viene scrollato il testo.
  636. Da qui il testo viene copiato nell'altro buffer (che e` quello visibile) ad
  637. una posizione verticale che varia da un frame all'altro secondo una tabella.
  638. Il secondo buffer non viene mai cancellato perche` durante la copia dal primo
  639. buffer al secondo vengono copiate anche alcune righe "pulite" (azzerate) che
  640. cancellano la parte del vecchio testo che non viene sovrascritta dalla
  641. nuova. Per risparmiare memoria i 2 buffer sono stati riuniti in uno
  642. (all'indirizzo BITPLANE) delle dimensioni di uno schermo 320*256 a 3 planes.
  643. Cio` e` possibile perche` in realta` viene usato uno schermo alto solo 180
  644. linee. Infatti la visualizzazione dei bitplanes viene attivata dalla copperlist
  645. solo a partire dalla linea $A7 del display.
  646. Un' altra particolarita` di questo listato e` che parte della copperlist
  647. viene generata mediante una routine del processore, la "makecolors".
  648. L'argomento delle copperlist generate dal processore (e dal blitter !)
  649. verra` affrontato in una prossima lezione. Per il momento dategli comunque
  650. uno sguardo.
  651.  
  652.