diff options
Diffstat (limited to '_site/log/matrix-digital-rain/index.html')
| -rw-r--r-- | _site/log/matrix-digital-rain/index.html | 50 |
1 files changed, 35 insertions, 15 deletions
diff --git a/_site/log/matrix-digital-rain/index.html b/_site/log/matrix-digital-rain/index.html index 3d393cd..f254ed2 100644 --- a/_site/log/matrix-digital-rain/index.html +++ b/_site/log/matrix-digital-rain/index.html @@ -44,32 +44,52 @@ <h2 class="center" id="title">MATRIX RAIN: 2025 REFACTOR</h2> <h6 class="center">21 DECEMBER 2025</h5> <br> - <div class="twocol justify"><p>Fixed the Unicode issue finally. Can now mix ASCII + Katakana.</p> + <div class="twocol justify"><p>The 2022 version worked but had some loose ends. Unicode support was +inflexible–couldn’t mix ASCII with Katakana; Phosphor decay was stored in a +separate array when it should’ve been packed with RGB; Code was harder to read +than it needed to be.</p> <video style="max-width:100%;" controls="" poster="poster.png"> <source src="matrix.mp4" type="video/mp4" /> </video> -<p>Moved Phosphor decay level into the 4th byte of the RGB union - should’ve done -this in 2022 instead of separate array. What was I thinking.</p> +<p>Moved phosphor decay into the 4th byte of the RGB union–should’ve done this +in 2022. What was I thinking.</p> -<p>Keeping the RGB/PD union as it is. I’m aware of the portability issues, but I’m -on a little-endian machine, and I’m the only one reading this anyway. It’s -cleaner.</p> +<p>Keeping the RGB union despite portability concerns. All my systems are +little-endian and the code is cleaner this way.</p> -<p>New charset array works. UNICODE(min, max) macro packs the range into uint64. -insert_code() unpacks block and picks random char.</p> +<p>Fixed Unicode by introducing a charset array. UNICODE(min, max) packs Unicode +ranges into uint64–low four bytes for start, high four bytes for end. +insert_code() unpacks a random block and picks a character from it:</p> -<p>Full-width Katakana breaks columns. Stick to half-width (U+FF61-U+FF9F) range . -Compile with -DNOKANA to disable Katakana altogether.</p> +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static uint64_t glyphs[] = { + UNICODE(0x0021, 0x007E), /* ASCII */ + UNICODE(0xFF65, 0xFF9F), /* Half-width Katakana */ +}; +</code></pre></div></div> -<p>blend() is still good, left it alone.</p> +<p>Full-width Katakana breaks column alignment. Stick to half-width +(U+FF61-U+FF9F) range. Compile with -DNOKANA to disable Katakana altogether.</p> -<p>Tossed license and automake cruft. Just <code class="language-plaintext highlighter-rouge">cc -O3 main.c -o matrix</code>. Don’t need -the ceremony.</p> +<p>blend() simulates phosphor decay by eroding RGB channels toward +background color:</p> -<p>Performance regressions: none. Runs like a charm on the T490. 2% CPU. No -whirring fans.</p> +<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>static inline void blend(matrix *mat, size_t row, size_t col) +{ + unsigned char *color = mat->rgb[index(mat, row, col)].color; + color[R] = color[R] - (color[R] - RGB_BG_RED) / DECAY_MPLIER; + color[G] = color[G] - (color[G] - RGB_BG_GRN) / DECAY_MPLIER; + color[B] = color[B] - (color[B] - RGB_BG_BLU) / DECAY_MPLIER; +} +</code></pre></div></div> + +<p>That’s still good. Leaving it alone.</p> + +<p>Tossed license and automake cruft. Just <code class="language-plaintext highlighter-rouge">cc -O3 main.c -o matrix</code> now. Don’t +need the ceremony.</p> + +<p>Runs at 2-3% CPU on OpenBSD (T490). No regressions. Fans are quiet.</p> <p>Commit: <a href="https://git.asciimx.com/matrix-digital-rain/commit/?id=03f8d87ba7c2e46bd3f3cc4c772fb3a2ac740c92">03f8d87</a></p> |
