production

cpcec-gtk

Télécharger cpcec-gtk.deb

Crédits

  • Code — NoRecess
  • Moteur — CPCEC, by Cesar Nicolas-Gonzalez

Crédits tels qu’ils figurent dans la release.

Note : cpcec-gtk est un projet abandonné. Il n’est plus développé, et aucun support ne l’accompagne. Ce qui suit le décrit tel qu’il a été laissé, en 2022.

cpcec-gtk est un émulateur Amstrad CPC, Plus et GX-4000 pour Linux à base Debian — Debian, Ubuntu, Pop!_OS et leurs proches. L’émulation elle-même, c’est CPCEC, le core fidèle écrit en C par César « cngsoft » Nicolás-González et publié sous GPL v3 ; tout ce qui l’entoure — l’interface GTK3, les fenêtres de debug, le packaging et la documentation — est de moi, écrit entre 2021 et 2022 par-dessus la version de janvier 2022 de ce core. Le projet entier, le core compris, est sur Bitbucket.

Il existe pour une seule raison : avoir, sous Linux, un émulateur dans lequel un programmeur CPC peut travailler plutôt qu’à côté duquel il travaille. Un fichier qui change sur le disque est rechargé et relancé tout seul, si bien qu’une toolchain qui reconstruit un .dsk met la nouvelle version à l’écran sans une seule touche ; les fichiers de symboles produits par rasm sont lus, si bien que le désassemblage se lit avec les noms du source ; et tout le debugger s’ouvre à la seconde où l’émulation est mise en pause.

Ce qu’il fait

  • lance les images disquette .dsk, les cartouches .cpr du Plus et de la GX-4000, et les snapshots .sna, et bascule tout seul sur une machine Plus quand une cartouche est insérée
  • ouvre un fichier par glisser-déposer, depuis le menu, ou depuis une bibliothèque de logiciels qu’il indexe récursivement et filtre par extension ou par quelques lettres du nom
  • recharge et relance un fichier inséré dès que son contenu change sur le disque
  • pilote deux lecteurs de disquettes, et crée un .dsk vide de zéro
  • gère les ROMs internes, lower et upper 0 à 127, en listant les RSX BASIC que chacune apporte et en permettant de les réordonner
  • lit les fichiers de symboles écrits par rasm, aussi bien les label symbols (-sz) que les ROM labels (-er)
  • accepte les manettes externes, branchées ou débranchées pendant qu’il tourne, et propose un joystick virtuel sur les flèches pour qui n’en a pas — avec le comportement de touches d’un vrai clavier Amstrad
  • répond à ALT+0..9 pour le pavé numérique qu’un portable n’a pas, et à ALT pour la touche COPY de l’Amstrad
  • zoome la fenêtre, tient un ratio de pixels 1:1, et sait montrer les parties du moniteur CRT qu’un programme cherche à cacher
  • enregistre les captures en .png et les snapshots en .sna, coupe le son, met en pause, et tourne à 1x ou 4x
  • garde la position des fenêtres, le chemin de la bibliothèque, les derniers fichiers et le réglage de son dans ~/.config/cpcec-gtk/config.ini

Chaque machine émulée démarre avec une extension mémoire de 512 Ko, sauf la GX-4000, qui reçoit les 64 Ko avec lesquels elle est sortie.

Le debugger

Mettre l’émulation en pause ouvre les fenêtres de debug ; esc les ferme toutes et reprend, space avance d’une instruction Z80. La fenêtre Z80 montre le désassemblage, les registres et la pile, pose des breakpoints avec B, remet à zéro le compteur de NOPs avec T, désassemble depuis n’importe quelle adresse qu’on lui demande, et comprend l’opcode ED FF comme un breakpoint écrit dans le code lui-même. L’inspecteur mémoire montre la mémoire telle qu’elle est, bascule entre les valeurs READ et WRITE, et rapporte en dessous la configuration Gate Array et ASIC — avec les ROM labels quand un fichier de symboles les a fournis.

La fenêtre d’affichage vidéo est faite pour courir après le canon : elle donne le mode courant et l’adresse mémoire vidéo, et ses champs de ligne CRTC et de scanline moniteur sont interactifs — on tape une valeur, on presse la flèche à côté, et l’émulation continue jusqu’à cette ligne. Sur un Plus ou une GX-4000, une fenêtre ASIC liste les registres, avec les aperçus de sprites et la description des bits dans les infobulles. Le visualiseur mémoire dessine un pixel par octet des 64 Ko principaux et des quatre premiers banks, rafraîchi à chaque VSync, en MODE 0 ou 1 et avec la palette du programme ou en gris — et un mode last write fading ne montre que les écritures, les frames plus anciennes s’effaçant vers le noir.

Captures d’écran

La fenêtre principale : l'écran émulé, la barre d'outils et le menu de la machine
La fenêtre principale, avec la barre d’outils et le menu de la machine.
La fenêtre de bibliothèque, listant les logiciels trouvés sous un dossier choisi avec ses filtres
La bibliothèque : tout ce qui a été trouvé sous un dossier, filtré par extension ou par nom.
La fenêtre de configuration des ROMs, listant les ROMs lower et upper et les RSX qu'elles portent
La configuration des ROMs, avec les RSX BASIC que chaque ROM apporte.
Le debugger Z80, montrant le désassemblage, les registres et la pile
Le debugger Z80 : désassemblage, registres et pile.
L'inspecteur mémoire, montrant les valeurs en mémoire et la configuration ROM et RAM courante
L’inspecteur mémoire, et la configuration ROM/RAM en dessous.
La fenêtre d'affichage vidéo, montrant le mode courant, l'adresse mémoire vidéo et les champs de scanline
La fenêtre d’affichage vidéo, pour le travail fait contre le canon.
La fenêtre ASIC, listant les registres d'un Amstrad Plus
Les registres ASIC, sur un Plus ou une GX-4000.
Le visualiseur mémoire, dessinant le contenu de la mémoire à raison d'un pixel par octet
Le visualiseur mémoire : un pixel par octet, rafraîchi à chaque VSync.
Le moniteur CRT émulé étendu pour montrer les parties habituellement hors de vue
Le moniteur CRT étendu au-delà de ses 384 sur 270 pixels visibles.

L’installer

sudo apt install libsdl2-2.0-0 libgtk-3-0, puis sudo dpkg -i cpcec-gtk.deb ; sudo apt purge cpcec-gtk le retire. Le binaire va dans /usr/bin, ses ressources — les ROMs Amstrad, la documentation — dans /usr/share/cpcec-gtk/, et rien n’est laissé ailleurs.