Refactor Rust drivers for strict idiomatic documentation and 8-line enforcement
@@ -0,0 +1,79 @@
|
||||
<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"/>
|
||||
|
||||
<!-- Background grid decoration -->
|
||||
<g opacity="0.06">
|
||||
<line x1="0" y1="100" x2="1200" y2="100" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="200" x2="1200" y2="200" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="300" x2="1200" y2="300" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="400" x2="1200" y2="400" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="500" x2="1200" y2="500" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="600" x2="1200" y2="600" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="0" y1="700" x2="1200" y2="700" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="200" y1="0" x2="200" y2="800" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="400" y1="0" x2="400" y2="800" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="600" y1="0" x2="600" y2="800" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="800" y1="0" x2="800" y2="800" stroke="#00ff41" stroke-width="1"/>
|
||||
<line x1="1000" y1="0" x2="1000" y2="800" stroke="#00ff41" stroke-width="1"/>
|
||||
</g>
|
||||
|
||||
<!-- Hex rain decoration -->
|
||||
<g opacity="0.04" font-family="'Courier New',monospace" font-size="14" fill="#00ff41">
|
||||
<text x="50" y="80">4F 70 65 6E 4F 43 44</text>
|
||||
<text x="900" y="120">10 00 02 34 08 B5 01</text>
|
||||
<text x="150" y="180">47 44 42 20 52 45 56</text>
|
||||
<text x="800" y="240">20 08 20 00 FF AA 00</text>
|
||||
<text x="80" y="350">52 50 32 33 35 30 00</text>
|
||||
<text x="950" y="380">0A 0A 0F 12 12 1A 1A</text>
|
||||
<text x="100" y="520">41 52 4D 76 38 2D 4D</text>
|
||||
<text x="870" y="560">00 FF 41 00 D4 FF 88</text>
|
||||
<text x="60" y="680">47 48 49 44 52 41 00</text>
|
||||
<text x="920" y="720">FF 00 40 C0 C0 C0 00</text>
|
||||
</g>
|
||||
|
||||
<!-- Corner accents -->
|
||||
<polyline points="30,30 30,80 80,80" fill="none" stroke="#00ff41" stroke-width="2" opacity="0.3"/>
|
||||
<polyline points="1170,30 1170,80 1120,80" fill="none" stroke="#00ff41" stroke-width="2" opacity="0.3"/>
|
||||
<polyline points="30,770 30,720 80,720" fill="none" stroke="#00ff41" stroke-width="2" opacity="0.3"/>
|
||||
<polyline points="1170,770 1170,720 1120,720" fill="none" stroke="#00ff41" stroke-width="2" opacity="0.3"/>
|
||||
|
||||
<!-- Top accent line -->
|
||||
<rect x="100" y="140" width="1000" height="2" fill="#00ff41" opacity="0.4"/>
|
||||
|
||||
<!-- Course Title -->
|
||||
<text x="600" y="210" text-anchor="middle" font-family="'Courier New',monospace" font-size="56" font-weight="bold" fill="#00ff41">Embedded Systems</text>
|
||||
<text x="600" y="278" text-anchor="middle" font-family="'Courier New',monospace" font-size="56" font-weight="bold" fill="#00ff41">Reverse Engineering</text>
|
||||
|
||||
<!-- Divider -->
|
||||
<rect x="300" y="310" width="600" height="2" fill="#00d4ff" opacity="0.6"/>
|
||||
|
||||
<!-- Week Number -->
|
||||
<text x="600" y="380" text-anchor="middle" font-family="'Courier New',monospace" font-size="42" font-weight="bold" fill="#00d4ff">// WEEK 05</text>
|
||||
|
||||
<!-- Week Topic -->
|
||||
<text x="600" y="440" text-anchor="middle" font-family="'Courier New',monospace" font-size="28" fill="#c0c0c0">Integers and Floats in Embedded Systems:</text>
|
||||
<text x="600" y="478" text-anchor="middle" font-family="'Courier New',monospace" font-size="28" fill="#c0c0c0">Debugging and Hacking Integers and Floats</text>
|
||||
<text x="600" y="516" text-anchor="middle" font-family="'Courier New',monospace" font-size="28" fill="#c0c0c0">w/ Intermediate GPIO Output Analysis</text>
|
||||
|
||||
<!-- Bottom accent line -->
|
||||
<rect x="100" y="570" width="1000" height="2" fill="#00ff41" opacity="0.4"/>
|
||||
|
||||
<!-- University -->
|
||||
<text x="600" y="635" text-anchor="middle" font-family="'Courier New',monospace" font-size="36" font-weight="bold" fill="#ffaa00">George Mason University</text>
|
||||
|
||||
<!-- Bottom badge -->
|
||||
<rect x="400" y="670" width="400" height="40" rx="20" fill="none" stroke="#00ff41" stroke-width="1.5" opacity="0.5"/>
|
||||
<text x="600" y="697" text-anchor="middle" font-family="'Courier New',monospace" font-size="20" fill="#00ff41" opacity="0.7">RP2350 // ARM Cortex-M33</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |
@@ -0,0 +1,77 @@
|
||||
<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">Integer Data Types</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Fixed-Size Types for Embedded Systems</text>
|
||||
|
||||
<!-- uint8_t -->
|
||||
<rect x="40" y="110" width="540" height="155" rx="8" class="pnl"/>
|
||||
<text x="310" y="148" text-anchor="middle" class="sub">uint8_t</text>
|
||||
<text x="60" y="185" class="grn">Unsigned 8-bit</text>
|
||||
<text x="360" y="185" class="txt">1 byte</text>
|
||||
<text x="60" y="218" class="txt">Range:</text>
|
||||
<text x="200" y="218" class="amb">0 to 255</text>
|
||||
<text x="60" y="245" class="dim">Ages, counts, always positive</text>
|
||||
|
||||
<!-- int8_t -->
|
||||
<rect x="620" y="110" width="540" height="155" rx="8" class="pnl"/>
|
||||
<text x="890" y="148" text-anchor="middle" class="sub">int8_t</text>
|
||||
<text x="640" y="185" class="red">Signed 8-bit</text>
|
||||
<text x="940" y="185" class="txt">1 byte</text>
|
||||
<text x="640" y="218" class="txt">Range:</text>
|
||||
<text x="780" y="218" class="amb">-128 to 127</text>
|
||||
<text x="640" y="245" class="dim">Temperature, can be negative</text>
|
||||
|
||||
<!-- uint16_t -->
|
||||
<rect x="40" y="285" width="540" height="155" rx="8" class="pnl"/>
|
||||
<text x="310" y="323" text-anchor="middle" class="sub">uint16_t</text>
|
||||
<text x="60" y="360" class="grn">Unsigned 16-bit</text>
|
||||
<text x="360" y="360" class="txt">2 bytes</text>
|
||||
<text x="60" y="393" class="txt">Range:</text>
|
||||
<text x="200" y="393" class="amb">0 to 65,535</text>
|
||||
<text x="60" y="420" class="dim">Sensor readings, medium values</text>
|
||||
|
||||
<!-- uint32_t -->
|
||||
<rect x="620" y="285" width="540" height="155" rx="8" class="pnl"/>
|
||||
<text x="890" y="323" text-anchor="middle" class="sub">uint32_t</text>
|
||||
<text x="640" y="360" class="cyn">Unsigned 32-bit</text>
|
||||
<text x="940" y="360" class="txt">4 bytes</text>
|
||||
<text x="640" y="393" class="txt">Range:</text>
|
||||
<text x="780" y="393" class="amb">0 to ~4 billion</text>
|
||||
<text x="640" y="420" class="dim">Addresses, timestamps</text>
|
||||
|
||||
<!-- Code Example -->
|
||||
<rect x="40" y="460" width="1120" height="150" rx="8" class="pnl"/>
|
||||
<text x="600" y="498" text-anchor="middle" class="sub">Code Example</text>
|
||||
<rect x="60" y="515" width="1080" height="80" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="80" y="548" class="amb">uint8_t age = 43;</text>
|
||||
<text x="500" y="548" class="dim">// unsigned, 0-255</text>
|
||||
<text x="80" y="578" class="red">int8_t range = -42;</text>
|
||||
<text x="500" y="578" class="dim">// signed, -128 to 127</text>
|
||||
|
||||
<!-- Key Insight -->
|
||||
<rect x="40" y="630" width="1120" height="150" rx="8" class="pnl"/>
|
||||
<text x="600" y="668" text-anchor="middle" class="sub">Key Insight</text>
|
||||
<text x="60" y="700" class="txt">The</text>
|
||||
<text x="120" y="700" class="grn">u</text>
|
||||
<text x="145" y="700" class="txt">prefix means</text>
|
||||
<text x="370" y="700" class="cyn">unsigned</text>
|
||||
<text x="540" y="700" class="txt">(no negatives)</text>
|
||||
<text x="60" y="730" class="txt">Without</text>
|
||||
<text x="210" y="730" class="grn">u</text>
|
||||
<text x="235" y="730" class="txt">= signed (allows negatives)</text>
|
||||
<text x="60" y="760" class="dim">Choose the smallest type that fits your data</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,79 @@
|
||||
<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">Two's Complement</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">How Negative Numbers are Stored</text>
|
||||
|
||||
<!-- Step-by-step: -42 encoding -->
|
||||
<rect x="40" y="110" width="1120" height="280" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">Encoding -42 as int8_t</text>
|
||||
|
||||
<rect x="60" y="170" width="340" height="90" rx="6" fill="#0a0a0f" stroke="#00d4ff" stroke-width="1"/>
|
||||
<text x="230" y="200" text-anchor="middle" class="cyn">Step 1: Start</text>
|
||||
<text x="230" y="235" text-anchor="middle" class="txt">42 = 0x2A</text>
|
||||
|
||||
<rect x="420" y="170" width="340" height="90" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="590" y="200" text-anchor="middle" class="amb">Step 2: Flip</text>
|
||||
<text x="590" y="235" text-anchor="middle" class="txt">~0x2A = 0xD5</text>
|
||||
|
||||
<rect x="780" y="170" width="340" height="90" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="950" y="200" text-anchor="middle" class="grn">Step 3: Add 1</text>
|
||||
<text x="950" y="235" text-anchor="middle" class="txt">0xD5+1 = 0xD6</text>
|
||||
|
||||
<text x="60" y="300" class="txt">Binary:</text>
|
||||
<text x="200" y="300" class="grn">00101010</text>
|
||||
<text x="400" y="300" class="amb">-></text>
|
||||
<text x="450" y="300" class="amb">11010101</text>
|
||||
<text x="650" y="300" class="grn">-></text>
|
||||
<text x="700" y="300" class="red">11010110</text>
|
||||
|
||||
<text x="60" y="340" class="dim">Result: -42 stored as 0xD6 in memory</text>
|
||||
<text x="60" y="368" class="dim">Top bit = 1 means negative</text>
|
||||
|
||||
<!-- Comparison Table -->
|
||||
<rect x="40" y="410" width="1120" height="200" rx="8" class="pnl"/>
|
||||
<text x="600" y="448" text-anchor="middle" class="sub">Signed vs Unsigned: Same Bits!</text>
|
||||
|
||||
<text x="80" y="488" class="cyn">Hex</text>
|
||||
<text x="280" y="488" class="cyn">Binary</text>
|
||||
<text x="580" y="488" class="cyn">uint8_t</text>
|
||||
<text x="800" y="488" class="cyn">int8_t</text>
|
||||
|
||||
<line x1="60" y1="500" x2="1140" y2="500" stroke="#1a1a2e" stroke-width="1"/>
|
||||
|
||||
<text x="80" y="530" class="amb">0x2A</text>
|
||||
<text x="280" y="530" class="txt">00101010</text>
|
||||
<text x="580" y="530" class="grn">42</text>
|
||||
<text x="800" y="530" class="grn">42</text>
|
||||
|
||||
<text x="80" y="565" class="amb">0xD6</text>
|
||||
<text x="280" y="565" class="txt">11010110</text>
|
||||
<text x="580" y="565" class="grn">214</text>
|
||||
<text x="800" y="565" class="red">-42</text>
|
||||
|
||||
<text x="60" y="590" class="dim">Same byte 0xD6 = 214 unsigned, -42 signed</text>
|
||||
|
||||
<!-- GDB Verification -->
|
||||
<rect x="40" y="630" width="1120" height="150" rx="8" class="pnl"/>
|
||||
<text x="600" y="668" text-anchor="middle" class="sub">GDB Verification</text>
|
||||
|
||||
<rect x="60" y="688" width="1080" height="75" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="80" y="718" class="grn">(gdb)</text>
|
||||
<text x="180" y="718" class="txt">x/1xb &range</text>
|
||||
<text x="80" y="745" class="amb">0x200003e7:</text>
|
||||
<text x="300" y="745" class="red">0xd6</text>
|
||||
<text x="440" y="745" class="dim">// -42 in memory</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.6 KiB |
@@ -0,0 +1,75 @@
|
||||
<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">Inline Assembly GPIO</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Direct Hardware Control via ASM</text>
|
||||
|
||||
<!-- Init Loop -->
|
||||
<rect x="40" y="110" width="1120" height="310" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">GPIO Init Loop (pins 16-19)</text>
|
||||
|
||||
<rect x="60" y="168" width="340" height="120" rx="6" fill="#0a0a0f" stroke="#00d4ff" stroke-width="1"/>
|
||||
<text x="230" y="198" text-anchor="middle" class="cyn">1. Config Pad</text>
|
||||
<text x="80" y="228" class="dim">PADS_BANK0</text>
|
||||
<text x="80" y="255" class="dim">Clear OD+ISO, set IE</text>
|
||||
<text x="80" y="275" class="amb">0x40038000</text>
|
||||
|
||||
<rect x="420" y="168" width="340" height="120" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="590" y="198" text-anchor="middle" class="amb">2. Set Function</text>
|
||||
<text x="440" y="228" class="dim">IO_BANK0</text>
|
||||
<text x="440" y="255" class="dim">FUNCSEL = 5 (SIO)</text>
|
||||
<text x="440" y="275" class="grn">0x40028004</text>
|
||||
|
||||
<rect x="780" y="168" width="340" height="120" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="950" y="198" text-anchor="middle" class="grn">3. Enable Out</text>
|
||||
<text x="800" y="228" class="dim">GPIO Coprocessor</text>
|
||||
<text x="800" y="255" class="dim">mcrr p0,#4,r4,r5,c4</text>
|
||||
<text x="800" y="275" class="red">Output Enable</text>
|
||||
|
||||
<text x="60" y="330" class="txt">Loop: r0 = 16 to 19</text>
|
||||
<text x="400" y="330" class="dim">Red, Green, Blue, Yellow LEDs</text>
|
||||
<text x="60" y="398" class="dim">Each pin: pad config + function select + OE</text>
|
||||
|
||||
<!-- Blink Loop -->
|
||||
<rect x="40" y="440" width="540" height="190" rx="8" class="pnl"/>
|
||||
<text x="310" y="478" text-anchor="middle" class="sub">Blink Loop</text>
|
||||
|
||||
<rect x="60" y="498" width="500" height="40" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="80" y="525" class="grn">mcrr p0,#4,r4,r5,c0</text>
|
||||
|
||||
<text x="60" y="565" class="txt">r4 = pin, r5 = value</text>
|
||||
<text x="60" y="595" class="dim">c0 = output value register</text>
|
||||
<text x="60" y="615" class="dim">r5=1 ON, r5=0 OFF</text>
|
||||
|
||||
<!-- Pin Cycling -->
|
||||
<rect x="620" y="440" width="540" height="190" rx="8" class="pnl"/>
|
||||
<text x="890" y="478" text-anchor="middle" class="sub">Pin Cycling</text>
|
||||
|
||||
<rect x="640" y="498" width="500" height="75" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="660" y="528" class="amb">pin++;</text>
|
||||
<text x="660" y="558" class="txt">if (pin > 18) pin=16;</text>
|
||||
|
||||
<text x="640" y="600" class="dim">Cycles: 16 -> 17 -> 18 -> 16</text>
|
||||
<text x="640" y="620" class="dim">Red -> Green -> Blue -> repeat</text>
|
||||
|
||||
<!-- Key Takeaway -->
|
||||
<rect x="40" y="650" width="1120" height="130" rx="8" class="pnl"/>
|
||||
<text x="600" y="688" text-anchor="middle" class="sub">Why Inline Assembly?</text>
|
||||
<text x="60" y="722" class="txt">gpio_put(16,1) calls</text>
|
||||
<text x="390" y="722" class="grn">mcrr</text>
|
||||
<text x="470" y="722" class="txt">underneath</text>
|
||||
<text x="60" y="752" class="dim">Inline ASM shows what the SDK does at hardware level</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.7 KiB |
@@ -0,0 +1,83 @@
|
||||
<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">IEEE 754 Float</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">32-bit Single Precision Encoding</text>
|
||||
|
||||
<!-- Field Layout -->
|
||||
<rect x="40" y="110" width="1120" height="170" rx="8" class="pnl"/>
|
||||
<text x="600" y="147" text-anchor="middle" class="sub">Float Bit Layout (32 bits)</text>
|
||||
|
||||
<rect x="60" y="172" width="80" height="30" rx="4" fill="#0a0a0f" stroke="#ff0040" stroke-width="2"/>
|
||||
<text x="100" y="192" text-anchor="middle" class="red">S</text>
|
||||
|
||||
<rect x="150" y="172" width="350" height="30" rx="4" fill="#0a0a0f" stroke="#ffaa00" stroke-width="2"/>
|
||||
<text x="325" y="192" text-anchor="middle" class="amb">Exponent (8)</text>
|
||||
|
||||
<rect x="510" y="172" width="630" height="30" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="2"/>
|
||||
<text x="825" y="192" text-anchor="middle" class="grn">Mantissa (23)</text>
|
||||
|
||||
<text x="100" y="227" text-anchor="middle" class="dim">1 bit</text>
|
||||
<text x="100" y="243" text-anchor="middle" class="dim">sign</text>
|
||||
|
||||
<text x="325" y="227" text-anchor="middle" class="dim">8 bits</text>
|
||||
<text x="325" y="243" text-anchor="middle" class="dim">bias=127</text>
|
||||
|
||||
<text x="825" y="227" text-anchor="middle" class="dim">23 bits</text>
|
||||
<text x="825" y="243" text-anchor="middle" class="dim">+implicit 1</text>
|
||||
|
||||
<!-- Formula -->
|
||||
<rect x="40" y="300" width="1120" height="110" rx="8" class="pnl"/>
|
||||
<text x="600" y="325" text-anchor="middle" class="sub">Decode Formula</text>
|
||||
<text x="60" y="350" class="txt">Value = (-1)^sign × 2^(exp-127) × (1 + mantissa)</text>
|
||||
<text x="60" y="370" class="dim">Sign determines +/- Exponent scales with bias 127 Mantissa adds precision</text>
|
||||
<text x="60" y="385" class="dim">Special cases: exp=0 or 255 (denorm, inf, NaN)</text>
|
||||
|
||||
<!-- Example: 42.5 -->
|
||||
<rect x="40" y="430" width="1120" height="255" rx="8" class="pnl"/>
|
||||
<text x="600" y="455" text-anchor="middle" class="sub">Decode Example: 42.5</text>
|
||||
|
||||
<text x="80" y="485" class="red">Sign Bit: 0</text>
|
||||
<text x="400" y="485" class="dim">Positive number</text>
|
||||
|
||||
<text x="80" y="515" class="amb">Exponent: 10000100</text>
|
||||
<text x="450" y="515" class="dim">= 132 decimal</text>
|
||||
|
||||
<text x="80" y="545" class="txt">Bias subtraction: 132 - 127 = 5</text>
|
||||
|
||||
<text x="80" y="575" class="grn">Mantissa: 01010100...0</text>
|
||||
<text x="450" y="575" class="dim">= 1.010101</text>
|
||||
|
||||
<text x="80" y="605" class="txt">Combine: 1.010101 × 2^5 = 42.5</text>
|
||||
|
||||
<text x="80" y="635" class="cyn">Hex: 0x422A0000</text>
|
||||
|
||||
<text x="80" y="661" class="dim">Binary: 01000010001010100000000000000000</text>
|
||||
|
||||
<!-- Float vs Integer -->
|
||||
<rect x="40" y="705" width="1120" height="100" rx="8" class="pnl"/>
|
||||
<text x="600" y="729" text-anchor="middle" class="sub">32-bit Storage Comparison</text>
|
||||
|
||||
<text x="60" y="759" class="cyn">Integer:</text>
|
||||
<text x="200" y="759" class="txt">Exact values</text>
|
||||
<text x="430" y="759" class="dim">Range: -2.1B to +2.1B</text>
|
||||
<text x="860" y="759" class="red">No decimals</text>
|
||||
|
||||
<text x="60" y="781" class="amb">Float:</text>
|
||||
<text x="200" y="781" class="txt">Approximate values</text>
|
||||
<text x="470" y="781" class="dim">Range: ±10^38</text>
|
||||
<text x="810" y="781" class="grn">~7 sig digits</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.8 KiB |
@@ -0,0 +1,76 @@
|
||||
<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">Float in Ghidra</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Analyzing 42.5 in the Binary</text>
|
||||
|
||||
<!-- Decompiled View -->
|
||||
<rect x="40" y="110" width="540" height="280" rx="8" class="pnl"/>
|
||||
<text x="310" y="148" text-anchor="middle" class="sub">Decompiled main()</text>
|
||||
|
||||
<rect x="60" y="168" width="500" height="205" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="80" y="198" class="txt">int main(void) {</text>
|
||||
<text x="100" y="228" class="cyn">stdio_init_all();</text>
|
||||
<text x="100" y="258" class="txt">uVar1 = DAT_1000024c;</text>
|
||||
<text x="100" y="288" class="txt">do {</text>
|
||||
<text x="120" y="318" class="amb">printf(fmt,0,uVar1);</text>
|
||||
<text x="100" y="348" class="txt">} while(true);</text>
|
||||
|
||||
<!-- Key Discovery -->
|
||||
<rect x="620" y="110" width="540" height="280" rx="8" class="pnl"/>
|
||||
<text x="890" y="148" text-anchor="middle" class="sub">Key Discovery</text>
|
||||
|
||||
<text x="640" y="190" class="txt">printf with %f always</text>
|
||||
<text x="640" y="220" class="txt">receives a</text>
|
||||
<text x="830" y="220" class="red">double</text>
|
||||
<text x="960" y="220" class="txt">(64-bit)</text>
|
||||
|
||||
<text x="640" y="260" class="dim">C promotes float to double</text>
|
||||
<text x="640" y="290" class="dim">for variadic functions!</text>
|
||||
|
||||
<rect x="640" y="310" width="500" height="60" rx="4" fill="#0a0a0f" stroke="#ffaa00" stroke-width="2"/>
|
||||
<text x="890" y="348" text-anchor="middle" class="amb">42.5 sent as double</text>
|
||||
|
||||
<!-- Register Pair -->
|
||||
<rect x="40" y="410" width="1120" height="180" rx="8" class="pnl"/>
|
||||
<text x="600" y="448" text-anchor="middle" class="sub">Register Pair r2:r3</text>
|
||||
|
||||
<rect x="60" y="470" width="520" height="50" rx="4" fill="#0a0a0f" stroke="#00d4ff" stroke-width="1"/>
|
||||
<text x="80" y="510" class="cyn">r2 (low):</text>
|
||||
<text x="260" y="510" class="grn">0x00000000</text>
|
||||
|
||||
<rect x="600" y="470" width="540" height="50" rx="4" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="620" y="510" class="amb">r3 (high):</text>
|
||||
<text x="810" y="510" class="grn">0x40454000</text>
|
||||
|
||||
<text x="60" y="565" class="txt">Combined: 0x4045400000000000</text>
|
||||
<text x="680" y="565" class="grn">= 42.5</text>
|
||||
|
||||
<!-- Assembly -->
|
||||
<rect x="40" y="610" width="1120" height="170" rx="8" class="pnl"/>
|
||||
<text x="600" y="648" text-anchor="middle" class="sub">Assembly View</text>
|
||||
|
||||
<rect x="60" y="668" width="1080" height="90" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="80" y="698" class="grn">1000023a</text>
|
||||
<text x="260" y="698" class="amb">00 24</text>
|
||||
<text x="380" y="698" class="txt">movs r4, #0x0</text>
|
||||
<text x="640" y="698" class="dim">// r2 = 0</text>
|
||||
|
||||
<text x="80" y="733" class="grn">1000023c</text>
|
||||
<text x="260" y="733" class="amb">03 4d</text>
|
||||
<text x="380" y="733" class="txt">ldr r5,[DAT...]</text>
|
||||
<text x="640" y="733" class="dim">// r3 = 0x40454000</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,87 @@
|
||||
<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">Patching Float</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Changing 42.5 to 99.0 in Ghidra</text>
|
||||
|
||||
<!-- Calculate New Encoding -->
|
||||
<rect x="40" y="110" width="1120" height="230" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">Calculate 99.0 as Double</text>
|
||||
|
||||
<text x="60" y="188" class="txt">99 decimal =</text>
|
||||
<text x="290" y="188" class="grn">1100011</text>
|
||||
<text x="440" y="188" class="txt">binary</text>
|
||||
|
||||
<text x="60" y="223" class="txt">Normalize:</text>
|
||||
<text x="250" y="223" class="amb">1.100011 x 2^6</text>
|
||||
|
||||
<text x="60" y="258" class="red">Sign:</text>
|
||||
<text x="160" y="258" class="txt">0</text>
|
||||
<text x="300" y="258" class="amb">Exp:</text>
|
||||
<text x="380" y="258" class="txt">6+1023 = 1029</text>
|
||||
|
||||
<text x="60" y="293" class="grn">Mantissa:</text>
|
||||
<text x="240" y="293" class="txt">100011000...0</text>
|
||||
|
||||
<text x="60" y="328" class="dim">Full double: 0x4058C00000000000</text>
|
||||
|
||||
<!-- Before vs After -->
|
||||
<rect x="40" y="360" width="540" height="200" rx="8" class="pnl"/>
|
||||
<text x="310" y="398" text-anchor="middle" class="sub">Before (42.5)</text>
|
||||
|
||||
<rect x="60" y="418" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#ff0040" stroke-width="1"/>
|
||||
<text x="80" y="448" class="cyn">r2:</text>
|
||||
<text x="160" y="448" class="red">0x00000000</text>
|
||||
|
||||
<rect x="60" y="478" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#ff0040" stroke-width="1"/>
|
||||
<text x="80" y="508" class="cyn">r3:</text>
|
||||
<text x="160" y="508" class="red">0x40454000</text>
|
||||
|
||||
<text x="60" y="548" class="dim">Output: fav_num: 42.500000</text>
|
||||
|
||||
<rect x="620" y="360" width="540" height="200" rx="8" class="pnl"/>
|
||||
<text x="890" y="398" text-anchor="middle" class="sub">After (99.0)</text>
|
||||
|
||||
<rect x="640" y="418" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="660" y="448" class="cyn">r2:</text>
|
||||
<text x="740" y="448" class="grn">0x00000000</text>
|
||||
<text x="960" y="450" class="dim">same!</text>
|
||||
|
||||
<rect x="640" y="478" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="660" y="508" class="cyn">r3:</text>
|
||||
<text x="740" y="508" class="grn">0x4058C000</text>
|
||||
<text x="960" y="510" class="amb">changed</text>
|
||||
|
||||
<text x="640" y="548" class="dim">Output: fav_num: 99.000000</text>
|
||||
|
||||
<!-- Patch Steps -->
|
||||
<rect x="40" y="580" width="1120" height="200" rx="8" class="pnl"/>
|
||||
<text x="600" y="618" text-anchor="middle" class="sub">Patch in Ghidra</text>
|
||||
|
||||
<rect x="60" y="640" width="340" height="65" rx="6" fill="#0a0a0f" stroke="#00d4ff" stroke-width="1"/>
|
||||
<text x="230" y="668" text-anchor="middle" class="cyn">1. Window: Bytes</text>
|
||||
<text x="230" y="690" text-anchor="middle" class="dim">Open byte editor</text>
|
||||
|
||||
<rect x="420" y="640" width="340" height="65" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="590" y="668" text-anchor="middle" class="amb">2. Find 00404540</text>
|
||||
<text x="590" y="690" text-anchor="middle" class="dim">High word of 42.5</text>
|
||||
|
||||
<rect x="780" y="640" width="340" height="65" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="950" y="668" text-anchor="middle" class="grn">3. Patch 00C05840</text>
|
||||
<text x="950" y="690" text-anchor="middle" class="dim">High word of 99.0</text>
|
||||
|
||||
<text x="60" y="748" class="dim">Only one word to patch (low word is 0)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.0 KiB |
@@ -0,0 +1,75 @@
|
||||
<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">Double Precision</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">IEEE 754 64-bit Floating Point</text>
|
||||
|
||||
<!-- Bit Layout -->
|
||||
<rect x="40" y="110" width="1120" height="175" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">64-Bit Layout</text>
|
||||
|
||||
<rect x="60" y="168" width="80" height="72" rx="4" fill="#ff0040" stroke="#ff0040" stroke-width="1" opacity="0.3"/>
|
||||
<text x="100" y="197" text-anchor="middle" class="red">Sign</text>
|
||||
<text x="100" y="218" text-anchor="middle" class="dim">1 bit</text>
|
||||
|
||||
<rect x="160" y="168" width="300" height="72" rx="4" fill="#ffaa00" stroke="#ffaa00" stroke-width="1" opacity="0.2"/>
|
||||
<text x="310" y="197" text-anchor="middle" class="amb">Exponent</text>
|
||||
<text x="310" y="218" text-anchor="middle" class="dim">11 bits (bias 1023)</text>
|
||||
|
||||
<rect x="480" y="168" width="660" height="72" rx="4" fill="#00ff41" stroke="#00ff41" stroke-width="1" opacity="0.2"/>
|
||||
<text x="810" y="197" text-anchor="middle" class="grn">Mantissa (Fraction)</text>
|
||||
<text x="810" y="218" text-anchor="middle" class="dim">52 bits</text>
|
||||
|
||||
<text x="60" y="272" class="dim">Formula: (-1)^S x 1.Mantissa x 2^(Exp-1023)</text>
|
||||
|
||||
<!-- 42.52525 Example -->
|
||||
<rect x="40" y="305" width="1120" height="190" rx="8" class="pnl"/>
|
||||
<text x="600" y="340" text-anchor="middle" class="sub">Encoding 42.52525</text>
|
||||
|
||||
<text x="60" y="378" class="cyn">Sign:</text>
|
||||
<text x="170" y="378" class="txt">0 (positive)</text>
|
||||
|
||||
<text x="60" y="408" class="amb">Exponent:</text>
|
||||
<text x="230" y="408" class="txt">5 + 1023 = 1028</text>
|
||||
<text x="530" y="408" class="dim">= 0x404 (hex)</text>
|
||||
|
||||
<text x="60" y="438" class="grn">Mantissa:</text>
|
||||
<text x="230" y="438" class="txt">0101010000110011...</text>
|
||||
|
||||
<text x="60" y="468" class="dim">Full 64-bit hex:</text>
|
||||
<text x="310" y="468" class="grn">0x4045433B645A1CAC</text>
|
||||
|
||||
<!-- Float vs Double Comparison -->
|
||||
<rect x="40" y="515" width="540" height="265" rx="8" class="pnl"/>
|
||||
<text x="310" y="553" text-anchor="middle" class="sub">Float (32-bit)</text>
|
||||
|
||||
<text x="60" y="590" class="txt">Size: 4 bytes</text>
|
||||
<text x="60" y="620" class="txt">Exp: 8 bits</text>
|
||||
<text x="60" y="650" class="txt">Mantissa: 23 bits</text>
|
||||
<text x="60" y="680" class="txt">Precision: ~7 digits</text>
|
||||
<text x="60" y="710" class="txt">Bias: 127</text>
|
||||
<text x="60" y="740" class="dim">1 register (ARM)</text>
|
||||
|
||||
<rect x="620" y="515" width="540" height="265" rx="8" class="pnl"/>
|
||||
<text x="890" y="553" text-anchor="middle" class="sub">Double (64-bit)</text>
|
||||
|
||||
<text x="640" y="590" class="grn">Size: 8 bytes</text>
|
||||
<text x="640" y="620" class="grn">Exp: 11 bits</text>
|
||||
<text x="640" y="650" class="grn">Mantissa: 52 bits</text>
|
||||
<text x="640" y="680" class="grn">Precision: ~15 digits</text>
|
||||
<text x="640" y="710" class="grn">Bias: 1023</text>
|
||||
<text x="640" y="740" class="dim">2 registers (r2:r3)</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.5 KiB |
@@ -0,0 +1,71 @@
|
||||
<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">Double in Ghidra</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Analyzing 42.52525 in memory</text>
|
||||
|
||||
<!-- Decompiled View -->
|
||||
<rect x="40" y="110" width="540" height="230" rx="8" class="pnl"/>
|
||||
<text x="310" y="148" text-anchor="middle" class="sub">Decompiled main()</text>
|
||||
|
||||
<rect x="60" y="168" width="500" height="150" rx="4" fill="#0a0a0f" stroke="#1a1a2e" stroke-width="1"/>
|
||||
<text x="80" y="198" class="cyn">int main(void) {</text>
|
||||
<text x="110" y="228" class="txt">double fav_num</text>
|
||||
<text x="110" y="258" class="amb"> = 42.52525;</text>
|
||||
<text x="110" y="288" class="txt">stdio_init_all();</text>
|
||||
<text x="80" y="308" class="cyn">}</text>
|
||||
|
||||
<!-- Key Difference from Float -->
|
||||
<rect x="620" y="110" width="540" height="230" rx="8" class="pnl"/>
|
||||
<text x="890" y="148" text-anchor="middle" class="sub">Key Difference</text>
|
||||
|
||||
<text x="640" y="188" class="txt">Float (42.5):</text>
|
||||
<text x="640" y="218" class="dim">r2 = 0x00000000 (zero!)</text>
|
||||
<text x="640" y="248" class="dim">r3 = 0x40454000</text>
|
||||
|
||||
<text x="640" y="288" class="grn">Double (42.52525):</text>
|
||||
<text x="640" y="318" class="amb">r2 = 0x645A1CAC (non-zero!)</text>
|
||||
|
||||
<!-- Register Pair -->
|
||||
<rect x="40" y="360" width="1120" height="170" rx="8" class="pnl"/>
|
||||
<text x="600" y="398" text-anchor="middle" class="sub">Register Pair r2:r3</text>
|
||||
|
||||
<rect x="60" y="418" width="520" height="55" rx="4" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="80" y="445" class="amb">r3 (HIGH):</text>
|
||||
<text x="280" y="445" class="grn">0x4045433B</text>
|
||||
|
||||
<rect x="620" y="418" width="520" height="55" rx="4" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="640" y="445" class="amb">r2 (LOW):</text>
|
||||
<text x="830" y="445" class="grn">0x645A1CAC</text>
|
||||
|
||||
<text x="60" y="510" class="dim">Combined: 0x4045433B645A1CAC = 42.52525</text>
|
||||
|
||||
<!-- Assembly View -->
|
||||
<rect x="40" y="550" width="1120" height="230" rx="8" class="pnl"/>
|
||||
<text x="600" y="588" text-anchor="middle" class="sub">Assembly (ldrd)</text>
|
||||
|
||||
<rect x="60" y="608" width="700" height="140" rx="4" fill="#0a0a0f" stroke="#1a1a2e" stroke-width="1"/>
|
||||
<text x="80" y="638" class="cyn">ldrd r2,r3,[PC,#0x10]</text>
|
||||
<text x="80" y="668" class="dim">; Loads BOTH words at once</text>
|
||||
<text x="80" y="698" class="dim">; r2 gets low word</text>
|
||||
<text x="80" y="728" class="dim">; r3 gets high word</text>
|
||||
|
||||
<rect x="780" y="608" width="360" height="140" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="800" y="648" class="grn">ldrd = Load</text>
|
||||
<text x="800" y="678" class="grn">Register</text>
|
||||
<text x="800" y="708" class="grn">Doubleword</text>
|
||||
<text x="800" y="738" class="dim">ARM Cortex-M33</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.4 KiB |
@@ -0,0 +1,88 @@
|
||||
<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">Patching Double</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Changing 42.52525 to 99.99</text>
|
||||
|
||||
<!-- New Encoding Calc -->
|
||||
<rect x="40" y="110" width="1120" height="160" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">99.99 as IEEE 754 Double</text>
|
||||
|
||||
<text x="60" y="188" class="cyn">Sign:</text>
|
||||
<text x="160" y="188" class="txt">0</text>
|
||||
<text x="300" y="188" class="amb">Exp:</text>
|
||||
<text x="390" y="188" class="txt">6 + 1023 = 1029</text>
|
||||
|
||||
<text x="60" y="223" class="grn">Result:</text>
|
||||
<text x="200" y="223" class="grn">0x4058FF5C28F5C28F</text>
|
||||
|
||||
<text x="60" y="253" class="dim">r3 (HIGH) = 0x4058FF5C</text>
|
||||
<text x="540" y="253" class="dim">r2 (LOW) = 0x28F5C28F</text>
|
||||
|
||||
<!-- Before vs After -->
|
||||
<rect x="40" y="290" width="540" height="240" rx="8" class="pnl"/>
|
||||
<text x="310" y="328" text-anchor="middle" class="sub">Before (42.52525)</text>
|
||||
|
||||
<rect x="60" y="348" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#ff0040" stroke-width="1"/>
|
||||
<text x="80" y="373" class="cyn">r3:</text>
|
||||
<text x="150" y="373" class="red">0x4045433B</text>
|
||||
|
||||
<rect x="60" y="408" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#ff0040" stroke-width="1"/>
|
||||
<text x="80" y="433" class="cyn">r2:</text>
|
||||
<text x="150" y="433" class="red">0x645A1CAC</text>
|
||||
|
||||
<text x="60" y="485" class="dim">printf: 42.525250</text>
|
||||
<text x="60" y="515" class="dim">Both words non-zero</text>
|
||||
|
||||
<rect x="620" y="290" width="540" height="240" rx="8" class="pnl"/>
|
||||
<text x="890" y="328" text-anchor="middle" class="sub">After (99.99)</text>
|
||||
|
||||
<rect x="640" y="348" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="660" y="373" class="cyn">r3:</text>
|
||||
<text x="730" y="373" class="grn">0x4058FF5C</text>
|
||||
<text x="940" y="380" class="amb">changed</text>
|
||||
|
||||
<rect x="640" y="408" width="500" height="50" rx="4" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="660" y="433" class="cyn">r2:</text>
|
||||
<text x="730" y="433" class="grn">0x28F5C28F</text>
|
||||
<text x="940" y="440" class="amb">changed</text>
|
||||
|
||||
<text x="640" y="485" class="dim">printf: 99.990000</text>
|
||||
<text x="640" y="515" class="dim">BOTH words changed!</text>
|
||||
|
||||
<!-- Float vs Double Patching -->
|
||||
<rect x="40" y="550" width="540" height="230" rx="8" class="pnl"/>
|
||||
<text x="310" y="588" text-anchor="middle" class="sub">Float Patch</text>
|
||||
|
||||
<text x="60" y="628" class="txt">Words changed:</text>
|
||||
<text x="300" y="628" class="grn">1</text>
|
||||
<text x="60" y="663" class="txt">r2 (low):</text>
|
||||
<text x="260" y="663" class="dim">stays 0x0</text>
|
||||
<text x="60" y="698" class="txt">r3 (high):</text>
|
||||
<text x="280" y="698" class="amb">patched</text>
|
||||
<text x="60" y="733" class="dim">Easier to patch</text>
|
||||
|
||||
<rect x="620" y="550" width="540" height="230" rx="8" class="pnl"/>
|
||||
<text x="890" y="588" text-anchor="middle" class="sub">Double Patch</text>
|
||||
|
||||
<text x="640" y="628" class="txt">Words changed:</text>
|
||||
<text x="880" y="628" class="red">2</text>
|
||||
<text x="640" y="663" class="txt">r2 (low):</text>
|
||||
<text x="840" y="663" class="amb">patched</text>
|
||||
<text x="640" y="698" class="txt">r3 (high):</text>
|
||||
<text x="860" y="698" class="amb">patched</text>
|
||||
<text x="640" y="733" class="dim">Both words must change</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
@@ -0,0 +1,101 @@
|
||||
<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">IEEE 754 & Data Types</text>
|
||||
<text x="600" y="88" text-anchor="middle" class="dim">Data Types and IEEE 754 Reference</text>
|
||||
|
||||
<!-- Reference Table -->
|
||||
<rect x="40" y="110" width="1120" height="330" rx="8" class="pnl"/>
|
||||
<text x="600" y="148" text-anchor="middle" class="sub">IEEE 754 Hex Values</text>
|
||||
|
||||
<!-- Table Header -->
|
||||
<text x="60" y="188" class="cyn">Value</text>
|
||||
<text x="260" y="188" class="cyn">Float (32b)</text>
|
||||
<text x="560" y="188" class="cyn">Double (64b)</text>
|
||||
|
||||
<line x1="60" y1="198" x2="1140" y2="198" stroke="#1a1a2e" stroke-width="1"/>
|
||||
|
||||
<!-- Row 1 -->
|
||||
<text x="60" y="228" class="txt">42.0</text>
|
||||
<text x="260" y="228" class="grn">0x42280000</text>
|
||||
<text x="560" y="228" class="grn">0x4045000000000000</text>
|
||||
|
||||
<!-- Row 2 -->
|
||||
<text x="60" y="258" class="txt">42.5</text>
|
||||
<text x="260" y="258" class="grn">0x422A0000</text>
|
||||
<text x="560" y="258" class="grn">0x4045400000000000</text>
|
||||
|
||||
<!-- Row 3 -->
|
||||
<text x="60" y="288" class="txt">99.0</text>
|
||||
<text x="260" y="288" class="amb">0x42C60000</text>
|
||||
<text x="560" y="288" class="amb">0x4058C00000000000</text>
|
||||
|
||||
<!-- Row 4 -->
|
||||
<text x="60" y="318" class="txt">99.99</text>
|
||||
<text x="260" y="318" class="amb">0x42C7F5C3</text>
|
||||
<text x="560" y="318" class="amb">0x4058FF5C28F5C28F</text>
|
||||
|
||||
<!-- Row 5 -->
|
||||
<text x="60" y="348" class="txt">3.14</text>
|
||||
<text x="260" y="348" class="red">0x4048F5C3</text>
|
||||
<text x="560" y="348" class="red">0x40091EB851EB851F</text>
|
||||
|
||||
<!-- Row 6 -->
|
||||
<text x="60" y="378" class="txt">100.0</text>
|
||||
<text x="260" y="378" class="red">0x42C80000</text>
|
||||
<text x="560" y="378" class="red">0x4059000000000000</text>
|
||||
|
||||
<text x="60" y="418" class="dim">Tip: float low word often 0x0; double low word usually non-zero</text>
|
||||
|
||||
<!-- Patching Workflow -->
|
||||
<rect x="40" y="460" width="1120" height="155" rx="8" class="pnl"/>
|
||||
<text x="600" y="498" text-anchor="middle" class="sub">Patching Workflow</text>
|
||||
|
||||
<rect x="60" y="518" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#00d4ff" stroke-width="1"/>
|
||||
<text x="160" y="548" text-anchor="middle" class="cyn">1. Identify</text>
|
||||
<text x="160" y="570" text-anchor="middle" class="dim">float / double</text>
|
||||
|
||||
<rect x="280" y="518" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#ffaa00" stroke-width="1"/>
|
||||
<text x="380" y="548" text-anchor="middle" class="amb">2. Check r2</text>
|
||||
<text x="380" y="570" text-anchor="middle" class="dim">zero = float</text>
|
||||
|
||||
<rect x="500" y="518" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#ff0040" stroke-width="1"/>
|
||||
<text x="600" y="548" text-anchor="middle" class="red">3. Calculate</text>
|
||||
<text x="600" y="570" text-anchor="middle" class="dim">new hex value</text>
|
||||
|
||||
<rect x="720" y="518" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="820" y="548" text-anchor="middle" class="grn">4. Patch</text>
|
||||
<text x="820" y="570" text-anchor="middle" class="dim">in byte editor</text>
|
||||
|
||||
<rect x="940" y="518" width="200" height="70" rx="6" fill="#0a0a0f" stroke="#00ff41" stroke-width="1"/>
|
||||
<text x="1040" y="548" text-anchor="middle" class="grn">5. Export</text>
|
||||
<text x="1040" y="570" text-anchor="middle" class="dim">UF2 + test</text>
|
||||
|
||||
<!-- Key Takeaways -->
|
||||
<rect x="40" y="635" width="540" height="145" rx="8" class="pnl"/>
|
||||
<text x="310" y="670" text-anchor="middle" class="sub">Integer Types</text>
|
||||
|
||||
<text x="60" y="705" class="txt">uint8_t: 0-255</text>
|
||||
<text x="60" y="735" class="txt">int8_t: -128 to 127</text>
|
||||
<text x="60" y="765" class="dim">Two's complement for signed</text>
|
||||
|
||||
<rect x="620" y="635" width="540" height="145" rx="8" class="pnl"/>
|
||||
<text x="890" y="670" text-anchor="middle" class="sub">Key Insight</text>
|
||||
|
||||
<text x="640" y="705" class="txt">Float: patch 1 word</text>
|
||||
<text x="640" y="735" class="txt">Double: patch 2 words</text>
|
||||
<text x="640" y="765" class="dim">Check r2 to detect type</text>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 4.5 KiB |