Registres RAM

Infos vérifiées plusieurs fois avec la source de MAME et de Raine. Les bits marqués comme "?" sont soit inutilisés, soit sans importance pour que les jeux fonctionnent.
Il faut toujours attendre un peu avant de lire la VRAM après avoir fixé une nouvelle adresse, ou lors de nombreuses écritures séquentielles.
"Invalide" fait soit rien, soit redémarrer la console.

Adresse
Nom
Lecture
Écriture
$300000
(octet)
REG_P1CNT

Etat des touches du joystick 1 (inversé)

7 6 5 4 3 2 1 0
D C B A Droite Gauche Bas Haut
?
$300001
(octet)
REG_DIPSW

Dipswitches, AES et MVS (inversé)

7 6 5 4 3 2 1 0
Freeze Freeplay Config multijoueurs Autofire Config monayeurs Mode (0:Test)
Remet le Watchdog à zéro.
La plupart des jeux écrivent D0 dans ce registre à chaque VBlank.
$300081
(octet)
?

Le bit 7 indique une demande d'accès au menu du BIOS

Remet le Watchdog à zéro ?
$320000
(octet)
REG_SOUND

Lecture Z80

Commande audio (écriture vers le Z80).

$320001
(octet)

REG_STATUS_A

Status hardware (inversé)

7 6 5 4 3 2 1 0
Status du calendrier ? Bouton de service Monayeur 2 Monayeur 1
Aucun effet ?
$340000
(octet)
REG_P2CNT

Etat des touches du joystick 2 (inversé)

7 6 5 4 3 2 1 0
D C B A Droite Gauche Bas Haut
Aucun effet ?
$380000
(octet)
REG_STATUS_B

Etat des touches et de la carte mémoire (inversé)

7 6 5 4 3 2 1 0
? Write protect de la carte mémoire Carte mémoire inserée Select J2 Start J2 Select J1 Start J1

MAME: "io_control_w"

$380000 select_controller
$380030: set_output_latch
$380040: set_output_data
$380050: upd4990a_control_16_w

$380001 ?
?

Sortie ports joysticks (inversé)

7 6 5 4 3 2 1 0
? Sorties port 2 Sorties port 1

 

$3A0001 REG_DISPENABL
Invalide
Activation de la sortie vidéo (activée par le BIOS)
$3A0011 REG_DISPDSABL
Invalide
Désactivation de la sortie vidéo
$3A0003 ?
Invalide
Utiliser la table de vecteurs du BIOS
$3A0013 REG_SWPROM
Invalide
Utiliser la table de vecteurs de la cartouche (par défaut)
$3A000B REG_BRDFIX
Invalide
Utiliser le tileset fix de la console
$3A001B REG_CRTFIX
Invalide
Utiliser le tileset fix de la cartouche (par défaut)
$3A000D REG_SRAMLOCK
Invalide
Protéger la SRAM en écriture
$3A001D REG_SRAMULOCK
Invalide
Permettre l'écriture en SRAM
$3A000F REG_PALBANK1
Invalide
Utiliser la banque de palettes 1
$3A001F REG_PALBANK0
Invalide
Utiliser la banque de palettes 0 (par défaut)

 

$3C0000
(word)
REG_VRAMADDR
Lecture VRAM (pas d'auto-incrémentation)
Adressage VRAM
$3C0002
(word)
REG_VRAMRW
Lecture VRAM (pas d'auto-incrémentation)
Écriture VRAM
$3C0004
(word)
REG_VRAMINC
Lecture de la valeur d'auto-incrémentation de l'adresse VRAM
Réglage de la valeur d'auto-incrémentation de l'adresse VRAM (signé)
$3C0006
(word)

REG_HBLANKCNT
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Compteur de ligne vidéo (format ?) ? 1:50Hz
0:60Hz
Compteur d'animation auto
$00F8-$00FF : Vertical sync
$0100-$010F : Top border
$0110-$01EF : Active display
$01F0-$01FF : Bottom border Voir ce diagramme.
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
Vitesse de l'animation auto
Recharger à chaque HBlank
Recharger à chaque VBlank
Prochaine interruption HBlank dans x lignes
Int.HBlank activée
Désactiver l'animation automatique ?
$3C0008
(word)
REG_HBLANKPOS
Invalide

Position (pixels) à laquelle l'interruption HBlank sera déclenchée (MSB)

$3C000A
(word)
Invalide

Position (pixels) à laquelle l'interruption HBlank sera déclenchée (LSB)

 

$3C000C
(octet)
REG_IRQACK
Invalide

Interrupt Acknowledge.
Obligatoire, sert de prévention anti-nesting.
Toujours répondre correctement à la fin d'un interruption.

7 6 5 4 3 2 1 0
  ACK VBlank ACK HBlank ACK IRQ3

 

$3C000E
$3C000F

?
Certains émulateurs traitent cette adresse de la même façon que $3C000A.
MAME ne s'en occupe pas. Aucun jeu n'en dépend.
La même chose.

Sur NeoGeo CD uniquement (notes prises depuis la source de NeoCD):
Pratiquement tout l'espace mémoire qui commence à $FF0000 n'est pas documenté et concerne le bloc CD ou le DMA...

Adresse Lecture Écriture
$ff011c (word) return 0xff | (region_code << 8);
0xff0002 (word)

load_files:

Si commande = $0550:
Si RAM[0x115a06]>32 et < 127, neogeo_cdrom_load_files(&RAM[0x115a06]);

x0115A06: [0] à [15]: Nom du fichier terminé par 0x00 ou ";".
Bank à [16] sur 2 bits (byte).
Offset à [18] (long, byteswapé). ReadLong68k()

Offset.l = 0x10f6a0 (?)

0xff0061 (byte)

upload_cmd_w

Si commande = $40:
int zone = RAM[0x10FEDA ^ 1];
int size = ReadLongSc(&RAM[0x10FEFC]);
Si size >0:
RAM[0x10FEDA ^ 1] = zone ^ 0x10; write_upload_word(0,0); RAM[0x10FEDA ^ 1] = zone;

Si size =0:
int upload_src = ReadLongSc(&upload_param[0]);
int upload_len = ReadLongSc(&upload_param[12]);
UINT16 upload_fill = ReadWord(&upload_param[8]);
UINT16 dma = ReadWord(&dma_mode[0]);
Si dma = 0xffdd: Palette (début), Memory card (début) ou RAM (n'importe où).
Si dma = 0xfef5: Upload dans l'autre sens (palette seulement ?)

0xff0064 0xff0071 (word)

upload_param (que les premiers 16 octets d'utilisés ?)

[0]: source (long), [12]: longueur (long), [8]: fill (word)

0xff007e 0xff008f (word) dma_mode
0xff0105 (byte) upload_type_w
0xff0111 (byte) spr_disable
0xff0115 (byte) fix_disable
0xff0119 (byte) video_enable
0xff016f (byte) disable_irq_w

0xff0183 (byte)

z80_enable