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

  1.  
  2. ; Lezione9g1.s    Visualizzazione di un'immagine 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    #3-1,D1        ; numero di bitplanes (qua sono 3)
  22. POINTBP:
  23.     move.w    d0,6(a1)
  24.     swap    d0
  25.     move.w    d0,2(a1)
  26.     swap    d0
  27.                 ; QUI C'E` LA PRIMA DIFFERENZA RISPETTO
  28.                 ; ALLE IMMAGINI NORMALI!!!!!!
  29.     ADD.L    #40,d0        ; + LUNGHEZZA DI UNA RIGA !!!!!
  30.     addq.w    #8,a1
  31.     dbra    d1,POINTBP
  32.  
  33.     lea    $dff000,a5        ; CUSTOM REGISTER in a5
  34.     MOVE.W    #DMASET,$96(a5)        ; DMACON - abilita bitplane, copper
  35.     move.l    #COPPERLIST,$80(a5)    ; Puntiamo la nostra COP
  36.     move.w    d0,$88(a5)        ; Facciamo partire la COP
  37.     move.w    #0,$1fc(a5)        ; Disattiva l'AGA
  38.     move.w    #$c00,$106(a5)        ; Disattiva l'AGA
  39.     move.w    #$11,$10c(a5)        ; Disattiva l'AGA
  40.  
  41. mouse:
  42.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  43.     bne.s    mouse        ; se no, torna a mouse:
  44.     rts
  45.  
  46.     SECTION    GRAPHIC,DATA_C
  47.  
  48. COPPERLIST:
  49.     dc.w    $8E,$2c81    ; DiwStrt
  50.     dc.w    $90,$2cc1    ; DiwStop
  51.     dc.w    $92,$38        ; DdfStart
  52.     dc.w    $94,$d0        ; DdfStop
  53.     dc.w    $102,0        ; BplCon1
  54.     dc.w    $104,0        ; BplCon2
  55.  
  56.                 ; QUI C'E` LA SECONDA DIFFERENZA RISPETTO
  57.                 ; ALLE IMMAGINI NORMALI!!!!!!
  58.     dc.w    $108,80        ; VALORE MODULO = 2*20*(3-1)= 80
  59.     dc.w    $10a,80        ; ENTRAMBI I MODULI ALLO STESSO VALORE.
  60.  
  61.     dc.w    $100,$3200    ; bplcon0 - 3 bitplanes lowres
  62.  
  63. BPLPOINTERS:
  64.     dc.w $e0,$0000,$e2,$0000    ;primo     bitplane
  65.     dc.w $e4,$0000,$e6,$0000
  66.     dc.w $e8,$0000,$ea,$0000
  67.  
  68.     dc.w    $0180,$000    ; color0
  69.     dc.w    $0182,$475    ; color1
  70.     dc.w    $0184,$fff    ; color2
  71.     dc.w    $0186,$ccc    ; color3
  72.     dc.w    $0188,$999    ; color4
  73.     dc.w    $018a,$232    ; color5
  74.     dc.w    $018c,$777    ; color6
  75.     dc.w    $018e,$444    ; color7
  76.  
  77.     dc.w    $FFFF,$FFFE    ; Fine della copperlist
  78.  
  79.  
  80. BITPLANE:
  81.     incbin    "assembler2:sorgenti6/amiga.rawblit"
  82.                     ; qua carichiamo la figura in
  83.                     ; formato RAWBLIT (o interleaved),
  84.                     ; convertita col KEFCON.
  85.     end
  86.  
  87. In questo esempio visualizziamo un'immagine in formato interleaved
  88. (o rawblit, come la chiama il KEFCON). Si tratta della solita immagine, ma
  89. abbiamo dovuto convertirla nel formato interleaved, pertanto usiamo un file
  90. diverso.
  91. Come abbiamo gia` detto nella lezione, per visualizzare immagini in questo
  92. formato bisogna cambiare 2 cose rispetto ad immagini normali:
  93. 1) Nel puntare i bitplane, bisonga calcolare diversamente gli indirizzi dei
  94. vari bitplane che "distano" tra loro di una sola riga, e non di tutte le righe
  95. del bitplane;
  96. 2) i moduli dei bitplane non valgono 0, ma servono per "saltare" le righe degli
  97. altri bitplanes. Sono calcolati mediante la formula che abbiamo visto:
  98.  
  99.  MODULO=2*L*(N-1)     Dove L e` la larghezza del bitplane espressa in words
  100.             e N e` il numero di bitplanes
  101.  
  102. Nel nostro caso i bitplane sono larghi 20 words (320/16) ovvero 40 bytes,
  103. e il numero di bitplanes e` 3. Potete trovare la differenza 1) nelle prime
  104. linee del listato, nel loop che punta i bitplane nella copperlist, e la
  105. differenza 2) nelle istruzioni della copperlist che caricano il valore del
  106. modulo in BPL1MOD e BPL2MOD.
  107.  
  108.