Le Commodore 64 et sa mémoire video

Comme tous system informatique, le C64 doit mémoriser des informations pour construire son image de sortie. On parle souvent de mémoire video. (Vram)

C'est le VICII qui travaille pour la video. Et comme beaucoup d'ordinateur, la VRAM se trouve dans la RAM de l'ordinateur. (A ma connaissance seul la game MSX possède une VRAM qui est dédiés dans les machines 8 bits)

Contrairement au processeur principale 6510 qui peut adresse 64ko (toute la mémoire), la VIC ne peut adresse que 16ko mais il est possible de choisir 4 emplacements.

Screen Memory

Qui peut aussi être appellé Tilemap, le Screen Memory est une plage de 1000 octets qui permet de construire l'image. Chaque octet est liés à un morceau d'écran de 8x8 pixel et son contenu pointe sur un numero de tile à afficher. (256 possibilités de tiles qui sont affichables).
L'organisation du Screen Memory est linéaire. Le 1er octet corespond au bloc 0,0 le 2em octet au bloc 1,0...
Les 1000 octets donne donc une résolution affichable de 40x25 bloc de 8x8 pixels (320x200).
Au demarage du C64, la position du screen memory se trouve à l'offset $400 de la plage du vicII. (Donc a l'adresse $400 vu que le vicII est possitioné à l'adresse $0 au dépard). Il est possible de modifier le pointeur d'offset du screen memory.

Color ram

Une plage de 1000 octets à partir de l'adresse $D800 jusque $DBE7. Chaque octet représente un bloc de 8x8 pixel, et permet de choisis une couleurs entre les 16 teintes proposés par le C64. En mode "Normale" du C64 c'est la couleur du point allumés dans le bloc.

Pointeur de sprite

A partir de l'offset $07F8 du vicII, une plage de 8 octets représente un pointeur de parten de sprite. La valeur dans cette octet x 64 + adresse du vicII donne une adresse du 1er octet de l'encodage des data du sprite.
Exemple : Si j'ai la valeur 56, et que le vicII n'a pas bougé, cela donne donc 56*64+0 = 3580. Le patern de ce sprite se trouve à l'adresse 3580 (en decimal soit $E00)

Les Registres de couleur

Il existe des emplacements mémoires qui permettent de mémoriser les couleurs utilisés. Les voicis :

La couleur du ScreenFrame (ou Border) se trouve à l'adresse $D020.

La couleur du screenbackground (fond en mode normale) se trouve en $D021.

La couleur du screenbackground 1 utilisé dans le mode multicouleur et ECM se trouve en $D022.

La couleur du screenbackground 2 utilisé dans le mode multicouleur et ECM se trouve en $D023.

La couleur du screenbackground 3 utilisé dans le mode ECM se trouve en $D024.

Les couleurs du mode Sprite Multicolor 1 et 2 se trouve en $D025 et $D026.

La couleur du sprite 0 au sprite 7 se trouve de l'adresse $D027 et $D02E.

Mode "Texte"

Le C64 peut fonctionner en mode Charactère (ou tiles si vous préférés). Il existe Trois mode video en mode Charactères. Le Mode Normale, le Mode Multicouleur, et le mode etendue.

En mode normal, un tile est encodé sur 8 octets. 1 octet par ligne de 8 pixel. Chaque bit représente un point allumé et affiche la couleur associé à la color ram, ou affiche la couleur du fond d'écran si le bit = 0.
Ce qui donne que 2 possibilités de couleur par bloc de 8x8 pixel avec une couleur commune, celui du fond d'écran

Le mode multicolor, un tile est toujours encodé sur 8 octets. (1 octet par ligne de 8 pixels), ceci dit, on controle que 4 pixels. (Le pixel est doublé dans la largeur pour atteindre du 8x8).
Chaque (2*1) pixel est controlé par 2 bits ce qui donne 4 possibilités de configuration.
%00 : Le double pixel affiche la couleur du screenback
%01 : Le double pixel affiche la couleur du screenback 1.
%10 : Le double pixel affiche la couleur du screenback 2
%11 : Le double pixel affiche la couleur da la color ram "mais que les 8 premières couleurs) .
Ce mode permet donc d'avoir 4 couleurs par bloc de 8x8 pixel. 1 couleurs de la color ram sur 8 posibilités, et 3 couleurs communs à tous.

Le mode etendu : Comme en mode normale le tile est encodé sur 8 octets. 1 bit = pixel. pad de double pixel.
Si un bit est à 1, il affiche la couleur de la color ram. Si le pixel= 0 , alors il affiche la couleurs d'un des trois screenback.
La couleur du screenback est choisis dans les 2 derniers bit sur scree memory.
00xxxxxx : La couleur du screenback.
01xxxxxx : La couleur du screenback 1.
10xxxxxx : La couleur du screenback 2.
11xxxxxx : La couleur du screenback 3.
Ce system ne laisse que 6 bits pour choisir l'index du tiles donc ce mode permet de piocher que dans 64 tiles.
Tout comme le mode normale, ce mode permet seulement d'afficher que 2 couleurs par bloc de 8x8 pixels. La couleur de la color map et 1 des 4 couleurs communs au tiles.
Ce mode n'est pas compatible avec le mode Multicouleur.

Site réalisé par Jean Monos.