Le firmware (et le basic) de notre CPC a été désassemblé et commenté il y a une dizaine d’années et mis sur GitHub par Mike « Bread80 » Sutton il y a 2 ans.
Ce code est un exemple d’ingénierie et de bonnes idées. Notre basic n’était pas réputé pour sa rapidité pour rien.
Cette nouvelle rubrique ira donc décortiquer des parties de ces roms System.
L’idée n’est pas de moi (qui a dit: « comme d’habitude ? ») mais de Stéphane « Siko » Sikora qui expliquait le fonctionnement de la touche COPY sur open.amstrad.info.
Premier épisode: un pas à pas en Basic
Pour mon émulateur CrocoDS, j’ai voulu implémenter un débogueur pas à pas du Basic
Pas certains que cela soit indispensable, mais ça me faisait envie et c’est le plus important.
Le pas à pas existe déjà en Basic grâce à la commande TRON.
Alors, vous me direz, pourquoi implémenter une fonction qui existe déjà ?
CrocoDS possède son propre éditeur et indiqué juste le numéro de ligne lors de l’exécution n’est pas ce que j’appelle du debugging… Par contre, c’est une bonne piste pour ce que je veux.
Le basic exécuté ligne par ligne via la fonction execute_line_atHL.
Si le trace_flag est à 1, il exécute la fonction do_trace qui affiche le numéro de ligne entre crochets.
À l’emplacement de la fonction do_trace, je place donc l’opcode 0xED,0xFA que le Z80 ne connait pas.
Dans ma fonction des décodages des instructions Z80, j’intercepte donc cet opcode et récupère le numéro de ligne qui se trouve dans la variable address_of_line_number_LB_of_line_of_cur.
Il ne me reste plus qu’à m’amuser avec ce numéro de ligne.
Je pourrais afficher toutes les variables Basic en mémoire à ce moment, mais je ne l’ai pas encore fait.
Nous remarquons aussi que le basic perd 7 NOPs dans chaque ligne Basic pour tester ce TRON qui n’a pas dû être utilisé souvent.
Fin du premier article sur les ROMs System. Est-ce que vous voulez en voir plus ou vous trouvez cela trop chiant ? N’hésitez pas à me critiquer 🙂