Aller au contenu
Projet 816wiki
Sommaire

Le plan des registres (v0.1)

Le contrat entre le logiciel 65816 et les trois circuits programmables : ce que chaque registre fait. Version 0.1, encore une proposition à valider.

Dans cette page

Les conventions communes

  • Chaque bloc expose 32 registres de 8 bits, de $00 à $1F, répétés huit fois dans sa page de 256 octets.
  • Les valeurs sur 16 ou 24 bits rangent l’octet de poids faible à l’adresse la plus basse (suffixes _L, _M, _H). Une écriture n’agit qu’à l’écriture de l’octet _H ; une lecture de _L fige les autres.
  • Le registre $1F (ID) donne l’identifiant du bloc et la version de son plan : 9K = 1, vidéo = 2, Pico = 3 ; une carte d’extension est invitée à répondre F.
  • Chaque bloc a un masque d’interruptions (IRQ_EN) et un registre d’état (IRQ_STAT) que le gestionnaire d’interruption lit pour trouver la source.

La 9K, contrôleur système ($00:9C00)

RegistresRôle
SYS_CLK, SYS_STATUSvitesse de PHI2 (valeurs à définir après mesure), état des PSRAM, du codec et du démarrage
IRQ_EN, IRQ_STAT, TMR_*interruptions et minuterie
FM_*, PSG_*accès aux cœurs sonores FM (YM2151) et PSG (AY-3-8910), à revoir si un autre timbre est choisi
PCM_*, MIX_*canal d’échantillons et mélangeur (volumes FM, PSG, PCM)
DMA_*enregistrement par DMA : adresse en PSRAM, longueur, format
I2C_CTRL, I2C_DATAcommande du codec audio, sur son I²C en 1,8 V
MEM_PTR_*, MEM_DATAport mémoire : lire ou écrire un octet de PSRAM à une adresse sur 24 bits, avec avance automatique

La vidéo, Tang Nano 20K ($00:9D00)

RegistresRôle
VADDR0_*, VINC0, VDATA0port 0 : adresse vidéo, pas d’avance, donnée
VADDR1_*, VINC1, VDATA1port 1, identique
VCTRL, VMODEaffichage actif, réinitialisation ; numéro de mode (liste à définir)
IRQ_EN, IRQ_STAT, IRQ_LINE_*interruptions : retour vertical, ligne choisie, collision de lutins (si retenue)
SCAN_*, BORDERligne en cours d’affichage ; couleur de la bordure

La résolution, les modes, les couches et les sprites ne sont pas encore définis : ils viendront avec un plan de la mémoire vidéo.

Le Pico, entrées-sorties ($00:9E00)

RegistresRôle
CMD, STATUS, ERROR, ARG0 à ARG7boîte aux lettres : arguments, code de commande, état et erreur
DATA, DATA_CNT_*port de données de la commande en cours, et nombre d’octets en attente
IRQ_EN, IRQ_STATfin de commande, clavier, souris, console série, réseau
KBD_*, MOUSE_*, JOY0, JOY1clavier, souris et deux manettes, lus directement
UART_DATA, UART_STATUSconsole série

Premières commandes : version, fichiers (ouvrir, lire, écrire, fermer, se placer, lister, supprimer), horloge (lire, régler) et état du réseau. Le temps de réponse du Pico, qui travaille en logiciel, reste à mesurer ; s’il ne suffit pas, la 9K pourra prolonger l’horloge pendant ses accès.

Le chargement du démarrage (proposition)

Pendant le démarrage, le processeur est tenu hors du bus. Le Pico prend alors sa place sur une partie du bus et écrit, par le port mémoire de la 9K, les vecteurs puis le code de démarrage dans la PSRAM. Un registre de fin de démarrage reste à ajouter. Le mécanisme ne demande aucune broche de plus ; le rythme des accès côté Pico reste à vérifier.

Ce qui reste à valider

  1. Les cœurs sonores, et donc les registres FM et PSG.
  2. Les formules de la vitesse de PHI2, de la fréquence PCM et du prédiviseur de la minuterie.
  3. Le chargement du démarrage par le Pico et son registre de fin.
  4. Les modes vidéo, la résolution et le plan de la mémoire vidéo.
  5. Les formats du clavier et des manettes, et le branchement des prises DE-9.
  6. Le temps de réponse du Pico sur le bus.

Le plan complet, registre par registre, est dans le dépôt : docs/registers.md, vérifié par tools/check_registers.py.

Sources dans le dépôt : docs/registers.md, docs/SPEC.md.