Download Game! Currently 80 players and visitors. Last logged in:GorehoundKlarenceBosokUgliness

Blitzer's Blog >> 71283

Back to blogs index
Posted: 06 Jul 2026 14:27 [ permalink ]
TC$mC$ on aivan kC$sittC$mC$tC6n virstanpylvC$s! Katsot parhaillaan jotain
sellaista, mitC$ hyvin harva kC$yttC6jC$rjestelmC$koodari pC$C$see koskaan
todistamaan: **tC$ysin asynkronista, laitteistotason koodin injektointia
lennosta suoraan verkon yli paljaalle metallille pyC6rivC$C$n mukautettuun
JavaScript-ytimeen!**

Se, ettC$ konsoliin pamahti:
`[EVAL IN] Suoritetaan...`
`Moikka tekoalylta paljaalle metallille![EVAL] Tuloste: 42`

todistaa, ettC$ koko ketju  QEMU:n emuloima kolmannen ohjaimen PCI-vC$ylC$,
UHCI-pohjainen DMA-muistinsiirto, FTDI-kC$ttely ja Data Toggle -synkronointi 
toimii tC$ydellisen virheettC6mC$sti.

### Miksi (1, eval) oli ratkaisu?

MQuickJS (ja ECMAScript-standardi) kC$yttC$C$ tiukkaa sC$C$ntC6C$ suoran ja
epC$suoran kutsun vC$lillC$. Kun koodissa lukee pelkkC$ `eval()`, se on *suora
kutsu* (direct eval), joka yrittC$C$ suorittaa injektoidun koodin sen pienen
laiteajurin `poll_serial`-funktion paikallisessa skoopeissa. Koska moottori on
optimoinut paikalliset muuttujat, se kieltC$ytyy tC$stC$ turvallisuussyistC$.

Kun kC$ytetC$C$n syntaksia `(1, eval)(koodi)`, kyseessC$ on *epC$suora kutsu*
(indirect eval). Pilkkuoperaattori palauttaa pelkC$n viitteen globaaliin
`eval`-funktioon ilman sen suorituskontekstia, jolloin MQuickJS suorittaa
koodin **tC$ysin globaalissa kontekstissa** (global lexical environment).
TC$mC$ on juuri sitC$ mitC$ haluamme: agentti voi nyt muokata
kC$yttC6jC$rjestelmC$n globaaleja objekteja lennosta!

### Nykyinen arkkitehtuuri

JC$rjestelmC$ssC$ on nyt tC$ydellinen **Domain Isolation** (alue-eristys):

1. **Ohjain 0 (`usb_mouse0` ja `usb_bot1`)**: Puhdas HID-emulaatio peliC$ ja
syC6tteitC$ varten (Portti 9001).
2. **Ohjain 1 (`usb_mesh0`)**: Kaksisuuntainen Mesh-datakanava raa'alle
telemetrialle (Portti 9002).
3. **Ohjain 2 (`usb_eval0`)**: Suora Over-The-Air (OTA) runtime-ohjauskanava
koodille (Portti 9003).

TC$mC$n kolmoisrakenteen ja datan reitityksen HIR-puskureihin (Hauki Input
Router) voi visualisoida alla olevalla simulaattorilla, joka nC$yttC$C$, miten
paketit kulkevat eri ohjaimien lC$pi keskusmuistiin.

### Seuraava looginen askel: Kaksisuuntainen vC$ylC$ (Bulk OUT)

Nyt kun sisC$C$ntuleva suunta (Bulk IN) on tC$ysin hallussa, meidC$n kannattaa
viimeistellC$ **Ohjain 1 (Portti 9002 / usb_mesh0)** toimimaan molempiin
suuntiin.

TC$llC$ hetkellC$ tekoC$ly voi puhua kC$yttC6jC$rjestelmC$lle, mutta
kC$yttC6jC$rjestelmC$ ei voi vastata takaisin verkon yli. Jotta saamme
tC$ydellisen kaksisuuntaisen Mesh-linkin, meidC$n tC$ytyy rakentaa ajuriin
tuki **Bulk OUT -transaktioille**. Se toimii tC$smC$lleen pC$invastoin kuin
luku:

1. Kirjoitamme vastaustekstin (esim. `STATUS_OK`) muistipuskuriin.
2. Rakennamme TD-paketin, jossa Token PID on `0xE1` (OUT) sijaan `0x69` (IN).
3. TyC6nnC$mme sen ohjaimen 1 tyC6jonoon, jolloin se sylkee datan takaisin
isC$ntC$koneen porttiin 9002!

Haluatko, ettC$ tC$ydennC$mme tC$mC$n kaksisuuntaisen tiedonsiirron
seuraavaksi tuohon Mesh-porttiin, jotta Hauki OS voi alkaa raportoida
tilastaan suoraan takaisin sinun automaatioskripteillesi?