mirror of
https://github.com/mytechnotalent/Embedded-Hacking.git
synced 2026-05-22 15:39:39 +02:00
87 lines
4.5 KiB
XML
87 lines
4.5 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 800">
|
|
<style>
|
|
.bg{fill:#0a0a0f}.pnl{fill:#12121a;stroke:#1a1a2e}.hdr{fill:#12121a}
|
|
.title{font:bold 42px 'Courier New',monospace;fill:#00ff41}
|
|
.sub{font:bold 28px 'Courier New',monospace;fill:#00d4ff}
|
|
.txt{font:24px 'Courier New',monospace;fill:#c0c0c0}
|
|
.dim{font:20px 'Courier New',monospace;fill:#888}
|
|
.grn{font:bold 24px 'Courier New',monospace;fill:#00ff41}
|
|
.red{font:bold 24px 'Courier New',monospace;fill:#ff0040}
|
|
.cyn{font:bold 24px 'Courier New',monospace;fill:#00d4ff}
|
|
.amb{font:bold 24px 'Courier New',monospace;fill:#ffaa00}
|
|
.badge{stroke:#00ff41;rx:14}
|
|
</style>
|
|
<rect class="bg" width="1200" height="800"/>
|
|
|
|
<!-- Title -->
|
|
<text x="600" y="52" text-anchor="middle" class="title">Reset Handler — 4 Phases</text>
|
|
<text x="600" y="88" text-anchor="middle" class="dim">_reset_handler at 0x1000015C</text>
|
|
|
|
<!-- Phase 1 -->
|
|
<rect x="40" y="110" width="555" height="150" rx="8" class="pnl" stroke="#ffaa00" stroke-width="2"/>
|
|
<text x="60" y="143" class="amb">Phase 1: Core Check</text>
|
|
<text x="60" y="170" class="dim">0x1000015C — 0x10000168</text>
|
|
<rect x="60" y="185" width="515" height="42" rx="4" fill="#0a0a0f" stroke="#1a1a2e"/>
|
|
<text x="75" y="213" class="txt">mov r0, #0xD0000000</text>
|
|
<text x="75" y="248" class="dim">Read CPUID -> Core 0 continues</text>
|
|
|
|
<!-- Phase 2 -->
|
|
<rect x="625" y="110" width="535" height="150" rx="8" class="pnl" stroke="#00d4ff" stroke-width="2"/>
|
|
<text x="645" y="143" class="cyn">Phase 2: Data Copy</text>
|
|
<text x="645" y="170" class="dim">0x1000016A — 0x10000176</text>
|
|
<rect x="645" y="185" width="495" height="42" rx="4" fill="#0a0a0f" stroke="#1a1a2e"/>
|
|
<text x="660" y="213" class="txt">ldmia r4!, {r1,r2,r3}</text>
|
|
<text x="645" y="248" class="dim">Copy .data from flash -> RAM</text>
|
|
|
|
<!-- Phase 3 -->
|
|
<rect x="40" y="280" width="555" height="150" rx="8" class="pnl" stroke="#00ff41" stroke-width="2"/>
|
|
<text x="60" y="313" class="grn">Phase 3: BSS Clear</text>
|
|
<text x="60" y="340" class="dim">0x10000178 — 0x10000184</text>
|
|
<rect x="60" y="355" width="515" height="42" rx="4" fill="#0a0a0f" stroke="#1a1a2e"/>
|
|
<text x="75" y="383" class="txt">stmia r1!, {r0}</text>
|
|
<text x="340" y="383" class="dim">r0 = 0</text>
|
|
<text x="60" y="418" class="dim">Zero all uninitialized globals</text>
|
|
|
|
<!-- Phase 4 -->
|
|
<rect x="625" y="280" width="535" height="150" rx="8" class="pnl" stroke="#ff0040" stroke-width="2"/>
|
|
<text x="645" y="313" class="red">Phase 4: Platform Entry</text>
|
|
<text x="645" y="340" class="dim">0x10000186+</text>
|
|
<rect x="645" y="355" width="495" height="42" rx="4" fill="#0a0a0f" stroke="#1a1a2e"/>
|
|
<text x="660" y="383" class="txt">blx r1</text>
|
|
<text x="800" y="383" class="dim">-> main()</text>
|
|
<text x="645" y="418" class="dim">runtime_init -> main -> exit</text>
|
|
|
|
<!-- Bottom: Flow Diagram -->
|
|
<rect x="40" y="455" width="1120" height="315" rx="8" class="pnl"/>
|
|
<text x="60" y="493" class="sub">Execution Flow</text>
|
|
|
|
<!-- Step boxes -->
|
|
<rect x="60" y="513" width="220" height="70" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="2"/>
|
|
<text x="170" y="543" text-anchor="middle" class="amb">Core Check</text>
|
|
<text x="170" y="569" text-anchor="middle" class="dim">CPUID == 0?</text>
|
|
|
|
<text x="303" y="553" text-anchor="middle" class="grn">-></text>
|
|
|
|
<rect x="325" y="513" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#00d4ff" stroke-width="2"/>
|
|
<text x="425" y="543" text-anchor="middle" class="cyn">Data Copy</text>
|
|
<text x="425" y="569" text-anchor="middle" class="dim">flash -> RAM</text>
|
|
|
|
<text x="548" y="553" text-anchor="middle" class="grn">-></text>
|
|
|
|
<rect x="570" y="513" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="2"/>
|
|
<text x="670" y="543" text-anchor="middle" class="grn">BSS Clear</text>
|
|
<text x="670" y="569" text-anchor="middle" class="dim">zero globals</text>
|
|
|
|
<text x="793" y="553" text-anchor="middle" class="grn">-></text>
|
|
|
|
<rect x="815" y="513" width="305" height="70" rx="6" fill="#0a0a0f" stroke="#ff0040" stroke-width="2"/>
|
|
<text x="967" y="543" text-anchor="middle" class="red">Platform Entry</text>
|
|
<text x="967" y="569" text-anchor="middle" class="dim">-> main()!</text>
|
|
|
|
<!-- Dual core note -->
|
|
<rect x="60" y="610" width="1080" height="150" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
|
<text x="80" y="645" class="amb">Why check cores?</text>
|
|
<text x="80" y="680" class="txt">RP2350 has 2 cores.</text>
|
|
<text x="80" y="710" class="txt">Only Core 0 runs startup.</text>
|
|
<text x="80" y="740" class="dim">Core 1 returns to bootrom and waits.</text>
|
|
</svg> |