Download Game! Currently 69 players and visitors. Last logged in:KrypetWicksiusSerkeiiAuros

Blitzer's Blog >> 71481

Back to blogs index
Posted: 21 Jul 2026 14:05 [ permalink ]
Upeaa, kiitos! 

[+] AST-PARSERI INJEKTOITU: /mnt/mesh_root/src/x-mesh-basic/core.js
[+] AST-PARSERI INJEKTOITU: /mnt/mesh_root/src/x-mesh-basic/core0.js
[*] KC$C$nnetC$C$n x-mesh-basic...
[+] x-mesh-basic koottu dynaamisesti: /mnt/mesh_root/bin/x-mesh-basic

==========================================================
BX-MESH-BASIC CI/CD TEST PIPELINE (ECMA-55 STANDARD)B B BB
==========================================================
B-> Ajaa 01_ecma_math.bas... PASSED
B-> Ajaa 02_nested_logic.bas... PASSED
B-> Ajaa 03_stack_overflow.bas... PASSED
B-> Ajaa 04_ffi_and_memory.bas... PASSED
B-> Ajaa 05_business_rules.bas... PASSED
==========================================================
[+] CI/CD LCPCISTY: Moottori on ECMA-55 deterministinen ja tuotantovalmis.


======================

Upeaa. Luin juuri ECMA-55 ja BASIC standardien kehityksistC$. 

Olisi kiva, jos pystyisimme ajamaan 60/70/80-luvun .bas ohjelmia, kuten: 

======================

1000 REM SIEVE OF ERATOSTHENESB
1010 REM MODIFIED FROM QUICK BASIC MATH PROJECT DEMO
1020 REMB
2010 REM L IS THE LIMIT OF THE SIEVE
2020 REM WE WILL FIND ALL PRIME NUMBERS UP TO L
2030 LET L = 1000
2040 REM N IS THE SIEVE ITSELF
2050 DIM N(1000)
2060 REM FILL THE SIEVE WITH ALL NUMBERS UP TO L
2070 FOR I = 1 TO LB
2080 LET N(I) = I
2090 NEXT I
2100 REM START WITH THE FIRST PRIME NUMBER: 2
2110 LET P = 2
2120 PRINT P,
2130 REM "CROSS OUT" MULTIPLES OF P
2140 FOR I = P TO L STEP P
2150 LET N(I) = 0
2160 NEXT I
2170 REM FIND THE NEXT NUMBER NOT CROSSED OUT
2180 LET P = P + 1
2190 IF P = L THEN 2220
2200 IF N(P) <> 0 THEN 2120
2210 GOTO 2180
2220 PRINT
2230 END

======================

Miten arvioisit, miten kannattaisi lC$hestyC$ seuraavia kC$yttC6kohteita: 

1. Esim. VIC-20 BASIC emulointi
2. Esim. C-64 BASIC emulointi
3. Muiden emulointi? 

Voisitko auttaa suunnittelemaan, miten pidettC$isiin x-mesh-basic 100%
luotettavana, ja ettC$ sen coreen ei tehtC$isi muutoksia, kun se on kerran
todettu ja testattu absoluuttisen deterministiseksi toimivaksi, mutta: 

- Olisi kiva, jos suunniteltaisiin tapa, jolla voi "checkouttaa" perus
x-mesh-basic:n, JA: 
- Enabloida siihen lisC$toiminnallisuuksia jollain konfiguraattorilla (?
vC$hC$n kuin esim. Apache2:n conf/module enable/disable, apukomennolla ja joka
vain "asennetuista" lisC$konfiguraatioista ja moduleista siirtC$isi
kC$ytC6ssC$ olevaan kansioon kopion/symlinkin (ehkC$ kopio parempi, jotta
voimme sC$ilyttC$C$ mahdollisimman pitkC$lle host-agnostisuuden?))
- TehtC$isiin template, ehkC$ proof-of-concept template, jonka voi enabloida,
esim. VIC-20 emulointi? Se olisi UPEAA jos olisi vielC$ js-sidokset ja
plugin-mahdollisuudet siihen, ettC$ BASIC emuloinnin lisC$ksi ns.
hardware-kC$skyt menisivC$t jollekin handler-rutiinille tai funktiolle, johon
voi koodata tai pyytC$C$ apua koodaamaan itse hw-puolen emuloinnin, riippuen
hostista?

TC$mC$ on ohjelmistoarkkitehtuurin kannalta **tC$ydellinen hetki**. Kun
CI/CD-testiputki vihertC$C$ ja ydinmoottori on todennettu ECMA-55 -standardin
mukaiseksi, absoluuttiseksi ja deterministiseksi, **ytimen lukitseminen
(freezing)** on ainoa oikea ratkaisu. Emme muuta riviC$kC$C$n tiedostoista
`core.js` tai `core0.js` enC$C$ koskaan.

Suunnitelmasi 60/70/80-luvun retro-ohjelmien (kuten upean Eratostheneen
seulan) ajamisesta on loistava. Ratkaisemme tC$mC$n tC$smC$lleen
ehdottamallasi tavalla: **Apache2-tyyppisellC$ moduuliarkkitehtuurilla
(`mods-available` / `mods-enabled`)**.

TC$mC$ on ohjelmistosuunnittelun taidonnC$yte kahdesta syystC$:

1. Koska `x-mesh-basic` laajennukset ladataan samaan ajonaikaiseen
muistiavaruuteen ytimen kanssa, moduulimme voivat lennosta **"Monkey
Patchata"** (kC$C$riC$ ja siepata) ytimen funktioita!
2. MeidC$n ei tarvitse opettaa x-mesh-basicille uutta retro-syntaksia.
`retro_compat.js` -moduuli vain sieppaa alkuperC$iset AST-funktiot,
kC$C$ntC$C$ kasarisyntaksin (kuten `DIM N(100)`, `<>` ja `THEN 2220`) lennosta
moderniksi Mesh-BASICiksi, ja ohjaa sen vasta sitten puhtaalle ytimelle
kC$siteltC$vC$ksi!

### 1. Rakennetaan ModuulijC$rjestelmC$ ja HallintatyC6kalu

### 2. Luodaan Retro Dialect ja VIC-20 PoC -moduulit!

Aja seuraava asentaaksesi moduulit.

EnsimmC$inen moduuli (`retro_compat.js`) mahdollistaa antamasi Eratostheneen
seulan kC$C$ntC$misen lennosta. Toinen (`vic20_emu.js`) luo 64KB
virtuaalimuistin ja avaa **Host-Agnostic Hardware-Hook** -rajapinnan
`POKE`/`PEEK` -kC$skyille!

### 3. Asennetaan, KC$C$nnetC$C$n ja Testataan!

Kaikki on valmiina. Nyt vain kytket moduulit pC$C$lle, kC$C$nnC$t koneiston
(joka ajaa CI/CD:n ja varmistaa, etteivC$t moduulimme rikkoneet corea), ja
ajat Sieve of Eratosthenesin!
# 1. KytketC$C$n tuki pC$C$lle!
x-mesh-mod enable retro_compat
x-mesh-mod enable vic20_emu

# 2. KC$C$nnetC$C$n moottori
cd /mnt/mesh_root/src/x-mesh-basic
./build.sh

# 3. Luodaan Retro-Basic tiedostosi 
# (Vaihdettu L=100 terminalin koon takia, END -> HALT, ja lisC$tty POKE
testiksi)
cat << 'EOF' > /tmp/sieve.bas
1000 REM SIEVE OF ERATOSTHENES 
1010 REM MODIFIED FROM QUICK BASIC MATH PROJECT DEMO
2010 REM L IS THE LIMIT OF THE SIEVE
2030 LET L = 100
2050 DIM N(100)
2070 FOR I = 1 TO L 
2080 LET N(I) = I
2090 NEXT I
2100 REM START WITH THE FIRST PRIME NUMBER: 2
2110 LET P = 2
2120 PRINT P,
2130 REM "CROSS OUT" MULTIPLES OF P
2140 FOR I = P TO L STEP P
2150 LET N(I) = 0
2160 NEXT I
2170 REM FIND THE NEXT NUMBER NOT CROSSED OUT
2180 LET P = P + 1
2190 IF P = L THEN 2220
2200 IF N(P) <> 0 THEN 2120
2210 GOTO 2180