;
Esempio – Visualizzazione di una barra orizzontale sullo
schermo
;
di colore rosso sfumato
;
Utilizzando il tasto destro del mouse è possibile far
;
scendere la barra.
;
Listato derivato da tutorial asm di Fabio Ciucci
SECTION
SfumaCop,CODE ; anche in Fast RAM va bene
Inizio:
move.l 4.w,a6
; Execbase in a6
jsr -$78(a6)
; Disable – ferma il multitasking
lea GfxName(PC),a1
; Indirizzo del nome della lib da aprire in a1
jsr -$198(a6)
; OpenLibrary, routine della EXEC che apre
; le librerie, e da in uscita l'indirizzo di
; base di quella libreria da cui fare le distanze
; di indirizzamento (Offset)
move.l d0,GfxBase
;salvo l'indirizzo base GFX in GfxBase
move.l d0,a6
move.l $26(a6),OldCop
; salviamo l'indirizzo della copperlist di sistema
move.l #COPPERLIST,$dff080
; COP1LC - Puntiamo la ns. COP
; $dff080 = registro macchina COP1LC
move.w do,$dff088
; COPJMP1 - Facciamo partire la COP
mouse:
cmpi.b #$ff,$dff006
; VHPOSR – Siamo alla linea 255?
bne.s mouse
; Se non ancora, non andare avanti
btst #2,$dff016
; POTINP – Tasto destro del mouse premuto ?
bne.s Aspetta
; Se no, non eseguire "MuoviCopper"
bsr.s MuoviCopper
; Routine temporizzata ad 1 frame
Aspetta:
cmpi.b #$ff,$dff006
; VHPOSR – Siamo alla linea 255?
beq.s Aspetta
; Se si, non andare avanti, aspetta la linea
; seguente, altrimenti MuoviCopper viene
; rieseguito
btst #6,$bfe001
; tasto sinistro del mouse premuto ?
bne.s mouse
; se no, torna a "mouse:"
move.l OldCop(PC),$dff080 ; COP1LC – Puntiamo la cop
di sistema
move.w d0,$dff088
; COPJMP1 – facciamo partire la cop
move.l 4.w,a6
jsr -$7e(a6)
; Enable – riabilita il multitasking
move.l gfxbase(PC),a1
; Base della libreria da chiudere
; (le librerie vanno aperte e … chiuse).
jsr -$19e(a6)
; CloseLibrary – chiudo la graphics lib
rts
; ----------------------------------------------------
; Questa routine sposta in
basso una barra
; composta da 10 wait – linee
; ----------------------------------------------------
;
MuoviCopper:
cmpi.b #$fa,BARRA10
; siamo arrivati alla linea $fa ?
beq.s Finito
; se si, siamo in fondo e non continuiamo
addq.b #1,BARRA
; WAIT 1 cambiato
addq.b #1,BARRA2
; WAIT 2 cambiato
addq.b #1,BARRA3
; WAIT 3 cambiato
addq.b #1,BARRA4
; WAIT 4 cambiato
addq.b #1,BARRA5
; WAIT 5 cambiato
addq.b #1,BARRA6
; WAIT 6 cambiato
addq.b #1,BARRA7
; WAIT 7 cambiato
addq.b #1,BARRA8
; WAIT 8 cambiato
addq.b #1,BARRA9
; WAIT 9 cambiato
addq.b #1,BARRA10
; WAIT 10 cambiato
Finito:
rts
; ----------------------------------------------------
; COPPERLIST
; ----------------------------------------------------
SECTION
CoppyMagic,DATA_C ; Le copperlist devono stare
nella CHIP RAM!
COPPERLIST:
dc.w $100,$200
; BPLCON0 – solo colore di sfondo
dc.w $180,$000
; COLOR0 – Inizio la cop col colore NERO
BARRA:
dc.w $7907,$FFFE
; WAIT – aspetto la linea $79
dc.w $180,$300
; COLOR0 – inizio la barra rossa: rosso a 3
BARRA2:
dc.w $7a07,$FFFE
; WAIT – linea seguente
dc.w $180,$600
; COLOR0 – rosso a 6
( … continua …)
dc.w $FFFF,$FFFE
; FINE DELLA COPPERLIST
end
|