
   Ahogy       ígértük,    most  elkezdünk megírni egy egyszerű kis példademót.
Az  első    feladat     legyen  egy  kép megjelenítése. Az egyszerűség kedvéért
legyen ez a kép 320 X 200 -as 32 színű (tehát LoRes NoInterlace).

   Mindenekelött  tudni  kell,  hogy  a  kép létrehozásáért a Copper processzor
felelős.  Ez  a  processzor  írni  tudja  az összes hardware regisztert, többek
között  a  képernyő  regisztereit  is, így neki kell megmagyarázni, hogy milyen
képet  szeretnénk.  Erre  találták  ki  a  copperlistát,  amit felfoghatunk egy
speciális   programként  is.  Ezt  a  copperlistát  valahova  be  kell  írni  a
memóriába,  és  meg  kell  mondani  a coppernek, hogy hol találja, ezután ő már
automatikusan  létrehozza  a  képet. A copperlista megírásához ismernünk kell a
copper  utasításait.  Minden  utasítás  2  szóból  áll  (word). Az utasítások a
következők :

 MOVE : konstans adatot tölt be egy hardware regiszterbe.
        az első utasítás word a regiszter relatív címét tartalmazza,
        a második pedig a 16 bites adatot, amit a regiszterbe tölt.

        első word :
         bit 15-9: mindíg 0, nem használt
         bit  8-1: a regiszter címe (relatív)
         bit    0: mindíg 0, a címek párosak !

        második word:
         bit 15-0: a 16 bites adat

 WAIT : a copper addíg vár, amíg a video pozíció számlálók egyenlőek vagy
        nagyobbak lesznek, mint a megadott koordináták.
        az első word az adott koordinátákat tartalmazza, a második pedig a
        maszk bitjeit, amivel meg lehet adni, hogy melyik biteket vegye
        figyelembe az összehasinlításnál.

        első word :
         bit 15-8: függőleges pozíció
         bit  7-1: vízszintes pozíció
         bit    0: mindíg 1

        második word :
         bit   15: legyen ez 1
         bit 14-8: függőleges maszk
         bit  7-1: vízszintes maszk
         bit    0: mindíg 0

 SKIP : az utasítás hatására a copper átugorja a következő utasítást, ha a
        koordináták egyenlőek vagy nagyobbak, a megadott értéknél.

        első word :
         bit 15-8: függőleges pozíció
         bit  7-1: vízszintes pozíció
         bit    0: mindíg 1

        második word :
         bit   15: legyen ez 1
         bit 14-8: függőleges maszk
         bit  7-1: vízszintes maszk
         bit    0: mindíg 1

   A  copperlista  megírásához  ismerned  kell még a hardware regisztereket is.
Ezek  leírását a Regisztertérkép című cikkben találod. Ha jól áttanulmányoztad,
már  meg  tudod  írni  a  copperlistát, azonban kell még egy kis program is ami
elmagyarázza  a  coppernek, hogy hol van. A listát a program végén definiáltam,
ebből  még  hiányoznak a bittérképek címei és a színek, ezért mielött a coppert
elindítanánk  ezeket  be  kell  írni!  Ezt  csinálja  a következő program-rész:
(Beírhatnánk  ezeket  előre  is, de nem tudjuk, hogy az assembler hova fordítja
le  a  programunkat, így előre nem ismerjük a bittérképek címeit. Természetesen
meg  lehet  adni  a  fordítónak egy abszolút címet, de elötte jól körül kellene
nézni, nehogy azt a területet más is használja !!!)

;
; A bittérképek címeit beírja a copperlistába :
;
        move.l  #pic,d0     ; az első bittérkép címe d0-ban
        lea     bpls,a0     ; ide írja be a címeket
        moveq   #4,d7       ; 4+1=5 cím beírása
cikl1:  move.w  d0,6(a0)    ; a cím alsó word-jét írja be
        swap    d0          ; felcseréli a két word-öt
        move.w  d0,2(a0)    ; és beírja a felsőt is,
        swap    d0          ; majd visszacseréli
        add.l   #10240,d0   ; a következő bittérkép 10240 byte-al
        addq.l  #8,a0       ; nagyobb címen van (40*256 byte)
        dbf     d7,cikl1    ; ha van még, jön a következő
;
; A színeket is beírja a copperbe :
;
        lea     cmap,a0         ; a paletta címe
        lea     colors+2,a1     ; ide kell beírni
        moveq   #31,d7	        ; 31+1=32 szín
cikl2:  move.w  (a0)+,(a1)      ; beírja a szín kódját
        addq.l  #4,a1           ; a következő színt 4 byte-al magasabb
        dbf     d7,cikl2        ; címre írja

Most már indíthatjuk is a coppert.

;
; Indítja a coppert :
;
        move.l  #copper,$dff080	; copper start
        move.w  #$0020,$dff096  ; lekapcsolja a sprite-okat
;
; Vár a bal egérgombra :
;
wait:   btst    #6,$bfe001
        bne.s   wait

   A  bal  egérgomb  megnyomása után visszaadja az eredeti képet (egy ROM-rutin
segítségével) és kilép a programból.

;
; Visszaállítja az eredeti (CLI) képet :
;
        lea     gfx,a1              ; graphics.library
        move.l  4,a6                ; execbase
        jsr     OldOpenLibrary(a6)
        move.l  38(a0),$dff080      ; az eredeti copper cím a gfxbase 38-as
        move.w  #$8020,$dff096      ; ofszetjén van, majd sprites off
        rts                         ; kilépés
gfx:    dc.b    'graphics.library',0,0
;
; A copper lista :
;
copper: dc.w    $1001,$fffe     ; WAIT $10,$01
colors:	dc.w    $180,0,$182,0   ; MOVE 0,COLOR0 ; MOVE 0,COLOR1
        .       .
        .       .
        .       .
        dc.w    $8e,$2c81       ; MOVE $2c81,DIWSTRT
        dc.w    $90,$2cc1       ; MOVE $2cc1,DIWSTOP
        dc.w    $92,$38         ; MOVE $38,DDFSTRT
        dc.w    $94,$d0         ; MOVE $d0,DDFSTOP
bpls:   dc.w    $e0,0,$e2,0     ; MOVE 0,BPL1PTH ; MOVE 0,BPL1PTL
        .       .
        .       .
	dc.w    $100,$5200      ; MOVE $5200,BPLCON0
	dc.w    $ffff,$fffe     ; WAIT $ff,$ff  =  Copper End
;
; Hely foglalás a képnek és a palettának :
;
pic:    blk.b   51200,0
cmap:   blk.b   64,0

   Ezt  a  rutint  megtalálod  a  lemezen  a  DD-DATA  könyvtárban. Ahhoz, hogy
kipróbáld  kell  egy  kép  is  (van  egy  kész  szintén a DD-DATA könyvtárban).
DPaint-al  rajzolj  egy  32  színű  képet és konvertáld át bittérkép formátumra
úgy,  hogy  a színtáblázat a végén legyen. Ez az IFF-converternél így néz ki: A
'Load  IFF  picture'  menüvel  betöltöd a DPaint képed, majd az 'Other' menüből
kiválasztod  a  'Colormap  behind'  pontját,  ezzel  a  színlistát  a  kép mögé
tetted,    majd    'Save    normal    bitmap'-al    kimented.  A  feladatra  az
"IFF    CONVERTER    3.03"-at   használtam,  de  ennek  korábbi  verziói,  vagy
hasonló funkciójú segédprogramok is megfelelnek.

   A  program  lefordítása  után  ezt  az  átkonvertált képet töltsd be a 'pic'
címke  mögé!  ( ri <return>, a kép neve <return>, pic <return><return> ) Ezután
J-vel  indítsd  el  a  programot,  és a kép meg fog jelenni. Ha mégsem ne ijedj
meg, nem az AMIGA-d rossz! Ekkor próbálkozz újra!

   Legközelebb  kis  demónkat  kibővítjük  egy zene-lejátszó-rutinnal, és egyéb
apróságokkal,  addíg  is  kísérletezz  a  copperlistával.  Ha  valami nem lenne
világos, vagy problémák merültek fel, írj !

  Punk József
  8181 Berhida
  Magyar Ifj. út 27.

Sok szerencsét a kísérletezéshez !

 Readysoft from FI-RE Crew.
