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 : Papy.G, fneck, Carl

Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Comment on fait un émulateur ?

Message par rendomizer »

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 ?
Je ne suis qu'un utilisateur pas un pro
Daniel
Messages : 17312
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: Comment on fait un émulateur ?

Message par Daniel »

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.
Xavier_AL

Re: Comment on fait un émulateur ?

Message par Xavier_AL »

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 de l’utilisateur
leduigou
Messages : 542
Inscription : 08 mai 2011 21:00
Localisation : Paris, 6ème

Re: Comment on fait un émulateur ?

Message par leduigou »

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) Consulté 6664 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 (Modo: polling?)
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

Forget the C:\ prompt! Real computing starts with +++
Xavier_AL

Re: Comment on fait un émulateur ?

Message par Xavier_AL »

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 de l’utilisateur
fneck
Site Admin
Messages : 17418
Inscription : 01 avr. 2007 12:03
Localisation : Drôme Provençale (26)
Contact :

Re: Comment on fait un émulateur ?

Message par fneck »

C'est un peu HS, quoique, tu peux nous en dire plus sur ce "Sergio Max Computer" ? Je ne connais pas du tout.
Fabien https://www.system-cfg.com
Les bonnes pratiques de l'utilisateur du forum viewtopic.php?f=14&t=3
Avatar de l’utilisateur
rendomizer
Messages : 413
Inscription : 17 juin 2016 21:00
Contact :

Re: Comment on fait un émulateur ?

Message par rendomizer »

Merci à vous tous de votre précieuse aide.
Je ne suis qu'un utilisateur pas un pro
Xavier_AL

Re: Comment on fait un émulateur ?

Message par Xavier_AL »

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...
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Comment on fait un émulateur ?

Message par hlide »

Sergio Max == rendomizer.

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

Vous êtes dubitatif ? ben regardez là : https://vg5000.webnode.fr/projets/.
Avatar de l’utilisateur
Mokona
Messages : 1040
Inscription : 17 déc. 2016 22:01
Localisation : Nord Est des Yvelines
Contact :

Re: Comment on fait un émulateur ?

Message par Mokona »

Du coup, si c'est pour du VG5000µ, ce n'est ni la documentation ni les exemples qui manquent.
Avatar de l’utilisateur
yo_fr
Messages : 1336
Inscription : 13 août 2009 18:24
Localisation : 78...
Contact :

Re: Comment on fait un émulateur ?

Message par yo_fr »

Avatar de l’utilisateur
6502man
Messages : 12284
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Comment on fait un émulateur ?

Message par 6502man »

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.
Avatar de l’utilisateur
hlide
Messages : 3469
Inscription : 29 nov. 2017 10:23

Re: Comment on fait un émulateur ?

Message par hlide »

Oh il y a encore des amateurs de la console GP2X ?
Avatar de l’utilisateur
6502man
Messages : 12284
Inscription : 12 avr. 2007 22:46
Localisation : VAR
Contact :

Re: Comment on fait un émulateur ?

Message par 6502man »

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.
Avatar de l’utilisateur
SOREK
Messages : 27
Inscription : 25 févr. 2012 02:29
Localisation : 59169 Férin (près de Douai, département du Nord 59)

Re: Comment on fait un émulateur ?

Message par SOREK »

Bonjour à tous,
Je recherche un simulateur 6809, si il est en Français se serai le top !
Bonne journée.
Richard
Répondre