Le Fix

Le fix est composé de tiles de 8x8 pixels, provenant du ROM S1 (ou des fichiers .FIX sur NeoGeo CD).
Ces tiles ne peuvent être attribués qu'aux 16 premières palettes. (256 couleurs dont 16 transparentes, soit 240 couleurs possibles sur tout le fix).

Les consoles comportent un tileset fix intégré, utilisé par le BIOS.
Le jeu peut choisir d'utiliser celui de la cartouche, ou celui du BIOS (voir registres).

Ci-contre, le fix isolé dans Metal Slug 2, le bleu clair vient de la couleur du backdrop (expliqué ici).

 

La map ("Fixmap") est située en VRAM, entre $7000 et $74FF. Avec un word par tile.

Le fix est mappé de haut en bas, et de gauche à droite.
La map mesure 40*32 tiles, soit 1280 ($500) words. L'affichage ne faisant que 40*28, seul le rectangle gris est vraiment affiché à l'écran.
Il y a donc une marge de 2 tiles en haut en bas, qui sont invisibles.
Il faut noter que la plupart des jeux n'utilisent pas les deux colonnes à gauche et à droite, réduisant l'affichage à 38*28 tiles (en rouge).
L'adresse de la map pour le premier tile effectivement utilisable (marqué en vert) est alors: $7000+32+2 = $7022.

On peut utiliser (Y+2+((X+1)*32))+$7000 pour obtenir l'adresse du tile qu'on veut modifier depuis ses coordonnées.

Pour afficher du texte en ligne, les jeux utilisent frequemment une auto-incrémentation de 32-1en VRAM pour sauter à la lettre (colonne) suivante.

Format des données dans la fixmap:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Numéro de la palette
pour ce tile (0 à 15)
Numéro du tile à utiliser
(0 à 4095)

Exemple: écrire #$71B5 à l'adresse $7022 de la VRAM, affiche le tile numéro $1B5 utilisant la palette 7, dans le coin supérieur gauche de l'écran.

Attention, on peut être tenté d'effacer la fixmap avec le tile n°0 du tileset par défaut, or ce tile n'est pas transparent (couleur 1) ! Le tile n°$FF l'est.

Voici le contenu du fix intégré à la NeoGeo MVS (cliquer pour le voir en grand).
Il n'est pas garanti être exactement le même sur toutes les machines, mais les alphabets devraient au moins être communs à toutes les versions.

L'alphabet 8x8 commence au tile 0. Il correspond à l'ordre ASCII mais certains caractères sont remplacés (comme l'arobase).
Il arrive aussi que certains fix de jeux contiennent des lettres inversées, pour des raisons inconnues.

Deux alphabets gras 8x16 identiques à $100-$200 et $300-$400 (Tiles du haut et tiles du bas séparés de $100).

Un alphabet fin 8x16 à $900-$A00.

Logo "Winners don't use drugs" à $B00.

Joypad utilisable pour les "How to play" à $700.

 

Pour rappel, écrire dans $3A000A selectionne le fix de la machine (celui-ci), et écrire dans $3A001A sélectionne le fix de la cartouche.

Les ROMs S font au maximum 128ko car on ne peut pas addresser plus de 4096 tiles avec 12 bits pour le numéro du tile.
Au niveau du ROM, la taille d'un tile 8x8 est de 32 octets (8 * 8 pixels / 2 pixels par octet = 32). Avec 4096 tiles de 32 octets, on arrive à 128Ko. Le compte est bon.

Format des tiles: 1 octet pour deux pixels. 4 LSB:gauche, 4 MSB:droite.
Ligne0: Colonne 4 et 5, Colonne 6 et 7, Colonne 0 et 1, Colonne 2 et 3
... Il faudrait un joli dessin pour expliquer, ça viendra.