&&------------------------------------------------------------------------------
COPPER-CURSUS DEEL 6                                    PLAATJES VIA DE COPPER
------------------------------------------------------------------------------

In de eerste delen van de Copper-cursus stonden kleuren en de eenvoudige
Copper-besturing centraal. In dit deel gaan we kijken hoe we plaatjes via de
Copper zichtbaar maken op het scherm.

Om met plaatjes te kunnen werken moeten we natuurlijk eerst plaatjes hebben
waar we wat mee kunnen doen.
De meeste tekenprogramma's slaan de plaatjes op op diskette als zogenaamde
IFF-files. Deze files zijn korter dan het werkelijke plaatje.

Wij moeten echter met de echte plaatjes werken. In de vorige tekst stond een
programma waarmee u IFF-plaatjes om kunt zetten in RAW-plaatjes.

Op de diskette staan in de subdirectory 'REGISTERS' twee plaatjes die in dit
verhaal gebruikt worden. Ze staan er als IFF-files. U moet ze zelf omzetten
naar RAW-files. De reden is eenvoudig : Het 5-bit-plane-plaatje is als IFF-
file 20K groot, als RAW-file 99K. Het zou dus onnodig veel diskgeheugen in
beslag nemen als het in RAW-file op disk staat.

&&Het eerste plaatje, Pic1.IFF, is een plaatje met een maat van 320 bij 256
puntjes en bestaat uit slechts 1 bit-plane.
Het tweede plaatje, Pic5.IFF, is een plaatje met een maat van 480 bij 330
puntjes en bestaat uit 5 bit-planes.


Laten we er van uit gaan dat ergens in het geheugen een plaatje staat dat via
de grafische chip op het scherm van de monitor moet komen. Daarvoor heeft de
Amiga een aantal gegevens nodig. Zo moet de Amiga weten waar het plaatje in
het geheugen staat, verder hoe groot het plaatje is, hoeveel bit-planes het
bevat, welke kleuren gebruikt moeten worden enz.

Veel van deze variabelen moeten bij elke beeldscherm-opbouw opnieuw gezet wor-
den. Zo wordt na elke gelezen regel het adres van het plaatje met een regel
opgehoogd (PBL1PTH).
De Copper is daarvoor natuurlijk zeer geschikt. De Copper kan namelijk vast-
stellen dat er met een nieuwe opbouw begonnen wordt. De CopperList bevat de
volgende opdrachten :

- Het geheugenadres (PIC) van het plaatje moet in een hoge- en lage-byte om-
  gezet worden omdat de Copper geen lange woorden kent :

  DC.w   $E0,PIC/$10000       ; High-byte
  DC.W   $E2,PIC&$FFFF        ; Low-Byte

&&- BPLCON0 moet de juiste waarde krijgen. Hierin staat het aantal bit-planes
  en de beeldscherm-mode. Bekijk de volgende tabel maar eens :

  BIT   WAARDE   FUNKTIE
  ------------------------------------------
  15    1        Hires aan
  12-14 Getal    Aantal gebruikte bit-planes
  11    1        Hold & Modify aan
  10    1        Dual Playfield aan
   9    1        Video-uitvoer op kleur
   8    1        Genlock-video aan
   7-4  -        Ongebruikt
   3    1        Lichtgeweer aan
   2    1        Interlace aan
   1    1        Externe sync aan
   0    -        Ongebruikt
  ------------------------------------------

  Voor ons eerste plaatje moet het aantal bitplanes op 1 staan, en video op
  kleur :

  DC.w   $100,%0001001000000000

&&- De achtergrond-kleur komt in COLOR00, de voorgrond-kleur in COLOR01 :

  DC.w   $180,$000    ; Zwart als achtergrond
  DC.w   $182,$FFF    ; Wit als voorgrond

- De definitie van de beeldscherm-maat en de plaats van het plaatje op het
  scherm behandelen we verderop. De juiste waarden voor een plaatje van 320
  bij 256 puntjes en in het midden van het scherm, zijn de volgende :

  DC.w   $8E,$3081,$90,$30C1,$92,$38,$94,$D0

Ons programma, plus het plaatje, moet in CHIP-geheugen liggen omdat anders de
Copper niet bij de gegevens kan komen.
&&Listing 1 toont het kant en klare programma. Na het assembleren moet het
plaatje geladen worden. Het kommando daarvoor is :

RI [RETURN]

Daarna vraagt de Amiga om een naam van een plaatje :

PIC1.RAW

Dan vraagt de Amiga waar het plaatje geladen moet worden. U geeft daar het
label PIC voor op :

PIC

Op de vraag naar het eind-adres geeft u alleen een return.

U kunt het programma dan starten met jx.
&&LISTING1 :

org     $40000
load    $40000

x:      move   #$4000,$DFF09A      ; Multitask uitzetten
        move.l #cop,$DFF084        ; Eigen Copperlist aanzetten

Wacht:  btst   #6,$BFE001          ; Wachten op de muistoets
        bne.s  Wacht
        rts

cop:    DC.w   $E0,PIC/$10000,$E2,PIC&$FFFF
        DC.w   $100,%0001001000000000
        DC.w   $180,0,$182,$FFF
        DC.w   $8E,$3081,$90,$30C1,$92,$38,$94,$D0
        DC.l   $FFFFFFFE

Even
Pic:    BLK.b  10250
Einde:  DC.l   0

U vindt de listing in de registers-sub-directory onder de naam LISTING1.S. U
moet dit programma zelf assembleren omdat het relative-adres in de eerste
regels van de CopperList niet als object-module op diskette te zetten is.

------------------------------------------------------------------------------
&&
