[EMULATION AMSTRAD CPC] work in Progress

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

Modérateurs : Papy.G, fneck, Carl

Dmanu78
Messages : 35
Enregistré le : 20 juin 2020 14:28
Localisation : Yvelines

[EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 » 11 oct. 2020 16:33

Bonjour à tous,

Cela fait plus de 2 ans et demi que je me suis 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: ...
Modifié en dernier par Dmanu78 le 12 oct. 2020 23:17, modifié 1 fois.

Avatar du membre
Sebiohazard
Messages : 243
Enregistré le : 30 avr. 2019 15:07

Re: [AMSTRAD CPC] work in Progress

Message par Sebiohazard » 11 oct. 2020 18:41

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 du membre
Mokona
Messages : 561
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: [AMSTRAD CPC] work in Progress

Message par Mokona » 11 oct. 2020 19:42

Sacré boulot ! Bravo.

Dmanu78
Messages : 35
Enregistré le : 20 juin 2020 14:28
Localisation : Yvelines

Re: [AMSTRAD CPC] work in Progress

Message par Dmanu78 » 11 oct. 2020 22:43

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 du membre
Sebiohazard
Messages : 243
Enregistré le : 30 avr. 2019 15:07

Re: [AMSTRAD CPC] work in Progress

Message par Sebiohazard » 12 oct. 2020 03:20

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 : 35
Enregistré le : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 » 13 oct. 2020 00:34

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
Modifié en dernier par Dmanu78 le 26 nov. 2020 23:40, modifié 1 fois.

Avatar du membre
Sebiohazard
Messages : 243
Enregistré le : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Sebiohazard » 15 oct. 2020 13:24

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 : 335
Enregistré le : 12 sept. 2007 21:32

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par yves » 15 oct. 2020 14:00

Bravo DManu

Le premier lancement qui affiche qque chose est effectivement toujours un grand moment!
Beau boulot
Yves

Avatar du membre
Sebiohazard
Messages : 243
Enregistré le : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Sebiohazard » 20 oct. 2020 22:54

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 du membre
bubulemaster
Messages : 478
Enregistré le : 01 juil. 2014 13:48
Localisation : Nantes
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par bubulemaster » 21 oct. 2020 11:41

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 :-).

Avatar du membre
hlide
Messages : 1879
Enregistré le : 29 nov. 2017 10:23

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par hlide » 21 oct. 2020 12:13

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 du membre
Mokona
Messages : 561
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Mokona » 21 oct. 2020 12:55

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 : 35
Enregistré le : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 » 21 oct. 2020 20:18

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 du membre
bubulemaster
Messages : 478
Enregistré le : 01 juil. 2014 13:48
Localisation : Nantes
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par bubulemaster » 22 oct. 2020 08:48

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 :-).

Avatar du membre
farvardin
Messages : 398
Enregistré le : 27 déc. 2014 16:07
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par farvardin » 22 oct. 2020 11:19

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