Wasmboy
Gameboy Emulator Library écrit dans l'assemblée Web en utilisant AssemblyScript, Démos dans Preact et Svelte Le projet est toujours < 1.0.0. La plupart des...
Choisir une liste...
petit garçon
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.
Talk given at WebAssembly SF March 28th, 2019

Sommaire
- Features
- Usage
- In-Game Screenshots
- Demo Applications
- Tests
- Contributing
- Notable Projects
- Special Thanks
- Resources
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.
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

Support couleur Gameboy

Applications de démonstration
Débogueur
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:

Anaytiques / Vie privée
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
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

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

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

Oiseaux
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

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

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.
- Les
coreouwasmqui est le module de montage web pour wasmboy écrit enAssemblyScript. - Les
libqui est la bibliothèque importable de wasmboy qui peut être utilisé dans d'autres projets, qui ajoute une API de haut niveau à lacore. - Les
demo, 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
-
awesome gb-dev communittytrop de rads pour s'appeler !
-
dcodeIO for building and fixing bugs with AssemblyScriptEt pour être génial !
-
r/emudev, en particulier pourbinjimintpour m'avoir beaucoup aidée !
-
mooneye GBMerci Gekkio pour toutes les contributions à la communauté, et tous les tests impressionnants!
-
C'est Blargg. Où que vous soyez, merci pour tous les tests !
Ressources
-
Talk given at WebAssembly SF March 28th, 2019, général Wasm / AssemblyScript introduction, aperçu de WasmBoy et comment il fonctionne.
-
awesome gbdevpour le matériel de référence, et obtenir l'aide de la communauté de discorde impressionnante
-
node-gameboy,binjigb,gomeboycolorpour comparaison pour quand je suisVRAIMENTcoincé.