Project layout and sources of truth¶
The repository deliberately separates supported development surfaces from raw reverse-engineering evidence.
| Path | Role | Source of truth? |
|---|---|---|
app/ |
editable starter | Yes, for the minimal application pattern |
include/mobigo_sdk/ |
public API declarations | Yes, for signatures and contracts |
src/ |
clean-room SDK implementation | Yes, with tests |
examples/ |
focused probes and complete projects | Only for the feature they demonstrate |
tests/ |
host and packaging regressions | Yes, for covered behavior |
emulator/ |
emulator source and hardware tests | Yes for modeled behavior, not automatically physical proof |
tools/ |
unified and specialist tools | Yes for current command behavior |
docs/ |
current developer manual | Yes for supported workflows |
research/ |
dated evidence, reports, and experiments | No; historical evidence only |
vendor/ |
third-party and device-derived inputs | Inputs, not clean-room API source |
build/ |
generated products | Never commit |
Which document wins?¶
When sources disagree, use this order:
- current public header and its tests;
- current unified CLI behavior and validation;
- the published manual and capability matrix;
- a maintained complete example;
- dated research notes;
- archived guides and experiments.
An address or filename in a research report records an observation. It is not a portable application constant unless the current API or reference manual says so.
Public versus target-only APIs¶
Most headers expose either portable logic or bindings that require the resident
firmware. standard_controls.h is the resident-lifecycle convenience layer;
direct_controls.h preserves settings and Off handling in an owned framebuffer
loop without resident overlays. hardware.h is
also target-only and intentionally low-level.
Host tests can exercise portable authoring and policy helpers. Resident and hardware bindings must be compiled for u'nSP and validated against firmware in the emulator or on a physical console.
The target builder accepts C99-style .c and u'nSP .asm/.s sources. It has
no C++ frontend or established target C++ ABI. C++20 under emulator/ belongs
to the host emulator and is not an application-language precedent.
Generated code¶
Asset tools emit deterministic C, headers, binaries, manifests, and previews.
Generated files belong under build/ unless a maintained example intentionally
checks in a compiler-ready asset for licensing or reproducibility reasons.
Project configuration¶
mobigo.project.json is the canonical project manifest. It references
schema/mobigo-project.schema.json and declares the output name, entry source,
target (system or legacy game1), standard UI/font choices, extra sources,
optional baked launcher art, and the Homebrew Launcher display title. A
successful build emits both the .MBA and its same-stem .HBI title companion.
The launcher's icon is always decoded from the MBA header generated from
menu_icon (or the advanced raw menu_tile/palette fields), never from a
catalog icon ID. All paths are project-relative;
absolute and escaping paths are rejected.
See the unified CLI reference for every field.
Documentation placement¶
The website holds supported concepts and reference material. Small directory
READMEs point back to it. Long chronological investigations belong under
research/, with a date and an explicit warning that current status lives in
the capability matrix.