1

Au cas où certains d'entre vous n'auraient pas lu la news sur tigen, un type a écrit un émulateur de TI-83+, tournant sur TI-68k bien sûr smile
Sa méthode d'émulation est très ingénieuse et permet surtout d'émuler la TI-83+ à une vitesse correcte, contrairement à GB68k, par exemple qui peine à émuler la game boy (pourtant moins puissante qu'une TI-83+).
Contrairement aux autres émulateurs, qui simulent vraiment les étapes de lecture, décodage et exécution des instructions une à une, MulTi traduit des portions de code Z80 (délimitées par les instructions de sauts par exemple) en 68000 et place tous ces morceaux dans un cache, dans lequel il pioche au fur et à mesure du déroulement du programme émulé.
Les résultat semble très efficace ! Il faudrait voir si on peut adopter cette méthode pour GB68k, ça permettrait sûrement d'obtenir une émulation en full speed...
Mais il y a des petits problèmes pour gérer le self-modifying-code (même si certaines formes sont gérées par MulTI)...
Au fait, l'exécutable tient en 13ko, à côté des 25ko (environ) de GB68k smile

Edit : je viens de m'apercevoir que je n'ai pas proposé de lien vers le programme : http://www.ticalc.org/archives/files/fileinfo/388/38820.html
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

2

Un petit lien avec quelques infos sur la méthode d'émulation employée : http://en.wikipedia.org/wiki/Binary_translation
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Juste une question... A-t-on un résultat correct pour des jeux en niveaux de gris ?

4

J'ai "toujours dit" qu'il était était plus intelligent de traduire sur PC des bouts de codes du Z80 en 68K smile
Je suis persuadé que si on fait la même chose pour GB on aura des jeux jouables.
Par contre reste à savoir comment faire la différence entre instructions et données?
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

5

J'avais pas mal réfléchi à un convertisseur GB vers ti68k, et j'en étais arrivé à la conclusion qu'un convertisseur brutal ne serait pas possible à réaliser faute de mémoire disponible.
Le raisonnement est le suivant:
hypothèses:
- Une instruction GB (z80 modifié) fait au moins un octet.
- Une instruction 68k fait au moins 2 octets.
- Il n'est pas trivial (pour autant que je sache) de différencier le code exécutable des données brutes qui doivent pourtant représenter très largement la plus grande partie de la mémoire des cartouches GB.
- Un binaire GB brut fait entre 32ko et 1.5Mo.
- Le z80 modifié possède des instructions de saut vers l'adresse contenue par un registre, aussi les branchements ne sont pas décodables a priori.
En conséquence:
- Un programme recompilé sans suppression des blocs de données brutes ferait au moins entre 64Ko et 3Mo.
- Puisqu'il n'est pas possible de déterminer en temps de compilation la destination de tous les branchements, il faut utiliser une méthode pour déterminer les sauts à effectuer, pour moi ça passe par un tableau de correspondance adresse z80/adresse 68k, et ça prendrait 4*n, où n est la taille totale adressable (bon on peut compresser, optimiser, etc, mais ça resterait de l'ordre de grandeur de la taille de l'espace "branchable").

Bon après, plusieurs solutions pour l'émulation:
- Emuler brutalement: optimal en taille, pas de prétraitement des données (outre la conversion au format ti oncalc). Après, on peut utiliser diverses techniques pour accélérer le décodage des instructions.
- Recompiler brutalement: probablement le plus rapide, mais à mon avis impossible à cause des contraintes de tailles citées au dessus (enfin si, possible, mais limité aux petites roms, sauf si il existe un bon moyen de supprimer les données non exécutables du binaire). A noter en plus qu'à cause de la présence de données brutes, il faudra conserver le binaire d'origine dans le programme recompilé.
- Combo émulation+recompilation: le code est précompilé comme au dessus, et on passe du mode "exécution de code précompilé" au mode "exécution de code interprété" lors de sauts relatifs à un registre, et inversement lors de branchements en valeurs immédiates. On économise ici la table de sauts, mais si on ne sait pas éviter l'inclusion de code non exécutable, on restera toujours au final avec un résultat très gros.
- Recompilation partielle: la gb possède un espace de mémoire paginé (pour palier à l'adressage sur 16 bits), et sur l'espace d'adressage de la cartouche, seuls 16Ko sont adressables en permanence, les autres peuvent être échangés en utilisant un registre du contrôleur d'adresse. L'idée que j'avais alors retenue était de précompiler seulement le bloc présent en permanence qui contient sûrement le code le plus souvent exécuté.

(oui, je m'étais lancé dans un recompilo game boy avant de tomber sur ces problèmes, c'est pas dit que le résultat voie le jour, vous me connaissez peut-être hehe)

Pour les tiz80, j'ai pas été voir si une précompilation était effectuée oncalc ou si c'était fait sur PC, mais une chose est sûre: les contraintes de taille doivent être moindres.
Bel effort cependant top

edit: cross
edit2: en fait ça parle un peu de ce genre de problèmes dans l'article de la Wikipedia posté au dessus happy
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

6

Avant d'utiliser une ROM telle quelle il faudrait faire un programme qui vire les données inutiles genre les sons voir les cinématiques mais bon là j'imagines même pas le travail à faire, c'est énorme!
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.

7

Le plus gros problème pour faire une analyse statique fine pour différencier le code et les données, outre le fait que c'est difficile, c'est le fait que ça doit être extrêmement probable que la plupart des jeux aient des bugs subtils qui font qu'en fait, même le code pourrait être modifié et même les données pourraient potentiellement être exécutées (mais dans des conditions complètement irréalistes, genre après 2 milliards d'appuis sur une touche...) donc un analyseur statique ne peut rien faire s'il n'y a pas un humain pour débugger le code GB...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

8

Je pense que le code GB est quand même assez robuste contre l'exécution de code illégal ou la modification de code exécutable, c'est pas vraiment ça qui me ferait peur... Mais les opcodes GB sont très denses (presque toutes les 256 valeurs possibles pour les opcodes de base sont légaux), donc il y a très peu de valeurs illégales qui permetteraient de détecter des données.
Après, ça dépend si les éditeurs ont bien séparé les données du code, et ont gardé une logique du genre "banques de mémoire 0 à 2: code, banque 3: code et données, banques 4 à 7: données".
On peut postuler que les branchements par registres sont peu utilisés (ça se vérifie sur quelques roms que j'ai regardées, et encore rien ne prouve que les instructions en question n'étaient pas des données) et détecter les banques contenant obligatoirement du code et quelles sont celles qui contiennent du code inaccessibles et donc des données, mais le pari plutôt risqué happy

edit: et encore, il faudra prouver que les branchements directs décodés sont effectivement des branchements et non des données grin
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

9

pour différencier les données du code, il faudrait qu'un type joue à tout le jeu et l'émulateur regarderait quelles zones de la mémoire n'ont pas été exécutée grin

10

et si par hasard il a pas tué tel ennemi à un moment du jeu, c'est foutu ? tongue

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

11

Et faire toutes les combinaisons possible à Tetris tritop
Bref ça n'est que "moyennement" une solution grin

Je me demande aussi, pour l'ému 83+, comment sont gérés les appels à l'OS ? A moins qu'il y ait moins de romcalls dans les programmes assembleurs que sur ti68k ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

12

En fait, après réflexion, même une analyse des instructions de saut et de retour ne permet pas forcément de déterminer quelles seraient les zones de données justement à cause de la pagination (en dehors des deux premières pages statiques, mais là c'est tout de suite moins intéressant grin).
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

13

geogeo :
J'ai "toujours dit" qu'il était était plus intelligent de traduire sur PC des bouts de codes du Z80 en 68K smile
La traduction est dynamique dans le cas de MulTI (c'est-à-dire oncalc, pas sur PC).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

14

Sasume
:
geogeo :
J'ai "toujours dit" qu'il était était plus intelligent de traduire sur PC des bouts de codes du Z80 en 68K smile
La traduction est dynamique dans le cas de MulTI (c'est-à-dire oncalc, pas sur PC).

Dynamique comment ? En temps d'exécution ou avant l'exécution ?




Pour détecter les données non exécutable sur GB, une approche statistique est peut-être faisable:
Input file : tetris.gb
Rom size: 32768 bytes (2 banks)
Ram size: 0 bytes (0 banks)
Cart name: TETRIS
Bank 0 : Illegal/NOP count = 1304 (8cheeky
Bank 1 : Illegal/NOP count = 1576 (10cheeky

Input file : zelda.gb
Rom size: 524288 bytes (32 banks)
Ram size: 8192 bytes (1 banks)
Cart name: ZELDA
Bank 0 : Illegal/NOP count = 598 (4cheeky
Bank 1 : Illegal/NOP count = 947 (6cheeky
Bank 2 : Illegal/NOP count = 602 (4cheeky
Bank 3 : Illegal/NOP count = 1088 (7cheeky
Bank 4 : Illegal/NOP count = 605 (4cheeky
Bank 5 : Illegal/NOP count = 701 (4cheeky
Bank 6 : Illegal/NOP count = 530 (3cheeky
Bank 7 : Illegal/NOP count = 507 (3cheeky
Bank 8 : Illegal/NOP count = 858 (5cheeky
Bank 9 : Illegal/NOP count = 295 (2cheeky
Bank 10 : Illegal/NOP count = 391 (2cheeky
Bank 11 : Illegal/NOP count = 471 (3cheeky
Bank 12 : Illegal/NOP count = 3240 (20cheeky
Bank 13 : Illegal/NOP count = 2882 (19cheeky
Bank 14 : Illegal/NOP count = 3919 (25cheeky
Bank 15 : Illegal/NOP count = 2509 (15cheeky
Bank 16 : Illegal/NOP count = 3548 (22cheeky
Bank 17 : Illegal/NOP count = 3314 (20cheeky
Bank 18 : Illegal/NOP count = 4254 (26cheeky
Bank 19 : Illegal/NOP count = 4248 (26cheeky
Bank 20 : Illegal/NOP count = 1760 (11cheeky
Bank 21 : Illegal/NOP count = 829 (5cheeky
Bank 22 : Illegal/NOP count = 80 (0cheeky
Bank 23 : Illegal/NOP count = 1108 (7cheeky
Bank 24 : Illegal/NOP count = 858 (5cheeky
Bank 25 : Illegal/NOP count = 899 (5cheeky
Bank 26 : Illegal/NOP count = 173 (1cheeky
Bank 27 : Illegal/NOP count = 653 (4cheeky
Bank 28 : Illegal/NOP count = 364 (2cheeky
Bank 29 : Illegal/NOP count = 0 (0cheeky
Bank 30 : Illegal/NOP count = 1002 (6cheeky
Bank 31 : Illegal/NOP count = 766 (5cheeky


(en supposant que mon outil soit efficace grin)

On pourrait en plus déterminer des instructions qui, de part leur position juste avant un code illégal, seraient aussi des données de facto... verrai ça à l'occase hehe
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

15

Ximoon
:
Sasume :
La traduction est dynamique dans le cas de MulTI (c'est-à-dire oncalc, pas sur PC).
Dynamique comment ? En temps d'exécution ou avant l'exécution ?
En temps d'exécution, si j'ai bien compris.
Il est possible de faire de la traduction *dynamique* avant l'exécution ?
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

16

Je sais pas, si tu construis des bouts d'exécutables sans les enregistrer au moment où tu démarres le programmes, peut-être que tu aurais pu dire que c'est dynamique hehe
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

17

Je suis en train de regarder le code, c'est plutôt bien écrit, ça va être facile de contribuer smile
Les appels systèmes sont émulés (ainsi que la couche fournie par leur équivalent de notre kernel, ION).
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

18

tu pourrais uploader des .89y de programmes sympas qu'on puisse voir ce que ça donne ? (de préférence des trucs gourmands ^^)
c'est compatible avec bcp de programmes, ou pas encore ?

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

19

ça fonctionne mieux que le convertisseur de PAD dont j'ai oublié le nom ?

20

./18 > Euh, personnellement je n'ai pas encore pris le temps d'essayer, peut-être demain smile
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

21

Bon, je viens d'essayer de convertir quelques jeux, mais le convertisseur ne fonctionne pas sad

Edit : en fait, le convertisseur produit un fichier portant l'extension MlTI, alors que l'émulateur attend l'extension mlTI. Et je n'ai ni de quoi recompiler le convertisseur (en java) ni de quoi recompiler l'émulateur (avec tigcc).
Donc tant pis sad
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

22

Pas d'éditeur hexa ?
avatar
Que cache le pays des Dieux ? - Forum Ghibli - Forum Littéraire

La fin d'un monde souillé est venue. L'oiseau blanc plane dans le ciel annonçant le début d'une longue ère de purification. Détachons-nous à jamais de notre vie dans ce monde de souffrance. Ô toi l'oiseau blanc, l'être vêtu de bleu, guide nous vers ce monde de pureté. - Sutra originel dork.

23

ou de perl ou de sed...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

24

Ah oui, tout simplement smile
J'y retourne !
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

25

Bon, j'ai essayé une dizaine de jeux (mario, phoenix, block dude, reversi, mercury, chuchu rocket, sqrzx, donkey kong et paper plane) et aucun n'a fonctionné sad
Dans le meilleur des cas, l'émulateur quitte avec un message d'erreur "instruction non supportée", ou "bcall non supporté" (l'équivalent de nos rom_calls je crois), mais parfois l'émulateur plante sad
Ce sera pour une autre fois...
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

26

:/

Euh au fait qu'est-ce qui te faisait dire ça si t'avais pas essayé confus :
Sasume :
Les résultat semble très efficace ! Il faudrait voir si on peut adopter cette méthode pour GB68k, ça permettrait sûrement d'obtenir une émulation en full speed...

« The biggest civil liberty of all is not to be killed by a terrorist. » (Geoff Hoon, ministre des transports anglais)

27

Les commentaires des autres utilisateur et le README.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

28

Sasume :
Bon, j'ai essayé une dizaine de jeux (mario, phoenix, block dude, reversi, mercury, chuchu rocket, sqrzx, donkey kong et paper plane) et aucun n'a fonctionné sad
Dans le meilleur des cas, l'émulateur quitte avec un message d'erreur "instruction non supportée", ou "bcall non supporté" (l'équivalent de nos rom_calls je crois), mais parfois l'émulateur plante sad
Ce sera pour une autre fois...

c'est ptet que ça emule les traps en full time cheeky
avatar
Webmaster du site Ti-FRv3 (et aussi de DevLynx)
Si moins de monde enculait le système, alors celui ci aurait plus de mal à nous sortir de si grosses merdes !
"L'erreur humaine est humaine"©Nil (2006) // topics/6238-moved-jamais-jaurais-pense-faire-ca

29


have an irrational loathing for proprietary compilation tools like tprbuilder when GNU make works perfectly well.

De suite, l'auteur m'apparait sympathique smile

30

Ximoon
: - Combo émulation+recompilation: le code est précompilé comme au dessus, et on passe du mode "exécution de code précompilé" au mode "exécution de code interprété" lors de sauts relatifs à un registre, et inversement lors de branchements en valeurs immédiates. On économise ici la table de sauts, mais si on ne sait pas éviter l'inclusion de code non exécutable, on restera toujours au final avec un résultat très gros.

Je ne comprends pas cette méthode-là. Si tu as un branchement indirect, comment tu sais où il va pointer dans ton code traduit? confus
avatar
Highway Runners, mon jeu de racing à la Outrun qu'il est sorti le 14 décembre 2016 ! N'hésitez pas à me soutenir :)

https://itunes.apple.com/us/app/highway-runners/id964932741