Executable modules and coverage

The Studio and Viewer modules studied, with function counts and their limitations.

The studied set contains Japanese V1, Japanese V2, American V2 and European V2 Flipnote Studio, plus a separate Japanese Viewer. Studio has ARM9 and ARM7 executable components and DSi-specific ARM9i and ARM7i components. The Viewer has ARM9 and ARM7 components and should not be treated as another editor region. Across these five images there are 18 component instances and 16 independently selected analysis records. [1][2]

Read the counts correctly

A saved Ghidra analysis can enumerate functions, references and non-empty C exports. That is a measure of analysis coverage, not a count of recovered Nintendo source functions or proof that every decompilation is semantically right. The checked rows reported no failed decompilations and no empty C exports among their enumerated functions. A tool can still split a function wrongly, classify data as code or infer an incorrect type. [1][2]

BuildARM9ARM7ARM9iARM7i
Japanese V14,6721,4331691,297
Japanese V25,5711,440341US V2 decoded match
American V25,5641,4403321,309
European V25,6001,440332US V2 decoded match
Japanese Viewer4,023335——

These are per-component analysis records, so do not sum them as unique functions across regional builds. Japanese V2 and European V2 ARM7i reuse the American V2 runtime-mapped analysis only after a complete decoded-module SHA-256 match. The Viewer ARM9 is predominantly Thumb; the Studio modules are predominantly ARM. [1]

Runtime addresses are not file offsets

For Studio, ARM9's NTR entry seed is 02004800; the Viewer's is 02000850, and ARM7 starts at 02380000. The DSi header also contains ARM9i and ARM7i staging addresses, but those are not the final runtime memory blocks used by the analysis. If an address in the function atlas appears absent from a ROM hex view, map it through the correct component's loaded runtime blocks before searching. BSS and dynamically allocated objects are outside the initialised-block inventory. [1]

How to use this coverage

Choose the exact region and version, identify the owning component, then follow the selected function's callers, callees and body hash in the matching analysis. Cross-region address equality is not required for equivalent behaviour. A missing analyst label means it has not been mapped in that family; it does not show that the build lacks the feature. [1][3]

Sources

  1. [1] Flipnote Decompilation Project — Module-by-module executable coverage
  2. [2] Flipnote Decompilation Project — Coverage and limits
  3. [3] Flipnote Decompilation Project — Selected original function index

← All documentation