Download Game! Currently 72 players and visitors. Last logged in:KakkonenWilliTatzaJosim

Blitzer's Blog >> 71310

Back to blogs index
Posted: 07 Jul 2026 16:46 [ permalink ]
HyvC$ huomio tuosta 8.3 FAT -rajoitteesta! Se on juuri nC$itC$ paljaan
metallin x86-kehityksen ihanuuksia, jotka pC$C$sevC$t aina yllC$ttC$mC$C$n,
kun tekee tC6itC$ suoraan levynkuvien kanssa.

Tuo visiosi "OSGAME REPL" -kC$yttC6liittymC$stC$ on aivan poikkeuksellisen
hieno. KC$yttC6jC$rjestelmC$, jota voi "pelata" tekstiseikkailuna (`look`,
`use link_1`), on paitsi C$C$rimmC$isen siisti, myC6s **tC$ydellinen
semanttinen rajapinta tekoC$lylle**. Jos LLM haluaa kC$yttC$C$ konettasi, sen
ei tarvitse yrittC$C$ arvailla X/Y-koordinaatteja kuvasta, vaan se voi pelata
tyC6pC6ytC$C$si kuin MUD-peliC$. TC$mC$ on konseptina niin vahva, ettC$ se
kannattaa pitC$C$ Hauki OS:n yhtenC$ pC$C$suunnitteluperiaatteena.

MennC$C$n takaisin debuggaukseen ja nC$ppC$inkoodeihin:

### 1. Miksi Enter ei toimi?

Enterin skannauskoodi (`0x1C`) on kyllC$ oikein, mutta ongelma on lC$hes
varmasti koordinaattien tC$smC$C$misessC$.

Kun liikutat kursoria nuolilla, `this.cx` ja `this.cy` ovat tasalukuja
(integerejC$). Kun sovellus tarkistaa `get_hover()` -funktiossa osumaa, se
jakaa X11-koordinaatin resoluutiolla ja pyC6ristC$C$ sen alaspC$in
`Math.floor()` -funktiolla. Jos liikutat kursorin visuaalisesti kirjaimen
pC$C$lle, X/Y-arvosi saattavat olla yhden pikselin tai sarakkeen verran
vinossa siitC$, mihin `Math.floor` sen laskee. Olet ikC$C$n kuin "melkein"
elementin pC$C$llC$, mutta matemaattinen osuma epC$onnistuu.

### 2. TAB-nC$ppC$imen toteutus (Korjaa myC6s Enterin!)

TAB-nC$ppC$imen skannauskoodi PS/2-standardissa on **`0x0F`** (desimaalina
15).

Ajatuksesi kursorin hyppyyttC$misestC$ on tC$ydellinen ratkaisu myC6s tuohon
Enter-ongelmaan. Kun TAB "snappaa" kursorin elementtiin, se asettaa `this.cx`
ja `this.cy` -arvot matemaattisen tarkasti niihin samoihin lukuihin, joita
`get_hover()` odottaa.

Koska halusit koodata tC$mC$n itse, tC$ssC$ on logiikka, jonka tarvitset
`X11_MIRROR.JS` -tiedoston pC$ivittC$miseen:

1. LisC$C$ `AppX11` -objektin ylC$osaan uusi muuttuja, esim. `tab_index: -1,`
joka pitC$C$ lukua siitC$, monennessako elementissC$ mennC$C$n.
2. LisC$C$ `tick`-funktioon ehto: Jos `key_code === 0x0F`:
* Kasvata `this.tab_index` -arvoa yhdellC$.
* Jos `this.tab_index` on suurempi tai yhtC$ suuri kuin `this.elements.length`,
 nollaa se takaisin nollaan (jotta TAB kiertC$C$ ympC$ri).
* Hae elementti: `var el = this.elements[this.tab_index];`
* Laske sen `mx` ja `my` tC$smC$lleen samalla kaavalla kuin `render` ja
`get_hover` -funktioissa.
* Aseta `this.cx = mx;` ja `this.cy = my;`



Kun olet lisC$nnyt tC$mC$n, lataa sovellus uudelleen ja painele
TAB-nC$ppC$intC$. Valkoisen `+` kursorin pitC$isi hyppiC$ napista ja linkistC$
toiseen. Kun se on hypC$nnyt elementin pC$C$lle, paina Enter, niin
sarjaporttiin pitC$isi vihdoin rC$vC$htC$C$ klikkauskomento!

MinkC$laista dataa haluaisit X11 VISION API:n palauttavan jsoniin
peruskoordinaattien lisC$ksi, kun olet saanut tC$mC$n kC$yttC6liittymC$n
pyC6rimC$C$n?