All Projects → Gekkio → GhidraBoy

Gekkio / GhidraBoy

Licence: Apache-2.0 License
Sharp SM83 / Game Boy extension for Ghidra

Programming Languages

kotlin
9241 projects
java
68154 projects - #9 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to GhidraBoy

tobutobugirl-dx
An arcade platformer homebrew game for the Game Boy, Game Boy Color and Super Game Boy
Stars: ✭ 58 (-57.35%)
Mutual labels:  gameboy, game-boy
gb-hardware-db
Game Boy hardware database
Stars: ✭ 21 (-84.56%)
Mutual labels:  gameboy, game-boy
tilemap-studio
A tilemap editor for Game Boy, Color, Advance, DS, and SNES projects. Written in C++ with FLTK.
Stars: ✭ 247 (+81.62%)
Mutual labels:  gameboy, game-boy
Mgba
mGBA Game Boy Advance Emulator
Stars: ✭ 3,355 (+2366.91%)
Mutual labels:  gameboy, game-boy
Azayaka
A cycle-accurate Game Boy and Game Boy Color Emulator, with rewind feature.
Stars: ✭ 26 (-80.88%)
Mutual labels:  gameboy, game-boy
demo-emulator
Nintendo Game Boy emulator written in Go to be used in workshops about emulator programming
Stars: ✭ 41 (-69.85%)
Mutual labels:  gameboy, game-boy
mealybug-tearoom-tests
🪲☕️ Game Boy emulator test ROMs
Stars: ✭ 40 (-70.59%)
Mutual labels:  gameboy, game-boy
dashboy
Gameboy Emulator implemented by pure Dart
Stars: ✭ 130 (-4.41%)
Mutual labels:  gameboy
Gameboy-Color-Cartridge
Board layout for an eeprom powered GB cartridge
Stars: ✭ 58 (-57.35%)
Mutual labels:  gameboy
gimp-tilemap-gb
Tilemap GB - Console App - AND - GIMP plugin for importing & exporting Game Boy game tilemaps and tilesets (as bitmap images or .GBM/.GBR files. Related tools: GBTD, GBMB, GBDK, Zal0-ZGB)
Stars: ✭ 42 (-69.12%)
Mutual labels:  gameboy
gimp-rom-bin
GIMP plug-in to read/write SNES / NES / GB / GBA / NGP / MD / etc ROM image, tile and sprite files
Stars: ✭ 54 (-60.29%)
Mutual labels:  game-boy
gbjam8
A Game Boy demake of The Binding of Isaac made for GBJAM8.
Stars: ✭ 18 (-86.76%)
Mutual labels:  gameboy
awesome-emu-resources
A curated list of emulator development resources
Stars: ✭ 26 (-80.88%)
Mutual labels:  gameboy
Goodboy
A pure OCaml Gameboy emulator
Stars: ✭ 75 (-44.85%)
Mutual labels:  gameboy
CrystalBoy
C# GameBoy Emulator
Stars: ✭ 93 (-31.62%)
Mutual labels:  gameboy
roboto-demo
Game Boy demo for Skrolli Party 2017.
Stars: ✭ 24 (-82.35%)
Mutual labels:  gameboy
gameboyGO
Gameboy emulator in go
Stars: ✭ 24 (-82.35%)
Mutual labels:  gameboy
redstarbluestar
An upgrade to Pokémon Red/Blue. Ports graphics and features from the Space World 1997 Gold/Silver prototype.
Stars: ✭ 67 (-50.74%)
Mutual labels:  gameboy
hamtaro-in-pieces
A disassembly of the wonderful Game Boy Color game Hamtaro: Ham-Hams Unite!
Stars: ✭ 15 (-88.97%)
Mutual labels:  game-boy
worldwide
A toy GameBoy Color emulator written in golang.
Stars: ✭ 563 (+313.97%)
Mutual labels:  gameboy

GhidraBoy: Sharp SM83 / Game Boy extension for Ghidra

Very experimental! No compatibility guarantees!

Ghidra version: Ghidra 10.1.2_PUBLIC_20220125

Tetris disassembly

Features

  • Sharp SM83 (CPU core used in Game Boy) support for Sleigh
  • Game Boy ROM loader:
    • Can load unbanked ROMs (<= 32kB, e.g. Tetris)
    • Can load banked ROMs (> >32kB, e.g. Pokemon)
    • Can load greyscale boot ROMs (DMG/DMG0/MGB/SGB/SGB2)
    • Can load color boot ROMs (CGB/CGB0)
  • Memory blocks based on the hardware memory map
    • Banked regions use overlays (TODO: figure out if there's a better way to support them)
    • GB vs GBC differences are handled (e.g. banked WRAM)
  • Symbols for hardware registers (0xFFxx range)
    • GB vs GBC differences are handled (e.g. existence of KEY1 register)
  • Game Boy cartridge header data types
    • Enumerated types for some things

How to install

  1. Download a prebuilt GhidraBoy release, or build it yourself.
  2. Start Ghidra
  3. File -> Install Extensions
  4. Press the plus icon ("Add extension")
  5. Choose the built or downloaded GhidraBoy zip file
  6. Restart Ghidra when prompted to load the extension properly

How to build

As a prerequisite, you need to have a Ghidra installation somewhere (an actual installation, not a copy of Ghidra source code!).

export GHIDRA_INSTALL_DIR=/path/to/ghidra
./gradlew

or

./gradlew -Pghidra.dir=/path/to/ghidra

You can then find a built extension .zip in the build/distributions directory.

Open questions / problems

  • Decompiler output is difficult to read if certain instructions are used (e.g. rotates, JP HL for jumptables)
  • Default "ASM calling convention" assumes all registers can be inputs and/or outputs. Inputs/outputs are often guessed incorrectly, so manual tuning is required for almost every function
  • Are overlays the only / the best solution for handling banked memory areas? Right now in banked ROMs every function call to 0x4000-0x7fff needs to be manually resolved to the correct bank(s)

License

Licensed under the Apache License, Version 2.0.

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].