All Projects → Malax → Elmboy

Malax / Elmboy

Licence: agpl-3.0
A Nintendo™ Game Boy™ Emulator written in Elm.

Programming Languages

elm
856 projects

Projects that are alternatives of or similar to Elmboy

Hades
🔥 A Nintendo Game Boy Advance emulator
Stars: ✭ 44 (-84.56%)
Mutual labels:  emulator, gameboy, gameboy-emulator
awesome-emu-resources
A curated list of emulator development resources
Stars: ✭ 26 (-90.88%)
Mutual labels:  emulator, gameboy, gameboy-emulator
Metroboy
MetroBoy - A playable, circuit-level simulation of an entire Game Boy
Stars: ✭ 169 (-40.7%)
Mutual labels:  gameboy, gameboy-emulator, emulator
dashboy
Gameboy Emulator implemented by pure Dart
Stars: ✭ 130 (-54.39%)
Mutual labels:  emulator, gameboy, gameboy-emulator
khedgb
Experiments in Game Boy emulation
Stars: ✭ 15 (-94.74%)
Mutual labels:  emulator, gameboy, gameboy-emulator
goboy
Playing GameBoy Emulation in GoLang (ported from https://github.com/racerxdl/GameBoyEmulator)
Stars: ✭ 37 (-87.02%)
Mutual labels:  emulator, gameboy, gameboy-emulator
SkyEmu
Game Boy, Game Boy Color, and Game Boy Advanced Emulator
Stars: ✭ 59 (-79.3%)
Mutual labels:  emulator, gameboy, gameboy-emulator
Gbemu
WebAssembly based Gameboy Emulator
Stars: ✭ 120 (-57.89%)
Mutual labels:  gameboy, gameboy-emulator, emulator
rusty-boy
Gameboy emulator in Rust
Stars: ✭ 20 (-92.98%)
Mutual labels:  emulator, gameboy, gameboy-emulator
Goboy
Multi-platform Nintendo Game Boy Color emulator written in Go
Stars: ✭ 2,403 (+743.16%)
Mutual labels:  gameboy, gameboy-emulator, emulator
gameboi
An Original GameBoy emulator?
Stars: ✭ 20 (-92.98%)
Mutual labels:  emulator, gameboy, gameboy-emulator
Rustyboy
A Gameboy emulator written in Rust.
Stars: ✭ 224 (-21.4%)
Mutual labels:  gameboy, gameboy-emulator, emulator
jsGBC-core
jsGBC Core Emulator
Stars: ✭ 14 (-95.09%)
Mutual labels:  emulator, gameboy, gameboy-emulator
worldwide
A toy GameBoy Color emulator written in golang.
Stars: ✭ 563 (+97.54%)
Mutual labels:  emulator, gameboy, gameboy-emulator
Gbemu
A Gameboy emulator in modern C++
Stars: ✭ 149 (-47.72%)
Mutual labels:  gameboy, gameboy-emulator, emulator
Jitboy
A Game Boy emulator with dynamic recompilation (JIT)
Stars: ✭ 190 (-33.33%)
Mutual labels:  gameboy, gameboy-emulator, emulator
Wasmboy
Game Boy / Game Boy Color Emulator Library, 🎮written for WebAssembly using AssemblyScript. 🚀Demos built with Preact and Svelte. ⚛️
Stars: ✭ 963 (+237.89%)
Mutual labels:  gameboy, gameboy-emulator, emulator
Cryboy
A Game Boy (Color) emulator written in Crystal
Stars: ✭ 68 (-76.14%)
Mutual labels:  gameboy, gameboy-emulator, emulator
Gopher Boy
🎮 A Game Boy emulator written in Go
Stars: ✭ 206 (-27.72%)
Mutual labels:  gameboy, gameboy-emulator, emulator
Binjgb
Gameboy emulator implemented in C
Stars: ✭ 222 (-22.11%)
Mutual labels:  gameboy, gameboy-emulator, emulator

Elmboy

Build Status

A Nintendo™ Game Boy™ Emulator written in Elm.

Tetris Title Screen The Legend of Zelda: Link's Awakening Title Screen Pokemon Red Title Screen Kirby's Dreamland Title Screen Super Mario Land Title Screen Tetris Gameplay The Legend of Zelda: Link's Awakening Gameplay Pokemon Red Gameplay Kirby's Dreamland Gameplay Super Mario Land Gameplay

You can try it out here, it works best in Google Chrome. The page also provides you with links to legal homebrew ROMs you can use to test Elmboy.

Some games are playable, but the emulator is not yet very accurate. Expect bugs and non-working games.

Talk Recordings and Podcasts

Since the release of Elmboy, I gave a couple of talks and appeared in a podcast where I talk about this project. If you want to learn more, those resources are your best bet.

Why Elm?

You might think that Elm is a weird technology choice for writing an Emulator, and rightfully so. Emulators are highly stateful programs and their state changes a lot and very fast. With Elm being a purely-functional language everything has to be immutable and state must to be passed around the program. Additionally, running in the browser has its own set of issues, especially in the performance department.

So why Elm then? I wanted to start a non-trivial side-project in Elm. At that point it was not even decided what it would be, but it ended up being a Game Boy emulator. I wanted to push me and Elm to the limits, and this project has definitely done that 😄.

It will never be as performant or accurate as other Game Boy emulators out there that are written in lower level languages, but this is not what this project strives to be. If you are looking for a serious emulator, I can recommend SameBoy or Gambatte.

Performance

In its current state, some games, especially earlier ones, run at their native speed of ~60 frames per second on Chrome. This is on my MacBook Pro (Mid 2015, 2.5 GHz Intel Core i7, 16 GB RAM), running Chrome 69.0.3497.100. Performance in other browsers is worse, Chrome seems to have a better performing JIT compiler for this project. I want to further improve performance in the future, also on other browers.

Project Goals

This is mainly for my own entertainment, education and challenge. It's a non-trivial problem to solve, I love retro games and have a some sort of emotional connection to the Game Boy. There are hundreds of Game Boy emulators out there, but there wasn't one for Elm yet. And as I love Elm very much, this was the perfect side-project for me. Also, I think it's pretty cool!

One goal I have is staying true to Elm. As little JavaScript as possible and nice functional code all around. Sadly, I had to compromise on the nice functional code in some cases due to performance issues, but I want to re-introduce some abstractions and nicer types again as the core performance issues are ironed out and there might be some breathing room to put them back in.

Non-Goals

  • Achieving a very high degree of emulation accuracy
  • Becoming a "serious" emulator that can used by Homebrew developers and/or speed runners
  • Debugging capabilities
  • Game Boy Color support

Building

Run npm install to produce an optimised build in the dist folder. For development, run npm start to spawn a HMR development server.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].