home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 109
/
EnigmaAmiga109CD.iso
/
software
/
testi
/
corsoasm
/
sorgenti5
/
lezione9g1.s
< prev
next >
Wrap
Text File
|
1995-10-23
|
3KB
|
108 lines
; Lezione9g1.s Visualizzazione di un'immagine INTERLEAVED
; Tasto sinistro per uscire.
SECTION CiriCop,CODE
; Include "DaWorkBench.s" ; togliere il ; prima di salvare con "WO"
*****************************************************************************
include "startup1.s" ; Salva Copperlist Etc.
*****************************************************************************
;5432109876543210
DMASET EQU %1000001111000000 ; copper,bitplane,blitter DMA
START:
MOVE.L #BITPLANE,d0 ; dove puntare
LEA BPLPOINTERS,A1 ; puntatori COP
MOVEQ #3-1,D1 ; numero di bitplanes (qua sono 3)
POINTBP:
move.w d0,6(a1)
swap d0
move.w d0,2(a1)
swap d0
; QUI C'E` LA PRIMA DIFFERENZA RISPETTO
; ALLE IMMAGINI NORMALI!!!!!!
ADD.L #40,d0 ; + LUNGHEZZA DI UNA RIGA !!!!!
addq.w #8,a1
dbra d1,POINTBP
lea $dff000,a5 ; CUSTOM REGISTER in a5
MOVE.W #DMASET,$96(a5) ; DMACON - abilita bitplane, copper
move.l #COPPERLIST,$80(a5) ; Puntiamo la nostra COP
move.w d0,$88(a5) ; Facciamo partire la COP
move.w #0,$1fc(a5) ; Disattiva l'AGA
move.w #$c00,$106(a5) ; Disattiva l'AGA
move.w #$11,$10c(a5) ; Disattiva l'AGA
mouse:
btst #6,$bfe001 ; tasto sinistro del mouse premuto?
bne.s mouse ; se no, torna a mouse:
rts
SECTION GRAPHIC,DATA_C
COPPERLIST:
dc.w $8E,$2c81 ; DiwStrt
dc.w $90,$2cc1 ; DiwStop
dc.w $92,$38 ; DdfStart
dc.w $94,$d0 ; DdfStop
dc.w $102,0 ; BplCon1
dc.w $104,0 ; BplCon2
; QUI C'E` LA SECONDA DIFFERENZA RISPETTO
; ALLE IMMAGINI NORMALI!!!!!!
dc.w $108,80 ; VALORE MODULO = 2*20*(3-1)= 80
dc.w $10a,80 ; ENTRAMBI I MODULI ALLO STESSO VALORE.
dc.w $100,$3200 ; bplcon0 - 3 bitplanes lowres
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;primo bitplane
dc.w $e4,$0000,$e6,$0000
dc.w $e8,$0000,$ea,$0000
dc.w $0180,$000 ; color0
dc.w $0182,$475 ; color1
dc.w $0184,$fff ; color2
dc.w $0186,$ccc ; color3
dc.w $0188,$999 ; color4
dc.w $018a,$232 ; color5
dc.w $018c,$777 ; color6
dc.w $018e,$444 ; color7
dc.w $FFFF,$FFFE ; Fine della copperlist
BITPLANE:
incbin "assembler2:sorgenti6/amiga.rawblit"
; qua carichiamo la figura in
; formato RAWBLIT (o interleaved),
; convertita col KEFCON.
end
In questo esempio visualizziamo un'immagine in formato interleaved
(o rawblit, come la chiama il KEFCON). Si tratta della solita immagine, ma
abbiamo dovuto convertirla nel formato interleaved, pertanto usiamo un file
diverso.
Come abbiamo gia` detto nella lezione, per visualizzare immagini in questo
formato bisogna cambiare 2 cose rispetto ad immagini normali:
1) Nel puntare i bitplane, bisonga calcolare diversamente gli indirizzi dei
vari bitplane che "distano" tra loro di una sola riga, e non di tutte le righe
del bitplane;
2) i moduli dei bitplane non valgono 0, ma servono per "saltare" le righe degli
altri bitplanes. Sono calcolati mediante la formula che abbiamo visto:
MODULO=2*L*(N-1) Dove L e` la larghezza del bitplane espressa in words
e N e` il numero di bitplanes
Nel nostro caso i bitplane sono larghi 20 words (320/16) ovvero 40 bytes,
e il numero di bitplanes e` 3. Potete trovare la differenza 1) nelle prime
linee del listato, nel loop che punta i bitplane nella copperlist, e la
differenza 2) nelle istruzioni della copperlist che caricano il valore del
modulo in BPL1MOD e BPL2MOD.