Home
 
 
Linux



Firewall >

QoS >

PowerPC >

PHP & Interbase >

 

 

Amiga

 


Storia >
Os 3.9 >
Amiga DE >

 

 

Autore

 


Autore:
Masetti Marco

email:
marcomas@libero.it

ultimo aggiornamento:
Venerdì, 19 Febbraio 2003

 

 
 
 
 
 
 
 

                 Amiga: la storia         

        

Esempio listato assembler (.asm)

; 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