Download Game! Currently 87 players and visitors. Last logged in:TontoDesertUntappedJagoman

Blitzer's Blog >> 71583

Back to blogs index
Posted: 29 Jul 2026 10:31 [ permalink ]
TC$mC$ on aivan loistava arkkitehtuurinen oivallus! Se, mitC$ ehdotat, on
tC$smC$lleen se tapa, jolla oikeat tietokoneet (ja emulaattorit) toimivat:
**Irrotetaan ohjelmalogiikka (CPU) tC$ysin renderC6innistC$ (GPU/VIC/VDC).**

Kuten pohdit, emme halua, ettC$ BASIC-ohjelma "piirtC$C$" mitC$C$n. Halusimme
sen vain `POKE`ttavan tavuja muistiin. M-Suite puolella pyC6rivC$t
"nC$ytC6nohjaimet" (Display-laajennukset) vain lukevat tuota muistia omalla
virkistystaajuudellaan ja heijastavat sen visuaalisesti kankaalle.

Koska pyysit pelkkC$C$ konseptuaalista hahmotelmaa nykyisellC$ kontekstillani,
tC$ssC$ on suunnitelma siitC$, miten tC$mC$ on puhtainta ja tehokkainta
rakentaa olemassa olevien M-RAM ja M-BUS -jC$rjestelmiemme pC$C$lle:

### 1. M-Suite: "NC$ytC6nohjaimet" (Display Plugins)

MeillC$ on M-Suitessa jo loistava `M_RAM`-arkkitehtuuri (Shadow Buffer), jota
VIC-20 -kokeilumme kC$ytti. Voimme tehdC$ tC$stC$ modulaarisen standardin.

Luomme M-Suiteen uudet laajennukset (esim. `sys_disp_c64`, `sys_disp_vga13h`).
Jokainen nC$istC$ laajennuksista toimii tC$ysin itsenC$isenC$ komponenttina:

* **Oma Muistialue (Bank):** Kun esim. VGA-nC$yttC6 kC$ynnistetC$C$n, se varaa
M-RAMista itselleen oman 64 kilotavun blokin: `M_RAM.allocate("VRAM_VGA",
65536)`.
* **Oma Refresh Rate (Ticker):** VGA-laajennus rekisterC6i M-COREen ajastimen:
`API.addTicker(60, render)`. (60 ruutua sekunnissa).
* **Sokea RenderC6inti:** Ticker-luupissa nC$ytC6nohjain vain lukee raa'asti
M-RAMin sisC$ltC6C$ ja muuntaa sen HTML5 Canvas -pikseleiksi. VGA Mode 13h
lukee suoraan 64 000 tavua (320x200) ja tulkitsee jokaisen tavun
256-vC$riseksi pikseliksi. C64 puolestaan lukee perinteisesti osoitteita
`0x0400` (Screen RAM) ja `0xD800` (Color RAM).

### 2. Siltaprotokolla: Iframe -> M-RAM

TC$mC$ on se osuus, jota pohdit `ext_hud.js` -tiedoston kohdalla. Miten
Iframe-hiekkalaatikossa (jossa HUD ja BASIC-tulkki pyC6rivC$t) oleva koodi
kirjoittaa tyC6pC6ydC$n M-RAMiin?

Koska `ext_hud.js` lataa Iframen *samasta origosta* (`http://hauki-obs:18080`),
 selaimen turvamallit sallivat meidC$n rikkoa hiekkalaatikon rajoja
turvallisesti, mutta vain haluamistamme paikoista:

* Voimme injektoida Iframen sisC$lle pienen siltaskriptin, joka sallii M-GUI:n
isC$ntC$objektien kC$ytC6n (esim. `window.parent.M_RAM.write()`).
* TC$mC$ tarkoittaa, ettC$ muistiin kirjoittaminen tapahtuu **suoraan selaimen
natiivilla muistinopeudella**, ilman HTTP/WebSocket/PostMessage -viivettC$!
TC$mC$ on valtava etu reaaliaikaiselle grafiikalle.

### 3. x-mesh-basic: POKE ja BANK -komennot

Jotta BASIC-ohjelmoija voi kC$yttC$C$ tC$tC$ jC$rjestelmC$C$ intuitiivisesti,
x-mesh-basic -kieleen pitC$C$ luoda kaksi uutta, C$C$rimmC$isen perinteistC$
komentoa:

1. **`BANK "VRAM_VGA"`**: TC$mC$ kertoo BASIC-tulkille, mihin M-RAMin
muistilohkoon seuraavat kirjoitukset kohdistuvat. NC$in voimme helposti
reitittC$C$ dataa eri nC$ytC6ille lennosta.
2. **`POKE <osoite>, <tavu>`**: Kirjoittaa yhden tavun valittuun
muistipankkiin. BASICin puolella tC$mC$ kC$C$ntyy suoraan nopeaksi
funktiokutsuksi isC$ntC$koneen (M-GUI) M-RAM-taulukkoon.

Halutessamme voimme tehdC$ myC6s **`VPOKE <alkuosoite>, <taulukko>`**
-komennon, joka ampuu kerralla kokonaisen letkan tavuja muistiin. TC$mC$ on
nykyaikainen "DMA-siirto" (Direct Memory Access), joka tekee jopa
JavaScript-pohjaisesta BASICista tarpeeksi nopean pyC6rittC$mC$C$n 60 fps
ruudunpC$ivitystC$!

### Yhteenveto Konseptista:

1. Aja komento M-GUI:ssa: `VGA_START` (Avaa VGA Mode 13h -ikkunan
tyC6pC6ydC$lle ja varaa `VRAM_VGA`-muistin).
2. Avaa HUD ja kirjoita BASIC-ohjelma:
```basic
10 BANK "VRAM_VGA"
20 FOR I = 0 TO 63999
30 POKE I, (I % 256)
40 NEXT I

```


3. Paina HUDista RUN. Koska arkkitehtuuri on eriytetty, BASIC suoltaa
numeroita muistiin minkC$ ehtii, ja viereisessC$ ikkunassa VGA-plugin
renderC6i vC$riavaruutta 60 ruudun sekuntivauhdilla, tC$ysin riippumattomana
BASICin suoritusnopeudesta.

MiltC$ tC$mC$ jako kuulostaa? Se kunnioittaa perinteitC$, on modulaarinen
(voimme lisC$tC$ Mac-, Amiga- tai EGA-nC$yttC6jC$ myC6hemmin ihan vain uusina
laajennuksina m-suiteen), ja sen suorituskyky on optimaalinen.

Jos olet valmis, heitC$ minulle uusimmat dumpit `client-basic` -kansiosta
(varsinkin, jos siellC$ on jotain mitC$ minun pitC$isi huomioida noiden
komentojen integroinnissa) ja `m-suite`:sta, niin alan generoida tarvittavia
Editbot-komentoja!