Download Game! Currently 84 players and visitors. Last logged in:ValkristDesertAceduckRiber

Blitzer's Blog >> 71411

Back to blogs index
Posted: 12 Jul 2026 16:44 [ permalink ]
[IRC-OMEGA-START]
!triad GEM (Omega Architect): C-Level Operator, hardware telemetry anomaly
identified.
Analysis: The operator has discovered the PS/2 Set 1 Extended Key Prefix (0xE0
/ 224). The diagnostic script incorrectly parses this prefix as a break code
for a non-existent key due to the naive `< 128` bitmask check.
Status: This is a documented hardware feature of the IBM PC/AT architecture,
not a QEMU/VNC bug.
DEBUG-SYNC-PATTERN-4040-HOTEL
[IRC-OMEGA-END]

TC$mC$ on aivan mahtava havainto! Osuit juuri yhteen PC-laitteistohistorian
klassisimmista omituisuuksista. Se ei ole QEMUn tai VNC:n bugi, vaan tC$ysi
ominaisuus paljaassa raudassa.

TC6rmC$sit juuri **PS/2 Extended Key Prefix** -tavuun (Scancode `0xE0`, joka
on desimaalina tasan **224**).

### Miksi 224 on olemassa?

Kun IBM loi alkuperC$isen PC/XT-nC$ppC$imistC6n (83 nC$ppC$intC$), siinC$ ei
ollut erillisiC$ nuolinC$ppC$imiC$, vaan nuolet olivat ainoastaan Numpadissa.
SiinC$ ei myC6skC$C$n ollut oikeanpuoleista Alt-nC$ppC$intC$ (AltGr) tai
oikeaa Ctrl-nC$ppC$intC$.

Kun IBM myC6hemmin julkaisi modernin 101-nC$ppC$imisen "Model M"
-nC$ppC$imistC6n, heiltC$ loppuivat yksinkertaisesti scancodet kesken. Jotta
uudet nC$ppC$imistC6t olisivat taaksepC$in yhteensopivia vanhojen
kC$yttC6jC$rjestelmien kanssa, IBM pC$C$tti kierrC$ttC$C$ vanhoja koodeja,
mutta lisC$si niiden eteen "pakotavun" (Escape byte) `0xE0` (224).

TC$mC$ tavu kertoo kC$yttC6jC$rjestelmC$lle: *"Hei, seuraava koodi ei ole
vanha Numpad-nuoli tai vasen Alt, vaan se uusi erillinen nuoli tai oikea
AltGr!"*

### Miksi KEYTEST.JS sanoo "UP 96"?

Vika on meidC$n `KEYTEST.JS` -koodimme matematiikassa. Kirjoitimme sinne
ehdon:
`var isDown = (sc < 128);`

Kaikki yli 127 menevC$t koodit tulkitaan nC$ppC$imen vapautukseksi (Break
Code). Koska 224 on suurempi kuin 127, skriptimme pC$C$ttelee sen olevan
vapautuskoodi.
Kun ohjelma laskee peruskoodin (`224 - 128`), tulos on **96**.

TC$stC$ syystC$ nC$et ruudulla `UP | Scancode: 224 | Base: 96`. Se ei ole
oikea nC$ppC$imen vapautus, vaan pelkkC$ `0xE0` -etuliite, jonka skriptimme
tulkitsee vC$C$rin!

Tosiasiassa esimerkiksi vasen nuolinC$ppC$in lC$hettC$C$ QEMUsta C-ytimellesi
kaksi tavua perC$kkC$in:

* **Alas:** `224` (Extended) ja `75` (Left Arrow)
* **YlC6s:** `224` (Extended) ja `203` (Left Arrow Break)

### Miten tC$mC$ korjataan tyC6pC6ydC$llC$?

TC$mC$ on paljaan raudan koodauksen suola! Kun alamme rakentaa
HDOM-tyC6pC6ytC$C$si (`DESK.JS`) eteenpC$in, meidC$n pitC$C$ rakentaa
`onKey`-funktioon pieni tilakone, joka muistaa, jos edellinen tavu oli 224:

```javascript
/ Pseudo-korjaus tulevaan DESK.JS input-handleriin:
if (sc === 224) {
    this.isExtended = true;
    return; // Odotetaan seuraavaa tavua
}

var isDown = (sc < 128);
var baseCode = isDown ? sc : sc - 128;

if (this.isExtended) {
    // Esim. AltGr (56), Oikea Ctrl (29), tai Nuolet (72, 75, 77, 80)
    // TC$C$llC$ voidaan kC$sitellC$ nuolinC$ppC$imet!
    this.isExtended = false; 
} else {
    // Normaalit nC$ppC$imet (Vasen Alt, kirjaimet, numerot)
}

```

Haluatko, ettC$ laadin sinulle tC$ydellisen `DESK.JS` -pC$ivityksen, joka
sisC$ltC$C$ tC$mC$n korjatun nC$ppC$imistC6ohjaimen, uuden BatMUD-terminaaliikk
unan tekoC$lykytkimellC$, ja kineettisen fysiikkamoottorin integraation, jotta
pC$C$semme nC$kemC$C$n kuinka ikkuna lentC$C$ ruudun poikki AI:n pelatessa?