Hahahaha! Olet juuri joutunut ihmisaivojen klassisimman optisen harhan uhriksi. **Vikaa ei ole olet juuri todistanut, ettC$ koodi ja arkkitehtuuri toimivat matemaattisen tC$ydellisesti!** Katsohan tuota liittC$mC$C$si IRC-lokia hieman tarkemmin ja yhdistetC$C$n se piirtC$mC$C$si tC$htikuvioon (nC$ytC6n leveys on 22 merkkiC$, joten alaspC$in liikkuminen on aina `+22` muistiosoitteessa). Aloitusosoite (X=10, Y=10) on `10 * 22 + 10 = 230` -> MZONE-osoite on **40230**. Nyt katsotaan IRC-lokejasi: * `40231` -> X liikkui oikealle (+1) * `40253` -> Y liikkui alas (+22) * `40275` -> Y liikkui alas (+22) * `40276` -> X liikkui oikealle (+1) * `40277` -> X liikkui oikealle (+1) * `40299` -> Y liikkui alas (+22) * `40321` -> Y liikkui alas (+22) * `40343` -> Y liikkui alas (+22) TC$mC$ liikerata on **sataprosenttisesti identtinen** kopioimasi tC$htikuvion kanssa! (Oikealle, alas, alas, oikealle, oikealle, alas, alas, alas). Arkkitehtuurimme ja Delta-pC$ivitykset (VGASYN) toimivat tC$ysin virheettC6mC$sti. MeillC$ ei ole enC$C$ verkkotulvaa, vaan KeskusyksikkC6 laskee sijainnin ja huutaa UDP/IRC-verkkoon **vain** silloin, kun jokin pikseli oikeasti syttyy! **Miksi tC$hti jC$ttC$C$ vanan (Etch-A-Sketch)?** Koska x-mesh-basic -ohjelmamme ei kC$ske pyyhkimC$C$n vanhaa sijaintia (kirjoittamaan ASCII 32 -vC$lilyC6ntiC$) ennen liikkumista. **Miksi keltainen vC$ri ei nC$y terminaalissa?** TC$mC$ on Unix-pC$C$tteiden ominaisuus. Standardi ANSI-vC$ri `33` on nimeltC$C$n "Yellow", mutta todellisuudessa se nC$yttC$C$ usein hyvin tummalta okralta tai ruskealta, eikC$ erotu lainkaan sinisestC$ taustasta (ANSI `44`). Vaihdetaan vC$ripaletti "High-Intensity" -sC$vyihin (esim. kirkas keltainen on `93`). Silloin se loistaa kuin oikeassa 80-luvun CRT-putkessa! ### 1. Korjataan vC$rit ja pC$ivitetC$C$n liikkuva kursori Aja tC$mC$ yhden rivin korjaus muuttaaksesi pC$C$tteesi vC$rit hehkuvan kirkkaiksi: ```bash sed -i 's/\[30, 37, 31, 36, 35, 32, 34, 33\]/\[90, 97, 91, 96, 95, 92, 94, 93\]/' /mnt/mesh_root/bin/vic20_term.js ``` PC$ivitetC$C$n sitten BASIC-ohjelma pyyhkimC$C$n jC$lkensC$: ```bash cat << 'EOF' > /tmp/mesh_draw.bas 10 REM === THE DARK MESH: MOVING CURSOR === 20 POKE 36879, 6 30 LET X = 10 40 LET Y = 10 50 LET CHAR = 42 100 LET K = PEEK(197) 110 IF K == 0 THEN GOTO 250 115 REM Pyyhi vanha koordinaatti valilyonnilla (ASCII 32) 116 LET OLD_OFFSET = (Y * 22) + X 117 POKE 40000 + OLD_OFFSET, 32 120 REM WASD liikkuminen (Tukee isoja ja pienia kirjaimia) 130 IF K == 119 THEN LET Y = Y - 1 135 IF K == 87 THEN LET Y = Y - 1 140 IF K == 115 THEN LET Y = Y + 1 145 IF K == 83 THEN LET Y = Y + 1 150 IF K == 97 THEN LET X = X - 1 155 IF K == 65 THEN LET X = X - 1 160 IF K == 100 THEN LET X = X + 1 165 IF K == 68 THEN LET X = X + 1 170 IF X < 0 THEN LET X = 0 180 IF X > 21 THEN LET X = 21 190 IF Y < 0 THEN LET Y = 0 200 IF Y > 22 THEN LET Y = 22 210 LET OFFSET = (Y * 22) + X 220 POKE 40000 + OFFSET, CHAR 230 REM Laitteistokiihdytetty HW-tason kopiointi MZONE -> VGA 240 VGASYN 250 SLEEP 0.05 260 GOTO 100 EOF ``` --- ### 2. Seuraava Askel: Selain "TyhmC$nC$ PC$C$tteenC$" (Zero-Surface Web UI) Koska moottorimme ja verkon synkronointi on nyt todistettu virheettC6mC$ksi, unohdetaan mustavalkoiset terminaalit ja viedC$C$n tC$mC$ web-selaimeen aivan kuten visioit! Web-selaimet eivC$t tietoturvasyistC$ osaa avata raakaa TCP-yhteyttC$ porttiin 6667, joten teemme Haukelle kevyen "KC$C$ntC6portin" (Gateway). KC$ytC$mme yksisuuntaista **Server-Sent Events (SSE)** -teknologiaa, jotta emme tarvitse raskaita ulkoisia web-frameworkkejC$. Se tekee kaksi asiaa: 1. **Kuuntelee IRC:tC$:** Kun `#mzone` -kanavalle tulee muistipC$ivitys, se striimaa sen SSE-putkea pitkin reaaliajassa selaimeen. 2. **Kuuntelee alC)mista:** Kun selaimessa painetaan nC$ppC$intC$, selain tekee HTTP POST -pyynnC6n, jonka Gateway muuttaa vC$littC6mC$sti IRC-viestiksi (Esim. `MZONE:197:100`). Aja tC$mC$ loitsu Haukessa. Se avaa kC$C$ntC6portin (porttiin 8080), joka siltaa IRC:n ja HTML5:n: ``` ### 3. Luodaan Selain-UI (Staattinen HTML) TC$mC$ on se uskomattomin osuus. HTML-tiedostossa **ei ole mitC$C$n pelilogiikkaa tai x-mesh-basic moottoria**. Se on kirjaimellisesti vain yksi 64K Array-taulukko, joka renderC6idC$C$n DOM-elementtiin ja pC$ivittyy taikaiskusta Gatewayn striimin mukaan. Kopioi tC$mC$ koodi ja **tallenna se omalle Windows/Mac/Linux-tyC6koneellesi** nimellC$ `web_term.html` (voit avata sen suoraan tyC6pC6ydC$ltC$ selaimessa!). *Huom! Vaihda `GATEWAY_IP` Hauen oikeaksi IP-osoitteeksi, jos et kC$ytC$ SSH-tunnelointia portille 8080.* ``` ### 4. Kokeile Uutta Verkkoselainta! Varmista ensin, ettC$ olet sulkenut aiemmat testit (ncurses-terminaalit yms). **Terminaali 1 Haukessa (KC$C$ntC6portti):** ```bash ``` **Terminaali 2 Haukessa (Aivot / Moottori):** ```bash x-mesh-basic --irc-nick mesh_cpu1 /tmp/mesh_draw.bas ```