Page 2 of 3

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

Unread postPosted: 27 May 2015, 19:00
by Lionel Debroux
Merci pour cette contribution :)

Actuellement, je fais du JS au boulot depuis quelques mois et peut-être pas pour longtemps. D'un côté, je pourrais plus facilement me remettre à cet émulateur, mais de l'autre, le boulot prend beaucoup d'énergie - et puis Emscripten est un choix encore meilleur maintenant qu'à l'époque...

Les tableaux typés JS, comme Uint8Array, sont les plus proches des tableaux classiques C/C++/Java/etc.

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

Unread postPosted: 25 Jun 2015, 21:28
by Acksop
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.


<<< J'avais pas vu ... ( apa mis mes lunettes de taupe !)
A l'époque de ma terminale je révais de pouvoir créer un jeux en assembleur, quelques-jeux basiques
du type de Solarstriker ( GB ) ou Revenge of the Gator ( GB )... mais ce n'étais pas possible à ce moment là
car je ne savait ni d'Eve ni d'Adam que la compilation nécessitait un autre langage...



Je n'ai malheureusement pas d'assez bonnes connaissances en C/C++ ( OpenGL ) afin de pouvoir utiliser ce type de LLVM
( dont je ne connaissait pas l'acronyme... )

...

je vais tenter de prendre sur moi ( j'ai de nombreux projets en cours ) et avancer sur ces modifications nécessaire pour la release officielle même si je sens que je vais galérer sur le dirlist
Merci en tout cas, l'émulation emscripten - TI-68k me donne envie !

...

j'ai tout de même continuer depuis le message sur le forum sur mon fork d'instancier une façon élémentaire d'écrire au clavier automatiquement sur l'émulateur afin de lancer le jeu automatiquement après un chargement de l'ensemble des fichiers nécessaires ( je bloque a ce moment sur une erreur qui me renvoi dans le core js de l'émulateur [ que j'ai déja modifié au passage... mais c'est superficiel ] )...

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

Unread postPosted: 26 Jun 2015, 06:36
by Lionel Debroux
Même si ce n'est pas encore directement utilisable, l'arrivée annoncée de WebAssembly renforce l'idée selon laquelle il faudrait utiliser du C/C++ pour le coeur de l'émulateur, et produire du WebAssembly.

j'ai tout de même continuer depuis le message sur le forum sur mon fork d'instancier une façon élémentaire d'écrire au clavier automatiquement sur l'émulateur afin de lancer le jeu automatiquement après un chargement de l'ensemble des fichiers nécessaires

Le remote control à base de caractères est censé être déjà implémenté dans le code de link ?

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

Unread postPosted: 23 Apr 2016, 03:32
by Acksop
pfuuuu ... presque 8 mois ... dont près de 6 d'abandon faute de temps ...

Lionel Debroux wrote:Même si ce n'est pas encore directement utilisable, l'arrivée annoncée de WebAssembly renforce l'idée selon laquelle il faudrait utiliser du C/C++ pour le coeur de l'émulateur, et produire du WebAssembly.

>> je ne sais pas vraiment quoi penser de tout cela C/C++/Java n'ont pas été les langages que j'ai pratiqué et surtout celui sur lequel je me suis spécialisé ces dernières années... WebAssembly ne m'est pas une chose familière, si j'ai la possibilité de poursuivre une formation prochaine, il y a des chances que ce soit dans l'un des deux languages :) je serait alors au top pour réellement continuer vers la release officielle se trouvant quelques posts plus haut ( ainsi que dans un fichier texte dans mon dossier de travail !)

Acksop wrote:j'ai tout de même continuer depuis le message sur le forum sur mon fork d'instancier une façon élémentaire d'écrire au clavier automatiquement sur l'émulateur afin de lancer le jeu automatiquement après un chargement de l'ensemble des fichiers nécessaires


>>> après m'y être replonger cette soirée ( un peu étendue ), j'ai finalement mis les main dans le camboui du core JS de l'émulateur afin de pouvoir charger de multiples fichiers en autoload à base d'un Objet Xhr manipulant un Objet Reader chargeant une fonction-maison ajoutée directement dans le core JS de l'émulateur ( je mettrait tout dans un prochain post ; le temps pour moi de rassembler les pièces du puzzle que j'avais barbotté il y a 8 mois ) ...

Le jumellage fonctionne script-JS/core-FileAutoLoad fonctionne en chargeant une liste de fichier .89*, autant dire que j'en suis enfin venu a bout à cette heure !



Lionel Debroux wrote:Le remote control à base de caractères est censé être déjà implémenté dans le code de link ?

>>>> effectivement : L'écriture au clavier se fait tout aussi naturellement, le code de link le permettait avec la fonction emu.setKey(%,%), mais avant d'en arriver là je suis passé par un paquet de non-sens-ECMAScriptiens !

Voila!
sinon concernant la release officielle:
* je n'ai pas d'exemple concret pour la sélection et la réception de plusieurs variables avant l'envoi à l'émulateur .. je ne peut pas faire grand chose sans.
* un exemple-type pour le dirlist me manque aussi... avant de m'en apercevoir, j'avais instancier quelques recherches autour d'un accès JAVA ( par une applet ) et avais même intégré le bouton dans le formulaire de la page HTML ....
* sinon concernant la taille des skins, le besoin n'y était pas pour moi a ce moment là, mais ce soir j'ai remarqué que la taille de l'écran (var screen ) et au maximum de 320*200... c'est déjà pas si mal, mais je pense que je peut avoir besoin d'un écran d'une taille 50% plus grande que celle la, donc j'y jetterais un coup d'oeil plus tôt que je ne le pense !

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

Unread postPosted: 26 Jun 2016, 13:49
by Acksop
Voici donc les quelques modifications que j'ai du apporter pour permettre de charger des fichiers depuis une page HTML et lancer une application depuis un script JS, ce post apporte celles qui doivent être mises en place dans le CORE de l'émulateur: le fameux fichier 12.1_**readeable.js ainsi que le script qui permet de générer une telle chose.

Code: Select all
//vers la ligne 1327, il faut instancier la fonction mère:
function loadAutoMaticFileReader(reader)
{
stdlib.console.log("Starting to autoload as variable");
newfileready=reader;
state.unhandled_count=0;
handle_newfileready();
}

/* et la déclarer vers la ligne 1573 après le "return" afin de permettre le lancement de la fonction
"loadAutoMaticFileReader" . En gros, après "loadrom:loadrom" il faut positionner :
"loadAutoMaticFileReader:loadAutoMaticFileReader" */

//Il faut instancier la fonction en ligne 1875
function loadautofile(fileReader)
{emu.loadAutoMaticFileReader(fileReader);}

/* enfin en toute fin de fichier après le return, il faut de nouveau déclarer la fonction "loadautofile"
par le même système que précédemment:: "loadautofile:loadautofile" */


Concernant le script JS voici le code complet qu'il faudra modifier avec les fichiers à charger automatiquement:
Code: Select all
<script type="text/javascript">
function launch(){

   emu.setKey(7,1);
   emu.setKey(26,1); // M
   
   window.setTimeout(function(){
      emu.setKey(26,0);
      emu.setKey(7,1);
      emu.setKey(12,1); // E
   
      window.setTimeout(function(){
         emu.setKey(12,0);
         emu.setKey(7,1);
         emu.setKey(18,1); // N
   
         window.setTimeout(function(){
            emu.setKey(18,0);
            emu.setKey(7,1);
            emu.setKey(9,1); // U
         
            window.setTimeout(function(){
               emu.setKey(9,0);
               emu.setKey(7,0);
               emu.setKey(36,1); // (
   
               window.setTimeout(function(){
                  emu.setKey(36,0);
                  emu.setKey(7,0);
                  emu.setKey(28,1); // )
   
                  window.setTimeout(function(){
                  emu.setKey(28,0);
                  emu.setKey(8,1); // ENTER
                  
                     window.setTimeout(function(){
                     emu.setKey(8,0); // PUSHUP - ENTER
                     
                     //CHARGEMENT ET LANCEMENT DE LA FONCTION DONE();
   
                     },750);
                     
                  },750);
   
               },750);
   
            },750);
   
         },750);
   
      },750);
   
   },750);
   
}

function changeUploadFile(nbFiles,filesToLoad){
   fileName = folder + "/" + filesToLoad[nbFiles];
   var xhr_object = null;
        
   /* ### Construction de l’objet XMLHttpRequest selon le type de navigateur*/
   /* Cas des navigateurs de type Netscape (Firefore, Conqueror, etc.)*/
   if(window.XMLHttpRequest){
         xhr_object = new XMLHttpRequest();
   /* Cas du navigateur Internet Explorer*/
   }else if(window.ActiveXObject){
         xhr_object = new ActiveXObject("Microsoft.XMLHTTP");
   /* Cas des navigateurs ne comprenant pas cette technologie (anciens navigateurs)*/
   }else{
         /* XMLHttpRequest non supporté par le navigateur */
          alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
       return;
   }
   
   xhr_object.onload = function() {
        
   }
   xhr_object.onreadystatechange = function() {

        if (xhr_object.readyState == 4 && xhr_object.status == 200 ) {
      var arraybuffer = xhr_object.response;
        var reader = new FileReader();
        reader.readAsArrayBuffer(arraybuffer);
        
        reader.onloadend = function() {
                    ui.loadautofile(this);
                };
        console.log("loading File on TI-89");
        nbFiles--;
      if(nbFiles >= 0 ){
         changeUploadFile(nbFiles,filesToLoad);
      }else{
         window.setTimeout(launch,tempoYouThinkItMustHaveToLoadAllFiles);
      }
        
        } else if (xhr_object.readyState == 1) {

                console.log("Opening File for TI-89");

        } else if (xhr_object.readyState == 2) {

                console.log("Header File Receided for TI-89");

        } else if (xhr_object.readyState == 3) {

                console.log("Download File on XHR to put on TI-89");

        }
       
        };
        xhr_object.open("GET", fileName, true);
        xhr_object.responseType = "blob";
   xhr_object.send();
   console.log("XHR:"+fileName+" SEND REQUEST!");
}
var event;
event = new Event('change');
var folder = 'FOLDER';
var filesToLoad = new Array(
                "MYFILE_1.89P","MYFILE_2.89I","MYFILE_3.89L"
);
var nbFiles;
nbFiles = filesToLoad.length-1;
var delay = function() { changeUploadFile(nbFiles,filesToLoad); };
console.log("DELAY SEND REQUEST!");
window.setTimeout(delay,10000);

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

Unread postPosted: 26 Jun 2016, 13:53
by Adriweb
C'est rigolo, ca ressemble pas mal (les timeOut pour l'envoi de touches multiples) à ce que je fais de mon côté pour l'émulateur 84+CE intégré au PB :)

Bon boulot, en tout cas.

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

Unread postPosted: 27 Jun 2016, 07:23
by Lionel Debroux
Alright.
Je n'ai toujours pas passé le temps nécessaire à la création d'un repo Github contenant l'historique du développement. Mais j'ai de plus en plus de mal à me motiver à le faire, parce que non seulement l'avancée de la technique confirme de plus en plus nettement qu'un émulateur écrit directement en JS est une impasse, mais aussi parce que le nombre d'utilisateurs potentiels d'un émulateur TI-68k est de plus en plus bas :(

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

Unread postPosted: 27 Jun 2016, 12:47
by Clément.7
Quel est l'intérêt de mettre des setTimeout() ?

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

Unread postPosted: 27 Jun 2016, 13:07
by Adriweb
Ca permet de faire une "file d'attente" d'actions avec un certain délai ; impossible par exemple dans du single-thread de simplement faire quelque chose du genre: sendKey(...), wait(200), sendKey(...), wait(200), sendKey(...); ... et donc il ne reste plus que ça.

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

Unread postPosted: 27 Jun 2016, 13:22
by Clément.7
Oui mais pourquoi faire des délais d'attente ?