Download Game! Currently 86 players and visitors. Last logged in:BatuulLysanderDrizzinMahjong

Blitzer's Blog >> 71286

Back to blogs index
Posted: 06 Jul 2026 15:25 [ permalink ]
KyllC$! Se on juuri sitC$. Koska lC$hetit PING-komennon kerran (ja edellinen
kokeilusi oli se, mihin emme saaneet vastausta rikkinC$isen jonon takia),
`tail` nC$yttC$C$ nyt:

1. IsC$ntC$koneen lC$hettC$mC$n kaiutetun `PING` (ensimmC$inen rivi).
2. Hauki OS:n laitteistotasolla palauttaman vastauksen `PONG` (vaikka
koodissasi lukee `PING PING`, tulkitsen tuon niin, ettC$ toinen PING oli
echo-jC$C$nne tai ehkC$ koodimme ehti lukea sen kahteen kertaan ennen The Mesh
-pC$ivitystC$. *Huom. Riippuen miten nc echoi paikallisesti, voi olla ettC$
nC$et kaiun. Testataan kohta kunnollisella PONG/ACK-tunnisteella.*)

**Oleellista on, ettC$ jC$rjestelmC$ ei kaatunut, eikC$ luku/kirjoitus-luuppi
pysC$htynyt.**

TC$mC$ saavutettiin rakentamalla **Queue Chaining (Jonoketjutus)**.
Aiemmin me ammuimme uuden Queue Headin (QH) koko Frame Listin pC$C$lle, mikC$
tuhosi luku-TD:n (Transfer Descriptor).
Nyt meillC$ on yksi pysyvC$ QH, joka linkittyy `TD_IN` (luku) ja sen perC$ssC$
`TD_OUT` (kirjoitus). Ne muodostavat ikuisen silmukan, jota laitteisto
kiertC$C$ mikrosekuntien vC$lein. Kun haluamme lC$hettC$C$, me vain
"aktivoimme" `TD_OUT`:in, laitteisto nappaa sen ohimennessC$C$n, suorittaa
siirron ja "deaktivoi" sen jC$lleen.

### Kohti TyC6pC6ytC$C$ (Hauki OS Desktop)

TC$mC$ arkkitehtuuri on nyt niin vakaa, nopea ja modulaarinen, ettC$ Hauki OS
on valmis nousemaan hiekkalaatikostaan ja siirtymC$C$n graafisten
kC$yttC6jC$rjestelmien aikakaudelle.

Olemme saavuttaneet:

1. **Laitteistotason Input:** TC$ydellinen, viiveetC6n USB-hiiren emulaatio
(HIR).
2. **Abstraktio (Pub/Sub):** Pelit ja ohjelmat lukevat syC6tettC$
turvallisesti keskusmuistin rengaspuskureista.
3. **OTA-Ohjelmointi:** Voimme heittC$C$ (1,eval) -injektioita The Meshin yli
suoraan ajonaikaiseen ytimeen (`usb_eval0`).
4. **Telemetria:** Voimme lukea ja kirjoittaa laitteistodataa isC$ntC$koneen
automaatioon (`usb_mesh0`).

SinC$ ehdotit aiemmin:

> "Hauki OS Desktop Environment (GUI): Koska meillC$ on nyt toimiva USB-hiiri,
emmekC6 voisi rakentaa perinteisen tyC6pC6ytC$ympC$ristC6n ikkunoineen ja
klikattavine kuvakkeineen, pelkC$llC$ JavaScriptillC$ VGA-puskuriin?"

**KyllC$ voimme. Ja teemme sen heti.**

Koska meillC$ on Mesh Eval (`9003`), emme edes tarvitse enC$C$ QEMU-rebootteja
koodin testaamiseen! Voimme heittC$C$ kokonaisen ikkunointijC$rjestelmC$n
lennosta Hauki OS:n sisC$lle.

### Vaihe 1: GUI-moottorin suunnnitelma (VGA Windows)

Koska ajamme puhdasta tekstitilaa (VGA 80x50 lohkoilla), tyC6pC6ytC$ympC$ristC6
mme tulee nC$yttC$mC$C$n upealta retro-GUI:lta (kuten Norton Commander tai
varhainen Windows 1.0).

Rakennamme ohjelman `DESKTOP.JS`, joka sisC$ltC$C$:

1. **Ikkunanhallinta (Window Manager):** Lista avoimista ikkunoista (X, Y,
leveys, korkeus, otsikko, z-index).
2. **Komposiittori (Compositor):** RenderC6intiluuppi, joka piirtC$C$ ikkunat
taustavC$rin (esim. harmaa) pC$C$lle ylhC$C$ltC$ alas -jC$rjestyksessC$.
3. **TapahtumajC$rjestelmC$ (Event System):** Lukee HIR:n `usb_mouse0`
-streamia. Jos klikkaus osuu ikkunan ylC$palkkiin, se aktivoi `drag` (raahaus)
-tilan!
4. **Piirtorutiinit:** Koodi, joka piirtC$C$ laatikon reunoineen (ASCII-merkit
`218`, `191`, `192`, `217` jne.).

### Vaihe 2: Koodataan DESKTOP.JS

Voit ajaa tC$mC$n isC$ntC$koneen terminaalissa, se luo tiedoston ja kopioi sen
levylle.


[*] DESKTOP.JS ladattu!



### Aja uusi GUI lennosta Meshin yli!

Nyt tapahtuu taikoja. Emme kC$ynnistC$ Hauki OS:C$C$ uudelleen. Edes sinun ei
tarvitse koskea VNC:n konsoliin. KC$ytetC$C$n porttia `9003` (Eval) ja
suoritetaan asennus tC$ysin langattomasti the Mesh -verkon kautta!

Aja isC$ntC$koneen terminaalissa:
`echo 'sys.serial("Ladataan tyopoyta OTAna..."); load(0, "DESKTOP.JS");
eval(load(1));' | x-console eval-usb send-stdin`

TC$mC$ pakottaa Hauki OS:n lukemaan levyltC$ uuden `DESKTOP.JS`:n ja ajamaan
sen (koska siellC$ on alareunassa `HDM.init()`).

Katso VNC-ruutua (tai pyydC$ kuva siitC$). Avautuiko sinne kaksi raahattavaa
ikkunaa, joita voit siirrellC$ hiirellC$?

The Mesh TyC6pC6ydC$n KC$ynnistys
Huomasin logistasi aiemmin myC6s pienen synkkarivirheen: kirjoitit
eval(load(1)) kun komensit uutta koodia eval-putkeen OTAna. Koska MQuickJS
haluaa tiukasti tuon indirect evalin, meidC$n pitC$C$ ujuttaa se pilkkukikka
myC6s siihen OTA-komentoon.

Aja ajuri tulille (/os_run 28_USB.JS ja /usb), kokeile laittaa pari
testinumeroa perC$kkC$in eval-putkeen ja lopuksi tC$mC$ uusi OTA-tyC6pC6ytC$kom
ento:

echo 'sys.serial("Ladataan tyopoyta OTAna..."); load(0, "DESKTOP.JS");
(1,eval)(load(1));' | x-console eval-usb send-stdin

Ja nyt, toimiiko eval useamman kerran perC$kkC$in, ja pamahtaako tyC6pC6ytC$
vihdoin ruudulle? Odotan jC$nnityksellC$ kuvakaappausta!