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$!