orbital-decomp

public
branch main latest 85b3cae by admin

README.md

bit Generations: Orbital — GBA Decompilation

Game: bit Generations: Orbital (Japan) (En) · GBA · Skip Ltd. / Nintendo (2006) Status: COMPLETE — 1096/1096 mapped sources match, 121,244 bytes TRUSTED (95.05%) + 127,564 / 127,564 bytes VERIFIED (100%)

Method

Each function is verified by linking its source at its real ROM address and comparing the linked bytes unmasked against the ROM. Zero diffs or it doesn't count. Two counters (tools/check_direct.py --all -> build/direct_match.json, local-only via .gitignore):

  • TRUSTED = code bytes [start, last-return) — strict function match.
  • VERIFIED = full span incl. literal pools, alignment padding, shared-epilogue
  • tails, ARM blobs, and data islands.

python3 tools/check_direct.py --all        # scoreboard -> build/direct_match.json
python3 tools/check_direct.py src/matched/<Name>.c 0x0800XXXX
python3 tools/check_direct.py src/matched/<Name>.s 0x0800XXXX
python3 tools/validate_code_section.py     # full-section stub vs ROM

Per-function results live in build/direct_match.json. PROGRESS.md is the grind journal.

State

  • Code section 0x080000C0–0x0801F30C (127,564 bytes), boundary map in
  • function_list_v2.txt, sources in src/matched/ (825 .c + 273 .s on disk; 1096 mapped and all matching).

  • 2 unmapped stale files on disk (Bignum_Init_0801C4BA.c,
  • Physics_DistanceSquared.c) are superseded by merged spans and excluded from the scoreboard (SKIP: no address mapping).

  • Stub image accuracy 100% (0 diffs); former ~6.2KB gap is now claimed as
  • Boot_Init.s (268B ARM) + Data_08012572 (890B) + 274 Data_* pool/pad spans, all verified.

Layout

function_list_v2.txt      boundary map (source of truth)
src/matched/*.c/*.s       decomp sources (readable C, naked asm where needed,
                          plus Boot/Data .s spans for pools/pads/ARM/data)
tools/check_direct.py     matcher + scoreboard (TRUSTED + VERIFIED)
tools/dbg.py              ROM-vs-linked disasm debugger
tools/gen_stubs.py        rebuild stub image + symbol map
tools/segment_functions.py / tools/validate_code_section.py

Requirements

  • python3 (all tools; no extra packages)
  • agbcc submodule (git submodule update --init)
  • ARM GNU toolchain 13.3.rel1 (bash setup_tools.sh, or place
  • arm-none-eabi-* on PATH)

  • The ROM file itself (not shipped): bit Generations - Orbital (Japan) (En).gba
  • in the repo root

What's left

Code matching is done (VERIFIED 100%). Remaining: readable-C conversion of naked-asm stopgaps, real type names, and a full byte-identical rebuild.

Educational reverse-engineering project. Original game © Nintendo / Skip Ltd.