Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Créer un emulateur
Potter360 Hors ligne Rédacteur Points: 1255 Défis: 2 Message

Créer un emulateur

Posté le 15/11/2020 11:08

Bonjour !
Tout est dans le titre : comment créer un émulateur ?


Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 15/11/2020 11:20 | #


Un poil de contexte d'abord : créer ou porter un émulateur est difficile. On attend donc que quelqu'un qui s'y attaque maîtrise ses outils et puisse se documenter. Donc généralement tu auras des grandes idées et de la doc mais personne n'ira te proposer un tutoriel ou du code tous prêts : parce que si tu en as besoin, c'est que tu n'es pas prêt à te lancer là-dedans.

D'abord tu dois choisir une plateforme à émuler. Une connaissance générale du matériel à émuler et du matériel dont tu disposes (la calculatrice) est indispensable pour éviter de te lancer dans un truc impossible (eg. émuler une PSP sur une Graph 35+E II).

Ensuite tu dois étudier la liste des parties matérielles et périphériques que tu dois émuler. Souvent il y a plein de subtilités, et tu voudras commencer par une partie réduite qui supporte un ensemble minimal d'applications à tester. Dans le même temps tu planifies comment coder ça. Si tu dois émuler un processeur alors les performances de cette partie seront cruciales donc retournes-y deux ou trois fois.

Puis tu le codes. Prévoir un protocole de test incrémental détaillé. Pour les consoles cherche des ROMs homebrew qui testent les fonctionnalités du processeur avant de lancer une application graphique complète. Prévois beaucoup de debug et selon la plateforme choisie probablement des mois de développement.

À toutes les étapes tu auras besoin de documentation détaillée de la plateforme à émuler, par exemple Emu-Docs, dont l'information est toujours pertinente même si le projet semble un peu mort désormais.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Pedrobzh Hors ligne Membre Points: 616 Défis: 0 Message

Citer : Posté le 15/11/2020 11:34 | #


voici une personne qui fais un émulateur nes
https://www.youtube.com/watch?v=F8kx56OZQhg&t=884s

pour montrer a quel point c'est dur et long
pensés suicidaires
   90%
Potter360 Hors ligne Rédacteur Points: 1255 Défis: 2 Message

Citer : Posté le 15/11/2020 11:45 | #


En fait ce que je comprends pas c'est que si :
-j'utilise un truc ou je programme un truc pour transformer un(e ?) ROM en code, à ce moment là si le code est en C j'ai juste à le lancer sur la calto sinon je le convertis en C

Ca va donner quoi ?

Ajouté le 15/11/2020 à 11:45 :
(Je sais c'est probablement ultra naif)
Globalement, coder. Mal, mais coder.
Captainluigi Hors ligne Membre Points: 816 Défis: 1 Message

Citer : Posté le 15/11/2020 12:02 | #


Le plus simple en terme d'emulateurs c'est d'émuler (copier) le fonctionnement d'un processeur.
Je te conseille de regarder un tuto sur les émulateurs chip 8 , tu verras que c'est très simple
Les bons artistes copient, les grands artistes volent. Picasso

Passé ici il y a peu. ಥ‿ಥ

Chaîne youtube
Cliquez pour recouvrir

Vieux projets et jeux sur Casio
Cliquez pour recouvrir
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 15/11/2020 12:02 | #


C'est pas entièrement stupide (t'a une bonne idée de recompilation derrière) mais oui c'est très naïf. Ta ROM c'est du code assembleur pour la plateforme en question. Non seulement cette étape de décomrfpilation n'est pas triviale mais en plus derrière la façade de "c'est du C" tu élimines complètement l'interface matérielle. La ROM va contenir des instructions comme "lance le timer" et c'est pas en "transformant" en C que tu vas éliminer ça. Tu dois bel et bien émuler tous les périphériques, et même si pour le CPU tu recompiles (ce qui est tout sauf idiot) ça ne te sauvera pas.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Captainluigi Hors ligne Membre Points: 816 Défis: 1 Message

Citer : Posté le 15/11/2020 12:03 | #


Il y en a dans tous les langages , C , Python et même HTML+JS
(Pour l'exemple du chip 8)
Les bons artistes copient, les grands artistes volent. Picasso

Passé ici il y a peu. ಥ‿ಥ

Chaîne youtube
Cliquez pour recouvrir

Vieux projets et jeux sur Casio
Cliquez pour recouvrir
Potter360 Hors ligne Rédacteur Points: 1255 Défis: 2 Message

Citer : Posté le 15/11/2020 12:12 | #


Lephenixnoir a écrit :
Ta ROM c'est du code assembleur pour la plateforme en question.

Mais du coup , il y a juste a executer l'assembleur non ?
Globalement, coder. Mal, mais coder.
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 15/11/2020 12:13 | #


L'exécuter avec quoi ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Potter360 Hors ligne Rédacteur Points: 1255 Défis: 2 Message

Citer : Posté le 15/11/2020 12:57 | #


Avec un compilateur d'assembleur ?

Ajouté le 15/11/2020 à 13:04 :
Pour moi compiler un code C c'est :
1)le transformer en language bas niveau genre assembleur
2)puis transformer l'assembleur en code machine
3)et enfin executer le code machine

Donc pas besoin de faire l'etape 1 puisque c'est déjà en assembleur

Donc en gros il faudrait faire un genre de GCC pour sans l'étape 1
Je dois dire des conneries ...

Ajouté le 15/11/2020 à 13:06 :
*"sans" pas "pour sans"
Globalement, coder. Mal, mais coder.
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 15/11/2020 13:27 | #


Donc pas besoin de faire l'etape 1 puisque c'est déjà en assembleur

Tu sembles oublier un détail important sur l'assembleur : l'architecture. L'assembleur n'est pas un langage comme le C, c'est presque juste un concept. Chaque processeur a son propre langage. Au début de l'informatique ils étaient tous différents. Du code écrit pour un processeur devait être réécrit pour marcher sur un autre. Avec le temps les gens ont bien compris que c'était mieux d'éviter ça et les architectures sont apparues. Tu peux voir ça comme un « modèle » de sémantique pour le processeur : deux processeurs de la même architecture ont un fonctionnement similaire (du point de vue du programmeur au moins) et utilisent un langage commun, qu'on appelle assembleur.

En bref : il n'y pas « l'assembleur », il y a « un langage assembleur par famille de processeur ».

Donc non le code assembleur ARM que tu trouves dans une ROM Game Boy Advance ne peut pas être exécuté sur le processeur SuperH de la calculatrice. Et c'est le truc #1 que tu dois regarder si tu veux faire un émulateur : quelle architecture ?

Et pas de bol, le code assembleur ce n'est pas comme du pseudo-code ou du C : tu ne peux pas le compiler ou le "transformer" comme ça. Quand tu vas désassembler du code SuperH tu vas croiser un moment où on charge une adresse dans le registre GBR et ensuite on s'en sert pour accéder à des structures dans la RAM. Sauf que ARM n'a pas de registre GBR, donc tu ne risques pas de trouver une instruction équivalente. Tu es obligé de trouver une autre façon de reproduire le même effet mais en ARM, autrement dit... d'émuler la fonctionnalité.

(Cet exemple montre que recompiler du SuperH vers du ARM serait difficile, et bien sûr ça marche aussi dans l'autre sens. Mais je connais moins ARM donc je prends des exemples que je maîtrise mieux.)

Et pas de bol encore, le code assembleur fait référence à plein de trucs spécifiques à la machine. Sur la calculatrice il y a des registres mappés en mémoire, si bien que si tu écris à l'adresse 0xb4000000 ça envoie des informations à l'écran. Là c'est même pas la peine d'espérer que tu peux prendre un autre objet (genre une Game Boy ou un ordinateur) et espérer qu'il y a un écran derrière l'adresse 0xb4000000 (sur une Game Boy cette adresse n'existe même pas). Tu es obligé de reproduire le fonctionnement et le protocole de l'écran... autrement dit d'émuler le périphérique.

Et si tu te demandes, non, il est impossible (et ça c'est un bon gros impossible de théoricien, ni rien ni personne ne le peut) de décider si oui ou non un programme accède à l'adresse 0xb4000000 et si oui à quel moment.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Potter360 Hors ligne Rédacteur Points: 1255 Défis: 2 Message

Citer : Posté le 15/11/2020 15:25 | #


Bon, en gros , RIP Mario Kart

Plus serieusement, merci beaucoup d'avoir pris du temps à me répondre, surtout que je connais pas grand chose donc je dois être chiant (c.f mon age )
Globalement, coder. Mal, mais coder.
Lephenixnoir Hors ligne Administrateur Points: 24670 Défis: 170 Message

Citer : Posté le 15/11/2020 20:18 | #


Ça dépend de quelle version de Mario Kart je suppose (?) mais oui comme tu peux le voir c'est compliqué. La calculatrice (même la Graph 90+E) n'est pas si puissante que ça donc il faut y aller prudemment.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 127 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd