Page 1 of 3

Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 13 Feb 2014, 22:24
by Lionel Debroux
Je me suis récemment remis à travailler sur l'émulateur TI-68k utilisé sur TI-Planet. J'ai corrigé des bugs, amélioré la fiabilité, ajouté des features, et d'une manière générale, réduit le nombre d'éléments importants restant dans la TODO list avant qu'il soit raisonnable de publier l'émulateur (qui n'a jamais été fortement lié au site TI-Planet, et les raisons en sont claires: ça embête les tiers) de façon officielle :)

Parmi les principales nouveautés, plus ou moins visibles:
  • une intégration aux sites tiers encore facilitée, les sites peuvent maintenant optionnellement forcer le script à utiliser des éléments d'IDs fixés par les sites;
  • ajout de l'envoi de keypresses à partir de la console JS, par exemple link.sendkeys(['exec("4e444e750000")', 0xD]);
  • réorganisation pour séparer le code de link du coeur de l'émulateur;
  • grosse amélioration de fidélité par l'implémentation du vrai mécanisme de gestion des interruptions (qui n'avait jamais été implémenté). Entre autres, ça permet à l'extinction de la calculatrice, et au rallumage, de fonctionner;
  • changements (principalement ajouts) dans les bindings de touches: l'utilisation de l'émulateur au clavier est maintenant plus complète (notamment les touches A-S et U-W pour 89/89T) et plus proche de VTI et TIEmu, donc beaucoup plus agréable;
  • bugfixes épars, notamment dans les zones et codes de touches.

Profitez donc de cette nouvelle version, en attendant d'autres changements vers une release officielle :)

Officieusement, le code de l'émulateur est, depuis longtemps (comme l'indiquent toutes les pages d'archive TI-68k), à http://tiplanet.org/pad_ti68k_emu/v12_readable.js .

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 15 Feb 2014, 21:20
by Lionel Debroux
Nouvelle mise à jour, avec un changement finalement assez simple, annulant un truc que j'avais fait il y a longtemps pour optimiser. Le résultat est le suivant:
+ amélioration supplémentaire de la reconnaissance des clics et pressions de touches, je pense que je vais pouvoir enlever cette entrée de la liste des bugs;
+ réparation de l'émulation des niveaux de gris, alors que le clignotement était horrible depuis je ne sais pas exactement quand (des mois ??);
+ modification de la vitesse des timers pour l'approcher de la vitesse réelle, ils sont même un peu rapides maintenant;
- consommation CPU de l'émulateur nettement augmentée (enfin... c'est surtout qu'elle était anormalement basse auparavant !), même s'il est loin de consommer un coeur sur cette machine de 2011;
- la touche ON ne fonctionne plus pendant que la machine est allumée. L'interruption est pourtant bien déclenchée. Ce deuxième point n'est pas très gênant tant qu'ON rallume la machine après extinction automatique et pendant les calculs mathématiques.

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 16 Feb 2014, 22:12
by Lionel Debroux
Nouvelle mise à jour ce soir, avec plusieurs améliorations, comme toujours :)
Entre autres:
* retour utilisateur si aucune ROM / aucun OS upgrade n'est chargé, par défaut un alert() JS, mais modifiable à volonté en appelant une fonction de l'objet;
* correction d'un bug dans l'émulation de la mémoire Flash, hérité de TIEmu, et très vieux (a priori, mai 2005), donc très rare;
* ajout de la possibilité (en modifiant le script) de faire croire à une 89T qu'elle a 8 MB de Flash. AMS le gère, et TIEmu l'a du reste également implémenté un temps. C'est facile à implémenter, mais nous sommes bien d'accord qu'en pratique, ça ne sert à rien, puisqu'il n'y a aucune telle machine réelle connue;
* correction de l'implémentation de l'instruction nbcd quand l'argument est invalide.

Voici deux nouveaux screenshots:

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 17 Feb 2014, 22:03
by Lionel Debroux
Nouvelle version, avec principalement un nouveau bugfix sur l'émulation du réveil quand une interruption survient, et l'ajout du mapping des touches 0-9 du pavé numérique.

Le code est de moins en moins loin d'une release officielle.

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 02 Mar 2014, 22:16
by Lionel Debroux
Même si cet émulateur a très peu d'utilisateurs (sinon j'aurais plus de bug reports...), je continue quand même à travailler un peu dessus.

Ces deux dernières semaines, il y a eu divers changements internes utiles mais sans effet visible (implémentation du coût de la plupart des instructions, suppression du try/catch, création de quelques fonctions pour factoriser du code ou le rendre appelable de plusieurs endroits), et aussi deux changements visibles de l'utilisateur :)
* deux boutons pour changer la vitesse de l'émulateur. Après déblocage, si on dispose d'un ordinateur assez puissant (ma machine de 2011 suffit), il me semble bien que l'émulation est plus rapide que celle d'une machine réelle;
* ajout d'un bouton pour recevoir une (et une seule) variable de manière non silencieuse, c'est à dire qu'il faut cliquer sur ce bouton, puis faire envoyer une et une seule variable à la calculatrice (par exemple VAR-Link - F3 - 1 Send), comme pour un envoi de calculatrice à calculatrice.
De cette manière, il n'est pas nécessaire de connaître le type numérique interne de la variable à recevoir depuis l'émulateur, et il est moins urgent d'implémenter l'opération dirlist (et surtout, de faire une interface utilisateur pour ça...).

Pour pouvoir faire une release officielle, j'ai besoin d'aide sur l'interface utilisateur, en particulier:
* la possibilité de sélectionner plusieurs variables à la fois avant envoi à l'émulateur;
* faire en sorte que F10 déclenche le même dialog permettant de browser le système de fichiers de l'ordinateur que celui qui est sur la page HTML;
* une interface plus utilisable pour la réception des variables (là, il faut cliquer sur deux boutons, puis un lien qui apparaît grâce au deuxième bouton...);
* à plus long terme, l'interface utilisateur pour dirlist, qui prendrait en entrée un tableau d'objets, et permettrait de cocher une seule variable (au tout début; plus tard, il faudrait gérer les réceptions multiples dans le backend) à recevoir silencieusement;
* skins grande taille et keymaps pour 89, V200, 89T;
* une plus jolie image pour le skin 89.

Merci d'avance :)

L'interface utilisateur standalone est http://tiplanet.org/pad_ti68k_emu/v12.html , le code JS (plus de 8000 lignes dans 3 objets et un seul fichier) est http://tiplanet.org/pad_ti68k_emu/v12_readable.js .

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 02 Mar 2014, 22:26
by nikitouzz
Merci lionel !!!!!!! :)

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 07 Mar 2014, 22:07
by Lionel Debroux
Un élément de moins dans la TODO list avant une release officielle: le gros de la gestion de l'opération Directory Listing (dirlist), comme dans TILP ou TI-Connect. Même si je me rends compte en rédigeant ce post que j'ai oublié d'accoler le nom du répertoire au nom de la variable, c'est bête mais pas difficile à faire.

Une nouvelle fois, ce que j'ai implémenté n'est pas visible, puisqu'il n'y a pas d'interface utilisateur. Il faut aller dans la console JS pour le déclencher: link.dirlist(). Ensuite, un examen du contenu de link.link_dirlist_vars() et link.link_dirlist_apps() permet de savoir quels arguments passer à link.recvfile(). Je sais que ce n'est pas utilisable, mais ça n'ira pas mieux sans aide extérieure.

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 09 Mar 2014, 21:14
by Lionel Debroux
Hier et aujourd'hui, j'ai:
* fait une grosse réorganisation et un gros nettoyage de la todo/wish list - encore un changement invisible ^^
* passé du temps sur un changement qui a pour but d'aider à l'implémentation d'un changement visible, à savoir la sauvegarde d'état (ça ne devrait pas changer grand chose pour la restauration) - et si j'en parle, c'est parce que ce changement a eu un effet que je n'attendais pas, mais qui s'explique bien: une accélération de l'émulateur, c'est à dire une moindre consommation CPU sur l'hôte pour faire la même chose :)

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 23 Apr 2014, 18:06
by Adriweb
J'ai "forké" le dossier et ai quelque peu travaillé sur le design de la page de l'émulateur standalone :D



Je laisse Lionel intégrer les changements à sa version :)

Il reste quelques détails à régler pour le positionnement/sizing des différents skins, mais c'est déjà ça...

(bug report (connu ?) : en mode v200, la pause ne marche pas ?)

Re: Mise à jour de l'émulateur TI-68k en ligne...

Unread postPosted: 27 May 2015, 18:08
by Acksop
Je tiens a féliciter cet update ainsi que le travail de Lionel Debroux sur cet émulateur, je l'ai découvert il y a peu sur la page originale de patrick davidson et après quelques recherches infructueuse je suis tomber sur TI-planet qui si mes anciens souvenirs de terminale sont exacts, était bien le site celui qui a pu ouvrir en moi le programmeur que je suis maintenant.

Après quelques sessions de survol du code de l'émulateur et quelques recherches on the Web j'ai trouver un facon de charger de multiples fichiers a la volée depuis un simple input html ( ya quand même près de 20h de tests )

JE souhaiterais pouvoir charger mes fichiers depuis le code sources et envoyer un jeu sans que l'on ne touche a rien, car j'ai aussi créer quelques programmes durant mes courtes années lycées...cependant je ne suis pas sur que ce soit possible... Une idée ?

@L.DEBROUX: comment faites vous pour comprendre les Uint8Array()

Mais laissons place au script
Code: Select all
<!-- A ajouter ou remplacer dans le fichier HTML-->
<input type="file" id="filesinput" multiple />
<!-- Javascript de bas de page permettant le chargement de multiples fichiers -->
<script type="text/javascript">
  function readMultipleFiles(evt) {
    //Retrieve all the files from the FileList object
    var files = evt.target.files;
          
    if (files) {
        for (var i=0, f; f=files[i]; i++) {
           var r = new FileReader();
            r.onload = (function(f) {
                return function(e) {
                    var contents = e.target.result;
                    alert( "Got the file.n"
                          +"name: " + f.name + "n"
                          +"type: " + f.type + "n"
                          +"size: " + f.size + " bytesn"
                          + "starts with: " + contents.substr(8, f)
                    );
                };
            })(f);

            emu.loadrom(f);
        }   
    } else {
         alert("Failed to load files");
    }
  }
 
  if(document.getElementById){
  document.getElementById('filesinput').addEventListener('change', readMultipleFiles, false);
  }else{
   alert('votre navigateur/butineur internet n'est pas à jour >>> téléchargez donc SeaMonkey');
  }
</script>