GithubHelp home page GithubHelp logo

akatsuki105 / worldwide Goto Github PK

View Code? Open in Web Editor NEW
593.0 9.0 33.0 3.1 MB

This is my old GameBoy Emulator, please visit DawnGB, my new GameBoy emulator!

Home Page: https://github.com/akatsuki105/dawngb

License: MIT License

Go 97.09% Makefile 2.91%
golang go gameboy gameboy-emulator gbc-emulator gameboy-color emulator gbc emulation

worldwide's Introduction

Caution

This GameBoy emulator project is old and NOT MAINTAINED, please see DawnGB, my new GameBoy emulator project!






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

worldwide's People

Contributors

akatsuki105 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

worldwide's Issues

Increment cycle in opcode handler

Currently, cycle increments are performed collectively after exiting the opcode handler, but in this case, it is difficult to emulate accurate timing

Inaccurate emulation: Prehistorik Man (USA, Europe).gb

When playing the following ROM:

64f43161eb16eb1be99262c36867bc79  Prehistorik Man (USA, Europe).gb

on commit 86fd56ee2dc9e78e1ed5b408c831230d9a3418ca, I observe two problems:

  1. When the publisher logo appears (TITUS with a fox), the entire picture swings back and forth.

prehistorik-logo-swing-broken

Expected behavior (screenshot from SameBoy): logo waves per-scanline, appearing part by part:

prehistorik-logo-swing

  1. When the title screen appears, the scrolling text is broken, only flickering lines can be seen. The top scanline doesn't scroll its clouds.

prehistorik-scrolling-text-broken

Expected behavior:

prehistorik-scrolling-text

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

Implementation of automatic test using test ROM

For an accurate emulation implementation, it is necessary to pass the test ROM, so I implement a test to verify that the correct test results match the pixels in the test results with my emulator.

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:

  • add_sp_e_timing
  • div_timing
  • call_cc_timing
  • jp_timing
  • push_timing
  • oam_dma/basic
  • oam_dma/reg_read
  • instr/daa.gb
  • ld_hl_sp_e_timing
  • intr_timing
  • 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.

Inaccurate emulation: mooneye-gb general tests

related to #4

  • call_cc_timing2
  • 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)
  • ei_sequence
  • ei_timing
  • halt_ime0_ei
  • halt_ime0_nointr_timing
  • halt_ime1_timing
  • halt_ime1_timing2-GS (-GS, so the note above also applies)
  • if_ie_registers
  • interrupts/ie_push
  • oam_dma/sources-GS (this CRASHES the emulator itself)
  • oam_dma_start
  • pop_timing
  • rapid_di_ei
  • ../manual-only/sprite_priority.gb (here's how it should look)

add breakpoints in debug mode

description

Implementing breakpoints feature in debug-mode help us debug emulator's bug.
I'll make breakpoints-setting written in toml file.

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

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.

VRAM Debugger

description

BGBの機能に似せる

  • BG Map
  • Tiles
  • OAM

method

ebitenとは別のGUIツールキットでウィンドウを呼び出しその中でVRAM viewerを出す

ebitenで特定のコマンドが押されたのをトリガーにする

fyneを使う予定

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.