A toy GameBoy Color emulator written in golang.

logo

๐ŸŒ worldwide

Go Go Report Card GitHub stars GitHub license

ๆ—ฅๆœฌ่ชžใฎใƒ‰ใ‚ญใƒฅใƒกใƒณใƒˆใฏใ“ใกใ‚‰

GameBoyColor emulator written in golang.

This emulator can play a lot of ROMs work without problems and has many features.


๐Ÿšฉ Features & TODO list

  • 60fps
  • Pass cpu_instrs and instr_timing
  • Low CPU consumption
  • Sound(ported from goboy)
  • GameBoy Color ROM support
  • Multi-platform support
  • MBC1, MBC2, MBC3, MBC5 support
  • RTC
  • SRAM save
  • Resizable window
  • HTTP server API
  • Plugins support
  • Libretro support
  • Netplay in local network
  • Netplay in global network
  • SGB support
  • Shader support

๐ŸŽฎ Usage

Download binary from here.

./worldwide "***.gb" # or ***.gbc

๐Ÿ› HTTP Server

worldwide contains an HTTP server, and the user can give various instructions to it through HTTP requests.

Please read Server Document.

๐Ÿ”จ Build

For those who want to build from source code.

Requirements

  • Go 1.16
  • make
make build                              # If you use Windows, `make build-windows`
./build/darwin-amd64/worldwide "***.gb" # If you use Windows, `./build/windows-amd64/worldwide.exe "***.gb"`

๐Ÿ“„ Command

keyboard game pad
โ† โ† button
โ†‘ โ†‘ button
โ†“ โ†“ button
โ†’ โ†’ button
X A button
Z B button
Enter Start button
Backspace Select button
Comments
  • Inaccurate emulation: mooneye-gb tests

    Inaccurate emulation: mooneye-gb tests

    Test ROMs source code: https://github.com/Gekkio/mooneye-gb/tree/master/tests/acceptance Assembled package: https://gekkio.fi/files/mooneye-gb/latest/mooneye-gb_hwtests.zip

    I have tried running, from the basic acceptance directory, the following tests:

    • [x] add_sp_e_timing
    • [x] div_timing
    • [x] call_cc_timing
    • [x] jp_timing
    • [x] push_timing
    • [x] oam_dma/basic
    • [x] oam_dma/reg_read
    • [x] instr/daa.gb
    • [x] ld_hl_sp_e_timing
    • [x] intr_timing
    • [x] oam_dma_restart

    The ones with the checkbox not marked have failed. div_timing seems to be testing something that some of the other tests implicitly rely on. I did not run the whole test suite as I was only interested in a rough accuracy metric.

  • Unable to build on macOS

    Unable to build on macOS

    I can not build this package on macOS Catalina.

    make osx
    

    The error message:

    ld: warning: ignoring file /var/folders/f6/hntbqtjx31lflw_4hxp6kjs80000gn/T/go-link-125565020/000000.o, building for macOS-x86_64 but attempting to link with file built for unknown-unsupported file format ( 0x64 0x86 0x01 0x00 0x00 0x00 0x00 0x00 0xB8 0x11 0x00 0x00 0x01 0x00 0x00 0x00 )

    $ go version
    go version go1.15.3 darwin/amd64
    
  • Boot ROM doesn't react to buttons

    Boot ROM doesn't react to buttons

    When I run a DMG game and press an arrow during the boot animation to change the palette, the background of the animation doesn't change, and the ROM still plays with the classic green palette.

  • Revise the general information

    Revise the general information

    This patch mentioned the supported ".gb" or ".gbc" suffix, the generated configuration fix and clarified executable files built with "go build".

  • Inaccurate emulation: mooneye-gb timer tests

    Inaccurate emulation: mooneye-gb timer tests

    • [x] div_write
    • [x] rapid_toggle
    • [x] tim00
    • [x] tim00_div_trigger
    • [x] tim01
    • [x] tim01_div_trigger
    • [x] tim10
    • [x] tim10_div_trigger
    • [x] tim11
    • [x] tim11_div_trigger
    • [x] tima_reload
    • [x] tima_write_reloading
    • [x] tma_write_reloading

    https://github.com/Gekkio/mooneye-gb/tree/master/tests/acceptance/timer

  • Multiplayer

    Multiplayer

    Is it possible to emulate the link cable? https://en.wikipedia.org/wiki/Game_Link_Cable

    I remember playing against friends years ago. Is this feature supported? If not, is it possible?

  • Pokemon Crystal JP dose not work.

    Pokemon Crystal JP dose not work.

    Worldwide

    image

    00:045f

    https://github.com/pret/pokecrystal/blob/2641f93ad084b1329b3f3b9f7c8c222445fc4832/home/delay.asm#L8

    image

    image

    00:3e63

    https://github.com/pret/pokecrystal/blob/9a927c1b3efa2eca886f346a4fcca0eb57278faf/home/mobile.asm#L123

    image

    image

  • Inaccurate emulation: mooneye-gb general tests

    Inaccurate emulation: mooneye-gb general tests

    related to #4

    • [x] call_cc_timing2
    • [x] call_timing2
    • [ ] di_timing-GS.gb (note: this test is expected to pass only when ran on a DMG or SGB, and fail when ran on a CGB or AGB. This is because the name ends in -GS, as explained here)
    • [x] ei_sequence
    • [x] ei_timing
    • [x] halt_ime0_ei
    • [x] halt_ime0_nointr_timing
    • [x] halt_ime1_timing
    • [ ] halt_ime1_timing2-GS (-GS, so the note above also applies)
    • [x] if_ie_registers
    • [ ] interrupts/ie_push
    • [ ] oam_dma/sources-GS (this CRASHES the emulator itself)
    • [ ] oam_dma_start
    • [x] pop_timing
    • [x] rapid_di_ei
    • [ ] ../manual-only/sprite_priority.gb (here's how it should look)
  • Inaccurate emulation: SameSuite

    Inaccurate emulation: SameSuite

    The repository is here. I'm not aware of any pre-compiled ROMs, but you only need RGBDS and make to compile them.

    I picked some tests at random, all failed:

    • [ ] ppu/blocking_bgpi_increase
    • [ ] apu/channel_1/channel_1_align
    • [ ] apu/div_write_trigger_volume
    • [ ] apu/div_write_trigger
    • [ ] apu/div_write_trigger_10
  • Inaccurate emulation: Game Boy Video Player

    Inaccurate emulation: Game Boy Video Player

    ROM available here.

    Expected behavior: https://www.youtube.com/watch?v=c5HfmaDCVsY

    Actual behavior: a few colorful rectangles display on screen and change a few times.

๐Ÿ•น๏ธ A basic gameboy emulator with terminal "Cloud Gaming" support
๐Ÿ•น๏ธ A basic gameboy emulator with terminal

Gameboy.Live ??๏ธ Gameboy.Live is a Gameboy emulator written in go for learning purposes. You can simply play Gameboy games on your desktop: Or, "Cloud

Jan 1, 2023
Mettaur is GBA emulator written in golang.
Mettaur is GBA emulator written in golang.

Mettaur Mettaur is GBA emulator written in golang. Warning: This emulator is WIP, so many ROMs don't work correctly now. Run Please download latest bi

Dec 25, 2022
Magia is GBA emulator written in golang.
Magia is GBA emulator written in golang.

magia is GBA emulator written in golang.

Dec 25, 2022
NES emulator, written in Go
NES emulator, written in Go

Fergulator This is an NES emulator, written in Go. It's fairly new and very much a work in progress, so not all games run yet and not all features are

Dec 21, 2022
A ZX Spectrum Emulator written in Go
A ZX Spectrum Emulator written in Go

GoSpeccy - An evolving ZX Spectrum 48k Emulator GoSpeccy is a free ZX Spectrum (Speccy for friends) emulator written in Go. Quick start Installing and

Nov 28, 2022
A Chip8 emulator written in Go

A Chip8 Emulator in Go chip8.go is a simple Chip8 emulator, compliant with the technical standard laid out in the Cowgod's Manual. Graphics and sound

Jun 6, 2022
CHIP-8 Emulator written in Go
CHIP-8 Emulator written in Go

dP oo 88 .d8888b. 88d888b. dP 88d888b. 88d888b. dP dP 88' `"" 88' `88 88 88' `88 88' `88 88 88 88. ... 88 88 88 88. .88

Nov 26, 2021
NES emulator written in Go.
NES emulator written in Go.

Summary This is an NES emulator written in Go. Screenshots Title Screens http://www.michaelfogleman.com/static/nes/ Dependencies github.com/go-gl/gl/v

Dec 26, 2022
A simple CHIP-8 emulator written in Go

GoCHIP This is a simple CHIP-8 emulator written in Go. Check out this blogpost to learn more about CHIP-8 emulation: https://tobiasvl.github.io/blog/w

Jan 10, 2022
A CHIP-8 emulator written in Go

chip8 A CHIP-8 emulator written in Go. Usage Usage of chip8: -scaleFactor int Display scale factor (default 10) rom Path to ROM (m

May 25, 2022
Nintendo Entertainment System (NES) and Famicom emulator written in Go
Nintendo Entertainment System (NES) and Famicom emulator written in Go

go6502 Nintendo Entertainment System (NES) and Famicom emulator written in Go Dependencies go get -u github.com/go-gl/gl go get -u github.com/go-gl/gl

Apr 25, 2022
Golang RISC-V emulator that can play DOOM
Golang RISC-V emulator that can play DOOM

RISC-V Emulator A toy Golang RISC-V emulator that can play DOOM For now it uses smunaut bootloader and riscv_doom from the ICE40 project. But since th

Dec 12, 2022
Chip-8 - A simple chip-8 emulator for golang
Chip-8 - A simple chip-8 emulator for golang

?? What the fuck is this A simple chip-8 emulator. Chip-8 is a simple, interpret

Aug 4, 2022
Toy Shader in TinyGo for Game Boy Advance.
Toy Shader in TinyGo for Game Boy Advance.

toyshader.gba Toy Shader in TinyGo for Game Boy Advance. Releases v0.2: 80x80 screen with 3x2 pixel block version for drawing speed. v0.1: 240x160 pix

Oct 29, 2022
Gopher2600 is an Atari 2600/VCS Emulator.
Gopher2600 is an Atari 2600/VCS Emulator.

Gopher2600 Gopher2600 is an emulator for the Atari 2600 written in the Go language. The accuracy of the emulation is very high and the 6507, TIA and R

Dec 8, 2022
A chip-8 emulator built with Go

Introduction Chip-8 is an interpretted language designed to create programs/games on the 8bit systems like the COSMAC VIP and Telmac 1800. Chyp8 is an

Oct 3, 2021
Gones - An attempt to program a NES emulator

Gones - An attempt to program a NES emulator The following resources were used for the project: The great work on wiki.nesdev.org R650X and R651X Data

Jan 10, 2022
'mouseable' is keyboard-based mouse emulator for Windows.

Motivation Mouseable is intended to replace a mouse or trackpad. This program was inspired by Ultimate Hacking Keyboard Demo, Windows built-in functio

Dec 12, 2022
Sensor Emulator

Sensor Emulator This is a simple sensor emulator software implemented for IoT experiments. It emulates sensors sending data to an MQTT broker. Feature

Nov 28, 2021