Comment on fait un émulateur ?

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

Modérateurs : Carl, Papy.G, fneck

Répondre
Avatar du membre
rendomizer
Messages : 202
Enregistré le : 17 juin 2016 21:00
Contact :

Comment on fait un émulateur ?

Message par rendomizer » 01 mai 2018 20:45

J'aimerai bien savoir comment on fait un émulateur... Mon rêve d'émuler mon sergio max computer a base de Z80 mais pas de vdp encore.
comment on émule le micro-processeur, doit on le faire mnémonique par mnémonique ou y a t'il des moteurs z80 6502, 6510...
comment on émule le vdp avec les défauts (image pas nette, à la commodore 64) ? doit on le faire pixel par pixel avec des fichier image retravaillé ?
ou trouver la doc et la rom ?
le mot de passe c'est quoi ? quoi.

Daniel
Messages : 10433
Enregistré le : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Comment on fait un émulateur ?

Message par Daniel » 01 mai 2018 21:14

Le plus simple est de prendre les sources de dcvg5k ici --> http://dcvg5k.free.fr/v2/dcvg5kv2fr.html
En les étudiant tu auras les réponses à toutes tes questions, et si un point reste obscur nous pourrons le préciser.
Daniel
L'obstacle augmente mon ardeur.

Avatar du membre
Xavier_AL
Messages : 261
Enregistré le : 06 déc. 2017 20:30

Re: Comment on fait un émulateur ?

Message par Xavier_AL » 01 mai 2018 22:35

En règle générale, l'émulation n'est pas un bloc homogène mais une série d'organes émulés.
Le CPU, le clavier, la vidéo et le son... sont les éléments de base pour la création d'un émulateur.

Les périphériques supplémentaires sont ensuite greffés à cette base.

La première chose à faire, c'est l'émulation de l'élément principale de la machine, le CPU.

La discipline est simple pour émuler les CPU, car cela consiste à désassembler les instructions du microprocesseur afin de modifier les registres et valeurs internes du CPU.

Puis, on réserve les emplacements mémoire, et on lance le PC (pointeur de lecture) à 0, le microprocesseur entame sa scrutation en mémoire.
L'émulation est faite pour le microprocesseur.

A ce stade, il n'y a ni écran, ni clavier... rien!
Le désassemblage de la ROM donnera les adresses et les IO utilisées pas la machine et les spécifications techniques du matériel.

Il y a deux méthodes pour émuler ces périphériques, la méthode rapide en ignorant partiellement les sous-systèmes de traitement des données (émulation partielle) et l'émulation totale.

La première solution est de loin la plus rapide, et était utilisée pour utiliser le moins de ressources possibles au niveau matériel à l'époque où les ordinateurs étaient limités en puissance de calcul.
Elle est rapide, simplifie les tâches d'émulation, mais elle est aussi imparfaite et rend l'émulation très approximative, voir erronée sur une utilisation plus poussée de l'émulation.

Prenons l'exemple d'une émulation d'un lecteur de disquette, au lieu d'utiliser les fonctions du lecteur (MotorO,....), on lit un fichier par secteur, bloc par bloc... directement et sans passer par le driver.
L'émulation est partielle, et court-circuite le fonctionnement du lecteur. Pour une utilisation normale, pas de problèmes, mais en car de formatage particulier... se pose la problème de compatibilité.
Avec une émulation totale, les blocs secteurs sont lu correctement et dans leur totalité.

Donc, avec l'aide des spécifications en ROM et de la documentation, il est possible de traiter les périphériques de manière virtuelle, au plus proche des machines originales.

Mais en règle générale, cette émulation ce fait de manière modulaire autour du microprocesseur et du traitement de la ROM.

D'autres particularités matérielles peuvent survenir lors de l'émulation, avec des routines d'utilisations particulières qui peuvent dévoiler certains sous-systèmes présents sur la machine.

Pour réaliser un émulateur, il ne faut pas forcément connaitre la machine, mais sa création implique une recherche pointue, une utilisation et des tests ... qui rendront l'auteur assez callé sur la machine.

Mais, pour émuler une machine, il est important de ne pas "bricoler" un émulateur existant, car il sera difficile de modifier le code, sans y ajouter des erreurs.

Il faut donc, partir avec une base simple, afin de comprendre et localiser des routines IO qui pourront être adaptés sans supprimer des tonnes de lignes.

Avatar du membre
leduigou
Messages : 363
Enregistré le : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Comment on fait un émulateur ?

Message par leduigou » 01 mai 2018 23:48

Bonjour,

Je me suis lancé dans l'émulation du Tavernier 6809 il y a presque 1 an. A temps partiel à vrai dire, et je m'y suis mis assez intensément il y a 3 mois, booster dernièrement par le travail de 6502MAN sur le Goupil G3.
Je suis parti du code du microprocesseur 6809 de Daniel en C, et j'ai re-programmé en C++ sous Qt (c'est mon fils qui m'a montré ce que l'on peut faire, et notamment compiler sur Mac et PC indifféremment)
J'ai choisi l'émulation presque complète. Ma structure est la suivante:
Structure Emulation Tavernier.jpg
Structure Emulation Tavernier.jpg (162.03 Kio) Vu 540 fois
J'ai essayé d'être réaliste dans les timings, ainsi l'émulateur du trou d'index du floppy est entre 190 et 210 ms. Les interruptions marchent aussi assez bien (elles sont utilisées pour le spooling)
Le simulateur tourne à 1,004 MHz et ralenti à 1 MHz s'il y a des formatages ou une intense activité disquette.
Le contrôleur de disquette permet le formatage en Simple Densité (c'est le Tavernier Original qui ne sait pas gérer le DD) mais j'ai émulé le DD en lecture et écriture.
Le contrôleur d'écran fixe le format à afficher et les bitmaps sont recopiés à l'écran (le terminal qui utilise les polices du Mac et du PC sont plus belles, mais j'aime bien les matrices 8x8 !)
L'imprimante permet d'exporter des fichiers TXT ou PDF pour un usage externe et on peut insérer le presse papier à l'endroit du curseur. Ainsi, si on ouvre un éditeur de texte du type EDIT, on peut recopier un fichier dans l'émulateur.
J'ai aussi ajouté une fonction pour copier un fichier binaire directement en RAM du Tavernier ou en extraire une zone mémoire pour faire un fichier BIN sur l'ordinateur hôte.
Je n'ai pas rencontré de plantage ces derniers temps, mais l'esthétique ne me convient pas vraiment encore. Il faut que je l'améliore un peu.
Ma prochaine évolution sera d'émuler la carte coprocesseur de Michel Guyot.

Mon code n'est certainement pas optimisé, mais il tourne !

C'est du travail mais en suite je devrais pouvoir faire assez facilement l'émulateur du Vegas 6809 et du Tavernier ICS.
Avec tous les Thomson de Daniel et le G3 de 6502MAN, les microprocesseurs 6809 sont bien émulé. Par contre je n'ai pas le Z80. Le faire sur une même base ne dois pas être très compliqué.
Cordialement
Frédéric

Avatar du membre
Xavier_AL
Messages : 261
Enregistré le : 06 déc. 2017 20:30

Re: Comment on fait un émulateur ?

Message par Xavier_AL » 02 mai 2018 05:01

Salut,
Oui, l'émulation demande beaucoup de rigueur et de patience...

Pour répondre plus précisément à la question:
J'aimerai bien savoir comment on fait un émulateur... Mon rêve d'émuler mon sergio max computeur a base de Z80 mais pas de vdp encore.

L'émulateur heigthy-one peut t'aider.
Les sources sont disponible et fonctionnelles.
comment on émule le micro-processeur, doit on le faire mnémonique par mnémonique ou y a t'il des moteurs z80 6502, 6510...
La source du Z80 est incluse dans l'émulateur cité plus haut.
comment on émule le vdp avec les défauts (image pas nette, à la commodore 64) ? doit on le faire pixel par pixel avec des fichier image retravaillé ?
Tu verra que le rendu écran est un "gadget" qui n'a aucune utilité dans le fonctionnement de l'émulateur.
Mais, si tu le désires, les codes sources de EO ont un filtre de distorsion vidéo, pour rendre le rendu plus réaliste.
ou trouver la doc et la rom ?
C'est la question la plus importante.

Sans doc, livre ou notices techniques ... impossible d'émuler.
Sans ROM ou copie des mémoires statiques, impossible de faire du retro-engineering sur la code de la machine (IO clavier/écran adressage....)

Il faut donc que tu fasses un Dump des ROMs.(BIOS/BASIC)
Dans un premier temps, fait un mapping d'adresses ROM, mémoire écran et mémoire intégrée... extension mémoire...

Puis Dumpe les ROMs.
-Dump direct avec un lecteur/graveur d'Eprom.
-Sortie hexa sur imprimante et OCR.(ou en création de fichier sur un terminal RS)
-Sortie dans un fichier cassette (wav).
-Sortie écran avec photos...puis OCR
-Sortie sur disquette...

Le plus rapide est le lecteur d'Eprom, car le fichier Wav doit être décodé...
Sur imprimante, je l'ai fait pour une rom de driver disque de 2K, mais il faut effectuer un CRC pour la vérification des codes.
Sur disquette, il reste un problème de compatibilité de dump sur PC... car cela est parfois impossible.
Sur K7, si le protocole wav est connu et que tu disposes déjà d'une cassette, cela est possible.

C'est après cette étape que l'émulation peut commencer.

Avatar du membre
fneck
Site Admin
Messages : 12048
Enregistré le : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Comment on fait un émulateur ?

Message par fneck » 02 mai 2018 18:51

C'est un peu HS, quoique, tu peux nous en dire plus sur ce "Sergio Max Computer" ? Je ne connais pas du tout.

Avatar du membre
rendomizer
Messages : 202
Enregistré le : 17 juin 2016 21:00
Contact :

Re: Comment on fait un émulateur ?

Message par rendomizer » 02 mai 2018 20:43

Merci à vous tous de votre précieuse aide.
le mot de passe c'est quoi ? quoi.

Avatar du membre
Xavier_AL
Messages : 261
Enregistré le : 06 déc. 2017 20:30

Re: Comment on fait un émulateur ?

Message par Xavier_AL » 02 mai 2018 20:53

Ha!, une fin de non recevoir pour le "Sergio Max Computer"... que Fneck a cassé.

Le fil est maintenant tout HS (Hors-Service) et HS (Hors-sujet).
:lol:

Plaisanterie mis à part, je n'ai rien trouvé sur mon moteur de recherche. Seulement des références à d'anciens employés d' "Olivetti" avec un monsieur Sergio et un monsieur Max. (pas de M. Computer par contre!)
Rien de plus...

hlide
Messages : 387
Enregistré le : 29 nov. 2017 10:23

Re: Comment on fait un émulateur ?

Message par hlide » 03 mai 2018 00:20

Sergio Max == rendomizer.

Donc j'imagine que Sergio Max Computer == VG5000.

Vous êtes dubitatif ? ben regardez là : https://vg5000.webnode.fr/projets/.

Avatar du membre
Mokona
Messages : 302
Enregistré le : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Comment on fait un émulateur ?

Message par Mokona » 03 mai 2018 01:49

Du coup, si c'est pour du VG5000µ, ce n'est ni la documentation ni les exemples qui manquent.

Avatar du membre
yo_fr
Messages : 1320
Enregistré le : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Comment on fait un émulateur ?

Message par yo_fr » 03 mai 2018 21:00


Avatar du membre
6502man
Messages : 8978
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Comment on fait un émulateur ?

Message par 6502man » 05 mai 2018 11:14

Pour débuter et comme le suggérait Daniel tu peux commencer par regarder ce qui a été fait pour DCVG5K ça te donnera déjà un très bon exemple :wink:

Daniel écrit très bien ces émulateurs et de plus il est très facile de comprendre son code :D

D'ailleurs il y a quelques années j'avais adapté DCV5K SDL pour la console portable GP2X grace à ses sources (de Daniel) :wink:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

hlide
Messages : 387
Enregistré le : 29 nov. 2017 10:23

Re: Comment on fait un émulateur ?

Message par hlide » 05 mai 2018 13:02

Oh il y a encore des amateurs de la console GP2X ?

Avatar du membre
6502man
Messages : 8978
Enregistré le : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Comment on fait un émulateur ?

Message par 6502man » 05 mai 2018 17:06

C'était il y a des années donc je crois que la console est tombé dans l'oubli depuis :roll:
Phil.

www.6502man.com

To bit or not to bit.
1 or 0.

Répondre