Logicielsmoto.com
http://www.logicielsmoto.com/phpBB/

DCMO5 online - Emulateur MO5 en javascript
http://www.logicielsmoto.com/phpBB/viewtopic.php?f=2&t=373
Page 1 sur 1

Auteur:  Daniel Coulom [ 12 Juil 2010, 16:14 ]
Sujet du message:  DCMO5 online - Emulateur MO5 en javascript

Javascript est un langage interprété, donc lent, donc à priori impropre à la programmation d'émulateurs. Toutefois les progrès du matériel et des navigateurs permettent maintenant de l'envisager. Les quelques tentatives récentes du côté de l'Apple II et des MSX montrent la voie, et la technique se développe de plus en plus. Elle a le gros avantage d'être indépendante du système d'exploitation, puisque tout se passe dans le navigateur.

Pour suivre cette nouvelle mode, j'ai fait un émulateur expérimental en javascript de ma machine fétiche, le MO5. C'est peut-être la voie d'une nouvelle série de programmes, quand de bonnes solutions seront trouvées pour accélérer l'affichage et produire du son (actuellement javascript ne le permet pas).

Vous pouvez essayer dcmo5 online en suivant ce lien : Image

Inutile de tester avec une machine ou un navigateur anciens, l'échec est assuré. Il faut un ordinateur de course et un navigateur moderne et rapide, par exemple Google Chrome. En fonction des réactions je déciderai si je m'attaque ou pas aux autres machines Thomson.

Auteur:  Prehisto [ 12 Juil 2010, 18:28 ]
Sujet du message:  Re: DCMO5 online - Emulateur MO5 en javascript

Daniel Coulom a écrit:
Inutile de tester avec une machine ou un navigateur anciens, l'échec est assuré.

Arf! Obligé, pour moi. J'ai une vieille pétrolette :L
En tout cas, tu dois être une bête en JavaScript, maintenant.

Auteur:  Daniel Coulom [ 12 Juil 2010, 20:02 ]
Sujet du message: 

Sur le plan pratique, un émulateur javascript n'a pas grand intérêt : pas de son et performances médiocres. Le challenge est de montrer que c'est possible. Dans quelques années tous les ordinateurs seront assez puissants pour le faire fonctionner à pleine vitesse.
Le développement en javascript n'a pas été inutile, il a nécessité quelques petites modifications de l'émulateur dont profitera la prochaine version de dcmoto.

Auteur:  Prehisto [ 13 Juil 2010, 08:05 ]
Sujet du message: 

Juste pour info : combien de lignes de programme (à peu près) ?

Auteur:  Daniel Coulom [ 13 Juil 2010, 10:39 ]
Sujet du message: 

fichiers javascript :
- emulation 6809 : 905 lignes
- emulation mo5 : 217 lignes
- rom + ram mo5 : 4362 lignes
autres fichiers :
- index.html : 138 lignes
- style.css : 29 lignes

Avec l'outil d'optimisation de Google (Closure Compiler) je suis arrivé à diminuer la taille totale du javascript de 404 Ko à 235 Ko. Le chargement est un peu plus rapide mais les performances ne sont pas beaucoup améliorées : http://dcmo5.free.fr/online/dcmo5_optimized.html
Je pourrais encore gagner en taille en initialisant la ram par une boucle en javascript, au lieu de l'initialiser dans la déclaration de variable.

Auteur:  Daniel Coulom [ 13 Juil 2010, 20:54 ]
Sujet du message: 

Nouvelle version en ligne ce soir (13/07/2010) avec émulation du clavier. La touche BASIC du MO5 est sur la touche spéciale à gauche du CTRL droit. ACC est sur $. STOP est sur ². Je vous laisse découvrir les autres.
Le joystick 0 est émulé par les touches 0, 2, 4, 6, 8 du pavé numérique (position verrouillage numérique).

La configuration est valable avec un clavier AZERTY français standard, dans Windows XP + Google Chrome. Elle n'est probablement pas adaptée à d'autres claviers, systèmes d'exploitation ou navigateurs.

[Edit 14/07/2010 10:30]
Nouvelle version en ligne, avec initialisation de la ram par programme (gain de l'initialisation du tableau dans la déclaration). Le tout a été optimisé avec les options "Avancées" de Google Closure Compiler. Le javascript passe de 404 Ko à 86 Ko et les performances sont sensiblement améliorés (au moins dans Firefox 3.6.6).

Auteur:  Prehisto [ 14 Juil 2010, 10:30 ]
Sujet du message: 

Daniel Coulom a écrit:
Le joystick 0 est émulé par les touches 0, 2, 4, 6, 8 du pavé numérique (position verrouillage numérique).

Sous Linux, ça peut aller. Sauf que l'utilisation des touches du pavé numérique équivaut à utiliser les touches de direction. Donc toute la page remonte quand on appuie sur "8", et redescend quand on appuie sur "2".

Auteur:  Daniel Coulom [ 14 Juil 2010, 17:54 ]
Sujet du message: 

Entre les systèmes d'exploitations, les bibliothèques soi-disant portables, les navigateurs et javascript, il n'y a aucune cohérence dans la gestion du clavier. Les codes des touches sont différents pour chaque configuration, et il est rigoureusement impossible pour un émulateur de s'adapter automatiquement à tous les cas de figure. Avec javascript c'est une couche supplémentaire qui ajoute d'autres incohérences. Voir http://unixpapa.com/js/key.html
La solution serait de permettre à chaque utilisateur de définir sa configuration, mais il y aura malgré tout des impossibilités. Par exemple distinguer CTRL droit et gauche, ou MAJ droit et gauche, ou ENTREE normal et ENTREE du clavier numérique, etc.
J'ai déjà perdu beaucoup de temps avec la gestion du clavier dans mes émulateurs portables avec SDL, je ne recommencerai pas pour javascript. La table de correspondance donnant le code MO5 en fonction du code PC est dans le source javascript, chacun peut la modifier à sa convenance. Si les chiffres du pavé numérique donnent les mêmes codes que les flèches il faut utiliser d'autres touches, mais à part les touches fonctions il n'y en a plus beaucoup de disponibles.

Auteur:  Prehisto [ 14 Juil 2010, 18:07 ]
Sujet du message: 

Il y a toujours un moyen de contourner le problème : se débrouiller pour que l'émulateur en JavaScript soit affiché pleine page ;)
C'est sûr qu'ayant un brontosaure d'écran en 1024x768 (hé oui, ça existe encore), ça n'arrange pas mon affaire. Tu réorganiserais ta page seulement pour moi :D

Auteur:  Daniel Coulom [ 15 Juil 2010, 13:58 ]
Sujet du message: 

Dans les navigateurs récents, CTRL + roulette de la souris permet de zoomer, et donc de faire tenir toute la page dans la fenêtre, même si elle est très petite.

Il restera le problème de vitesse. J'ai fait des essais dans Linux avec les dernières versions de SeaMonkey, PuppyBrowser, Opera, Firefox, Chrome. Toutes ont des problèmes de configuration clavier (Linux ne renvoie pas les mêmes codes touches que Windows). En prime chaque navigateur interprète les codes à sa façon et le résultat n'est pas identique entre eux. Les versions Linux me semblent plus lentes que les versions Windows.

Dans Windows, Internet Explorer 7 et 8 sont incompatibles. ExplorerCanvas permet de contourner le problème http://excanvas.sourceforge.net/
Mais ça ne sert à rien, car leur lenteur les rend inutilisables.

Sur Athlon XP 2000+ avec Windows 7 j'ai testé Internet Explorer 9 ce matin. Il est permet d'exécuter dcmo5 online (la balise <canvas> est reconnue). Tout fonctionne, y compris le clavier. Mais sur cette machine peu puissante c'est beaucoup trop lent : 154 secondes pour exécuter la boucle FORI=1TO10000:NEXT. A titre de comparaison, Google Chrome sur la même machine exécute cette boucle en 13 secondes, tout comme le vrai MO5.

Auteur:  Prehisto [ 15 Juil 2010, 15:16 ]
Sujet du message: 

Daniel Coulom a écrit:
Dans les navigateurs récents, CTRL + roulette de la souris permet de zoomer, et donc de faire tenir toute la page dans la fenêtre, même si elle est très petite.

Très juste, mais un zoom négatif de la page réduit la résolution de l'écran Thomson, et donc quelques colonnes/lignes sautent. De plus, j'ai l'impression que l'affichage en est ralenti, mise à l'échelle de l'affichage oblige.

Auteur:  Daniel Coulom [ 15 Juil 2010, 15:38 ]
Sujet du message: 

http://dcmo5.free.fr/online/prehisto.html

Auteur:  Prehisto [ 15 Juil 2010, 17:13 ]
Sujet du message: 

Daniel Coulom a écrit:
http://dcmo5.free.fr/online/prehisto.html

Tests de réponse avec un clavier réel pour Firefox sous Linux:

- Certaines touches qui ne sont pas censées afficher de caractère en affichent un (mais c'est secondaire).

- Aucune des touches de la ligne numérique ne répond correctement. Ce qui est étrange puisqu'avec SHIFT, les mêmes touches affichent les caractères attendus.

- Quand j'appuie sur la combinaison SHIFT+":", j'obtiens l'affichage du "?" sur l'écran du Thomson. Le problème, c'est que cette touche se comporte alors comme si elle était restée enfoncée: le temps de latence écoulé, l'écran affiche une ribambelle de "?", et aucune touche semble ne rien y faire. Ce comportement s'arrête si je réinitialise le Thomson ou si je clique la touche "?" sur le clavier virtuel.

- La touche correspondant à "4" fait clignoter le curseur plus vite et freeze l'émulateur.

(les deux dernières touches citées activent la fonction "Recherche rapide de mot dans la page" pour Firefox sous Linux)

PS: tu me rajoutes les jeux ? ;)

Auteur:  Daniel Coulom [ 15 Juil 2010, 18:12 ]
Sujet du message: 

Pour le clavier, c'est à peu près ce que j'ai constaté lors de mes essais dans Linux. Si une touche ne répond pas, on peut toujours cliquer avec la souris sur l'image du clavier. De même, si une touche reste bloquée en position basse (l'évènement keyup n'a pas été détecté), on peut débloquer en relâchant le bouton de la souris sur l'image de la touche.

J'ai passé plus de deux heures à établir la table de Windows, je n'ai pas trop de courage pour recommencer avec les autres systèmes, d'autant plus que chaque navigateur a des particularités. Le plus simple est que chaque utilisateur construise sa propre table.

Voici la table Windows :
Code:
var mo5key = /* attention a la touche + : 6b dans Firefox et bb dans Chrome */
[0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x34,0xff,0xff,
 0x38,0x35,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0x20,0xff,0xff,0x33,0x11,0x29,0x31,0x19,0x21,0xff,0xff,0xff,0xff,0x09,0x01,0xff,
 0x1e,0x2f,0x27,0x1f,0x17,0x0f,0x07,0x06,0x0e,0x16,0xff,0x36,0xff,0xff,0xff,0xff,
 0xff,0x2d,0x22,0x32,0x1b,0x1d,0x13,0x0b,0x03,0x0c,0x02,0x0a,0x12,0x1a,0x00,0x14,
 0x1c,0x2b,0x15,0x23,0x0d,0x04,0x2a,0x30,0x28,0x05,0x25,0xff,0xff,0x39,0xff,0xff,
 0x3b,0xff,0x3c,0xff,0x3d,0xff,0x3e,0xff,0x3f,0xff,0xff,0x2e,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0x08,0xff,0x10,0x24,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x26,0x2c,0xff,0x37,0x18,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,
 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff];

Il faut établir la même pour chaque configuration clavier/système/navigateur, et remplacer celle du fichier basic.js (après optimisation du code, le nom de variable mo5key[] est remplacé par g[]. L'indice est la valeur du code PC, chaque élément de table est le scancode MO5 ou 0xff si la touche n'est pas affectée.
Pour les tests il suffit de télécharger les fichiers prehisto.html, basic.js et style.css , puis modifier basic.js et lancer prehisto.html en local.
Même procédé pour les jeux. Les fichiers se nomment :
- miner.html et miner.js
- glouton.html et glouton.js
- blitz.html et blitz.js

Auteur:  Prehisto [ 16 Juil 2010, 08:48 ]
Sujet du message: 

Daniel Coulom a écrit:
Il faut établir la même pour chaque configuration clavier/système/navigateur, et remplacer celle du fichier basic.js (après optimisation du code, le nom de variable mo5key[] est remplacé par g[].

Problème : mon éditeur de texte refuse de charger une ligne de 86 k :L

Page 1 sur 1 Heures au format UTC + 1 heure
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/