Track exact StarletOS bootstrap integration and checkpoint provenance

Recover 16 modified and 6 previously untracked integration files. All 22 source SHA-256s match the pre-publication StarletOS snapshot. Add handoff instructions, byte-preserving attributes and private backup exclusion. This commit publishes existing behavior; it does not claim a new full build or hardware qualification. The two preceding local commits and staged files were screened before publication.
This commit is contained in:
Yaya48 committed 2026-10-03 16:27:07 +02:00
1 parent a8dbbab62d
commit 54f5a74bbf
28 files changed
+9161 -7407

No files matched your search

+126
View File
@@ -0,0 +1,126 @@
{
"recordedAt": "2026-10-03",
"purpose": "Publish the exact existing StarletOS integration, without emulator behavior changes",
"sourceBaseCommit": "a8dbbab62de0ec429d9d887c39b9669c75f51c21",
"previousRemoteMaster": "b931671fde1e0461cbca37eeb8348a25d44ab76e",
"companionRepository": "https://git.yaya48.xyz/Yaya48/StarletOS",
"companionCheckpoint": "efa8b310da2c3e3bd36d762080d42d410a5413c9",
"files": [
{
"path": "CMakeLists.txt",
"sha256": "1ed308f4ccc9d6a4405d9ec232a4ac64fb88aa9c69a4773ee93fe7c62b357d4d",
"bytes": 34657
},
{
"path": "Run-Wii-Starlet-Bootstrap.ps1",
"sha256": "486f99f899fde18371b7bfc2b67fcf12a64ceb748285cc00ae4a71716349d07a",
"bytes": 18583
},
{
"path": "Source/Core/Core/Boot/Boot.cpp",
"sha256": "43a0b1c2e60c9a362fe3637ba0aa7b23e8b75ce5e5517cd3515b50ec596c43a5",
"bytes": 27009
},
{
"path": "Source/Core/Core/CMakeLists.txt",
"sha256": "32dc85b995c9beb3739cc1ea554c308042e16b6c270071550728d18c85ada79e",
"bytes": 24388
},
{
"path": "Source/Core/Core/Config/MainSettings.cpp",
"sha256": "e331e8f7145ebfce5cd3d2be1b3dabe1dce597e8040132402f04a0152526ce56",
"bytes": 47583
},
{
"path": "Source/Core/Core/Config/MainSettings.h",
"sha256": "9052fbc4a1da18ea3e8a11a93d62ef06423da74671b1f9b1091bb62f1fcff62b",
"bytes": 18437
},
{
"path": "Source/Core/Core/ConfigManager.cpp",
"sha256": "7d369d0264f5a1ad0df5ac44e9b6ea0f514a196ec7f80952218f9439ab17ea10",
"bytes": 19807
},
{
"path": "Source/Core/Core/HW/HW.cpp",
"sha256": "7e9bcfff87f526510aad149e781ae57140e32f7b32beafec00271fbcdb152848",
"bytes": 4526
},
{
"path": "Source/Core/Core/IOS/Starlet/ARMCore.cpp",
"sha256": "40d45aed7c5edb4540105dcdee4dd8dcde88c21ba7f3279eff0a9564f2d02a29",
"bytes": 75597
},
{
"path": "Source/Core/Core/IOS/Starlet/BootstrapELF.cpp",
"sha256": "344e6e38922b64fa58d9755c2df5fd752b00cf3dc73114809f6e9cada724c42a",
"bytes": 8554
},
{
"path": "Source/Core/Core/IOS/Starlet/BootstrapELF.h",
"sha256": "b25184cb4d3934e02220417b8e4b8005fc57010f4d3ab7af697c98f11afb305f",
"bytes": 943
},
{
"path": "Source/Core/Core/IOS/Starlet/Starlet.cpp",
"sha256": "78e3b006501af06fbef220d95213690f8a31ed5b3c36699c6e07ba58be3ba852",
"bytes": 26039
},
{
"path": "Source/Core/Core/IOS/Starlet/Starlet.h",
"sha256": "5dbdd1a854fd17377a339886949d80ebb1969d6453a4bdfd5a6f9a503bbb4f2a",
"bytes": 3553
},
{
"path": "Source/Core/Core/IOS/Starlet/StarletMemory.cpp",
"sha256": "34900b6c340e412f99ddb3ce6ba17bdb4d85ba7b27b2adc522315b158b675fca",
"bytes": 189757
},
{
"path": "Source/Core/Core/IOS/Starlet/StarletMemory.h",
"sha256": "cfa3aee13f260590ae9f7cdd48f8f08d1c67e4e6d647ef3eca6e01d472dbdd29",
"bytes": 14873
},
{
"path": "Source/Core/DolphinNoGUI/PlatformHeadless.cpp",
"sha256": "1390cff0a139f0b0a90559e0fda855446d279190827a6c5079718421924f4041",
"bytes": 2533
},
{
"path": "Source/UnitTests/CMakeLists.txt",
"sha256": "bb0aeb694c2f328b891e5e961fe0af16c5b30ff1a5f02d4a8d84bdfa5930b581",
"bytes": 1659
},
{
"path": "Source/UnitTests/Core/CMakeLists.txt",
"sha256": "563899ae142ba4d0e146bb125bd35c8387a77d25db5ac48cf8ba48a32cb30314",
"bytes": 2043
},
{
"path": "Source/UnitTests/Core/IOS/Starlet/BootstrapELFTest.cpp",
"sha256": "62d483a737b68cca00e51c4a93511b4863022ed2f4b90e721ff36325630cfc3a",
"bytes": 7057
},
{
"path": "Source/UnitTests/Core/IOS/Starlet/DMATest.cpp",
"sha256": "15b0816292fff6dcf48d485466f7bf495f2128ba625f3e7c1f225614be631e84",
"bytes": 16450
},
{
"path": "Tools/StarletBootstrapProbe/StarletBootstrapProbe.cpp",
"sha256": "83873691164d9b92e3be62f699146feaf8ab713bcb45d25821975e7454f56ede",
"bytes": 6179
},
{
"path": "docs/Wii_Starlet_Bootstrap.md",
"sha256": "bd7ec585472dc44815da8fcb2be6d726b91f04dd0964d82097842fb4ba764021",
"bytes": 4937
}
],
"checks": {
"sourceSnapshotMatchesPriorStarletOSArchive": true,
"unpublishedHistoricalFileVersionsScanned": 67,
"privateFindings": 0,
"newFullBuildOrHardwareTest": "NOT RUN: publication of existing qualified bytes only; see companion phase reports"
}
}
+45
View File
@@ -0,0 +1,45 @@
# StarletOS integration handoff — 2026-10-03
This checkpoint publishes the existing emulator changes used by the companion
[StarletOS repository](https://git.yaya48.xyz/Yaya48/StarletOS). It is a recovered
source checkpoint, not a new claim that stock IOS or physical hardware is fully
supported. The Rust project's current phase is 10C, stock NCD probe H02B awaiting
SD staging and its physical result; consult its HANDOFF and phase reports.
## Published work
- The existing local commits c230971f07 (NAND conformance/diagnostic tools) and
a8dbbab62d (SD CMD6/conformance report) precede this integration checkpoint.
- 16 modified files and 6 previously untracked files are now tracked here:
ARM bootstrap ELF loader and tests, direct PPC/Starlet launch, read-only NAND
and explicit disposable-copy support, diagnostics and regression runner,
ARMv5TE LDRD/STRD handling, and the existing MSVC dependency-detection fix.
- `docs/StarletOS_Checkpoint.json` records SHA-256s of the 22 exact source files.
The companion repository also pins the published Dolphin commit.
- Every runtime byte matches the source snapshot captured before publication.
Only Git attributes, ignore rules and handoff metadata were added this turn.
- Inspection of 67 changed file versions in the two pending commits found no
available private NAND key/content markers, device identifiers or credentials.
The staged integration files were inspected separately before publication.
- No full rebuild, new emulator test or Wii test is claimed by this Git import.
Historical qualification remains in the companion project's phase reports.
## Other computers
Clone this fork beside `starlet-ios-rust`, checkout the commit pinned in
`StarletOS/support/dolphin/manifest.json`, then follow the companion
`docs/DEVELOPMENT.md`. The previous private base bundle and source overlay are
no longer needed to retrieve these sources: their commits are on this server.
Use `docs/Wii_Starlet_Bootstrap.md` for the existing build and test runner.
NAND, keys, user profiles, traces and generated builds remain local/ignored.
The `.starlet_user3` profile is needed only for the full Menu scenarios; the
standalone Starlet bootstrap probe does not need a NAND or keys.
The old `.before-p10a-h07b` script is retained locally as an ignored backup.
## Future sessions
Read AGENTS.md. Record the starting commit, changed behavior, actual tests and
remaining work. Update this handoff and any changed file hashes, commit to this
fork, then update the pinned dependency in StarletOS. Never label a build, a
source comparison or a fake emulator device as a physical Wii observation.
+98
View File
@@ -0,0 +1,98 @@
# Starlet Rust bootstrap in this Dolphin fork
This fork can load the Phase 01 Revolution IOS ELF directly into Starlet SRAM. The loader uses
the ELF's two `PT_LOAD` segments, zeroes their uninitialized tails, starts the ARM core at
`0xffff0000` in big-endian supervisor mode, and publishes `REV_TRACE` lines in the IOS log.
No boot0, keys, or NAND dump is needed for the standalone probe.
## Fast development loop
Build the Rust ELF from `starlet-ios-rust`:
```powershell
cargo build --release
```
Configure this Dolphin fork with `ENABLE_TESTS=ON`, then build `StarletBootstrapProbe`. Run
the build commands from an x64 Native Tools Command Prompt (or after `vcvars64.bat`). For the
local MSVC configuration:
```powershell
cmake --build .starlet_msvc2 --target StarletBootstrapProbe
powershell -NoProfile -ExecutionPolicy Bypass -File .\Run-Wii-Starlet-Bootstrap.ps1
```
The script defaults to the sibling Rust repository's release ELF. It prints every trace line,
the stopping PC, and the ARM instruction count; it exits nonzero for a missing marker, fault,
or invalid ELF. `-JIT` exercises the fork's ARM JIT.
To check the panic path without replacing the ordinary release artifact:
```powershell
cd ..\starlet-ios-rust
cargo build --release --features panic-smoke --target-dir target/panic-smoke
cd ..\dolphin
powershell -NoProfile -ExecutionPolicy Bypass -File .\Run-Wii-Starlet-Bootstrap.ps1 `
-ELF '../starlet-ios-rust/target/panic-smoke/armebv5te-none-eabi/release/revolution-ios-bootstrap' `
-ExpectedOutcome Panic
```
To exercise a Rust fatal check and a synchronous ARM exception, derive two diagnostic
ELF copies from the release artifact:
```powershell
cd ..\starlet-ios-rust
py -3 tools/make_smoke_elf.py target/armebv5te-none-eabi/release/revolution-ios-bootstrap target/phase01-smoke
cd ..\dolphin
powershell -NoProfile -ExecutionPolicy Bypass -File .\Run-Wii-Starlet-Bootstrap.ps1 `
-ELF '../starlet-ios-rust/target/phase01-smoke/fatal-data.elf' -ExpectedOutcome Fatal
powershell -NoProfile -ExecutionPolicy Bypass -File .\Run-Wii-Starlet-Bootstrap.ps1 `
-ELF '../starlet-ios-rust/target/phase01-smoke/undefined-entry.elf' -ExpectedOutcome Fault
```
Each command also accepts `-JIT` and `-FullDolphin`. The fatal image changes only the loaded
`.data` probe, producing `REV:FATAL:DATA`. The exception image replaces the reset branch with
an undefined instruction; the fault record reports code 1 and raw LR/SPSR. Both passed in the
standalone probe and full Dolphin, with interpreter and JIT, on 2026-09-23. The source release
ELF remains unchanged.
The probe uses the actual `ARMCore` and `StarletMemory` implementations. It initializes the
high SRAM mapping, runs 4096-cycle slices, checks `__fault_code`, and decodes `REV_TRACE`. It
does not start Broadway, graphics, USB, or a Wii title. The two ELF parser unit tests run with:
```powershell
cmake --build .starlet_msvc2 --target tests
.starlet_msvc2\Binaries\Tests\tests.exe --gtest_filter=BootstrapELFTest.*
```
## Full Dolphin run
Set `Dolphin.General.WiiStarletBootstrapELF` to the absolute ELF path and
`Dolphin.Core.WiiIOSLLE=True`. This bypasses the boot0/keys/NAND dump initialization in
`StarletMemory` and starts the loaded program at its ELF entry. To run through `DolphinNoGUI`
using the existing `.starlet_user3` Wii profile:
```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\Run-Wii-Starlet-Bootstrap.ps1 -FullDolphin
```
This mode launches the Wii System Menu title only to initialize the full emulator; the Starlet
runtime is the supplied Rust ELF. It uses the Null video backend and headless platform, reads
new IOS log lines, and stops its own process after the expected marker. A populated Wii user
profile is required for this full frontend path. The standalone probe is the reproducible path
for the Phase 01 CPU and SRAM contract.
The accepted ELF is ELF32, big-endian ARM `ET_EXEC`, entry `0xffff0000`, with exactly one
executable segment at `0xffff0000` (up to 64 KiB) and one writable segment at `0xfffe0000`
(up to 16 KiB). It must expose `REV_TRACE`, `__fault_code`, `__fault_lr`, and
`__fault_spsr` in the data segment's loaded memory span. Rejected images never write to SRAM.
The Rust code reaches `REV:BOOT:IDLE` in both interpreter and JIT; the panic-smoke image
reaches `REV:PANIC`, and the diagnostic images reach fatal and fault states. All four outcomes
pass through the full `DolphinNoGUI` path. An initial
incremental MSVC build crashed before the first slice because `HW.cpp` still allocated the old
`Starlet` class size; AddressSanitizer identified the overflow. A forced rebuild fixed it,
and `Starlet::Create` now keeps allocation in the same translation unit as the class definition.
The CMake configuration also corrects a French MSVC `/showIncludes` prefix that made Ninja
record zero header dependencies. After rebuilding `HW.cpp`, Ninja records `Starlet.h` as a
dependency.