MCPcopy Index your code
hub / github.com/dquigles/terminal_gameboy

github.com/dquigles/terminal_gameboy @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
70 symbols 120 edges 8 files 25 documented · 36%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Terminal GameBoy

A rust, terminal-based Game Boy and Game Boy Color emulator with ASCII art and block rendering modes. Play your favorite retro games right in your terminal!

Utilizes gameboy_core for the emulator, providing input & output directly to the emulator.

Demo

Terminal GameBoy demo

Pokemon Crystal running in block mode

Features

  • Two rendering modes:
  • ASCII mode — Classic ASCII art using brightness characters
  • Block mode — Unicode half-block characters for higher fidelity
  • Audio support — Full sound emulation via rodio
  • Save states — Automatic save/load for games with battery backup
  • Interactive menu — ROM browser when launched without arguments
  • Cross-platform — Works on macOS, Linux, and Windows

Installation

From crates.io

cargo install terminal_gameboy

From source

git clone https://github.com/dquigles/terminal_gameboy.git
cd terminal_gameboy
cargo build --release

The binary will be at target/release/terminal_gameboy.

Usage

Interactive Mode

Simply run without arguments to get an interactive ROM browser:

terminal_gameboy

Interactive ROM browser menu

Command Line

terminal_gameboy <rom_file.gb> [OPTIONS]

Options

Flag Description
--ascii ASCII art mode with brightness characters (default)
--block Unicode block mode with solid half-blocks
--mute Disable audio output
--help Show help message

Examples

# Run with ASCII rendering (default)
terminal_gameboy pokemon.gb

# Run with block rendering
terminal_gameboy pokemon.gb --block

# Run without sound
terminal_gameboy pokemon.gb --mute

Rendering Modes

ASCII Mode — uses brightness characters for a classic terminal look:

ASCII rendering mode

ASCII mode - Pokemon Crystal

Block Mode — uses Unicode half-blocks for higher fidelity:

Block mode - Pokemon Red

Controls

Key Action
Arrow keys D-Pad
Z A button
X B button
Enter Start
Space Select
Q / Esc Quit

Terminal Requirements

For the best experience:

  • Use a terminal with true color support (24-bit color)
  • A monospace font is required
  • Recommended terminal size: 162×74 or larger
  • Terminals with keyboard release event support (Ghostty, Kitty, WezTerm) provide better input handling

Tested Terminals

Terminal Status
Ghostty ✅ Excellent
Kitty ✅ Excellent
WezTerm ✅ Excellent
iTerm2 ✅ Good
Terminal.app ⚠️ Unplayable, block mode has weird tearing
Windows Terminal ✅ Good

ROM Files

This emulator requires Game Boy (.gb) or Game Boy Color (.gbc) ROM files. You must provide your own legally obtained ROM files.

Save Files

Save files are automatically stored in a .saves/ directory next to the ROM file. The emulator automatically loads saves on startup and saves on exit.

License

MIT License — see LICENSE for details.

Acknowledgments

Built with:

Core symbols most depended-on inside this repo

list_subdirs
called by 4
src/menu.rs
get_pixel
called by 4
src/framebuffer.rs
next
called by 3
src/menu.rs
prev
called by 3
src/menu.rs
draw_option
called by 3
src/menu.rs
get_save_path
called by 2
src/save.rs
config_dir
called by 2
src/config.rs
config_file
called by 2
src/config.rs

Shape

Method 35
Function 23
Class 10
Enum 2

Languages

Rust100%

Modules by API surface

src/renderer.rs17 symbols
src/menu.rs17 symbols
src/audio.rs11 symbols
src/framebuffer.rs9 symbols
src/config.rs6 symbols
src/main.rs5 symbols
src/save.rs4 symbols
src/input.rs1 symbols

For agents

$ claude mcp add terminal_gameboy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page