[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

Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par hlide »

Félicitation Dmanu78 !

Avoir plus de 99% aux 3 premiers CRTC alors que les autres sont à la peine, ça me scotche.

Simple question : le source complet de l'émulateur est disponible à la lecture ?
TotO
Messages : 114
Inscription : 17 avr. 2015 23:31

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par TotO »

hlide a écrit : 21 oct. 2022 10:28Avoir plus de 99% aux 3 premiers CRTC alors que les autres sont à la peine, ça me scotche. Simple question : le source complet de l'émulateur est disponible à la lecture ?
J'irai même plus loin, peut-on espérer que AMSpiriT ne soit pas un émulateur de plus et voir le code des CRTC "migrer" dans MAME pour profiter à toutes les machines ? C'est un accomplissement personnel magnifique, mais ça deviendrait une consécration de contribuer collectivement. 8)
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par hlide »

Non plantage de AMSpirit alors que sur un vrai, ça plante :

https://www.cpc-power.com/index.php?pag ... s&num=3905

Sur un vrai, la mémoire n'étant pas initialisée à 0 au démarrage, le programme va planter parce qu'il a sûrement été développé sur un émulateur qui initialise à 0 : de fait, son programme semble avoir des pointeurs non initialisés qui ont échappé à la vigilance du programmeur.

Il serait sans doute préférable de "randomizer" le contenu de la mémoire au démarrage pour éviter ce type de désagrément si quelqu'un souhaite développer avec AMSpirit. :)
TotO
Messages : 114
Inscription : 17 avr. 2015 23:31

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par TotO »

Classique... La manière la plus simple de détecter un émulateur. :)
Longshot
Messages : 15
Inscription : 10 déc. 2021 15:58

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Longshot »

Bravo à @DManu78 pour avoir vaillamment triomphé des tests SHAKER (qui n'a pas dit son dernier mot :twisted: ).
Plus sérieusement, je profite de l'occasion, @Dmanu78, pour te remercier de nos nombreux échanges, qui ont été très constructifs.
Le Compendium a sans doute fait progresser Amspirit, mais Amspirit a fait progresser le Compendium.
La précision atteinte par ton émulation du GA à 16 Mhz a permis d'identifier des phénomènes parfois complexes à évaluer.
Je pense notamment à nos travaux sur les interruptions lorsque nous avons essayé de faire tourner une vieille protection des familles.
La possibilité de "tuner" des décalages de 1/16 Mhz a permis de découvrir que le système d'interruption du CPC n'est pas précis.
(les interruptions ne tombent pas au même endroit selon la nature des instructions, selon les CRTC)
Et bien sûr, ce n'est pas le seul sujet ou l'émulateur a été un outil formidable pour avancer plus vite. :D

En référence au post précédent, je viens de jeter un oeil au jeu "Eternal Light", qui plante sur la vraie machine.
C'est un jeu en basic qui utilise une librairie de RSX appelée "Sprites Supervisor".
Cette librairie implante une structure d'évènement en #7A58 et #7A67 de la ram principale, et qui semble gérer un timer.
Le hic, c'est que le programme Basic commute la banque #C4 pour y poker des valeurs (sans doute une map).
La Rom basic continue cependant à gérer les compteurs de son timer.
Si il y a 0 dans les structures, ça n'a pas de conséquence. Les données sont incrémentées.
Par contre, avec des valeurs plus hautes, cela peut déclencher une exécution dans la banque.
Pour faire tourner le jeu sur la vraie machine, il faut poker 6 zéros à partir de #7A58 et 6 zéros à partir de #7A67 en banque #C4.

L'initialisation des ram à froid semble suivre un pattern tous les 8 octets.
0/255 avec des petites variations dans les valeurs.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Merci à vous tous pour vos compliments, ça me fait vraiment très plaisir. :D Merci à toi Serge (@longshot) :D

La précision de l'émulation d'AmspiriT n'est pas que le fruit du hasard bien sûr. Le choix technique initial d'émuler le z80 en T-states a son importance dans certains tests de shaker (notamment sur le test shakerkiller, sur les tests pointant les différences de comportement du CRTC lors d'un appel via l'instruction OUT ou OUTI du z80). Le fait d'avoir porté l'émulation du GA à 16 Mhz a également eu un impact sensible sur les tests visuels portant sur l'apparition et la durée du signal Hsync, sur le décalage de 1 pixel en mode 2 etc.. Ceci explique aussi pourquoi Ampsirit est si gourmand en ressource. La précision d'émulation demande beaucoup de puissance.

Après il reste des lacunes bien sûr. Les CRTC ne sont pas émulés à 100% ,je ne gère pas les pistolets optiques, le générateur de caractère...il y a toujours moyen de faire mieux..
L'émulation du moniteur Amstrad (CTM) est très partielle et elle a son importance dans certains effets visuels (les fameux distords lorsque les registres R2/R3 du CRTC sont modifiés). C'est très compliqué à émuler car il faut connaitre le fonctionnement intime de l'électronique du tube cathodique (les cycles charges/décharges des condos etc..). Je n'ai pas beaucoup d'info dessus...

Il reste effectivement quelques tests KO mais je vais travailler dessus.
Il y a un test que Amspirit ne passera certainement jamais (ni aucun autre émulateur je pense) et qui fait suite à la découverte par @longshot/@CheshireCat de la possibilité de faire sur un vrai CPC un scroll hardware vertical au 1/64em de pixel.. Autant dire que sur un écran LCD, sauf à avoir une résolution verticale de plusieurs milliers de lignes, c'est non reproductible.

Pour l'instant AmspiriT est en plein développement et je ne communique pas son code source mais à terme c'est bien prévu. Il ne mourra pas avec moi :D . Le but à terme est de permettre à de nouveaux développeurs de poursuivre le développement sur de nouvelles plateformes, y greffer des fonctionnalités... Un de mes boulots en ce moment consiste justement à déporter le cœur de l'émulation de AmspiriT dans une librairie dédiée en pur C++ (sans aucune API) pour faciliter la portabilité sur de nouvelles plateformes. Il faudra être un peu patient.. J'ai encore plein de trucs à développer à ce stade. :D

Enfin, effectivement j'ai initialisé ma RAM avec 0.. Je n'avait en effet pas d'infos sur la manière dont la RAM du CPC est initialisée. Je ferai un petit correctif avec les infos de @longshot pour faire planter le jeux, comme un vrai CPC... :mrgreen:
TotO
Messages : 114
Inscription : 17 avr. 2015 23:31

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par TotO »

Merci beaucoup à toi et Longshot d'avoir pris le temps de répondre et surout pour le contenu des réponses. :)

Pour info, AMSpiriT tourne à environ 2MHz sur mon ordi portable. Plutôt frustrant quand je vois que j'ai les autres cores qui se tournent les pouces et qu'ils pourraient permettre sans trop de soucis de le faire tourner a vitesse réelle. J'imagine qu'il serait intéressant d'avoir le Z80 sur un core, le CRTC sur un autre, ... Car dans le futur, il y a très peut de chance que les fréquences explosent pour satisfaire un tel projet.
Avatar de l’utilisateur
mage
Messages : 24
Inscription : 25 juil. 2022 11:44

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par mage »

TotO a écrit : 21 oct. 2022 11:31 J'irai même plus loin, peut-on espérer que AMSpiriT ne soit pas un émulateur de plus et voir le code des CRTC "migrer" dans MAME pour profiter à toutes les machines ? C'est un accomplissement personnel magnifique, mais ça deviendrait une consécration de contribuer collectivement. 8)
Depuis que j'ai découvert (en 2022 et en plus sur Discord, je suis pas très visionnaire) que Mame peut être utilisé en ligne de commandes pour émuler le CPC, ça me conforte dans ce que tu dis Toto. Un tel boulot partagé à tous... "Rhââ Lovely" comme dirait Gotlib :wink:
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Sebiohazard »

Bonsoir dernièrement j'ai relancé AMSpirit pour essayé un jeu (Golden Axe) & j'avais quelques remarques si je peux:

1. Il n'y a pas de mode " fullscreen " ?

2. Peut-on remapper les touches du clavier (j'ai pas trouvé) ?

3. Toujours pas de scanlines de prévues ?

4. Peut-on lancer AMSpirit en ligne de commande & si oui quelles sont-elles ?

5. Lorsque j'appuie sur le bouton " pause " mon jeu s'arrête mais pas l'émulateur ?! Donc mon CPC est toujours à 100% est-ce normal ?!

Merci salutations !
Image
TotO
Messages : 114
Inscription : 17 avr. 2015 23:31

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par TotO »

Il faut quand même noter qu'il n'y a pas de scanlines sur CPC (enfin, avec son moniteur CTM).
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Sebiohazard »

OK mais les autres émulateurs CPC le proposent... dont MAME & Caprice 32...
Image
Zebulon
Messages : 2788
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Zebulon »

Je n'ai pas trouvé les scanlines dans WinAPE et Caprice Forever... Je pense que MAME possède une couche de traitement graphique commune à n'importe quel émulateur.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Je profite des récentes questions de @zebulon pour donner quelques nouvelles sur le développement de AmspiriT.

Depuis la dernière release d’octobre dernier, il continue à évoluer à son rythme (plutôt à mon rythme :) ). Je viens d’ailleurs de passer la 5ème année de son développement. :D

Le gros du boulot, qui m’occupe encore actuellement, concerne l’émulation du CRTC type « 4 » (pre asic ayant servi de base à l’ASIC du CPC plus). L’émulation de ce CRTC est terminée à 90% je dirais. Je m’appuie encore et toujours sur le compendium et shaker pour parfaire mes jeux de tests, ainsi que de nombreux échanges et partage d’informations avec @longshot pour parfaire l’émulation.
En parallèle, je me suis occupé à transférer le cœur de l’émulateur (Core) dans une librairie dédiée en pour c++ et sans aucune API qui me permettra plus tard de faire des portages propres vers differents OS. Ca m’a pris pas mal de temps, ce n’est pas encore totalement terminé à ce jour mais ca avance bien.
Et bien sûr, j’ai corrigé entre temps de nombreux petits bugs découverts à l’occasion de remontées de testeurs…
j’espère ainsi bientôt pouvoir mettre à votre disposition une nouvelle version qui émulera quasiment à la perfection les 4 types de CRTC équipant les CPC « old ».

Encore un peu de patience… :)

Pour répondre aux questions posées :
- le mode plein écran existe via la touche de fonction F12.
- je m’ai pas encore prévu de Mapping du clavier. Par défaut AmspiriT mappe automatiquement les touches pour que la saisie soit transparente via un clavier PC quelque soit la ROM utilisée.
- pas d’effet de scanline dont tu es friand prévu pour l’instant.
- pour l’instant je n’ai pas prévu de commander AmspiriT via une ligne de commande mais en côtoyant des demomakers, je ne suis plus autant fermé qu’avant. Il faudrait définir le besoin exactement.
- oui c’est normal le mode pause continue à rafraîchir l’écran en permanence donc il continue de consommer des ressources.
Avatar de l’utilisateur
Sebiohazard
Messages : 425
Inscription : 30 avr. 2019 15:07

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Sebiohazard »

Dmanu78 a écrit : 25 févr. 2023 00:52 - pour l’instant je n’ai pas prévu de commander AmspiriT via une ligne de commande mais en côtoyant des demomakers, je ne suis plus autant fermé qu’avant. Il faudrait définir le besoin exactement.
Hello merci pour tes réponses, pourquoi étais-tu fermé avant ? Le besoin ? Pouvoir intégrer ton émulateur dans un front end par exemple, pouvoir automatiser le lancement des jeux avec des fichiers .bat voilà :)

Dommage qu'en mettant l'émulateur en pause, il ne s'arrête pas complètement... pourquoi avoir fait ce choix en fait ?

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

Re: [EMULATION AMSTRAD CPC] AMSpiriT - work in Progress

Message par Dmanu78 »

Ok je vois ce que tu souhaites faire. Je vais regarder sur d’autres émulateurs pour voir les différents type de commandes existantes.
Pour la pause, c’est un choix technique. L’émulateur tourne dans un thread et en pause l’émulateur se met en attente dans une boucle infinie mais le thread reste actif. Si je fermais le thread durant la pause, l’émulateur serait réinitialisé par la suite. Après j’ai peut être des astuces pour rendre la main au sytème durant la pause de l’émulateur et soulager la charge CPU. Je vais regarder ça…
Je mets ça dans une TODO list…
Répondre