Wasmboy

torch2424 torch2424
Dépôt créer le : 24/01/2018
Forks: 72 Watcher: 0 1474
Choisir une liste...
FR

petit garçon

Build Status npm version npm bundle size (minified) wapm version npm GitHub

Gameboy Emulator Library écrit dans Web AssemblyAssemblyScript, Démos enPreactetSvelteLes

Le projet est toujours < 1.0.0. La plupart des jeux sont jouables, mais l'émulateur n'est toujours pas très précis. Attendez des bugs.

Core/Lib Documentation

Talk given at WebAssembly SF March 28th, 2019

Pokemon Crystal Wasmboy Debugger Demo

Sommaire

Caractéristiques

  • Emule le Gameboy / Couleur Gameboy
  • Sorties graphiques vers une toile HTML5 évolutive / réactive, et audio via l'API Web Audio
  • Prise en charge des sauvegardes dans le jeu, et sauvegarde des états
  • Options configurables pour augmenter les performances pour les dispositifs de fin bas(er)
  • Importable dans d'autres projets comme dépendance
  • Construit avec l'assemblage Web
  • Utilise les travailleurs Web pour le rendu parallélisé
  • Support d'entrée clavier et gamepad en utilisantresponsive gamepadC'est vrai
  • Débogueur avec table de valeurs (carte d'entrée/sortie), visualiseur de données carrelage, et carte de fond avec indicateurs de défilement
  • Exécute dans le navigateur et le nœud

Utilisation

Le projet est toujours < 1.0.0. La plupart des jeux sont jouables, mais l'émulateur n'est toujours pas très précis. Attendez des bugs.

1.0 Roadmap Tracking Issue

Il suffit d'installer npm :

npm install --save wasmboy

La documentation relative au projet se trouve sur le siteWasmBoy Wiki.

Plateformes soutenues

Essayez de tester et de viser le support sur tous les principaux navigateurs (Chrome, Firefox et Safari). En outre, le support Node fonctionne avec leheadless option in the WasmBoy config, et en utilisantWorker Threads --experimental-workerdrapeau.

Captures d'écran en jeu

Soutien Gameboy

Is that a demo in your pocket Megaman 2 Pokemon Blue tetris tobu tobu girl

Support couleur Gameboy

Links Awakening L s d j Megaman extreme 2 Pokemon Silver Pokemon Yellow back to color demo

Applications de démonstration

Débogueur

Application Link

Un débogueur complet destiné à analyser les internes du gameboy. Idéal pour le développement de Gameboy HomeBrew, ou l'utilisation comme point de référence pour construire votre propre émulateur GameBoy.Voir le gif en haut du README pour un exemple.

Caractéristiques

  • Prise en charge de tous les composants Gameboy: CPU, PPU (Graphics), APU (Audio), Mémoire, Interrupts, et Timeurs
  • Par état de cycle de chaque Game Boy composants données, registres internes, et les adresses de mémoire pertinentes
  • Informations et analyse desCartridge Header.
  • Options de contrôle CPU. Étapes par opcode, et points d'arrêt
  • Graphiques Carte de fond, avec bordure pour l'emplacement actuel de la caméra en ce qui concerne les registres de défilement. C'est vrai
  • Graphics Tile Data, pour afficher les tuiles chargées actuellement sur toutes les banques VRAM
  • WasmBoy Control options. Jouer, Pause, Save State et Load State. - Oui
  • Possibilité de connecter l'ensemble de la bibliothèque WasmBoy Objet et mémoire à la console DevTools
  • Mise en page "Docker" très productive, avec la mise en place de widgets sur les sections de l'écran et la prise en charge de l'onglet
  • Sauvegarde des mises en page entre les sessions
  • Aide widget avec des conseils sur comment être efficace dans le débogueur

Démo mobile

Pour des raisons d'interface utilisateur/UX, sur mobile le débogueur est simplement une application web pour tester la lib. Ceci est utile pour tester un ROM en déplacement. Pour jouer, je suggèreVaporBoy. Voici un exemple de démonstration mobile:

Pokemon Crystal Wasmboy Mobile Demo

Anaytiques / Vie privée

Analytics Wrapper Service

L'analyse est utilisée sur cette application simplement pour le suivi des performances et le suivi de la popularité des applications. Les événements suivants sont envoyés, avec rien de plus que le nom de l'événement. Le fournisseur d'analyse utilisé estGoogle Analytics.

  • Chaque fois qu'un nouveau ROM est chargé, et joué pour la première fois.
  • Si essayer de charger un ROM a été réussi.
  • Chaque fois qu'un état est sauvé.
  • Chaque fois qu'un état est chargé.
  • Chaque fois que les options WasmBoy personnalisées sont appliquées.
  • Chaque fois que l'option Google Drive est sélectionnée.
  • Lorsque la démo mobile est rechargée manuellement.

Critères de référence

Application Link

Medium Article

Puisque WasmBoy est construit dans AssemblyScript, il peut également exécuter son noyau à travers le compilateur Typescript si nous nous moquons d'une partie de l'interface WebAssembly. L'outil de benchmarking a été conçu pour comparer les performances de WebAssembly aux performances de Javascript / ES6, après avoir compilé le noyau à la fois WebAssembly et Javascript. Il comprend des statistiques détaillées, une sortie en direct et plusieurs graphiques. Aussi idéal pour comparer les performances des appareils qui exécutent WasmBoy.

Exemple

WasmBoy Benchmark Runner Section on Safari

Anaytiques / Vie privée

L'analyse est utilisée sur cette application simplement pour le suivi des performances, et le suivi de la popularité de l'application. Les événements suivants sont envoyés, avec rien de plus que le nom de l'événement. Le fournisseur d'analyse utilisé estGoogle Analytics.

  • Chaque fois qu'un nouveau ROM est chargé à partir de la source particulière.
  • Chaque fois que l'indice de référence est exécuté.
  • Chaque fois que des résultats sont rendus pour la référence.

Iframe Embed

Une version intégrée Iframe de WasmBoy. Il suffit de fournir des informationsURL Query Params, et intégrer un ROM sur votre site! Idéal pour intégrer vos jeux HomeBrew Game Boy / Game Boy Color sur votre site Web, (WordPress) blog, et des services d'hébergement de jeux tels queitch.io.

Exemple

Example Tobu Tobu Girl, Homebrew Hub Iframe

Gif of the Tobu Tobu Girl, Home brew hub example

Utilisation

Ajoutez un iframe à votre site web comme suit:

<iframe title="WasmBoy Iframe Embed" width="160" height="144" allowfullscreen="true" src="https://wasmboy.app/iframe/?[QUERY_PARAMS_GO_HERE]"> </iframe>

L'iframe est configuré en ajoutantURL Query Params. Les paramètres de configuration sont:

  • rom-url- Oui(Requis)L'URL de la.gbou.gbcROM qui sera chargé, récupéré et joué.
  • rom-name- Le nom du ROM joué.
  • play-poster- L'URL de l'image affichée à l'entrée "cliquez pour jouer", lire l'affiche.

Veuillez vous assurer que tous les actifs qui sont chargés par l'intégration iframe, tels que les ROM et les images, fonctionneront avecCORS. Le WasmBoy Iframe Embed prendra toute la largeur et la hauteur (100%) de son conteneur iframe. Ainsi, il sera à votre style pour assurer que l'iframe préserve la résolution GameBoy 160x144.

Anaytiques / Vie privée

L'analyse est utilisée sur cette application simplement pour le suivi des performances, et le suivi de la popularité de l'application. Le fournisseur d'analyse utilisé estGoogle Analytics. Seules les données de base de visite utilisateur sont enregistrées / utilisées.

Essais

Ce sont tous des tests de réussite actuellement connus (par moi), il peut y avoir d'autres examens qui passent. Certains tests peuvent ne pas être réussis, et cela peut être soit en raison du composant, il s'agit de tests est en fait incorrect, ou un autre composant que le test est test n'est pas encore mis en œuvre, ou est incorrect (par exemple, beaucoup de tests luneye dépendent d'interruptions série, que cet émulateur doit encore mettre en œuvre). N'hésitez pas à ouvrir un problème ou un PR pour ajouter d'autres tests de réussite à cette liste.Les noms des tests sont énumérés de gauche à droite, de haut en bas.

Blindé

Repo with all blargg's tests and source

cpu instrs, instr timing, mem timing, mem timing-2, stop bug, cgb sound

Cpu Instructions all tests passing Instruction timing all tests passing Memory timing all tests passing Memory timing 2 all tests passing halt bug all tests passing cgb sound all tests passing

Oiseaux

Mooneye GB Emulator / Tests

Calendrier

div write, rapid toggle, tim00, tim00 div trigger, tim01, tim01 div trigger, tim10, tim10 div trigger, tim11, tim11 div trigger, tima reload, tima write reloading, tma write reloading

div write test passing rapid toggle test passing tim00 test passing tim00 div trigger test passing tim01 test passing tim01 div trigger test passing tim10 test passing tim10 div trigger test passing tim11 test passing tim11 div trigger test passing tima reload test passing tima write reloading test passing tma write reloading test passing

Halte

stop ime0 ei, stop ime0 nointr timing, stop ime1 timing

halt_ime0_ei test passing halt_ime0_nointr_timing test passing halt_ime1_timing test passing

Contribution

N'hésitez pas à fourcher et à soumettre des PR ! Ouvrir une question est recommandé avant de commencer tout développement, comme une discussion serait agréable sur l'idée / fonctionnalité avant d'écrire le code. Toute aide est très appréciée, et serait une tonne de plaisir!

Installation

Juste votre application de nœud standardnvm,git clonele projet, etnpm install, et tu devrais être prêt à partir !

Commandes CLI / Scripts Npm

Le projet comporte trois éléments différents.

  • Lescoreouwasmqui est le module de montage web pour wasmboy écrit enAssemblyScript.
  • Leslibqui est la bibliothèque importable de wasmboy qui peut être utilisé dans d'autres projets, qui ajoute une API de haut niveau à lacore.
  • Lesdemo, qui est une collection de différentes applications qui sont utilisées pour la démolibetcore.

La plupart du processus de construction de ce projet est fait en utilisantRollup.js. Chaque élément / composant du projet est configuré dans sa proprerollup.*.jsfichier, et sont ensuite tous utilisés dans le standardrollup.config.jsfichier par le CLI rollup. En outrecored'utilisation desAssemblyScriptoutil CLI compilateur.

Les commandes pour chaque partie du projet seront préparées avec leur nom d'élément et un côlon, par exempledebugger:[command here].

Les parties de commande communes sont :

  • dev/watch- Comment le projet devrait être servi et développé avec des outils comme le rechargement.
  • build- Faire construire la production du composant / élément du projet.

Les commandes qui ne sont pas préparées avec un côlon sont destinées à se construire facilement sur toutes les parties dans leur ensemble.

Toutes les commandes ne sont pas documentées, seules sont pertinentes pour apporter des modifications à la bibliothèque pour les contributions.*représente la catégorie de commandes, et n'est pas une commande réelle.

# Command to serve the project, and watch the debugger, wasm, and lib for changes
# Uses concurrently: https://github.com/kimmobrunfeldt/concurrently
# Concurrently helps cleanup the output and organizes watchers on commands that require concurrent tools

# Serve the general project for development (Watches the core, lib, and debugger)
npm run start

# Same as npm start
npm run dev

# Same as npm start
npm run watch

# Build everything to be ready to be pushed to npm or released
npm run build

# Linting commands used during precommit an tests
npm run prettier:*

# Commands for building/serving the core, offers commands for building with the Assemblyscript Compiler (WASM) or Typescript (JS)
npm run core:*

# Commands for building/serving the JS lib
npm run lib:*

# Run tests in `test/accuracy/test.js`
npm run test

# Run tests in `test/performance/test.js`
npm run test:performance

# All commands for testing, and are test related
npm run test:*

# Commands for the building / serving the debugger
npm run debugger:*

# Commands for building / serving the benchmark tool
npm run benchmark:*

# Commands for building / serving all available apps in wasmboy
npm run demo:*

Utilisationgh-pagespour le déploiement de débogueur/demo sur les pages gh.

Projets notables

  • VaporBoy- PWA pour jouer aux ROM avec WasmBoy !

  • wasmboy-rs- Wasmboy Compilé à Rust, pour les exécutables natifs et les fonctionnalités supplémentaires cool!

  • wasmboy.py- Wasmboy court en Python !

Spécial Je vous remercie

Ressources

Contributeurs GitHub

dependabot[bot]
dependabot[bot]
8 contributions
ISSOtm
ISSOtm
1 contributions
torch2424
torch2424
669 contributions
dcodeIO
dcodeIO
5 contributions
MaxGraey
MaxGraey
3 contributions
Malax
Malax
2 contributions
cheriejw
cheriejw
1 contributions
syrusakbary
syrusakbary
1 contributions
tkers
tkers
1 contributions