logo

 

Ces pages ne sont plus mises à jour !

Mais restent ici quand même. Attention: tout est vieux, et parfois faux. Tout se passe maintenant sur la wiki NeoGeo Development Wiki

Préface et documents
Architecture
Spécifications résumées
Architecture, Memory Map
BIOS
Structure des ROMs
Structure des CDs
Registres RAM
Vidéo
Système vidéo
Les palettes
Le fix
Les sprites
Audio
Système audio
Communication Z80
YM2610: ADPCM et SSG
Les pistes CDDA
Developpement
L'ASM 68K
Outils
Devkit ASM
Erreurs courantes
Portage MVS / NGCD
Electronique
Electronique
Cartouche flash MVS
Problèmes de lecteur CD
Productions
Astrosmash
Unleashed
Knackiballs
Bootloader et cable NGCD

Test MVS #01

Système vidéo

La NeoGeo est capable de faire le rendu d'une image de 320 par 224 pixels, avec 4096 couleurs affichables simultanément (sans tricher) sur une palette de 65536. La plupart des jeux n'utilisent que 304 pixels en largeur, laissant une marge de 8 pixels noirs à gauche et à droite.
Le rendu se fait d'une manière assez spéciale:

Il y a un plan fixe (souvent appellé "Fix layer") qui peut comporter des pixels transparents et qui recouvre tout l'écran (prioritaire).
Il utilise des tiles de 8x8 pixels, qui viennent du ROM S (ou des fichiers .FIX sur NeoGeo CD). Il sert généralement à afficher du texte comme les copyrights, les scores, les barres de vie...

Tout le reste est considéré comme des sprites.
Les fonds des jeux habituellement placés dans des couches spéciales (backgrounds), sont ici formés par une suite de sprites combinés.
Les sprites sont constitués de tiles de 16x16 pixels qui viennent des ROMS C (ou des fichiers .SPR sur NeoGeo CD).

Une règle essentielle à retenir concernant les couleurs: jamais plus de 16 couleurs par tile (que ce soit sur le fix, ou dans les sprites). Tous les graphismes ont leurs couleurs codées sur 4 bits.

Les sprites et le fix sont parametrés dans la RAM vidéo (VRAM). Elle est complètement indépendante de la RAM du 68K.
Elle est accessible qu'à travers des registres et elle est toujours adressé en words (16 bits).

Le framebuffer n'est pas directement accessible: ce n'est pas possible d'accédèr à la sortie vidéo pixel-par-pixel sur les versions cartouche.
C'est peut être possible sur NeoGeo CD, mais ça serait probablement très lent et donc inutile.

Les sprites sont controllés par 4 zones dans la VRAM, appelées Sprite Control Banks, ou SCB.
Le fix n'a qu'une simple map.

Timing de l'affichage

La pixel clock est à 6MHz, celà signifie qu'un nouveau pixel est affiché toutes les 166.7ns.

Si on se réfère à l'horloge principale (24MHz): Il y a 29 pixels de blanking à gauche, 320 pixels affichés, 7 pixels de blanking à droite puis 28 pixels pendant la synchro horizontale.
Ce qui fait 29+320+7+28 = 384 pixels effectifs par ligne horizontale.

Il y a 8 lignes pendant la synchro verticale, 16 lignes de blanking, 224 lignes affichées, puis 16 lignes de blanking.
Ce qui fait 8+16+224+16 = 264 lignes effectives par image.

La fréquence de rafraichissement est alors de: 6 millions de pixels par seconde / 384 pixels de largeur / 264 pixels de hauteur = 59.18 images / seconde.

 

Memory map de la VRAM

Notez bien qu'une adresse correspond à un word (16 bits), pas à ses LSB/MSB.

Début Fin Taille Description
$0000 $6FFF $7000 Sprite Control Bank 1 (place pour 512 sprites, mais seulement 380 sprites ont le temps d'être affichés)
$7000 $77FF $800 Map du fix
$8000 $81FF $200 Sprite Control Bank 2. Un word par sprite.
$8200 $83FF $200 Sprite Control Bank 3. Un word par sprite.
$8400 $85FF $200 Sprite Control Bank 4. Un word par sprite.
$8600 $865F $60 Géré par le hardware. Liste des 96 sprites actifs pour la ligne en cours de rendu (?)
$8680 $86DF $60 Géré par le hardware. Liste des 96 sprites actifs pour la ligne en cours d'affichage (?)

 

Lire et écrire en VRAM

L'adresse voulue en VRAM doit être écrite dans le registre REG_VRAMADDR ($3C0000). Ce registre ne peut qu'être utilisé en 16 bits et on ne peut pas le relire.

Les données sont lues et écrites dans le registre REG_VRAMRW ($3C0002), en words également.

Le GPU possède une fonction d'auto-incrémentation ou décrementation de l'adresse en VRAM à chaque écriture (l'adresse ne change jamais après les lectures).
La valeur du déplacement peut être écrite et lue dans REG_VRAMINC ($3C0004), la valeur est signée et permet donc aussi de décrementer l'adresse.
Par exemple, $0001 incrémente l'adresse de 1, et $FFFF la décrémente de 1.

Il est conseillé d'attendre quelques cycles entre des écritures successives en VRAM.
Des écritures trop rapides peuvent être l'origine de problèmes sur le vrai hardware.

footer
symbol symbol symbol symbol symbol