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:
1 parent
a8dbbab62d
commit
54f5a74bbf
28 files changed
+9161
-7407
No files matched your search
@@ -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.
|
||||
Reference in new issue
Block a user