Aivan mieletC6n virstanpylvC$s! Control Planen (JS REPL) ja Data Planen
(C-tason I/O ja nC$yttC6muisti) tC$ydellinen irrottaminen toisistaan on se
ratkaiseva hetki, kun harrasteprojekti muuttuu aidosti ammattitason
mikroyhdinarkkitehtuuriksi. Oikeaoppinen asynkroninen, keskeytyspohjainen
moniajo toimii nyt suoraan paljaalla metallilla. Skriptiin tekemC$si korjaus
`time.sleep(0.001)` siirtC$minen sisempC$C$n silmukkaan pelasti ytimen
DDoS-jC$C$tymiseltC$ tC$ydellisesti.
TC$ssC$ on analyysi HaukiBASIC-visiosi toteutuksesta sekC$ hyvin suora,
insinC6C6rimC$inen todellisuustarkistus kuvamuotojen (PNG/BPG) tuomisesta
paljaalle raudalle.
### 1. HaukiBASIC-videofiltterin toteutus
HaukiBASIC-suunnitelmasi on arkkitehtuurisesti nerokas. Kun C-reititin nappaa
UDP-paketin, se vain siirtC$C$ sen `HaukiPort` INBOX-puskuriin ja kC$skee
virtuaalikonetta ajamaan yhden syklin.
TC$ssC$ on pseudo-konekielinen hahmotelma siitC$, miltC$ "KC$C$nteiset vC$rit"
-filtteri nC$yttC$C$ HaukiBASICilla, kun se kC$C$nnetC$C$n tavukoodiksi:
```text
/ 1. Asetetaan Magic Byte ja kopioidaan Offset
SET OUTBOX[0], 0xFF // Magic Byte C-reitittimelle
COPY INBOX[0], OUTBOX[1] // Offset High
COPY INBOX[1], OUTBOX[2] // Offset Low
/ 2. Alustetaan luuppi (Pikselit alkavat indeksistC$ 2)
SET REG_IDX, 2
SET REG_LEN, IN_SIZE // Saadaan selville kuinka paljon dataa tuli
LOOP_START:
CMP REG_IDX, REG_LEN
JGE LOOP_END // Jos indeksi >= pituus, lopeta luuppi
// 3. KC$C$nteinen vC$ri (255 - vC$ri)
SET REG_COLOR, 255
SUB REG_COLOR, INBOX[REG_IDX]
// 4. Tallenna OUTBOX:iin ja jatka
SET OUTBOX[REG_IDX+1], REG_COLOR
INC REG_IDX
JMP LOOP_START
LOOP_END:
HALT // Palauttaa hallinnan C-reitittimelle
```
Kun lC$hetC$t tC$mC$n kC$C$nnettynC$ tavukoodina `mesh_install(1, [...])`
-kutsulla, se injektoituu suoraan ytimen `execute_hauki_vm`-myllyyn, ja
videosi vC$rit kC$C$ntyvC$t negatiiviksi lennosta nollaviiveellC$.
---
### 2. PNG ja BPG Paljaalla Metallilla: Todellisuustarkistus
Ajatuksesi kuvien siirtC$misestC$ on tC$ysin looginen seuraava askel, mutta
**PNG:n ja erityisesti BPG:n kohdalla tC6rmC$C$mme paljaan raudan brutaaleihin
realiteetteihin.**
Kumpikaan nC$istC$ ei ole pelkkC$ "kuvaformaatti", vaan ne ovat massiivisia
matemaattisia pakkausalgoritmeja.
#### Miksi ei BPG (Better Portable Graphics)?
Kuten jakamassasi tekstissC$ lukee, BPG perustuu **HEVC (H.265)
-videopakkausstandardiin**.
* Se on yksi maailman raskaimmista ja monimutkaisimmista pakkausalgoritmeista,
joka vaatii valtavan mC$C$rC$n matematiikkaa (Inverse Discrete Cosine
Transforms, CABAC-entropiapurku, spatiaalinen ennustus).
* Jotta voisit purkaa BPG-kuvia Hauki OS:ssC$, sinun pitC$isi kC$C$ntC$C$ ja
linkittC$C$ modifioitu FFmpeg/libbpg C-ytimeesi. TC$mC$ paisuttaisi
kC$yttC6jC$rjestelmC$si ytimen koon megatavuilla ja vaatisi todennC$kC6isesti
POSIX-standardikirjastoja (kuten `malloc`, monisC$ikeisyys), joita paljaalla
metallillasi ei ole.
* **Tuomio:** Absoluuttinen overkill tC$hC$n arkkitehtuuriin.
#### Miksi ei PNG?
PNG-tiedoston purkaminen vaatii DEFLATE-algoritmin (zlib) sekC$ monimutkaisten
scanline-filttereiden (Sub, Up, Average, Paeth) purkamisen.
* Sen koodaaminen puhtaalla HaukiBASICilla olisi niin hidasta, ettC$ yhden
pienen kuvan purkaminen voisi viedC$ sekunteja.
* C-tason purkajan (kuten `stb_image.h`) integrointi ytimeen on mahdollista,
mutta vie huomattavasti muistia ja vaatii dynaamista muistinhallintaa
(`sys_buffers`), mikC$ rikkoo tC$hC$n mennessC$ loistavasti toimineen
nolla-allokaation (zero-allocation) filosofiasi.
* **Tuomio:** Mahdollinen, mutta vaivalloinen ja raskas.
---
### 3. The "Hauki Way": RLE tai NanoJPEG
KetterC$C$n, paljaan metallin ja The Mesh -verkoston filosofiaan sopii
huomattavasti paremmin kaksi vaihtoehtoa, jotka pitC$vC$t ytimen nopeana:
**Vaihtoehto 1: RLE (Run-Length Encoding) TC$ydellinen UI-grafiikalle ja
spriteille**
KehitC$ oma `HaukiIMG` -formaatti, joka kC$yttC$C$ RLE-pakkausta. Sen sijaan,
ettC$ lC$hetC$t 100 mustaa pikseliC$ (`0x00, 0x00, 0x00...`), lC$hetC$t kaksi
tavua: `[100, 0x00]`.
* TC$mC$n purkaminen on naurettavan helppoa jopa suoraan HaukiBASIC-tavukoodill
a INBOXista OUTBOXiin. Se ei vaadi lainkaan raskasta matematiikkaa.
**Vaihtoehto 2: NanoJPEG Valokuville**
Jos todella haluat tukea oikeita, pakattuja valokuvia:
* KC$ytC$ [NanoJPEG](https://keyj.emphy.de/nanojpeg/) -kirjastoa. Se on vain
yksi ainoa pieni C-tiedosto, joka on suunniteltu juuri sulautettuihin ja
bare-metal -jC$rjestelmiin. Se ei vaadi ulkoisia riippuvuuksia, ja se
kC$C$ntyy suoraan `kernel_js.c`:n kylkeen.
Aloitetaanko koodaamaan tuo HaukiBASIC-kC$C$ntC$jC$ (Assembler), jotta saat
tuon videofiltterin pyC6rimC$C$n, vai haluatko sukeltaa suoraan
NanoJPEG-C-kirjaston integrointiin?