[EMULATION AMSTRAD CPC] AMSpiriT - 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

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

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par hlide »

Avec un CRT, il n'y a pas de notion réelle de pixel contrairement au LCD. Sur un CRT le "pixel" tombe sur un cluster (ensemble de trous qui laissent apparaître une composante rouge, verte ou bleue) et le "pixel" suivant pourrait très bien se trouver à cheval sur le cluster (c'est comme si on avait trois rayons de couleur qui balayent un cache avec plein de trous avec un effet plus diffus). L'effet d'un pixel est "flou" sur un CRT contrairement à un "vrai pixel" d'un LCD (rendu très carré par la même occasion). Et il se peut que le cerveau reconstruise plus facilement cette ondulation avec un CRT alors qu'avec un LCD, c'est trop net, trop découpé.

Note, les overscans (une ligne sur deux) émulés sur les LCD, c'est de la daube. Ça ne reproduit absolument pas le même effet que sur le CRT. Ceux qui font l'apologie de cette technique sont des idiots.

EDIT: scanlines et non overscans.
Dernière modification par hlide le 24 févr. 2021 12:48, modifié 1 fois.
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Zebulon »

Je crois que ce sont les scanlines, l'overscan c'est la partie de l'image qui potentiellement déborde des bords de l'écran. :D

Je n'en fait pas l'apologie (donc je ne suis pas idiot) mais je trouve que le rendu n'est pas si dégueu pour de l'imitation. Mais c'est clair rien à voir avec le vrai (déjà évoqué avec Vincent). :wink:
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par hlide »

euh oui, j'étais un peu fatigué en effet.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Markerror »

Bonjour,

Tester avec des démos, c'est une bonne idée, MAIS... Il faut toujours vérifier leur comportement avant sur un vrai CPC (en particulier pour les vieilles). La programmation des différentes versions du CRTC est restée empirique pendant bien longtemps, et certaines démos n'ont pas un résultat visuel parfait . Je pense par exemple à la Madness de Gozeur qui faisait de la rupture verticale et qui avait quelques soucis même sur CRTC 1.

Dans les fanzines contenant des articles techniques sur le CRTC, j'ai oublié de citer Quazar (la honte :-( ). Les articles ont été mis en ligne il y a déjà pas mal de temps. Par contre, il faut les lire à l'envers, car au fil du temps, les connaissances se sont affinées :-).

Concernant l'effet d'ondulation au registre 2, j'avoue ne jamais avoir vérifié ce que ça donnait sur un moniteur moderne. Je je n'en ai jamais programmé à l'époque, car ça rendait mal sur des télévisions autre que les moniteurs CTM en couleurs (on voyait des bordures noires) et moi, j'avais un beau modulateur MP-2 et un GT-65...
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

@ Markerror : Merci pour tes références. Effectivement Quasar fait parti de mes sources préférées pour glaner des informations techniques de qualité, ainsi que Grimware pour le Gate Array et pour le CRTC (ne serait-ce que pour son fabuleux schéma résumant l'affichage d'un écran avec les registres du CRTC) même si cette partie reste incomplète. On trouve aussi des infos intéressantes sur CPCRULEZ qui sont généralement issues des Fanzines que tu cites mais c'est un peu brouillon. En glanant à droite et à gauche, on trouve parfois des infos très pertinentes.
Mais il faut faire un peu de tri car certaines publications contiennent aussi quelques coquilles...

Du côté émulation, ça avance bien. Pour pouvoir continuer mes tests, j'ai ajouté à l'émulateur la gestion des extensions mémoires car les 64 Ko de base commencaient à être juste pour lancer certaines démos.

La gestion de la RAM additionnelle est un peu déroutante avec les différents modes de pagination par morceau de 16Ko mais ne présente pas de réelles difficultés. Bon, il m'a quand même fallu complètement réécrire la routine de lecture/écriture en mémoire du fait des différentes combinaisons de pagination possibles (8 en tout).

Image
et voilà 64Ko de mémoire additionnelle correctement détectée. Le CPC peut très facilement gérer jusqu'à 512 Mo de mémoire, voire plus...

Cette étape franchie, il devenait assez évident que le CPC 6128 puisse être intégré sans trop d'effort à l'émulateur. Une fois les ROMs du 6128 chargées en mémoire en remplacement de celles du CPC 464, ça a démarré (sans trop de surprise) du premier coup...Et dans la foulée, le 664 a également été intégré.

Image
Le petit nouveau de la gamme. L'écran d'accueil du CPC 6128 fraichement sorti d'usine.

En complément, j'ai commencé à ajouter un embryon de panneau de configuration, ça commence à être bien utile pour pouvoir jongler rapidement entre les différents modèles de CPC sans devoir tout recompiler à chaque changement.

Enfin, en parallèle, le débogage de l'émulateur continue.
Depuis le dernier post, j'ai trouvé 2 nouveaux bugs d'exécution au niveau du CPU (malgré le fait que les tests étaient concluants, comme quoi...). Un problème d'exécution sur une instruction non documentée (bon, ce n'était pas documenté aussi) et une erreur d'exécution de l'interruption en mode IM2, que je n'avais jamais réellement testé jusque là.

L'émulation du CRTC continue à être améliorée au gré des échecs rencontrés sur des démos... Cette semaine, j'ai découvert une petite particularité en lançant une démo avec des effets de plasma. Il semble que les registres R4 & R9 du CRTC soient bufférisées et que leur modification ne soient pas prise en compte tout de suite lorsque les compteurs internes C9 = R9 et que C4 = R4... Je ne suis pas 100% certain de la règle mais ça semble bien fonctionner comme cela..du moins pour un CRTC modèle 0. A voir avec les autres modèles.

Image
Avec les petits ajustements apportés sur l'émulation du CRTC, le rendu semble correct ...

Par contre, en aparté, je suis toujours perplexe sur le bon rendu de certaines démos. Les docs que j'ai lues précisent que le nombre total de lignes générées par le CRTC doit être de 312 par frame pour être compatible avec le standard PAL (50 hz) hors certaines démos que j'émule s'écartent pas mal de ce chiffre ( 302 lignes pour certaines, 320 lignes pour d'autres...). Mystère.

Le chantier avance donc progressivement mais maintenant une question "terriblement" importante va commencer à poser...il va peut-être falloir que je lui trouve un petit nom à cet émulateur. Pour l'instant, rien ne me vient encore à l'esprit... :|
Dernière modification par Dmanu78 le 02 mars 2021 13:33, modifié 1 fois.
Brochiman
Messages : 3405
Inscription : 02 juin 2019 11:26
Localisation : Angers

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Brochiman »

CPC-Emanulator 🤣🤣🤣🤣...bon ok c'est moche lol
jasz
Messages : 1313
Inscription : 05 oct. 2016 20:05
Localisation : Quelque part dans le 31

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par jasz »

Amstad :idea:
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 !

Que penses-tu de CPC-Reloaded ou CPC-Resurrection loooooooool ?!

Je voulais te demander de combien de lignes de code se compose ton émulateur ?

De mon côté j'avance très lentement dans l'apprentissage du langage C, j'ai fait mon tout premier petit programme, une calculatrice qui ne fait qu'additionner pour l'instant MDR !!! Je suis très loin de créer un émulateur... donc encore bravo pour ton travail !

Salutations !
Image
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Markerror »

Bonsoir,

Le nombre de lignes affichés est bien de 312, mais un bon paquet de démos ne sont pas forcément propres à ce niveau. Comme indiqué dans un précédent message, les techniques de programmation du CRTC ont été pendant très longtemps plutôt artisanales et pifométriques. Si le rendu était bon, le programmeur ne se souciait pas forcément d'être pile synchronisé ave cette valeur (déjà, il fallait qu'il la connaisse). Sur un CPC, on ne voyait pas forcément une différence entre une synchro parfaite et une l'étant un peu moins mais restant dans les tolérances du moniteur.
Les mélomanes pouvaient le détecter car les musiques jouées normalement au 50ème de secondes étaient un peu plus lentes ou plus rapides.

Même pour des démos sorties il n'y a pas si longtemps que cela, un contrôle avec Ace, l'émulateur d'Offset (qui est réputé très précis car codé autour de l'émulation CRTC) a permis de détecter des erreurs de calcul sur les ruptures (par exemple sur ma partie dans la démo 30 years megademo, où il manquait 8 lignes :-) ).
Dernière modification par Markerror le 17 mars 2021 08:07, modifié 1 fois.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

@markerror
Merci pour ces précieuses informations. Je croyais que toutes les démos étaient calées à 312 lignes par frame et que les variations du nombre de lignes provenaient d’une mauvaise émulation. Pas besoin de chercher plus loin alors. Je commence aussi à comprendre pourquoi certaines démos ne s’affichent pas sur mon moniteur LCD avec un vrai CPC. J’utilise OSSC pour transformer le signal RGB du CPC en signal HDMI et il semble qu’il soit très sensible au respect des timings : une petite variation autours des 312 lignes par frame et OSSC ne produit plus d’image. Dès lors, pas d’autre choix que de remettre en route un bon vieux moniteur CRTC...
Je suis très admiratif du travail des demomakers. Avec un peu de recul, je trouve que les émulateurs permettent de rendre un hommage mérité aux concepteurs de démos en les rendant plus accessibles. A l’occasion de l’écriture de l’émulateur, je découvre de vraies pépites que je ne soupçonnais même pas. Certaines sont très sophistiquées et permettent de montrer le potentiel insoupçonné des CPC. Pour mon information, tu as produit quelles démos exactement ?

@Sebiohazard
Merci pour tes encouragements.
He he, Ah oui pas mal du tout CPC-Reloaded. Classique mais ça me parle. Je le garde dans un coin de ma tête. Tu vas être le parrain de l’émulateur à ce rythme. :D Après il faut vérifier que ça n’existe pas déjà. Il y a énormément d’émulateurs sur CPC...
Je ne tiens pas le compte du nombre de lignes de code mais je dirais entre 15000 et 20000 lignes. Il est composé de plusieurs sources distinctes (z80, gate array, crtc, PSG, ppi, ...) sinon la lecture en serait vite fastidieuse. Rien que la partie relative à l’émulation du z80 fait plus de 10.000 lignes à elle seule.
Rassure toi mes débuts ont été très laborieux pour l’apprentissage du C sous environnement Windows. Il faut bien commencer par quelque chose mais un projet motivant est le meilleur des catalyseurs pour apprendre la programmation. Ce projet me passionnait tellement que ça m’a permis de persévérer et de dépasser les périodes de découragement. Et plus tu avances, plus tu apprends vite. La courbe d’apprentissage augmente de plus en plus vite.

@brochiman
:lol: Excellent tu m’as bien fait rire. Très personnalisé celui là mais pas très sexy effectivement...
Dernière modification par Dmanu78 le 02 mars 2021 13:33, modifié 1 fois.
Markerror
Messages : 2121
Inscription : 31 oct. 2011 19:21
Localisation : Orléans
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Markerror »

Bonjour,

Mon "travail" est en grande partie disponible sur http://tj.gpa.free.fr (sauf la 30 years megademo et quelques cracktros faites en sous-marin pour le faux groupe Fatality :-) ). Je ne suis pas un "vrai" démo-maker, en ce sens que je n'ai jamais poussé les techniques à fond (j'avoue que la programmation avancée du CRTC, c'est plus une contrainte pour moi qu'un plaisir) ni inové (le seul truc un poil original pour l'époque, c'est la Deep Space). Ca fait bien longtemps que je n'ai plus rien codé de sérieux, préférant me concentrer sur les conversions de jeux d'aventure et faire semblant de bosser en faisant des musiques.

Pour revenir sur l'histoire du non respect des 312 lignes, dans de rares cas, c'est une volonté du codeur. Il me semble par exemple que dans une des premières démos du concours de boules inspiré de ce qui se faisait sur ST (commencé par Ramlaid je ne sais plus trop quand... C'était avant la Boules & bits de Vanity), un gars avait sciemment augmenté le nombre de lignes pour pouvoir faire plus de choses sur une frame... Je vais essayer de retrouver ça..
Avatar de l’utilisateur
6502man
Messages : 12286
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par 6502man »

Félicitation pour ce nouvel émulateur CPC :D
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

Merci @6502man :)
Il est encore loin d'être terminé mais il se construit petit à petit.

@Markerror. Merci pour le site de Tom&Jerry. C'est très intéressant. En vérité, j'y étais déjà allé précédemment pour la lire l'article sur la gestion mémoire du 6128... J'y ai trouvé de belles démos dont "Tire au flan" (qui ne fonctionne malheureusement pas encore très bien sur mon émulateur...) :( Et je comprends mieux d'où vient ton pseudo maintenant :)

J'en profite pour donner quelques nouvelles. J'ai fait une petite pause ces 2 dernières semaines pour me concentrer sur l'optimisation du code. A force de développer, de corriger ou "patcher" mon code pour coller aux spécificités de telles ou telles démos, je me suis aperçu que celui-ci perdait en lisibilité et devenait une usine à gaz...J'ai donc décidé de faire un peu de revu de code et de réécrire une partie des routines d'affichage ( Gate Array et du CRTC ) pour en simplifier l'écriture et clarifier un peu tout ce monde.

Je reste intimement convaincu qu'il n'y a pas besoin de patcher le code pour faire tourner une démo ou un logiciel spécifique. Si l'émulateur est nativement bien écrit avec des règles bien établies, tout fonctionnera normalement, tout simplement même dans les cas extrêmes. Il faut juste trouver la bonne règle, celle qui est gravée dans ses circuits intégrés de la puce émulée en vérité. Après il y a toujours des exceptions, comme le fait d'avoir une ligne en pointillé avec un "CRTC type 0" lorsque le registre R6 est forcé à 0...ça ne s'invente pas ça. :?

Les patchs présents dans mon code ont été écrits dans un premier temps pour palier à une absence de règle connue. Comme j'ai des trous de documentation pour le CRTC, ça me sert à comprendre empiriquement comment il doit réagir suite à une modification de tel ou tel registre interne pour faire fonctionner la démo.

Avec du temps et un peu de pratique, et fur et à mesure de l'exécution de différentes démos, le fonctionnement intime du CRTC devient moins mystérieux et je commence progressivement à entrevoir les règles de fonctionnement qui vont naturellement remplacer les patches en place.
Avec ce travail de réécriture, j'ai ainsi pu simplifier la lecture de mon code, supprimer les "verrues" que je trouvais "inélégantes" à la lecture :D (oui je suis un peu puriste...)

La grosse difficulté de l'exercice est de veiller à ne pas créer de régressions au gré des modifications apportées. J'ai dû retester une à une toutes mes démos tests afin de vérifier leur bon fonctionnement une fois ce travail de réécriture terminé.

Au final, les démos fonctionnent comme avant mais sous le capot, le code réagit plus naturellement. Cela va me permettre de continuer mes tests sur une base plus saine. Et grâce à ce petit travail d'optimisation, mon émulateur a gagné un peu en performance. Toujours ça de pris.

En parallèle, quelques corrections ont été apportées me permettant de faire fonctionner correctement de nouvelles démos...
Image
Cette démo m'a permis de corriger un problème de calcul d'offset vidéo lorsque le registre R1 du CRTC est modifié en cours de route...

Image
Cette démo en apparence simple m'a donné du fil à retordre. J'ai mis plusieurs jour avant d'avoir un rendu correct. Vous noterez que les effets d’ondulation en bas de l'écran sont mal rendus dans mon émulateur. C'est le sujet évoqué précédemment avec les variations du registre R2 du CRTC. Sur un écran CRT, ça doit créer des effets de vague. Sur un écran LCD, non (ça rend pareil sur un vrai CPC branché à un LCD). Maintenant dois-je "émuler" le rendu d'un moniteur CRT ? La question est ouverte..

Concernant les semaines à venir, je pense passer encore un peu de temps sur le coding du CRTC afin de faire tourner correctement encore 1 ou 2 démos tests mais à un moment je ferai un break afin de retravailler l'ergonomie générale puis le mettre en téléchargement.
Vous en aurez l'exclusivité. Vos premiers retours me seront très précieux pour continuer à l'améliorer. :D
Dernière modification par Dmanu78 le 16 mars 2021 12:56, modifié 2 fois.
Zebulon
Messages : 2787
Inscription : 02 nov. 2020 14:03

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Zebulon »

Dmanu78 a écrit : 15 mars 2021 00:15 Sur un écran CRT, ça doit créer des effets de vague. Sur un écran LCD, non (ça rend pareil sur un vrai CPC branché à un LCD). Maintenant dois-je "émuler" le rendu d'un moniteur CRT ? La question est ouverte..
Merci beaucoup pour ces bonnes nouvelles. Le code refactoring c'est normalement incontournable (et pourtant sacrifié dans les grosses boîtes) pour rembourser la dette technique à force d'empiler ces fameuses verrues. Donc c'est bien de l'avoir fait. :D

Concernant CRT/LCD et rendu. Si les effets de vagues ne sont pas rendus à partir d'un vrai CPC sur un LCD l'émulation est correcte.

Les autres émulateurs ont-ils un rendu correct de ces vagues ?

Combien d'images par secondes sont affichées dans l'émulateur ? 25 ?

S'il y a encore de la ressource CPU sur la machine hôte peut être créer un pipeline pour créer des images intermédiaires entre deux frames CPC et augmenter la cadence d'affichage. Du coup ça veut dire qu'on a un léger décalage d'au moins une frame puisqu'il faut avoir deux frames pour calculer les images intermédiaires. Ça permettrait peut-être de générer une sorte d'effet de rémanence.
Dmanu78
Messages : 268
Inscription : 20 juin 2020 14:28
Localisation : Yvelines

Re: [EMULATION AMSTRAD CPC] work in Progress

Message par Dmanu78 »

@Zebulon
Ah la question de la vitesse d’affichage. L’émulateur affiche une image par frame, soit environ 50 images/s ; je ne sais pas gérer le mode interlacé avec 25 images pour les lignes paires et 25 pour les impaires...le CRTC le permet mais je ne me suis pas lancé dedans. ça ne présente pas trop d’intérêt pour un CPC mais peut être que je me lancerai dans le chantier un jour.

Par contre avec cette fréquence d’affichage de 50 hz je me suis confronté à une question que les auteurs d’émulateurs ont déjà du se poser : pourquoi les scrolling effectués à la frame près ne sont pas fluides, dans les démos notamment ? Au début j’ai cru que ma routine d’affichage vidéo loupait des frames mais non, elle affichait bien les 50 images/s. Je me suis aperçu que le problème venait de l’affichage sur mon écran LCD. Mon Moniteur affiche 60 images/s, soit 10 images supplémentaires par seconde par rapport l’émulateur. Cette différence explique ce manque de fluidité. Il faudrait que je puisse afficher 60 images à partir de 50 par interpolation mais je ne sais pas comment m’y prendre...ça semble compliqué à faire...
Une solution simple pour vérifier cela est de surcadencer l’émulateur pour avoir 60 vraies images par seconde. Et là effectivement tout devient bien fluide à l’affichage mais ça engendre d’autres problèmes ( le rendu sonore est altéré..)

Pour l’effet d’ondulation, effectivement je vais lancer d’autres émulateurs pour voir, c’est une bonne idée. Il est peut être temps de voir comment ils sont bâtis maintenant. :)
Répondre