[EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Couvre tous les domaines de l'émulation logicielle ou de la virtualisation ainsi que les discussions sur les divers outils associés.

Modérateurs : Papy.G, fneck, Carl

Répondre
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

[EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Bonjour à tous,

Cela fait plus de 2 ans et demi que je me suis mis en tête le projet de créer un émulateur de l’Amstrad CPC, LA machine de mon enfance sur laquelle j’ai passé de longues heures et appris les bases de la programmation. Et je me suis dis que ce serait intéressant de partager les étapes de création d’un émulateur avec les passionnés de ce forum.. :)

Il existe certes de nombreux émulateurs pour cette machine mais il s’agissait surtout pour moi d’un défi intellectuel : créer mon émulateur, un émulateur le plus fidèle possible en partant d’une feuille blanche, juste à partir des docs techniques & des dataSheets des différents composants (et ils sont nombreux sur CPC heureusement). Un truc un peu fou quand même...

Je précise que je n’ai jamais lancé ou installé d’émulateurs de CPC pour ne pas être influencé, ou découragé devant la tâche qui s’annonce car cela reste un chantier de longue haleine et il est très facile de laisser tomber tant les obstacles sont nombreux. Enfin, j’ai pris le parti de ne pas reprendre de code source existant. Tout le code a été créé à partir de zéro, que ce soit l’émulation du processeur (Z80A), du Gâte Array, du CRTC, du AY..Je préfère avoir la maitrise de A à Z de mon code. Je pars du principe que l’on ne comprend bien que ce que l’on développe soit même.

Je précise aussi que je ne suis pas informaticien, juste un amateur averti ayant quelques bases de programmation tout au plus et qu’à l’occasion de ce projet j’ai du parcourir énormément de tutoriels et de forums rien que pour apprendre la base de la programmation dans un environnement Windows... Première étape : créer une fenêtre Windows :D

Enfin, celui-ci est développé uniquement sur mon temps libre, qui reste (trop) limité.. Il faut donc être patient, très patient...

Après cette longue introduction et quelques centaines (milliers ?) d’heures de recherches, de coding, de tâtonnements, je lance l’émulateur et arrive enfin le jour où..ô miracle.. quelque chose s’affiche à l’écran. Ce n'est pas brillant pour une première mais c'est un grand moment d'émotion que tous les développeurs d'émulateur ont dû connaitre. Les premiers signes de vie d'un émulateur :

Image

Et on se dit que le plus dur est passé, et bien non...C'est tout le contraire. C'est la traque aux tous petits bugs bien coriaces qui commencent. Maintenant commence la longue (et fastidieuse) phase de débogage pour aboutir enfin au fameux écran bleu avec ses lettres d'or indiquant que le CPC a terminé sa phase d'initialisation et est prêt à l'emploi :)

Image

..mais c'est encore loin d'être fini. Des petits dysfonctionnements apparaissent toujours par-ci, par-là selon les commandes Basic qui sont tapées. La traque aux bugs persiste jusqu'à pouvoir exécuter les premiers programmes en Basic sans erreur...Un bon début mais toujours pas une fin en soi.

Image

A ce jour l'émulateur tourne plutôt bien en usage basique (et Basic). Les timings semblent Ok, les interruptions sont fonctionnelles (on peut même faire clignoter les couleurs :D ), le mapping des touches du clavier CPC <=> PC fonctionne plutôt pas mal (et j'y ai passé pas mal de temps, la ROM du CPC a une gestion des touches plutôt tordue). Je commence progressivement à lui brancher les IO pour la gestion des fichiers au format cassettes (.CDT) et des disquettes (.DSK), il ne sort pas encore de son (même si l'émulation de la puce sonore est implémentée, un chantier de plus à terminer).

Pour ceux que la partie technique intéresserait, je donnerai par la suite plus de détails sur les étapes de construction de l'émulateur et des outils spécifiques que j'ai dû développer pour en arriver là ...

Wait & see :wink: ...

EDIT 08 / 2021 ___________________
L'émulateur est désormais disponible en téléchargement. Compatible avec Windows 7, 8, 10 et 11 en version 32 ou 64 bits.
Afin de ne pas perdre de temps à chercher le dernier fichier disponible dans les pages qui suivent, vous trouverez toujours en lien ci-dessous la version la plus récente. Amusez vous bien :)

Image

EDIT 12 /2023
---------
DERNIERE VERSION DISPONIBLE : AMSPIRIT v0.967b en date du 04/12/2023.

03/12/2023 : v0.967b
- Amélioration de l’émulation du lecteur de disquette
- Correctifs divers sur CRTCs 1, 2 et 4
- Prise en charge des caractères accentués des fichiers .txt
- prise en charge de l’Emulator-ID
- Modifications esthétiques

Vous trouverez désormais les dernières versions de Amspirit sur le site internet officiel présent à l'adresse suivante :

https://www.amspirit.fr/
Dernière modification par Dmanu78 le 07 déc. 2023 00:04, modifié 24 fois.
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [AMSTRAD CPC] work in Progress

Message par Sebiohazard »

Bonsoir Dmanu !

Merci pour ce partage, je suis vraiment admiratif pour ton travail, moi qui suis passionné d'émulation !

Je suis très loin de ton niveau de connaissances dans ce domaine & suis très intéressé de connaître ton parcours, ainsi que les outils & documents que tu as utilisé ?!

Un de mes rêves serait également de créer un émulateur de A à Z, mais je ne sais même pas par où commencer... est-il possible d'essayer ton émulateur ?

Salutations !
Image
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: [AMSTRAD CPC] work in Progress

Message par Mokona »

Sacré boulot ! Bravo.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [AMSTRAD CPC] work in Progress

Message par Dmanu78 »

Merci du compliment 😊
Oui bien sûr, je diffuserai l’émulateur quand il sera un peu plus finalisé. Rien de tel pour le debugger de fond en comble mais il n’est pas encore prêt à ce jour. Il n’a pas encore de nom de baptême... :lol:
Créer un émulateur de À à Z est fastidieux mais avec beaucoup de temps et de patience, on y arrive progressivement...Il faut juste être persévérant. Mes premières notes sur ce projet datent de février 2018 et le premier visuel (écran vert flashy :D ) de mai 2020 ! Mais je partais de très loin aussi.
Je raconterai volontiers sous forme de petits posts les différentes étapes que j’ai dû passer (ou surmonter) pour le construire.
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [AMSTRAD CPC] work in Progress

Message par Sebiohazard »

Salut Dmanu !

Avec plaisir pour les posts :) je voulais te demander quelles connaissances minimums il faut pour entreprendre cette aventure ? Pour le nom de ton bébé tu as déjà une idée ?

Salutations !
Image
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

Vaste question qui aura autant de réponses que de développeurs. Je te donne mon avis perso issu de ma propre expérience :
Avant de se lancer dans la construction d’un émulateur, il vaut mieux connaître les rudiments de la programmation sous windows, cela fera gagner beaucoup, beaucoup de temps. Quand j’ai commencé, j’avais dans mes bagages de vagues réminiscence dans la programmation du Basic, de l’Assembleur z80 et 68000, du COBOL et du VBA. Rien de bien utile en fait pour ce que je voulais faire. Il a donc fallu tout réapprendre. Mais voilà ... quel langage de programmation choisir pour écrire un émulateur ?

[PRELIMINAIRES]
Choix du langage
Écrire un émulateur est un exercice exigeant. Celui-ci est conditionné par des contraintes de timings en temps réel. Sur CPC, le ´Signal’ d’horloge de 16 MHz constitue le battement cardiaque de la machine. Tous les autres signaux sont dérivés de ce signal maitre. Il faut qu’il soit émulé le plus fidèlement possible. Parmi tous les langages disponibles, il faut choisir un langage évolué compatible avec les API Windows et qui soit suffisamment proche du langage machine pour pouvoir être exécuté rapidement après compilation. Mes recherches m’ont donc naturellement conduit à choisir le langage C++ qui semble bien répondre à cette double contrainte.

Choix de la plateforme de développement
Maintenant que le langage est choisi, quelle plateforme de développement choisir ? Il en existe plusieurs, sur tous type d’OS, mais j’ai choisi celle qui m’a semblé la plus accessible aux débutants sous Windows, avec une large communauté et gratuit, à savoir Visual Studio de Microsoft. De plus, je le constaterai plus tard, elle dispose d’un module de déboggage très puissant.

Les premiers jalons sont posés, maintenant, et avant même de se poser la question de l’émulateur, il faut s’approprier l’ensemble. Commencent alors les longues semaines d’apprentissage du C (il existe de très nombreux ouvrages) et ensuite de la programmation sous Windows avec la découverte des API WIN32 (il existe aussi quelques très bons ouvrages) et ensuite de l’éditeur de visual Studio pour la création des Menus, icons, Boite de dialogues ...Ce n’est pas très intuitif surtout que Visual Studio est surtout prévu pour du développement en C# j’ai l’impression. Bref, de très longs moments à passer mais qui sont indispensables pour la prochaine étape...à savoir la construction de l’émulateur proprement dit...

To Be Continued... :D
Dernière modification par Dmanu78 le 26 nov. 2020 23:40, modifié 1 fois.
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Sebiohazard »

Hello Dmanu !

Merci pour tes retours, mon rêve s'envole, du moins pour l'instant, je n'ai aucunes des exigences recommandés pour la création d'un émulateur... il faut vraiment que je me mette aux fondements de la programmation, histoire de voir ce que je suis capable de faire...

On attend la version beta alors :)

Salutations !
Image
yves
Messages : 464
Inscription : 12 sept. 2007 21:32

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par yves »

Bravo DManu

Le premier lancement qui affiche qque chose est effectivement toujours un grand moment!
Beau boulot
Yves
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Sebiohazard »

Bonsoir à tous !

Ça y est je me suis lancé dans la programmation :) tout en douceur pour commencer évidemment, avec ce cours en C très accessible & gratuit ici

C'est sympa mais il y a du boulot !

Salutations !
Image
Avatar de l’utilisateur
bubulemaster
Messages : 1082
Inscription : 01 juil. 2014 13:48
Localisation : Nantes

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par bubulemaster »

Dmanu78 a écrit : 13 oct. 2020 00:34 Mes recherches m’ont donc naturellement conduit à choisir le langage C++ qui semble bien répondre à cette double contrainte.
As-tu regardé Rust ou Freepascal ?

L'intérêt de Rust réside dans ça gestion de la propriété de la mémoire qui évite d'avoir un garbage collector, tout en minimisant le risque de fuite mémoire ou pointeur non initialisé.

C'est un avis personnel, mais le C++ est compliqué et peu lisible pour pas grand chose je trouve.
Le 80286 et suivant sont des processeurs beaucoup trop évolués qui n'auraient jamais dû être inventés :-).
Vinted | Le bon coin | Ebay
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par hlide »

houlà là, le garbage collector c'est mal et anti-REALTIME. C'est une catastrophe sur JS quand tu veux faire un jeu : tout compte fait, il faut bien maîtriser le JS et bien comprendre pourquoi on ne doit pas faire comme ceci ou comme cela. Après je crois avoir vu du code RUST et ça m'a semblé assez sympathique.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Mokona »

J'aime beaucoup Rust. Cela demande beaucoup de rigueur car le compilateur est intransigeant sur les règles qui lui permettent de garantir son modèle mémoire.

Quelle que soit le langage de la famille C dont on vient, ça perturbe un peu au début et ça demande un ajustement au niveau de schéma que l'on pouvait avoir en tête et que Rust refusera.

Est-ce que c'est un bon premier langage ? Ça, je n'en sais rien.

Est-ce qu'on peut faire de l'émulation avec ? Oui. (https://floooh.github.io/2016/07/12/z80-rust-ms1.html)
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

Merci pour ces retours très intéressants. :)
Je pense que je suis resté très conservateur dans mon approche du langage. À mon sens, l’avantage du C++ est que c’est un langage de programmation généraliste, éprouvé, très bien documenté et compatible avec les nombreuses API Win32.
L’approche de ce langage est assez ardu pour un débutant (notamment le ++ et la notion de POO) mais il y a tellement d’ouvrages disponibles, de guides ou d’assistance sur les forums spécialisés que l’on trouve toujours une solution à son problème. Ça a guidé mon choix au final.
Et je confirme que la gestion de la mémoire n’est pas son fort. Il faut une très grande rigueur. J’ai quand même réussi à faire planter Windows 10 (écran bleu) suite à une écriture dans une zone mémoire non allouée dans mon émulateur ...😨 Maintenant quand on s’est fait prendre une fois, on acquiert une certaine rigueur dans l’écriture du code pour éviter de laisser traîner ces « Garbage Collector ».
Je ne connais pas du tout RUST (je viens de regarder à l’instant quelques pages sur internet pour en savoir plus) mais j’ai l’impression que ça reste confiné à une certaine communauté pour l’instant. C’est un langage jeune et qui évolue encore pas mal. Pas forcément idéal pour débuter dans la programmation je trouve. Mais mon avis n’engage que moi..🤔
Avatar de l’utilisateur
bubulemaster
Messages : 1082
Inscription : 01 juil. 2014 13:48
Localisation : Nantes

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par bubulemaster »

Dmanu78 a écrit : 21 oct. 2020 20:18 Je ne connais pas du tout RUST (je viens de regarder à l’instant quelques pages sur internet pour en savoir plus) mais j’ai l’impression que ça reste confiné à une certaine communauté pour l’instant. C’est un langage jeune et qui évolue encore pas mal. Pas forcément idéal pour débuter dans la programmation je trouve. Mais mon avis n’engage que moi..🤔
Le langage a 10 ans, mais même si Microsoft a décidé de l'utiliser et que Linus Torvalds est d'accord pour écrire les nouvelles parties en Rust, la communauté est comme tu le dis encore un peu restreinte et le langage bouge beaucoup.
Il est vrai que c'est un choix plus stable de prendre C++.
Le 80286 et suivant sont des processeurs beaucoup trop évolués qui n'auraient jamais dû être inventés :-).
Vinted | Le bon coin | Ebay
Avatar de l’utilisateur
farvardin
Messages : 436
Inscription : 27 déc. 2014 16:07
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par farvardin »

Bravo pour ce travail depuis 0, c'est un sacré boulot.
Tu devrais publier ton code sur github ou gitlab, pour avoir plus facilement des retours d'utilisateurs.
Répondre