- Ce sujet contient 8 réponses, 4 participants et a été mis à jour pour la dernière fois par donutman, le il y a 3 années et 8 mois.
-
Sujet
-
Bonsoir à tous,
je suis nouveau sur ce forum.
Je me suis récemment lancé dans la programmation assembleur sous Amiga et j’ai découvert l’excellent livre « Amiga System Programmer’s Guide » chez Abacuns (livre à la couverture bleue).Je bloque néanmoins sur la compilation d’un de leur exemple (dont le but est la programmation d’une Copper list). En l’occurence, le programme doit partager l’écran en trois bandes noire, rouge et jaune.
Voici ci-dessous ma retranscription du code (section 1.5 page 93 du livre). J’ai mis en gras la ligne qui pose problème.
Lorsque je le compile j’obtiens l’erreur suivante :
** Word at Odd Address
108 dc.w COLOR00, $0000 ; Backgroundcolor black
Le manuel ASM-ONE donne des précisions concernant cette erreur :
Trying to assemble an « op-code » at and « odd boundary’ causes an « Word at Odd Address » error. This is because the MC68000 family is restricted to run commands on an even boundary.
Bon l’explication semble claire, l’op-code dc.w tombe sur une adresse impaire…
Mais il me semble intuitivement que le rôle de « align » juste au-dessus permet de rétablir l’alignement justement… Je ne suis pas très calé en assembleur et ne sait pas trop comment me dépatouiller de ça… J’ai tenté un « CLstart : EVEN » mais ça a créé d’autres soucis….
Une âme charitable pourrait-elle m’aider ??
Merci d’avance et bonne soirée :)
Donut.
–> Le programme (il n’y a pas de balises code sur ce forum ??)
***********************************************************
;*** Example for a simple Copperlist ***
; ASPG p.93; CustomChip-Register
INTENA = $9A ; Interrupt-Enable-Register (write)
DMACON = $96 ; DMA-control register (write)
COLOR00 = $180 ; Color palette register 0; Copper Register
COP1LC = $80 ;Address of 1. Copper list
COP2LC = $84 ;Address of 2. Copper listCOPJMP1 = $88 ;Jump to Copper list 1
COPJMP2 = $8a ;Jump to Copper list 2; CIA-A Port register A (Mouse key)
CIAAPRA = $BFE001; Exec Library Base Offsets
OpenLibrary = -30-522 ; LibName,Version/al,dO
Forbid = -30-102 ;
Permit = -30-108 ;
AllocMem = -30-168 ; Byte Size, Requirements/d0,dl
FreeMem = -30-180 ; Memory Block, Byte Size/al,d0; Graphic base
StartList = 38
; Other Labels
Execbase = 4
Chip = 2 ; request Chip-RAM;*** INITIALISATION ***
; request memory for Copperlist
Start:
move.l Execbase,a6
moveq #CLsize,d0 ; Set Parameter for AllocMem
moveq #chip,d1 ; ask for Chip-RAM
jsr AllocMem(a6) ; request memory
move.l d0,CLadr ; Address of the RAM-area memory
beq.s Ende ; Error! –> End; copy Copperlist to CLadr
lea CLstart,a0
move.l CLadr,a1
moveq #CLsize-l,d0 ; set loop valueCLcopy:
move.b (a0)+, (a1)+ ; copy Copperlist Byte for Byte
dbf d0,CLcopy;*** Main programm ***
jsr forbid(a6) ; Task Switching off
lea $dff000,a5 ; Basic address of the Register to A5move.w #$03a0,dmacon(a5) ; DMA offn
move.l CLadr,copllc(a5) ; Address of the Copperlist to COP1LCclr.w copjmpl(a5) ; Load copperlist in program counter
; Switch Copper DMA
move.w #$8280,dmacon(a5); wait for left mouse key
Wait: btst #6,ciaapra ; bit test
bne.s Wait ; done ? else continue.;*** End programm ***
; Restore old Copper list
move.l #GRname,a1 ; Set parameter for OpenLibrary
clr.l d0
jsr OpenLibrary(a6) ; Graphics Library open
move.l d0,a4 ; Address of GraphicsBase to a4
move.l StartList(a4),cop1lc(a5) ; load address of Startlistclr.w copjmpl(a5)
move.w #$83e0,dmacon(a5) ; all DMA on
jsr permit(a6) ; Task-Switching on; Free memory of Copperlist
move.l Cladr, a1 ; set parameter for FreeMem
moveq #Clsize, d0
jsr FreeMem(a6) ; Memory freedEnde: clr.l d0 ; Error Flag erased
rts ; end program; Variables
CLadr: dc.l 0; Constants
GRname: dc.b « graphics.library »,0
align ; even for other assemblers; Copperlist
CLstart:
dc.w COLOR00, $0000 ; Backgroundcolor black
dc.w $640f,$fffe ; On line 100
dc.w COLOR00, $0f00 ; RED
dc.w $be0f, $fffe ; Line 190
dc.w COLOR00, $0fb0 ; GOLD
dc.w $ffff,$fffe ; impossible wait
CLend:CLsize = CLend – CLstart
end
; End of program***********************************************************
- Vous devez être connecté pour répondre à ce sujet.