diff --git a/emulator/firmware-decomp/render-readout.html b/emulator/firmware-decomp/render-readout.html index a440546..b372c9b 100644 --- a/emulator/firmware-decomp/render-readout.html +++ b/emulator/firmware-decomp/render-readout.html @@ -228,35 +228,38 @@

02 The output, decoded

The firmware DMAs the render to the card as an opcode stream - (DMAENGN.H). Left: a real per-region command list captured - from the emulator. Right: where each SEND lands — bit-serial IGC micro-code, not - plain floats, which is why final pixels need the array simulator.

+ (DMAENGN.H). Both panels below are captured verbatim from the + emulator. Left: a real per-region command list — every region references the same + tile-relative payloads and differs only in its TILE id and the + GOTO link. Right: inside a SEND — the payload isn't opaque, it + interleaves control words with the actual float coefficients, swept bit-plane by + bit-plane into pixel memory.

-  region 0x0801f000 · DMA list
+  region 0x0801fa40 · DMA list
# addr            opcode
-0x08015800  SEND(4)      ; edge coeffs
+0x08015000  SEND(4)      ; edge coeffs
 0x00000000  FLUSH
-0x08015820  SENDE(0x35)  ; z / colour
-0x080159e0  SEND(0x18)
-0x08015aa0  SEND(6)
+0x08015020  SENDE(0x45)  ; z / colour
 0x00000000  FLUSH
-0x08015ae0  SENDE(0x5c)
-0x08015dc0  SEND(9)      ; …binned per 64×128 tile
+0x08014100 TXDN +0x08015260 SEND(0x21) +0x08015380 SEND(0x29) +0x00000020 TILE ; tile id +0x0801f008 GOTO ; → next region
-  SEND target 0x0801f100 · IGC micro-code
-
# bit-serial Pixel-Planes program
+           SENDE target 0x08015020 · payload
+
# bit-serial sweep (MEMpluseqMEM)
 +000  00000100   ; header
-+008  46800000   ; 16384.0 scale
-+01c  0610ff00  00401000
-+024  0610ff08  00401081
-+02c  0610ff10  00401102
-+034  0610ff18  00401183
-      ; MEM += MEM, bit-serial
-      ; eval Ax+By+C across the tile
++004 3a804834 ; = 9.79e-4 float ++008 8401213a ++00c 00000021 ; bit-plane 0x21 ++010 ba01253a ; = −4.93e-4 += A ++018 8381213a ++01c 00000022 ; bit-plane 0x22 …
@@ -331,10 +334,13 @@ -

What this is not, yet: a decode of the compiled - bit-serial micro-code the DMA actually ships (§02, right). That binary encoding is still - undecoded, and it is how the ground and sky — which carry no stored vertices — reach the array. - This is the array's computational model: the pixels that micro-code would produce.

+

What this is not, yet: execution of the compiled + micro-code the DMA actually ships (§02, right) — the form the ground and sky take, since + they carry no stored vertices. That stream is now partly decoded: the per-region command lists + read cleanly, and the SEND payloads turn out to carry the real float coefficients + interleaved with a regular bit-serial sweep — so what remains is pinning the control-word fields + and running that sweep, not reversing an opaque binary. This section is the array's + computational model: the pixels that micro-code produces.

@@ -369,10 +375,10 @@

The last mile to pixels