Tachibana
Langue : français

L'API du Neo6502

Tout ce que le 65C02 demande au RP2040 — écran, son, fichiers, clavier, horloge — passe par une petite boîte aux lettres en $FF00. Voici son mode d'emploi, fonction par fonction, pour le firmware officiel et pour Trinity, avec des exemples exécutés et vérifiés.

Télécharger la spécification (YAML)

Deux processeurs, une boîte aux lettres

Le Neo6502 d'Olimex associe un vrai W65C02S, qui exécute les programmes, et un RP2040, qui fait tout le reste : sortie vidéo DVI, son, clavier et souris USB, fichiers sur clé USB, horloge. Le 65C02 dispose de 64 Ko de RAM ; pour obtenir un service du RP2040, il écrit une demande dans une zone de 16 octets en $FF00, la boîte aux lettres. Le firmware du RP2040 la lit, rend le service, puis y dépose la réponse.

AdresseRôle
$FF00groupe de la fonction ; l'écrire en dernier lance l'appel ; le firmware le remet à 0 quand c'est fini
$FF01numéro de la fonction dans le groupe
$FF02erreur : 0 si l'appel a réussi
$FF03état : le bit 7 passe à 1 quand on appuie sur Échap
$FF04–$FF0Bparamètres P0 à P7, en entrée et en sortie

Un appel, en quatre temps

  1. Attendre que $FF00 vaille 0 (la boîte aux lettres est libre).
  2. Écrire les paramètres en $FF04 et suivantes.
  3. Écrire la fonction en $FF01, puis le groupe en $FF00 : l'appel part.
  4. Attendre que $FF00 revienne à 0, puis lire $FF02 (erreur) et les résultats.

C'est exactement ce que font la routine WaitMessage du noyau ($FFF4), la bibliothèque C de llvm-mos et l'unité neo6502 de Mad Pascal. Le noyau offre aussi quelques points d'entrée prêts à l'emploi : WriteCharacter ($FFF1), ReadCharacter ($FFEE), ReadLine ($FFEB), SendMessage ($FFF7)… Trinity y ajoute les tâches et les sémaphores ($FFC1 à $FFDC).

Conventions

Dans chaque langage

Firmware officiel et Trinity

Le firmware officiel est celui de Paul Robson ; Trinity est le firmware alternatif du collectif, qui s'appuie sur lui. Chaque fonction porte une étiquette : Officiel (identique dans les deux), Modifié par Trinity ou Trinity (n'existe que dans Trinity). La fonction 1,11 donne la version du firmware en cours.

Comment les exemples sont vérifiés

Chaque exemple publié a été compilé puis exécuté dans l'émulateur Phosphoneo, avec le firmware Trinity. Un banc de test vérifie dans le journal des appels que le programme appelle bien la fonction documentée, sans erreur, puis compare ce qu'il affiche à ce qui est attendu ; la sortie observée est reproduite sous chaque exemple, sauf quand elle dépend d'un matériel branché sur la carte (entrées-sorties UEXT) : l'émulateur n'y rend que des valeurs factices. Un exemple qui n'a pas passé ce banc n'est pas publié.

Ce qu'on ne dit pas : les exemples tournent sous Trinity ; ceux des fonctions officielles n'ont pas été rejoués sur le firmware officiel. Sur la carte, quelques fonctions se comportent autrement que dans l'émulateur (port série, modem, flash) : leur fiche le précise.

Les groupes

GroupeNomOrigineFonctionsexemples vérifiés
Groupe 1SystèmeOfficiel25 fonctions97
Groupe 2ConsoleOfficiel24 fonctions96
Groupe 3FichiersOfficiel30 fonctions120
Groupe 4MathématiquesOfficiel27 fonctions108
Groupe 5GraphismeOfficiel27 fonctions108
Groupe 6SpritesOfficiel5 fonctions20
Groupe 7ManettesOfficiel3 fonctions12
Groupe 8SonOfficiel16 fonctions64
Groupe 9Tortue graphiqueOfficiel6 fonctions24
Groupe 10Entrées-sorties UEXTOfficiel19 fonctions76
Groupe 11SourisOfficiel5 fonctions20
Groupe 12BlitterOfficiel4 fonctions16
Groupe 13ÉditeurOfficiel2 fonctions8
Groupe 14Série USB (CDC)Trinity6 fonctions24
Groupe 32QuickDrawTrinity19 fonctions76
Groupe 33Gestionnaire d'événementsTrinity6 fonctions24
Groupe 34Gestionnaire de fenêtresTrinity12 fonctions48
Groupe 35Gestionnaire de menusTrinity10 fonctions40
Groupe 36Gestionnaire de contrôlesTrinity10 fonctions40
Groupe 37Gestionnaire de dialoguesTrinity6 fonctions24
Groupe 38Gestionnaire de ressourcesTrinity8 fonctions32