Multi-platform Nintendo Game Boy Color emulator written in Go

GoBoy

Build Status codecov Go Report Card GoDoc

GoBoy is a multi-platform Nintendo GameBoy and GameBoy Color emulator written in go. The emulator can run the majority of GB games and some CGB games. There is also colour and sound support. This emulator was primarily built as a development exercise and is still work in progress. Please feel free to contribute if you're interested in GameBoy emulator development.

The program includes debugging functions making it useful for understanding the emulator operation for building one yourself. These functions include printing of opcodes and register values to the console at each step (although will greatly slow down the emulation) and toggling of individual sound channels.

Installation

Download the latest release of GoBoy from the releases page.

Building from source

With go installed, you can install GoBoy into your go bin by running:

go get github.com/Humpheh/goboy/cmd/goboy

If you have Go 1.11 you can also do:

git clone https://github.com/Humpheh/goboy.git
cd goboy
go build -o goboy cmd/goboy/main.go

GoBoy is compatible with MacOS, Windows and Linux. Building on Windows 10 requires MinGW and on Linux, you'll need to install gtk.

GoBoy uses the go library pixel for control binding and graphics rendering, which requires OpenGL. You may need to install some requirements which can be found on the pixels readme.

Usage

goboy zelda.gb

Controls: Z X Enter Backspace

The colour palette can be cycled with = (in DMG mode), and the game can be made fullscreen with F.

Other options:

  -dmg
    	set to force dmg mode
  -mute
    	mute sound output

Debug or experimental options:

  -cpuprofile string
    	write cpu profile to file (debugging)
  -disableVsync
    	set to disable vsync (debugging)
  -stepthrough
    	step through opcodes (debugging)
  -unlocked
    	if to unlock the cpu speed (debugging)

Debugging

There are a few keyboard shortcuts useful for debugging:

Q - force toggle background
W - force toggle sprites
A - print gb background palette data (cgb)
S - print sprite palette data (cgb)
D - print background map to log
E - toggle opcode printing to console (will slow down execution)
7,8,9,0 - toggle sound channels 1 through 4.

Saving

If the loaded rom supports a battery a <rom-name>.sav (e.g. zelda.gb.sav) file will be created next to the loaded rom containing a dump of the RAM from the cartridge. A loop in the program will update this save file every second while the game is running.

Testing

GoBoy currently passes all of the tests in Blargg's cpu_instrs and instr_timing test roms.

These roms are included in the source code along with a test to check the output is as expected (instructions_test.go and timing_test.go). These tests are also run on each commit.

Contributing

Please feel free to open pull requests to this project or play around if you're interested! There are still plenty of small bugs that can easily be found through playing games on the emulator, or take a task from the TODO list below!

Known Bugs and TODO list

  • Sprites near edge of screen not drawing
  • Top half of sprite disappearing off top of screen
  • Small sprites row glitch
  • BG tile window offset issue - visible on Pokemon Red splash screen - possibly mistimed interrupt?
  • Harry Potter and The Chamber of Secrets has odd sprite issues
  • Request to set screen to white does not do so
  • MBC3 banking support
  • Improve APU (see Pokemon Yellow opening screen for reason why)
  • Resizable window
  • White screen when off
  • STOP opcode behaviour
  • Sprite Z-drawing bugs
  • Minor APU timing issues
  • Better APU buffering
  • Stop jittering
  • MBC3 clock support
  • Speed up CPU and PPU
  • Platform native UI?
  • More DMG colour palettes
  • Support save-states
  • Support boot roms
  • Blargg's test ROMs

Resources

A large variety of resources were used to understand and test the GameBoy hardware. Some of these include:

Owner
Humphrey Shotton
Software Developer at Sparx
Humphrey Shotton
Comments
  • Separate gameboy from IOBinding

    Separate gameboy from IOBinding

    Hello!

    Thanks for creating this project. I like it a lot and plan to contribute and make some changes so more PRs will probably follow.

    This PR aims to separate the frontend (monitor) and the gameboy implementations. That would allow for different frontends. The PixelsIOBinding does no longer have a pointer to the gameboy, instead it would return a struct with button presses and releases.

    I don't consider my PR done, so please don't merge it yet. I need to clean up a bit, but I am just letting you know that I want to contribute and I'd like to hear your opinion on my work so far.

    Thanks for your time!

  • Speed up CPU

    Speed up CPU

    Just found this project and saw one of you goals was to speed up the CPU, I think I found an optimization that can be made in the following function. Currently there is a switch statement but I think a lookup table in the form of a map[byte]func(*Gameboy) or [numOpCodes]func(*Gameboy) (static size array) would be more efficient.

    https://github.com/Humpheh/goboy/blob/f9f78a9859eb547289addadd3cd679b30580fa98/pkg/gb/instructions.go#L70-L71

  • Avoid cache miss when getting instruct func

    Avoid cache miss when getting instruct func

    This makes the instruction array a global variable. This improves performance by ~3ns/op. This also includes a new Benchmark for ExecuteNextOpcode()

    Benchmarks:

    OLD
    goos: windows
    goarch: amd64
    pkg: github.com/Humpheh/goboy/pkg/gb
    BenchmarkGameboy_ExecuteNextOpcode
    2020/05/29 18:39:07 Cart type: 0x01 (MBC1)
    2020/05/29 18:39:07 Cart type: 0x01 (MBC1)
    2020/05/29 18:39:07 Cart type: 0x01 (MBC1)
    2020/05/29 18:39:07 Cart type: 0x01 (MBC1)
    2020/05/29 18:39:07 Cart type: 0x01 (MBC1)
    BenchmarkGameboy_ExecuteNextOpcode-8    52322690                23.3 ns/op
    PASS
    ok      github.com/Humpheh/goboy/pkg/gb 1.418s
    ?       github.com/Humpheh/goboy/pkg/gb/io      [no test files]
    
    NEW
    goos: windows
    goarch: amd64
    pkg: github.com/Humpheh/goboy/pkg/gb
    BenchmarkGameboy_ExecuteNextOpcode
    2020/05/29 18:41:54 Cart type: 0x01 (MBC1)
    2020/05/29 18:41:54 Cart type: 0x01 (MBC1)
    2020/05/29 18:41:54 Cart type: 0x01 (MBC1)
    2020/05/29 18:41:54 Cart type: 0x01 (MBC1)
    2020/05/29 18:41:54 Cart type: 0x01 (MBC1)
    BenchmarkGameboy_ExecuteNextOpcode-8    56845635                20.5 ns/op
    PASS
    ok      github.com/Humpheh/goboy/pkg/gb 1.362s
    ?       github.com/Humpheh/goboy/pkg/gb/io      [no test files]
    
  • fatal error: unexpected signal during runtime execution

    fatal error: unexpected signal during runtime execution

    Since I can't access golang.org, I remove go.sum and go.mod. Then I manually download the dependencies from github. But now I am having problems running. I want to know what is wrong.

    # github.com/go-gl/glfw/v3.2/glfw
    In file included from ../../go/src/github.com/go-gl/glfw/v3.2/glfw/c_glfw_linbsd.go:24:0:
    ../../go/src/github.com/go-gl/glfw/v3.2/glfw/glfw/src/linux_joystick.c: In function ‘_glfwInitJoysticksLinux’:
    ../../go/src/github.com/go-gl/glfw/v3.2/glfw/glfw/src/linux_joystick.c:224:42: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size 9 [-Wformat-truncation=]
                 snprintf(path, sizeof(path), "%s/%s", dirname, entry->d_name);
                                              ^~~~~~~
    In file included from /usr/include/stdio.h:862:0,
                     from /usr/include/X11/Xcursor/Xcursor.h:26,
                     from ../../go/src/github.com/go-gl/glfw/v3.2/glfw/glfw/src/x11_platform.h:39,
                     from ../../go/src/github.com/go-gl/glfw/v3.2/glfw/glfw/src/internal.h:169,
                     from ../../go/src/github.com/go-gl/glfw/v3.2/glfw/glfw/src/x11_init.c:28,
                     from ../../go/src/github.com/go-gl/glfw/v3.2/glfw/c_glfw_linbsd.go:19:
    /usr/include/x86_64-linux-gnu/bits/stdio2.h:64:10: note: ‘__builtin___snprintf_chk’ output between 12 and 267 bytes into a destination of size 20
       return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            __bos (__s), __fmt, __va_arg_pack ());
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    /home/ws-zzy/code/goboy/go_build_main_go #gosetup
    fatal error: unexpected signal during runtime execution
    [signal SIGSEGV: segmentation violation code=0x1 addr=0x10 pc=0x7fc12bdf0fa0]
    
    runtime stack:
    runtime.throw(0x71a5fa, 0x2a)
    	/usr/local/go/src/runtime/panic.go:608 +0x72
    runtime.sigpanic()
    	/usr/local/go/src/runtime/signal_unix.go:374 +0x2f2
    
    goroutine 1 [syscall, locked to thread]:
    runtime.cgocall(0x6335e0, 0xc00009fb80, 0x25f50a0)
    	/usr/local/go/src/runtime/cgocall.go:128 +0x5e fp=0xc00009fb50 sp=0xc00009fb18 pc=0x46653e
    github.com/mattn/go-gtk/gtk._Cfunc_gtk_dialog_run(0x25f50a0, 0x0)
    	_cgo_gotypes.go:7705 +0x49 fp=0xc00009fb80 sp=0xc00009fb50 pc=0x55e5a9
    github.com/mattn/go-gtk/gtk.(*Dialog).Run.func1(0x25f50a0, 0x25f50a0)
    	/home/ws-zzy/go/src/github.com/mattn/go-gtk/gtk/gtk.go:1236 +0x56 fp=0xc00009fbb8 sp=0xc00009fb80 pc=0x57a286
    github.com/mattn/go-gtk/gtk.(*Dialog).Run(0xc0000100e0, 0xc00000e030)
    	/home/ws-zzy/go/src/github.com/mattn/go-gtk/gtk/gtk.go:1236 +0x39 fp=0xc00009fbd8 sp=0xc00009fbb8 pc=0x56b729
    github.com/Humpheh/goboy/dialog.chooseFile(0x70b346, 0x4, 0x0, 0xc00009fe30, 0x0, 0x0, 0x0, 0x0)
    	/home/ws-zzy/go/src/github.com/Humpheh/goboy/dialog/dlgs_linux.go:68 +0x35e fp=0xc00009fd38 sp=0xc00009fbd8 pc=0x598c4e
    github.com/Humpheh/goboy/dialog.(*FileBuilder).load(0xc00009fe30, 0x0, 0x6987a0, 0xc0000d0120, 0xc00005a100)
    	/home/ws-zzy/go/src/github.com/Humpheh/goboy/dialog/dlgs_linux.go:40 +0x49 fp=0xc00009fd88 sp=0xc00009fd38 pc=0x598689
    github.com/Humpheh/goboy/dialog.(*FileBuilder).Load(0xc00009fe30, 0x0, 0x0, 0x0, 0x1)
    	/home/ws-zzy/go/src/github.com/Humpheh/goboy/dialog/dlgs.go:101 +0x2b fp=0xc00009fdc0 sp=0xc00009fd88 pc=0x59818b
    main.getROM.func1()
    	/home/ws-zzy/code/goboy/cmd/goboy/main.go:123 +0x1e8 fp=0xc00009fe78 sp=0xc00009fdc0 pc=0x62f6d8
    github.com/faiface/mainthread.Call.func1()
    	/home/ws-zzy/go/src/github.com/faiface/mainthread/mainthread.go:63 +0x2f fp=0xc00009fea0 sp=0xc00009fe78 pc=0x54312f
    github.com/faiface/mainthread.Run(0x71ca48)
    	/home/ws-zzy/go/src/github.com/faiface/mainthread/mainthread.go:44 +0xbd fp=0xc00009ff40 sp=0xc00009fea0 pc=0x542d2d
    github.com/faiface/pixel/pixelgl.Run(0x71ca48)
    	/home/ws-zzy/go/src/github.com/faiface/pixel/pixelgl/run.go:32 +0x57 fp=0xc00009ff80 sp=0xc00009ff40 pc=0x627df7
    main.main()
    	/home/ws-zzy/code/goboy/cmd/goboy/main.go:45 +0x32 fp=0xc00009ff98 sp=0xc00009ff80 pc=0x62eb32
    runtime.main()
    	/usr/local/go/src/runtime/proc.go:201 +0x207 fp=0xc00009ffe0 sp=0xc00009ff98 pc=0x48f507
    runtime.goexit()
    	/usr/local/go/src/runtime/asm_amd64.s:1333 +0x1 fp=0xc00009ffe8 sp=0xc00009ffe0 pc=0x4ba751
    
    goroutine 19 [chan receive]:
    github.com/faiface/mainthread.Call(0xc0000100d0)
    	/home/ws-zzy/go/src/github.com/faiface/mainthread/mainthread.go:66 +0xc2
    main.getROM(0x0, 0xc0000920e0)
    	/home/ws-zzy/code/goboy/cmd/goboy/main.go:119 +0xbf
    main.start()
    	/home/ws-zzy/code/goboy/cmd/goboy/main.go:53 +0x5e
    github.com/faiface/mainthread.Run.func1(0x71ca48, 0xc000068240)
    	/home/ws-zzy/go/src/github.com/faiface/mainthread/mainthread.go:37 +0x27
    created by github.com/faiface/mainthread.Run
    	/home/ws-zzy/go/src/github.com/faiface/mainthread/mainthread.go:36 +0xb1
    
  • Game does not load from .sav file

    Game does not load from .sav file

    Describe the bug A clear and concise description of what the bug is. If applicable, add screenshots to help explain your problem. When I start the game, it begins writing save state to .sav. When I relaunch the game it doesn't autoload from the .sav file and running Goboy with the .sav file doesn't work either. To Reproduce What did you run and do? I started Pokemon Red and played for a bit. Closed out of the game and restarted the game and no save state. Expected behaviour A clear and concise description of what you expected to happen. I expect the game to load from the .sav file. System Details: Please paste the outputs of go version and go env. If you were running from a binary, please detail your OS. go version go1.10.3 linux/amd64

    [dymurray@pups ~]$ go env
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/home/dymurray/.cache/go-build"
    GOEXE=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/dymurray/go"
    GORACE=""
    GOROOT="/usr/lib/golang"
    GOTMPDIR=""
    GOTOOLDIR="/usr/lib/golang/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    CGO_CFLAGS="-g -O2"
    CGO_CPPFLAGS=""
    CGO_CXXFLAGS="-g -O2"
    CGO_FFLAGS="-g -O2"
    CGO_LDFLAGS="-g -O2"
    PKG_CONFIG="pkg-config"
    GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build386047923=/tmp/go-build -gno-record-gcc-switches"
    
  • Cpu table optmization

    Cpu table optmization

    See #20

    Implemented a static array for storing operations where the functions are indexed by their opcode. Also removed byte casts from the cbInstruction function as the compiler will already remove the bounds checks from the array. At least based on the assembly output from a similar function: https://godbolt.org/z/t7uSt1

  • Improve performance on commonly accessed memory reads

    Improve performance on commonly accessed memory reads

    In some highly used timer, clock and PPU methods RAM access was using the memory functions which come with a large overhead. Directly accessing the memory in these special cases results in significant CPU usage improvement.

  • Match APU buffering to CPU ticks

    Match APU buffering to CPU ticks

    Previously the APU ran completely without knowledge of how fast the CPU was running. This PR makes it so that the APU is buffered with the number of CPU ticks. This fixes issues with complex sounds such as in the opening of Pokemon Yellow.

  • Remove dialog package fork and update go modules

    Remove dialog package fork and update go modules

    I had forked the dialog package to apply some fixes for Mac OS. There has been some updates to that package so I have tried to replace it with the original.

  • GBC sprites do not render correctly

    GBC sprites do not render correctly

    This can be demonstrated in the Harry Potter and the Chamber of Secrets for gbc where from the first screen sprites are half rendered and the text box does not fully draw.

    screenshot 2018-11-25 at 11 57 15
  • File prompt and bundled Darwin build

    File prompt and bundled Darwin build

    If goboy is run without any rom passed in as the first argument, the app will now prompt the user to select a rom file using a native dialog. To get this working using xgo required me to copy the dialog package into the goboy directory.

    This also includes some changes to the release scripts, which will now build a MacOS bundle with an icon.

  • Bug: Sound is noisy on Windows

    Bug: Sound is noisy on Windows

    Describe the bug Sound is clear on MacOS, but noisy on Windows10. Linux is unchecked.

    To Reproduce

    git clone https://github.com/Humpheh/goboy.git
    cd goboy
    go build -o goboy cmd/goboy/main.go
    ./goboy pokered.gb
    

    Expected behaviour A clear sound on Windows10.

    System Details:

    I tried Pokemon Red(en) & Legend of Zelda Link's Awakening DX(en), and both were noisy.

    CPU: Intel Core i5-8250U
    RAM: 16.0GB
    OS: Windows 10 Home 1909
    
    $ go version
    go version go1.15.6 windows/amd64
    
  • Web based front-end

    Web based front-end

    I am working on a web based front-end for goboy, using websockets.

    • video is sent frame-by-frame as base64 encoded PNG
    • input is sent back from the browser over the same websocket

    The current state is crude but working implementation, which I just hacked up in the last hour or so.

    Screenshot: Screenshot_2020-05-07_21-58-43

    How to run? Something like this: go run --tags gtk_3_10 ./cmd/goboy/main.go -frontend web ~/yellow.gbc Then go to http://localhost:8080/ to play.

    Some things to be improved:

    • sound is still sent via the oto.Player, this could be sent over the websocket as well
    • current implementation assumes at most one button press/release per "frame"
    • converting from 3D array of bytes to PNG is slow (this is independent of this PR, I have some fixes on another branch)
    • the html and js code are not that great.
    • the jquery library is outdated. I reasoned that we don't want to depend on external resources, so the jquery is in the repo.

    Please check it out and let me know what you think!

  • Failed Blargg's mem_timing.gb

    Failed Blargg's mem_timing.gb

    What did you do?

    ./goboy mem_timing.gb

    What did you expect to see?

    Tests passed

    What did you see instead?

    Failed 3 tests:

     Sound: true
     CGB  : true
    
    2018/11/23 12:31:48 Cart type: 0x01 (MBC1)
    

    deepinscreenshot_select-area_20181123123215

    System details

    go version go1.11.2 linux/amd64
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/home/bell/.cache/go-build"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/bell/go"
    GOPROXY=""
    GORACE=""
    GOROOT="/usr/lib/go"
    GOTMPDIR=""
    GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD="/home/bell/github/goboy/go.mod"
    GOROOT/bin/go version: go version go1.11.2 linux/amd64
    GOROOT/bin/go tool compile -V: compile version go1.11.2
    uname -sr: Linux 4.19.2-arch1-1-ARCH
    /usr/lib/libc.so.6: GNU C Library (GNU libc) stable release version 2.28.
    gdb --version: GNU gdb (GDB) 8.2
    
  • Failed Blargg's interrupt_time.gb

    Failed Blargg's interrupt_time.gb

    What did you do?

    ./goboy cgb_sound.gb

    What did you expect to see?

    Tests passed

    What did you see instead?

    Test Failed:

     Sound: true
     CGB  : true
    
    2018/11/23 12:28:52 Cart type: 0x02 (MBC1)
    2018/11/23 12:28:53 0x10 (STOP) unimplemented (is 0x00 follows)
    

    deepinscreenshot_select-area_20181123122920

    System details

    go version go1.11.2 linux/amd64
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/home/bell/.cache/go-build"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/bell/go"
    GOPROXY=""
    GORACE=""
    GOROOT="/usr/lib/go"
    GOTMPDIR=""
    GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD="/home/bell/github/goboy/go.mod"
    GOROOT/bin/go version: go version go1.11.2 linux/amd64
    GOROOT/bin/go tool compile -V: compile version go1.11.2
    uname -sr: Linux 4.19.2-arch1-1-ARCH
    /usr/lib/libc.so.6: GNU C Library (GNU libc) stable release version 2.28.
    gdb --version: GNU gdb (GDB) 8.2
    
  • Failed Blargg's dmg_sound.gb

    Failed Blargg's dmg_sound.gb

    What did you do?

    ./goboy -dmg dmg_sound.gb

    What did you expect to see?

    Tests passed

    What did you see instead?

    On the 12th test, goboy crashes:

    panic: runtime error: index out of range
    
    goroutine 19 [running]:
    github.com/Humpheh/goboy/pkg/cart.(*MBC1).Read(0xc00012d700, 0xc000014000, 0x400000c0000a5400)
            /home/bell/github/goboy/pkg/cart/mbc1.go:30 +0xb7
    github.com/Humpheh/goboy/pkg/gb.(*Memory).Read(0xc000116000, 0xc0000b4000, 0x4c000040)
            /home/bell/github/goboy/pkg/gb/memory.go:271 +0x1cf
    github.com/Humpheh/goboy/pkg/gb.(*Gameboy).ExecuteOpcode(0xc0000f4000, 0xc0000d0b1a)
            /home/bell/github/goboy/pkg/gb/instructions.go:132 +0xad8
    github.com/Humpheh/goboy/pkg/gb.(*Gameboy).ExecuteNextOpcode(0xc0000f4000, 0x0)
            /home/bell/github/goboy/pkg/gb/instructions.go:52 +0x62
    github.com/Humpheh/goboy/pkg/gb.(*Gameboy).Update(0xc0000f4000, 0xc0000b1d01)
            /home/bell/github/goboy/pkg/gb/gameboy.go:81 +0x119
    main.startGB(0xc0000f4000, 0x76d0a0, 0xc0000a28c0)
            /home/bell/github/goboy/cmd/goboy/main.go:136 +0x237
    main.start(0x7ffd676cb33a, 0x2b)
            /home/bell/github/goboy/cmd/goboy/main.go:113 +0x43c
    main.main.func1()
            /home/bell/github/goboy/cmd/goboy/main.go:60 +0x33
    github.com/faiface/mainthread.Run.func1(0xc0000a2820, 0xc000078240)
            /home/bell/go/pkg/mod/github.com/faiface/[email protected]/mainthread.go:37 +0x27
    created by github.com/faiface/mainthread.Run
            /home/bell/go/pkg/mod/github.com/faiface/[email protected]/mainthread.go:36 +0xb1
    

    System details

    go version go1.11.2 linux/amd64
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/home/bell/.cache/go-build"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/bell/go"
    GOPROXY=""
    GORACE=""
    GOROOT="/usr/lib/go"
    GOTMPDIR=""
    GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD="/home/bell/github/goboy/go.mod"
    GOROOT/bin/go version: go version go1.11.2 linux/amd64
    GOROOT/bin/go tool compile -V: compile version go1.11.2
    uname -sr: Linux 4.19.2-arch1-1-ARCH
    /usr/lib/libc.so.6: GNU C Library (GNU libc) stable release version 2.28.
    gdb --version: GNU gdb (GDB) 8.2
    
  • Failed Blargg's cgb_sound.gb

    Failed Blargg's cgb_sound.gb

    What did you do?

    ./goboy cgb_sound.gb

    What did you expect to see?

    Tests passed

    What did you see instead?

    Hung on test 12: deepinscreenshot_select-area_20181123122017

    System details

    go version go1.11.2 linux/amd64
    GOARCH="amd64"
    GOBIN=""
    GOCACHE="/home/bell/.cache/go-build"
    GOEXE=""
    GOFLAGS=""
    GOHOSTARCH="amd64"
    GOHOSTOS="linux"
    GOOS="linux"
    GOPATH="/home/bell/go"
    GOPROXY=""
    GORACE=""
    GOROOT="/usr/lib/go"
    GOTMPDIR=""
    GOTOOLDIR="/usr/lib/go/pkg/tool/linux_amd64"
    GCCGO="gccgo"
    CC="gcc"
    CXX="g++"
    CGO_ENABLED="1"
    GOMOD="/home/bell/github/goboy/go.mod"
    GOROOT/bin/go version: go version go1.11.2 linux/amd64
    GOROOT/bin/go tool compile -V: compile version go1.11.2
    uname -sr: Linux 4.19.2-arch1-1-ARCH
    /usr/lib/libc.so.6: GNU C Library (GNU libc) stable release version 2.28.
    gdb --version: GNU gdb (GDB) 8.2
    
A toy GameBoy Color emulator written in golang.
A toy GameBoy Color emulator written in golang.

?? worldwide 日本語のドキュメントはこちら GameBoyColor emulator written in golang. This emulator can play a lot of ROMs work without problems and has many features.

Jan 1, 2023
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
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
A GameBoy emulator written in Go

gogoboy A GameBoy emulator written in Go About this project This project is a proof of concept of building emulators with test driven development. I'v

Aug 20, 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
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
goloz is a multi-player reimplementation of the link to the past game.
goloz is a multi-player reimplementation of the link to the past game.

goloz is a free and open source online multiplayer game.

Aug 29, 2022
Arkanoid game in Go using Ebiten game engine with ECS.
Arkanoid game in Go using Ebiten game engine with ECS.

Arkanoid-go Arkanoid game in Go using Ebiten game engine with ECS. You must have Git LFS installed when cloning the repository to download assets. See

Oct 9, 2022
AircraftWar - a game powered by Go+ spx game engine
AircraftWar - a game powered by Go+ spx game engine

AircraftWar - a game powered by Go+ spx game engine How to run Download Go+ and build it. See https://github.com/goplus/gop#how-to-build. Download thi

Jan 5, 2022
FlappyCalf - a game powered by Go+ spx game engine
FlappyCalf - a game powered by Go+ spx game engine

FlappyCalf - a game powered by Go+ spx game engine How to run Download Go+ and build it. See https://github.com/goplus/gop#how-to-build. Download this

Nov 6, 2022
FlappyCalf - a game powered by Go+ spx game engine
FlappyCalf - a game powered by Go+ spx game engine

FlappyCalf - a game powered by Go+ spx game engine How to run Download Go+ and build it. See https://github.com/goplus/gop#how-to-build. Download this

Nov 6, 2022
MazePlay - a game powered by Go+ spx game engine
MazePlay - a game powered by Go+ spx game engine

MazePlay - a game powered by Go+ spx game engine How to run Download Go+ and build it. See https://github.com/goplus/gop#how-to-build. Download this g

Dec 16, 2021
A simple game that I created with Ebiten game library as a way to teach myself Go. Enjoy!
A simple game that I created with Ebiten game library as a way to teach myself Go. Enjoy!

galactic-asteroid-belt Overview A simple game that I created with Ebiten game library as a way to teach myself Go. Enjoy! Run To run, you will need Go

Dec 2, 2021
RundQuiz-Game - This is a Go exercise that implements and builds a quiz game from a list of math questions in a CSV file.

Go RundQuiz Game Exercise details This exercise is broken into two parts to help simplify the process of explaining it as well as to make it easier to

Jan 5, 2022