Journal JSNES, un émulateur de NES en Javascript

Posté par  (site web personnel) .
Étiquettes :
12
17
sept.
2009
Ben Firshman a porté l'émulateur vNES de Java à Javascript. Pas de son bien sûr, mais le résultat est assez bluffant.

http://benfirshman.com/projects/jsnes/
(une demi-douzaines de jeux sont testables sur cette page)
(pas de son, bien sûr)

Enfin bluffant, ça dépend du navigateur bien sûr. ;-)

Sous Chrome / Chromium, j'obtiens 60 fps (vitesse normale).
Sous Firefox, je ne dépasse pas 15 fps.

De quoi conforter la réputation de rapidité de Google Chrome.
  • # Et même sur mobiles ?

    Posté par  (site web personnel) . Évalué à 2.

    0,4 fps sur un iPhone... Bluffant
    Un android pour essayer ?
    • [^] # Re: Et même sur mobiles ?

      Posté par  . Évalué à 2.

      0,25 sur HTC Hero...
    • [^] # Re: Et même sur mobiles ?

      Posté par  (site web personnel) . Évalué à 3.

      0,14 fps sur Android Donut (1.6) sur un HTC Magic.
      • [^] # Re: Et même sur mobiles ?

        Posté par  . Évalué à 2.

        comment as-tu installé cette version. Je ne vois que le SDK pour l'instant. J'avais bien un lien avant, mais je ne le retrouve plus.
    • [^] # HS

      Posté par  (site web personnel) . Évalué à -9.

      (pour les 3 commentaires)

      Et après je me fais insulter (sur LinuxFr) quand j'affirme que les gens ont de la thune à claquer dans n'importe quoi... Merci de me rappeler qu'il y a des gens près à dépenser de l'argent pour un bête téléphone alors qu'ils ont la même chose à la maison en moins cher et ergonomique et que l'utilité d'avoir un ordinateur complet sur soit tout le temps est limite :).
      (pour les curieux, ça se passait la : https://linuxfr.org/comments/1063457.html#1063457 )
      • [^] # Re: HS

        Posté par  . Évalué à 8.

        Les gens ont quand même le doit de faire ce qu'ils veulent !
      • [^] # Re: HS

        Posté par  . Évalué à 6.

        Pc et Smartphone n'ont quand même pas la même utilité.

        Le smartphone te permet sur un petit terminal d'avoir mails, agenda, contacts et autres réseaux sociaux. Dans l'optique actuelle de toujours être joignable (on s'en fout ou pas, cela dépend des gens), et d'accéder aux informations du "nuage" qui nous concernent de partout, c'est le meilleur choix.

        L'ultraportable ne sert à rien si tu n'en fais que l'usage que tu fais d'un smartphone. Sachant qu'en plus avec l'ultraportable tu ne peux pas téléphoner, si avoir un grand écran ne te sert pas, le smartphone est bien plus adéquat.

        Bref, l'ultraportable c'est le pc partout, le smartphone c'est tous les moyens de communication partout. L'un a la moitié des fonctions de l'autre, les deux ne sont pas concurrents.

        J'ai l'utilité d'un smartphone (organisation d'évènements avec des gens qu'ont mail ou téléphone portable mais que j'ai pas forcément les deux à chaque fois, consultation des mails liés à l'évènement, agenda pour pas oublier de réunion, le tout remplissable depuis un écran plus grand quand je suis au boulot). Je ne me sers que peu du navigateur sur mon smartphone.

        Je n'aurais pas l'utilité d'un ultraportable, vu que sur un pc portable, je fais du surf, du traitement photo, du LateX, ou de la programmation. Ce que je fais sur mon vrai portable, et que je ne ferai pas quand je sors de chez moi.

        Je ne trouve par contre aucune utilité aux tablettes multimédia : trop petit pour surfer à l'aise, pas de fonctions de téléphonie pour beaucoup, et trop gros pour être transportables dans la petite poche du pantalon....

        Donc non, ultraportables, pc fixes, et smartphone, ce n'est pas le même usage, et ce n'est pas de l'argent claqué dans n'importe quoi.
      • [^] # Re: HS

        Posté par  . Évalué à 4.

        Le fait qu'ils aient testé l'émulateur sur leur smartphone ne signifie pas qu'ils l'ont acheté dans ce but.
        C'est un repère de geek ici, va bien falloir s'attendre à ce que quelqu'un teste l'émulateur sur son grille-pain sous NetBSD, ce qui ne veut pas dire qu'il achète des grille-pain pour jouer à des jeux NES...
    • [^] # Re: Et même sur mobiles ?

      Posté par  (site web personnel) . Évalué à 4.

      0,44 fps sur un HTC Dream en pré-Donut ! C'te folie ! À quand un émulateur Dreamcast sur HP48 ?
  • # Si ça fonctionne, bien sur,

    Posté par  . Évalué à 4.

    Qui osera donner le nombre de FPS sous IE ?
  • # Opera

    Posté par  . Évalué à 3.

    Sur Opera, je ne parviens meme pas à charger de Rom \o/
    • [^] # Re: Opera

      Posté par  . Évalué à 2.

      Chezmoiçamarche.com
      Mais pas le clavier...
    • [^] # Re: Opera

      Posté par  . Évalué à 2.

      de 40 à 60 fps sur Chrome 4
      de 4 à 6 fps sur opera 10.00
      de 10 à 18fps sur Firefox 3.5.2

      (Test sur les deux premiers niveau de SMB sur un Core2Duo 3Ghz)

      Heureusement qu'ils ont amélioré le Javascript dans Opera 10.
      Comme Opera est en théorie sur les test plus rapide que IE, IE doit donc être sous les 4 fps

      P.S. Je trouve trop fort de devoir utiliser ce genre de processeur, avec la consommation électrique qui va avec, pour ne même pas pouvoir émuler une console aussi ancienne. Ah...L'exploit technique :)
      • [^] # Re: Opera

        Posté par  . Évalué à 3.

        Et quelles sont les perfs avec l'émulateur d'origine, vNES, sous Java ?
        • [^] # Re: Opera

          Posté par  (site web personnel) . Évalué à 1.

          Tu peux tester l'émulateur sous Java ici :
          http://www.virtualnes.com/

          Il y a un paquet de jeux disponibles et ça tourne comme un charme sur Linux avec la JVM Sun avec le son en plus.
          Cependant ça ne fonctionne pas bien avec openjdk/icedtea.
          • [^] # Re: Opera

            Posté par  . Évalué à 2.

            Effectivement j'ai essayé. quelques constatation:
            - ça marche très bien (et avec le son), sans prise de tête et sans trop accaparer le proc.
            - les jeux NES étaient vraiment moches!
  • # c'est bluffant

    Posté par  (site web personnel) . Évalué à 2.

    C'est bluffant la difference de FPS entre un Chrome3 et Firefox 3.5.X ...
    Firefox était pas censé avec avoir une vm js rapide ? ;-)
    ça fait vraiment vieux dinosaure à côté de chrome ...
    • [^] # Re: c'est bluffant

      Posté par  (site web personnel) . Évalué à 3.

      y'a une version beta 4 de Chrome pour Linux qui est dispo. Il faudrait voir l'amélioration par rapport à la version 3.
    • [^] # Re: c'est bluffant

      Posté par  (site web personnel, Mastodon) . Évalué à 10.

      Ce n'est pas parce que c'est fait en javascript, qu'il faut imputer les problèmes de perfs à l'implémentation javascript.

      Déjà, Javascript, ce n'est qu'un langage. Prend la spec d'Ecmascript, et tu n'y trouveras nulle part référence à DOM, canvas etc. En d'autres terme, un moteur javascript, ça n'implémente que l'interprétation de la syntaxe JS, quelques objets de base (Math, Array, String, Number etc...), et tout le reste que l'on utilise très souvent en JS (comme l'objet window, le DOM etc), ce ne sont que des API implémentés dans des libs à coté (rien à voir avec le JS donc), et importé dans le langage JS

      Bref, dans ce genre d'application très graphique, le javascript n'a que peu de part de responsabilité dans les problèmes de perfs. Surtout que TraceMonkey (moteur de Firefox), compile en code machine pur tout ce qui est calcul mathématique js avant exécution (en particulier dans les boucles).

      Si on veut un responsable sur les perfs, et dans une appli web comme celle là, il faut se tourner donc vers le DOM, et plus particulièrement ici vers la balise canvas.

      Chez Mozilla, on sait que la couche de binding DOM <-> javascript n'est pas des plus performantes, et dans le trunk, (et la branche Fx 3.6 je crois), il y a eu des améliorations assez significatives en ce sens.

      Ensuite, canvas. Dans Firefox, canvas, ce n'est qu'une API haut niveau au dessus de la bibliothèque Cairo (http://cairographics.org/ ). Autant dire que les mesure de perfs purement graphiques sont à imputer à Cairo. Reste à savoir dans quel mesure Cairo contribue à la dégradation des perfs en globalité.


      Pour conclure, ne pas confondre javascript et les dizaines de composants que contient un navigateur.
      • [^] # Re: c'est bluffant

        Posté par  (site web personnel) . Évalué à 2.

        Euh sans doute... mais quand même, sous firefox j'ai 4fps max... sous chrome j'ai une vitesse normal et c'est jouable... je doute que Cairo soit le coupable.
        • [^] # Re: c'est bluffant

          Posté par  (site web personnel, Mastodon) . Évalué à 4.

          je n'ai pas dit que Cairo était le seul coupable. J'ai parlé aussi du binding DOM <-> javascript de Gecko qui pouvait en être une des causes. Il y a aussi peut-être d'autres choses dans le layout engine qui sont aussi responsables (mais à priori, l'affichage d'un canvas est assez décoléré du reste de la page web).

          Mais Cairo a quand même sa part de responsabilité je pense : cette lib est réputée pour avoir eu des problèmes de performances par le passé. ça s'est amélioré depuis mais c'est pas toujours folichon quand même dès qu'on pousse un peu..
          • [^] # Re: c'est bluffant

            Posté par  . Évalué à 1.

            En 2006 Zack Rusin avait réalisé un petit comparatif de performances entre Qt et Cairo.
            Le moins que l'on puisse dire c'est que le résultat n'est pas flatteur pour Cairo : http://zrusin.blogspot.com/2006/10/benchmarks.html
            Zack Rusin indiquait qu'au moment de la réalisation du bench, un travail était fait sur Cairo pour améliorer les perfs. Reste à savoir si en 3 ans ce travail a porté ses fruits.
  • # Cédémaladeuuuh !!!

    Posté par  . Évalué à 7.

    Mais y'a vraiment des tarés sur Terre... Bientôt, une machine virtuel x86 en javascript pour faire tourner votre OS !
    • [^] # Re: Cédémaladeuuuh !!!

      Posté par  (site web personnel) . Évalué à 7.

      Bientôt, une machine virtuel x86 en javascript pour faire tourner votre OS !

      ChromeOS ? Ok --»[]
    • [^] # Re: Cédémaladeuuuh !!!

      Posté par  . Évalué à 2.

      Y a bien une machine virtuelle x86 en java. Il suffit de la porter en javascript :)
  • # pas de son ?

    Posté par  (site web personnel, Mastodon) . Évalué à 1.

    >Pas de son bien sûr,

    pourquoi bien sûr ? Et la balise audio, elle sert à quoi ? ;-) Elle est présente dans Firefox et Chrome...
    • [^] # Re: pas de son ?

      Posté par  (site web personnel) . Évalué à 5.

      La balise audio ne permet pas de lire un flux audio généré à la volée par du Javascript.

      On peut imaginer ajouter à l'infini des balises audio dans la page, en leur confiant à chaque fois 1/60è de seconde du son émulé, et enchaîner leur lecture en espérant que le tout reste synchro avec l'émulateur... mais c'est franchement de la bidouille improbable.

      Improbable mais tentée : http://acko.net/blog/javascript-audio-synthesis-with-html-5 (essai non transformé, malheureusement)

      Le plus propre serait bien sûr d'avoir un canvas sonore.
      • [^] # Re: pas de son ?

        Posté par  (site web personnel, Mastodon) . Évalué à 2.

        ok, certes, je n'avais plus pensé au fait qu'effectivement, le son était généré par le programme de la ROM.

        En fait, j'étais plus parti dans l'idée que dans un jeu web (autre qu'un similateur de console :-)), rien n'empêche d'avoir des balises audio pour chacun des effets sonores du jeu, et de faire des play() pause() sur ces balises au moment opportun dans le jeu.
  • # MultiDeskOS le fait...

    Posté par  . Évalué à 2.

    ...depuis longtemps.

    Et Chuck Norris aussi, mais en interprétant le JavaScript en assembleur 8086 sur un boulier.
  • # En voyant ce genre de choses...

    Posté par  (site web personnel) . Évalué à 1.

    ... Je me dis que mon idée de reprogrammer Elite [http://fr.wikipedia.org/wiki/Elite_(jeu_video)] en javascript n'est finalement pas aussi délirante que ça.
  • # mozilla (iceape)

    Posté par  . Évalué à 1.

    J'ai du 1,5 fps ... Et un truc qui n'a pas l'air de marcher...
    Sous firefox v3 j'ai un peu plus de 2fps.
  • # Licence ?

    Posté par  (site web personnel) . Évalué à -1.

    Sans vouloir faire mon rabat joie, la licence n'est pas précisé dans le code source de la page et du js, c'est donc sans doute pas libre :/
    • [^] # Re: Licence ?

      Posté par  (site web personnel) . Évalué à 3.

      Oh mais si, tu fais le rabat-joie, et tu le veux bien, car en bas de la page il y a un lien vers le code source, et la licence s'y trouve.

      De plus ta conclusion est méchante, inutilement négative et complètement erronée. Tu ne peux rien conclure du fait que la licence n'est pas précisée dans le code HTML de la page et dans le Javascript de l'interpréteur.

      C'est triste d'être aussi négatif.

      (Le code source est sous GPL 3 : http://github.com/bfirsh/jsnes/blob/master/LICENSE )
      • [^] # Re: Licence ?

        Posté par  . Évalué à 2.

        C'est triste d'être aussi négatif.

        C'est triste ton point de vue sur les avis négatifs.

        Article Quarante-Deux : Toute personne dépassant un kilomètre de haut doit quitter le Tribunal. -- Le Roi de Cœur

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.