Home
80's & Games
Javanoïd | Pang
PooPooDream
AmiGames
 
Galleries
Marilyn | Ban
 
Amiga Oldies
modules | Goodies
 
Humour
Gallery | Goodies
 
Bibliothèque
Sci-Fi | Fantasy
Thriller Polar
Divers | Doc
 
Links
GuestBook
Wanted






..= l'Amiga Artiste Peintre - Graphics Modes =..
original french version

 Amiga Tutos

** from an article by Philippe Rivaillon (privaillonfree.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