Driver Z80


Le BIOS vérifie toujours si le Z80 répond correctement au démarrage de la console.
Ceci impose au driver de répondre au minimum à deux commandes standart: $01, et $03.

La commande $01 demande simplement au Z80 de répondre $01, histoire de vérifier que la communication fonctionne.
Le commande $03 demande au Z80 d'initialiser sa RAM (nettoyer le terrain pour être prêt), et de redémarrer.

La commande $02 est reservée pour la lecture du jingle NeoGeo sur les versions cartouche, mais le BIOS n'attend pas de réponse particulière. Elle peut donc être ignorée si besoin.


En général, tous les drivers des jeux commerciaux répondent systématiquement la commande reçue du 68K en guise de confirmation.
Comme une sorte "d'écho". Je ne sais pas si les jeux vérifient à chaque fois que la réponse est bonne, mais c'est en tout cas une bonne façon de savoir si le driver à planté ou non.

Si le Z80 ne répond pas à la commande $01 au démarrage de la NeoGeo, il sera affiché "Z80 ERROR" et l'execution ne sera pas poursuivie.
Sur la version MVS du hardware, le BIOS n'attend pas spécialement de réponse pour la commande $03.


Après ces deux commandes, le driver doit être en mesure d'accépter des commandes permettant de lire du son.

Par exemple, dans la plupart des jeux commerciaux, les commandes $20 à $7F sont utilisées pour démarrer la lecture de musiques.

Lorsque le Z80 reçoit une commande de lecture, il paramètre l'YM2610 avec la configuration des instruments et commence à lui lire la partition. Pendant ce temps là, le 68K s'occupe de ses affaires (du jeu en lui même).

 

Comme l'YM2610 possède plusieurs synthétiseurs, des lecteurs de samples et plusieurs canaux, il est bien sûr possible de génerer des sons "par dessus" la musique éventuellement en train d'être lue.

Dans ce cas, le 68K peut par exemple utiliser les commandes $80 à $FF pour demander la lecture de tel ou tel effet sonore.

Le Z80 continue alors de lire la musique, et intercale entre les commandes, celles nécessaires pour que le YM2610 lise l'effet sonore. C'est le Z80 qui est chargé de savoir si il y a des canaux libres pour la lecture, et de choisir le bon en conséquence.

 

La commande $7F peut parfois être utilisée pour arrêter la musique actuellement en cours de lecture.

D'autres commandes peuvent aussi être utilisées pour arrêter seulement les effets sonores, ou seulement qu'un canal en particulier. Tout ceci est au choix et dépend seulement du driver.

 

Memory map du Z80: (MAME)
$0000 à $7FFF: Main Bank
$8000 à $BFFF: Cart Bank + 3
$C000 à $DFFF: Cart Bank + 2
$E000 à $EFFF: Cart Bank + 1
$F000 à $F7FF: Cart Bank + 0
$F800 à $FFFF: RAM

Le bankswitching est utilisé car les partitions musicales prennent souvent beaucoup de place.

Sur NeoGeo CD, le driver Z80 fait toujours au maximum 64Ko.

 

Attribution des ports Z80: (MAME)

Port 0: Lecture commande issue du 68K
Ports 4 à 7: Communication YM2610 (Addr A, Data A, Addr B, Data B)

La selection des banks pour l'espace mémoire de $8000 à $F7FF se fait par lecture sur les ports 8, 9, 10 et 11.
SNK ont utilisé une caractèristique non-documentée du Z80, qui fait que le bus d'adresse entier (et non pas seulement 8 bits) est utilisé pendant des opérations IN / OUT sur les ports.
On peut donc choisir la bank en faisant un IN A,(Port) avec le numéro de bank dans A. Ou encore IN A,(C) avec le numéro de bank dans B.
Ces étrangetés sont détaillées dans des documents non-officiels traitant du Z80.

Port 8: Selection bank F000-F7FF
Port 9: Selection bank E000-EFFF
Port 10: Selection bank C000-DFFF
Port 11: Selection bank 8000-BFFF

Ecriture:
Port 12: Ecriture réponse vers le 68K

Le Z80 reçoit les commandes provenant du 68K sur le port 0, et répond sur le port 12.
Les commandes passent par un buffer (NEO-SUD sur NeoGeo CD) en attente d'être lues par le Z80 (étant plus lent que le 68K).
Ce buffer ne possède pas de stack (file d'attente), il faut donc attendre un minimum entre deux commandes, sinon elles sont écrasées.

Il y a des commandes communes à tous les drivers, peut être imposées par SNK:

Premier démarrage: 0x01, attendre "1" en réponse.
Initialisation: 0x03
Musique du logo Neogeo: 0x02
Fondu: 0x0A, vitesse

Les autres codes dépendent du jeu. Beaucoup ont leurs codes de musiques qui commencent à $20.

Disasm du driver son (sm1.sm1) du BIOS AES: télécharger.

WinKawaks ne s'occupe pas de sm1.sm1 du BIOS AES, il utilise le M1 du ROM qu'on charge.
Tous les M1 contiennent la partition du son de l'écran de démarrage (code 2).

Les drivers des jeux commerciaux sont généralement signés. Dans celui de Blue's Journey, par exemple, on peut lire:
Operation System Program for Music & Effective Sound Ver. 3.5 (c) Copyright ALPHA DENSHI Co., Ltd. 1990 / Novenber / 1 RG by M.Chiba <^_^>