Logicielsmoto.com

Nous sommes le 28 Mar 2024, 20:02

Heures au format UTC + 1 heure




Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 
Auteur Message
MessagePosté: 12 Juil 2010, 16:14 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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.


Haut
 Profil  
Répondre en citant le message  
MessagePosté: 12 Juil 2010, 18:28 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 12 Juil 2010, 20:02 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Juil 2010, 08:05 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
Juste pour info : combien de lignes de programme (à peu près) ?


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Juil 2010, 10:39 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 13 Juil 2010, 20:54 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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).


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 14 Juil 2010, 10:30 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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".


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 14 Juil 2010, 17:54 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 14 Juil 2010, 18:07 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 15 Juil 2010, 13:58 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 15 Juil 2010, 15:16 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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.


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 15 Juil 2010, 15:38 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
http://dcmo5.free.fr/online/prehisto.html


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 15 Juil 2010, 17:13 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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 ? ;)


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 15 Juil 2010, 18:12 
Hors ligne
M. DCMOTO

Inscription: 06 Juin 2004, 08:23
Messages: 681
Localisation: Provence (France)
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


Haut
 Profil  
Répondre en citant le message  
 Sujet du message:
MessagePosté: 16 Juil 2010, 08:48 
Hors ligne

Inscription: 27 Juin 2006, 19:44
Messages: 1061
Localisation: France (24)
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


Haut
 Profil  
Répondre en citant le message  
Afficher les messages postés depuis:  Trier par  
Poster un nouveau sujet Répondre au sujet  [ 15 messages ] 

Heures au format UTC + 1 heure


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 31 invités


Vous ne pouvez pas poster de nouveaux sujets
Vous ne pouvez pas répondre aux sujets
Vous ne pouvez pas éditer vos messages
Vous ne pouvez pas supprimer vos messages
Vous ne pouvez pas joindre des fichiers

Rechercher:
Aller à:  
cron
Développé par phpBB® Forum Software © phpBB Group
Traduction par phpBB-fr.com