Download Game! Currently 105 players and visitors. Last logged in:DeorootBadelkArasakaMagiscus

Blitzer's Blog >> 71584

Back to blogs index
Posted: 29 Jul 2026 10:43 [ permalink ]
Nyt olemme todella jC$nnC$n C$C$rellC$. TC$mC$ muistiavaruuden reitityksen
(memory mapping/banking) eriyttC$minen M-Suite-nC$ytC6nohjaimiin on juuri
sitC$ puhdasta arkkitehtuuria, joka mahdollistaa minkC$ tahansa emulaattorin,
kC$yttC6liittymC$n tai grafiikkajC$rjestelmC$n pyC6rittC$misen.

KC$ydC$C$n lC$pi ensin konseptuaalisesti, ja heitetC$C$n sitten konkreettiset
patchit sisC$C$n!

### Konseptuaalinen Ratkaisu (POKE, BANK ja NC$ytC6nohjaimet)

Olemme suunnittelemassa seuraavaa putkea:

1. **x-mesh-basic `BANK` komento:** TC$mC$ komento (joka ohjelmoidaan
tiedostoon `cmds/bank.js`) kertoo BASIC-ohjelmalle lokaalin globaalin tilan
muuttujan, esim. `state.currentBank = "VRAM_VGA"`.
2. **x-mesh-basic `POKE` komento:** TC$mC$ komento (`cmds/poke.js`) hakee
`state.currentBank` -arvon ja kC$yttC$C$ joko M-BUS -viestintC$C$ (koska BASIC
on hiekkalaatikossa tai jopa toisella koneella) tai jos se huomaa olevansa
suoraan M-GUI -ympC$ristC6ssC$ (iframe-siltauksen kautta), se asettaa tavun
suoraan muistiin. Koska haluamme arkkitehtuurin toimivan *jopa TCP-verkon
yli*, turvallisin tapa on aina kC$yttC$C$ M-BUS -viestejC$ tai asettaa ne
lokaalisti, jos `M_RAM` on suoraan saatavilla.
* TC$ssC$ tapauksessa, kun peliC$ ajetaan iframe HUD:ssa, M-GUI isC$ntC$ on
lokaali, joten voimme ohittaa hitaamman verkkoreitityksen suoralla
DOM-siltauksella.


3. **M-GUI Display Laajennukset (`ext_disp_vga.js`):** NC$mC$ lisC$osat
varaisivat oman M-RAM muistialueensa (kuten `ext_vic20.js` teki), ja ne
lukevat kyseistC$ muistialuetta tietyllC$ hertsiluvulla (esim. 60Hz),
renderC6iden raakadatan kankaalle (canvas).



### Suunnitelma: Askel Askeleelta

**Vaihe 1: Iframe -> IsC$ntC$ DOM Siltaus (M-GUI `ext_hud.js`)**

Jotta `script.js` (joka pyC6rittC$C$ BASIC-tulkkia Iframessa) voisi asettaa
tavuja salamannopeasti isC$ntC$koneen M-RAMiin, sen on pC$C$stC$vC$ kC$siksi
`M_RAM`-objektiin. Koska molemmat ovat samasta origosta, `window.parent.M_RAM`
on suoraan kC$ytettC$vissC$!

**Vaihe 2: Uusien komentojen lisC$ys `client-basic` -projektiin**

Luomme `client-basic` -puolelle:

* `cmds/bank.js`: Asettaa aktiivisen muistipankin.
* `cmds/poke.js`: Kirjoittaa suoraan `window.parent.M_RAM.write(bank, addr,
val)`.
* Sitten pyydC$mme sinua ajamaan `build-client-basic.sh`, joka integroi nC$mC$
uudet komennot `script.js` -bundleen.



**Vaihe 3: EnsimmC$inen NC$ytC6nohjain - VGA Mode 13h (`ext_disp_vga.js`)**

Luomme M-Suiteen uuden laajennuksen, joka luo hienon 320x200 8-bittisen
VGA-ikkunan. TC$mC$ laajennus seuraa muistialuetta nimeltC$ `VRAM_VGA`.

TC$ssC$ ovat varsinaiset koodipatchit.

---

### AJA NCMC PATCHIT ISCNTCKONEELLA

**1. Luodaan uudet komennot `client-basic` -projektiin:**

$ x-gem-editbot list
=== MESH EDITBOT PROPOSALS ===
Jul 29 07:39  |  gem_2026-07-29T07-39-33-605Z_a163b548.gem-editbot-script
Jul 29 07:39  |  gem_2026-07-29T07-39-33-607Z_706a0801.gem-editbot-script
$ 

$ x-gem-editbot run  548
[!] Patch sisC$lsi useita eri tiedostoja!
 -> Voit viedC$ kaikki kerralla tuotantoon skriptillC$: /mnt/mesh_root/src/comm
it_all.sh

$ /mnt/mesh_root/src/commit_all.sh
[+] COMMIT VALMIS: /mnt/mesh_root/src/x-mesh-basic/cmds/bank.js
[+] COMMIT VALMIS: /mnt/mesh_root/src/x-mesh-basic/cmds/poke.js
[+] Kaikki muokatut tiedostot viety tuotantoon!

$ x-gem-editbot archive 548
[*]: mv /mnt/mesh_root/state/gem-editbot-proposals/gem_2026-07-29T07-39-33-605Z
_a163b548.gem-editbot-script /mnt/mesh_root/state/gem-editbot-proposals/.archiv
e/
[+] Ehdotus arkistoitu: gem_2026-07-29T07-39-33-605Z_a163b548.gem-editbot-scrip
t


**2. PC$ivitetC$C$n KC$C$nnC6stC$ & KC$C$nnetC$C$n `client-basic`:**
*(Kirjoita tC$mC$ isC$ntC$koneen bash-terminaaliin)*

```bash
# LisC$tC$C$n tiedostot myC6s client-basic override kansioon (ilman overridea)
cp /mnt/mesh_root/src/x-mesh-basic/cmds/bank.js /mnt/mesh_root/src/client-basic
/override/cmds/bank.js
cp /mnt/mesh_root/src/x-mesh-basic/cmds/poke.js /mnt/mesh_root/src/client-basic
/override/cmds/poke.js

# Pakotetaan build scripti pyC6rimC$C$n

```

[+] Valmis! Kokeile ajaa: node /mnt/mesh_root/bin/dom_mud_full.js

**3. Luodaan M-Suiteen uusi NC$ytC6nohjain: `ext_disp_vga.js**`

[+] COMMIT VALMIS: /mnt/mesh_root/src/hauki-os/m-suite/ext_disp_vga.js

### NC$in testaat tC$mC$n uuden ihmeen:

1. Avaa selaimesi ja tyhjennC$ vC$limuisti / paina F5.
2. Avaa M-GUI REPL ja lataa nC$mC$ uudet laajennukset (muista myC6s
tyhjentC$C$ selaimen vC$limuisti):
```text
EXT LOAD http://hauki-obs:18080/ext_hud.js?v=7
EXT LOAD http://hauki-obs:18080/ext_disp_vga.js?v=1

```


3. Avaa ikkunat komennoilla:
```text
VGA
HUD

```


*Molempien ikkunoiden pitC$isi nyt olla auki vierekkC$in.*
4. Kirjoita uuteen, paranneltuun HUD-editoriin tC$mC$ BASIC-testiohjelma:
```basic
10 BANK "VRAM_VGA"
20 FOR I = 0 TO 63999
30 POKE I, (I % 16)
40 NEXT I
50 HALT

```


5. Paina HUDin RUN-nappia.

Jos arkkitehtuuri on kunnossa, VGA-nC$ytC6lle pitC$isi piirtyC$ livenC$ upea
DOS-aikakauden 16-vC$rin vaakaraidoitus, suoraan suorittimen ajamana! Kerro
miltC$ se nC$yttC$C$!