**
from an article by Philippe Rivaillon (privaillon free.fr)
in "l'Amiga Artiste Peintre" - Amiga
News Tech issues 32-33-34 avr/juin 1992
:
PART 2 : Lace and EHB
PART 1 : The Beginning
- PART 3 : HAM and Dual
Playfield
"Nous savons maintenant ouvrir un écran...
Avant de commencer à étudier les differents
modes graphiques, voyons ce que nous pouvons faire avec
ce que nous savons.
Un des premiers effets que l'on programme est le changement
du contenu des registres couleurs à l'aide du
Copper (gradient raster, plasma,...).
De la même manière, en changeant les pointeurs
écran et le registre BPLCON1 (voir plus
bas), on peut faire de nombreux effets : scrollings,
ondulations, enroulement d'images, rotations horizontales...
On peut disposer chaque ligne de bitplan comme on le
désire. Certains de ces effets sont aussi réalisables
à l'aide de changement de modulos, ce qui permet
d'alleger la copperlist et d'accélerer l'ensemble.
Toujours en modifiant les modulos, on peut faire un
effet de reflet du haut de l'écran dans le bas
: arrivé à la ligne voulue, on met une
valeur négative dans les modulos qui permettra
de réafficher les lignes dans le sens inverse.
Pour accéder aux dernieres lignes de balayage
avec le copper (>255 $FF), il faut faire un Wait($FFDF,$FFFE)
pour recommencer la numerotation des lignes à
0.
BPLCON1 - $DFF102 - 2ème registre de contrôle
des bitplans
Bit Name Function
15-8 unused
7-4 PF2H3-0 definissent le decalage des plans pairs.
la valeur varie de 0 à 15, ce qui permet de completer
le décalage des pointeurs video ayant une précision
d'1 mot.
3-0 PF1H3-0 Idem pour les plans impairs.
Avec ce reigstre, on peut positionner les lignes bitplans
au pixel près.
Le mode Interlaced
la mise en oeuvre de ce mode n'est pas aussi simple.
Ce qu'il faut savoir sur ce mode est qu'il double le
nombre de lignes affichées sans la moindre restriction
: pas de réduction du nombre de couleurs, pas
de choix special de la résolution horizontale
(Lores, Hires, SuperHires et Productivity) ni du mode
graphique (HAM, Dual-Playfield, Half-Bright).
hmm, il a quand meme un inconvenient : un scintillement
de l'écran (flickering).
Cela vient du fait que dans ce mode, l'Amiga n'est
pas assez rapide pour envoyer une image complète
au moniteur tous les 50ièmes de seconde. Il décompose
son envoi en 2 temps: d'abord les lignes paires puis
les lignes impaires. Il faut donc 2/50iemes de seconde,
soit 1/25ième, pour former une image complète,
fréquence à laquelle l'oeil humain perçoit
nettement les moindres changement.
Mais pourquoi ? Il faut comprendre le fonctionnement
d'un téléviseur standard : l'ecran ne
reçoit pas toute l'image d'un coup mais une demi-image
tous les 50ièmes de seconde (60ièmes en
NTSC). D'abord les lignes paires puis les lignes impaires.
Seuls les moniteurs multisynchrones possèdent
un balayage assez rapide pour afficher une image complète.
Le mode Interlace utilise se fonctionnement pour la
compatibilité avec tout type de moniteur ou téléviseur.
L'Amiga n'est pas ralenti par l'utilisation de ce mode.
Par contre il est impossible de faire du 50 images seconde.
Le scintillement peut être supprimer avec un Flicker
Fixer (il est inclus dans la version de base de l'A3000).
Une fois le bit 2 LACE de BPLCON0 activé, le
problème est que l'Amiga ne se charge pas lui-même
de distribuer soit les lignes paires soit les lignes
impaires. C'est à nous de le faire.
Le plus simple est de faire 2 copperlists : une pointera
sur les lignes impaires et l'autre sur les lignes paires.
Inutile d'adopter une structure de bitplan particulière,
il suffit d'initialiser les modulos de façon
à sauter une ligne sur deux.
Une fois les 2 copperlists prêtes, il existe plusieurs
possibilités : soit l'on fait pointer chacune
sur l'autre, soit on se charge de cette tâche
à la main à chaque VBL. On peut aussi
modifier soi-même les pointeurs ecrans avec 1
seule copperlist.
Deuxième probleme : comment savoir quelle copperlist
doit être demarrée en premier (pour ne
pas inverser les lignes paires et impaires).
VPOSR - $DFF004 - position verticale high (lecture)
VPOSW - $DFF02A - position verticale high (ecriture)
Bit Name Function
15 LOF Indicateur du type de lignes affichées
en mode Interlace : 0 pour les lignes paires, 1 pour
les impaires.
14-1 unused
0 V8 position verticale High Bit
VHPOSR - $DFF006 - position verticale et horizontale
(lecture)
VHPOSW - $DFF02C - position verticale et horizontale
(ecriture)
Bit Name Function
15-8 V7-V0 low bits position verticale
7-0 H8-H1 position horizontale (precision : 1/160ième
de la largeur = 280 ns)
c'est en lisant le bit LOF que l'on va savoir par quelle
CopperList commencer. Il faut déclencher le mode
entrelacé, attendre le VBL et choisir quelle
copperlist demarrera.
Example:
methode des 2 copperlists pointant chacune sur l'autre.
ecran 320x400 1 bitplan.
; init bitplans
pointers
START:
move.l #screen,d1
move.w d1,CLoddplan+6 ; base des lignes impaires
swap d1
move.w d1,CLoddplan+2
swap d1
add.l #40,d1 ; base des lignes paires
move.w d1,CLevenplan+6
swap d1
move.w d1,CLevenplan+2
move.l #EvenCopper,d1 ; jump to even copperlist
move.w d1,R_OddCop+6
swap d1
move.w d1,R_OddCop+2
move.l #OddCopper,d1
move.w d1,R_EvenCop+6
swap d1
move.w d1,R_EvenCop+2
move.w #$7FFF,$DFF096 ; all DMA off
move.w #$1204,$DFF100 ; lores Lace 1 bitplan
move.w #$20,$DFF09C ; interrupt VBL start
VBL:
move.w $DFF01E,d0
btst #5,d0
beq.s VBL ; wait Vertical Blank
btst #7,$DFF004 ; LOF=1 -> lignes impaires
bne.s ODD
move.w #$87C0,$DFF096 ; DMA on
move.l #EvenCopper,$DFF080
move.w #0,$DFF088 ; start even copperlist
bra.s CONTINUE
ODD:
move.w #$87C0,$DFF096
move.l #OddCopper,$DFF080
move.w #0,$DFF088 ; start odd copperlist
CONTINUE:
...
OddCopper:
dc.w $180,0,$182,$FFF
dc.w $100,$1204
dc.w $8E,$2C81,$90,$F4C1
dc.w $92,$38,$94,$D0
dc.w $108,40,$10A,40
dc.w $102,0
CLoddplan:
dc.w $E0,0,$E2,0
R_OddCop:
dc.w
$80,0,$82,0
dc.w $FFFF,$FFFE
EvenCopper:
dc.w $180,0,$182,$FFF
dc.w $100,$1204
dc.w $8E,$2C81,$90,$F4C1
dc.w $92,$38,$94,$D0
dc.w $108,40,$10A,40
dc.w $102,0
CLevenplan:
dc.w $E0,0,$E2,0
R_EvenCop:
dc.w
$80,0,$82,0
dc.w $FFFF,$FFFE
screen : ds.b 40*400
Le sixième bitplan : le mode Extra-Half-Bright
(EHB)
Avec ce 6ème plan, on passe de 32 à 64
couleurs. Ce mode n'est pas utilisable en HiRes.
Mais il n'y a que 32 registres couleurs ?!? Comment
en definir 64 ?
Les 32 couleurs supplémentaires seront déduites
des 32 premières en diminuant leur intensité
de moitié (chaque composante RGB est divisée
par 2). Exemple : couleur 0 = $417, couleur 33=$203.
Ce mode permet des effets d'éclairages ou d'ombrages
à l'aide de masques dans le 6ème plan,
ou d'avoir plus de dégradés.
Il suffit pour l'utiliser d'initialiser BPLCON0 à
$6280. (6 bitplans + bit 7)"
PART
1 : The Beginning - PART
3 : HAM and Dual Playfield
credits: Philippe Rivaillon in "l'Amiga
Artiste Peintre" - ANT issues 32-33-34 avr/juin
1992
|