π
<-
Chat plein-écran
[^]

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

:32ti89: :32ti892: :32ti89t: :32ti89tn: :32ti92: :32tiv200:

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

Unread postby Lionel Debroux » 27 May 2015, 19:00

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.
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.2%
 
Posts: 6859
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

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

Unread postby Acksop » 25 Jun 2015, 21:28

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 ] )...
User avatar
Acksop
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 28%
 
Posts: 10
Joined: 07 Apr 2015, 12:13
Location: Besançon
Gender: Male
Calculator(s):
MyCalcs profile
Class: Hors Cursus
GitHub: Acksop

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

Unread postby Lionel Debroux » 26 Jun 2015, 06:36

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 ?
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.2%
 
Posts: 6859
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

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

Unread postby Acksop » 23 Apr 2016, 03:32

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 !
User avatar
Acksop
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 28%
 
Posts: 10
Joined: 07 Apr 2015, 12:13
Location: Besançon
Gender: Male
Calculator(s):
MyCalcs profile
Class: Hors Cursus
GitHub: Acksop

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

Unread postby Acksop » 26 Jun 2016, 13:49

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);
User avatar
Acksop
Niveau 3: MH (Membre Habitué)
Niveau 3: MH (Membre Habitué)
Level up: 28%
 
Posts: 10
Joined: 07 Apr 2015, 12:13
Location: Besançon
Gender: Male
Calculator(s):
MyCalcs profile
Class: Hors Cursus
GitHub: Acksop

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

Unread postby Adriweb » 26 Jun 2016, 13:53

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

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80.3%
 
Posts: 14617
Images: 1218
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

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

Unread postby Lionel Debroux » 27 Jun 2016, 07:23

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 :(
Membre de la TI-Chess Team.
Co-mainteneur de GCC4TI (documentation en ligne de GCC4TI), TIEmu et TILP.
User avatar
Lionel DebrouxSuper Modo
Niveau 14: CI (Calculateur de l'Infini)
Niveau 14: CI (Calculateur de l'Infini)
Level up: 11.2%
 
Posts: 6859
Joined: 23 Dec 2009, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Class: -
GitHub: debrouxl

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

Unread postby Clément.7 » 27 Jun 2016, 12:47

Quel est l'intérêt de mettre des setTimeout() ?
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
User avatar
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 29.5%
 
Posts: 348
Joined: 12 Jun 2013, 15:02
Location: Près de Nantes
Gender: Male
Calculator(s):
MyCalcs profile
Class: IUT Informatique en 2017-2019
GitHub: ClementNerma

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

Unread postby Adriweb » 27 Jun 2016, 13:07

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

MyCalcs: Help the community's calculator documentations by filling out your calculators info!
MyCalcs: Aidez la communauté à documenter les calculatrices en donnant des infos sur vos calculatrices !
Inspired-Lua.org: All about TI-Nspire Lua programming (tutorials, wiki/docs...)
User avatar
AdriwebAdmin
Niveau 16: CC2 (Commandeur des Calculatrices)
Niveau 16: CC2 (Commandeur des Calculatrices)
Level up: 80.3%
 
Posts: 14617
Images: 1218
Joined: 01 Jun 2007, 00:00
Location: France
Gender: Male
Calculator(s):
MyCalcs profile
Twitter: adriweb
GitHub: adriweb

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

Unread postby Clément.7 » 27 Jun 2016, 13:22

Oui mais pourquoi faire des délais d'attente ?
Toujours plus loin, toujours plus haut, toujours plus geek !
Créateur du projet Haskier : Jouer ! Sujet sur OpenClassrooms
Programmez en UnderBasic ! https://tiplanet.org/forum/viewtopic.php?t=19009&p=207260
User avatar
Clément.7
Niveau 11: LV (Légende Vivante)
Niveau 11: LV (Légende Vivante)
Level up: 29.5%
 
Posts: 348
Joined: 12 Jun 2013, 15:02
Location: Près de Nantes
Gender: Male
Calculator(s):
MyCalcs profile
Class: IUT Informatique en 2017-2019
GitHub: ClementNerma

PreviousNext

Return to News TI-68k (TI-89, TI-92, TI-Voyage 200)

Who is online

Users browsing this forum: No registered users and 67 guests

-
Search
-
Social TI-Planet
-
Featured topics
Comparaisons des meilleurs prix pour acheter sa calculatrice !
Aidez la communauté à documenter les révisions matérielles en listant vos calculatrices graphiques !
Phi NumWorks jailbreak
123
-
Donations / Premium
For more contests, prizes, reviews, helping us pay the server and domains...
Donate
Discover the the advantages of a donor account !
JoinRejoignez the donors and/or premium!les donateurs et/ou premium !


Partner and ad
Notre partenaire Jarrety Calculatrices à acheter chez Calcuso
-
Stats.
1421 utilisateurs:
>1407 invités
>10 membres
>4 robots
Record simultané (sur 6 mois):
6892 utilisateurs (le 07/06/2017)
-
Other interesting websites
Texas Instruments Education
Global | France
 (English / Français)
Banque de programmes TI
ticalc.org
 (English)
La communauté TI-82
tout82.free.fr
 (Français)