home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Enigma Amiga Life 109
/
EnigmaAmiga109CD.iso
/
software
/
testi
/
corsoasm
/
sorgenti5
/
lezione9d3.s
< prev
next >
Wrap
Text File
|
1995-10-23
|
5KB
|
168 lines
; Lezione9d3.s BLITTA VERSO DESTRA, a scatti di 1 word (senza usare shift)
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:
; Puntiamo la PIC "vuota"
MOVE.L #BITPLANE,d0 ; dove puntare
LEA BPLPOINTERS,A1 ; puntatori COP
move.w d0,6(a1)
swap d0
move.w d0,2(a1)
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
lea bitplane,a0 ; destinazione
moveq #50-1,d7 ; Num. di spostamenti a destra
MoveLoop:
MOVE.L #$1ff00,d1 ; bit per la selezione tramite AND
MOVE.L #$10800,d2 ; linea da aspettare = $108
Waity1:
MOVE.L 4(A5),D0 ; VPOSR e VHPOSR - $dff004/$dff006
ANDI.L D1,D0 ; Seleziona solo i bit della pos. verticale
CMPI.L D2,D0 ; aspetta la linea $108
BNE.S Waity1
Waity2:
MOVE.L 4(A5),D0 ; VPOSR e VHPOSR - $dff004/$dff006
ANDI.L D1,D0 ; Seleziona solo i bit della pos. verticale
CMPI.L D2,D0 ; aspetta la linea $108
Beq.S Waity2
btst #6,2(a5) ; dmaconr
WBlit1:
btst #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
bne.s wblit1
; Cancellazione dello schermo
move.w #$0100,$40(a5) ; BLTCON0 - accende solo il canale D,
; questo provoca la cancellazione della
; DESTINAZIONE, dato che non c'e' la
; sorgente!!!
move.w #$0000,$42(a5) ; BLTCON1 - lo spieghiamo dopo
move.w #$0000,$66(a5) ; BLTDMOD = 0
move.l #bitplane,$54(a5) ; BLTDPT - destinazione = bitplane
move.w #(64*256)+20,$58(a5) ; BLTSIZE - alt.256 linee, largh. 20 w.
; cancella TUTTO LO SCHERMO, infatti
; le linee sono 256, (64*256) e i
; byte per linea sono 40 (20 words)
btst #6,2(a5) ; dmaconr
WBlit2:
btst #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
bne.s wblit2
; ..........
; .· .. ... :
; |.· _·· _ ·.|
; l ¯_ _¯ |
; | (º),(º) |
; | \_______/ |
; | |-+-+-| |
; l__`-^-^-'__|xCz
; `-------'
move.w #$ffff,$44(a5) ; BLTAFWM lo spieghiamo dopo
move.w #$ffff,$46(a5) ; BLTALWM lo spieghiamo dopo
move.w #$09f0,$40(a5) ; BLTCON0 (usa A+D)
move.w #$0000,$42(a5) ; BLTCON1 lo spieghiamo dopo
move.w #0,$64(a5) ; BLTAMOD (=0)
move.w #36,$66(a5) ; BLTDMOD (40-4=36)
move.l #figura,$50(a5) ; BLTAPT (fisso alla figura sorgente)
move.l a0,$54(a5) ; BLTDPT (linee di schermo)
move.w #(64*6)+2,$58(a5) ; BLTSIZE (via al blitter !)
; adesso, blitteremo una figura di
; 2 word X 6 linee con una sola
; blittata dai moduli opportunamente
; settati correttamente per lo schermo.
addq.w #2,a0 ; modifica l'indirizzo, puntando alla
; word seguente per la prossima
; blittata. La figura scatta in avanti
; di 16 pixel
dbra d7,moveloop
mouse:
btst #6,$bfe001 ; mouse premuto?
bne.s mouse
btst #6,2(a5) ; dmaconr
WBlit3:
btst #6,2(a5) ; dmaconr - attendi che il blitter abbia finito
bne.s wblit3
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
dc.w $108,0 ; Bpl1Mod
dc.w $10a,0 ; Bpl2Mod
dc.w $100,$1200 ; bplcon0 - 1 bitplane Lowres
BPLPOINTERS:
dc.w $e0,$0000,$e2,$0000 ;primo bitplane
dc.w $0180,$000 ; color0
dc.w $0182,$eee ; color1
dc.w $FFFF,$FFFE ; Fine della copperlist
;****************************************************************************
; Definiamo in binario la figura, che e' larga 16 bits, ossia 2 words, e alta
; 6 linee
Figura:
dc.l %00000000000000000000110001100000
dc.l %00000000000000000011000110000000
dc.l %00000000000000001100011000000000
dc.l %00000110000000110001100000000000
dc.l %00000001100011000110000000000000
dc.l %00000000011100011000000000000000
;****************************************************************************
SECTION PLANEVUOTO,BSS_C
BITPLANE:
ds.b 40*256 ; bitplane azzerato lowres
end
;****************************************************************************
Questo esempio e` analogo a lezione9d2.s, solo che ci spostiamo a destra invece
che in basso. Lo spostamento avviane modificando l'indirizzo destinazione
sul quale blittiamo, spostandoci di una word alla volta. Cio` equivale
a spostarci di 16 pixel alla volta (bleah!).