# Orao 2026 · Wasm prototip v0.1
EKSPERIMENTALNO. Ovo je odvojeni prototip izvršnog motora, a ne nova stabilna verzija emulatora. Možemo ga napustiti ako postane prepreka daljnjem razvoju, održavanju ili provjerljivosti. Objavljena JavaScript v0.8.0 ostaje dostupna i njezine datoteke nisu promijenjene.
## Svrha
Ispitati može li WebAssembly ubrzati stvarno izvršavanje postojećeg CPU/ROM koda uz isti redoslijed sabirničkih događaja. Prototip ne dodaje emulirani GPU, blitter, nove sistemske usluge, ubrzani sat niti host crtanje GUI-ja. C0 i dalje upravlja sustavom, a C3 izvršava izvorne grafičke i zvučne rutine.
Prototip se pokreće iz vlastitog index.html. Izbor Wasm / JS referenca ponovno pokreće taj prikaz. Radni RAM i umetnuti mediji ne prenose se pri tom odabiru. Za diskove i dalje vrijedi izvoz IMG-a prije zatvaranja. Prototip ovisi o susjednoj, sačuvanoj versions/orao-2026-v0.8/ mapi. Nije zaseban firmware niti nova stavka stabilnog karusela.
## Što je preneseno
engine.rs u Rustu implementira podržani skup postojeće fast-cpu.js putanje: 8/16/32-bitne registre, aritmetiku i adresiranje, mikro-korake čitanja/pisanja, RMW zaključavanje i deterministički odabir jezgri na zajedničkoj sabirnici. Obična RAM, slikovni RAM i ROM nalaze se u fiksnoj Wasm memoriji od 16 MiB. Svaki emulirani bajt i ciklus i dalje se obrađuje. Postojeći C3 registri za položaj i predaju piksela obrađuju se u istom modulu kako ne bi zahtijevali poziv JavaScriptu za svaki piksel. Boje i položaje i dalje izračunava emulirani C3 program.
Nepodržane instrukcije, priprema prekida, tajmeri i većina MMIO uređaja vraćaju izvođenje JavaScript referenci na točnoj granici događaja. Izvorni NMOS Orao32 ostaje JavaScript i u ovom prototipu. BOS/SPAWN kopiranje s dodatnim memorijskim praćenjem, umetanje kvarova i pojedinačni debug koraci koriste JS. Nova mogućnost zato se može najprije razviti na postojećoj referenci. wasmForceJS ili wasmEnabled=false na razvojnom Machine objektu omogućuje izričit povrat referenci.
Ovo je namjerno ograničen, hibridni pokus. Česti prijelazi prema JS-u mogu poništiti dobit, osobito pri radu s uređajima i dvjema Orao32 instancama. Novi uređaj koji presreće obične memorijske adrese traži provjeru Wasm dekodera ili isključivanje ubrzanja za taj put. Novi CPU model također nije automatski podržan. Ne tvrdimo da su sva buduća proširenja besplatna niti da Wasm nužno ubrzava svaki zadatak.
## Što ostaje isto
Kernel, BOS/SM, GUI na C0/C3, korisnički programi, firmware, diskovi, monitor, IPC i originalni Orao32 kod koriste sačuvane izvore v0.8.0. Zaštićeni GUI rasponi i privatna RAM zadržavaju pravila ovlasti. JavaScript predaje samo dovršenu C3 sliku pregledniku te ulazne događaje uređajima.
Prva faza radi na glavnoj niti preglednika. Web Worker i paralelno izvršavanje četiriju host jezgri nisu uvedeni. Time se prvo mjeri sam Wasm motor, bez dodatnih razlika u komunikaciji i vremenskom rasporedu. Premještanje u jedan Worker može se razmotriti zasebno, ako ovaj motor opravda nastavak. Nema multithreadinga u emuliranom OS-u.
## Provjera i odluka o nastavku
Uspoređuju se registri, memorija, događaji, broj ciklusa, redoslijed jezgri, prekidi i framebuffer, ne samo izgled slike. Odvojeno se mjere prvi GUI prikaz, tipkanje, miš te jedna i dvije Orao32 instance na istom ROM-u i istom emuliranom poslu. Mjerenja bez ograničenja brzine razlikuju se od rada preglednika koji cilja stvarno vrijeme. Wasm ne uklanja emulirani trošak postojećih grafičkih rutina pri 25 MHz.
Zadržati prototip samo ako donosi dosljednu korist, zadržava ponašanje reference i ne traži stalno dvostruko održavanje novih značajki. Ako je ubrzanje premalo, pojedini zadaci usporavaju ili povrat prema JS-u i složenost postanu teret, ostajemo na JS-u i možemo ukloniti cijelu ovu mapu. Prototip nema obvezu postati trajnom arhitekturom.
Rezultati i ograničenja mjerenja navedeni su niže te u verification.json i benchmark.json. Postojeći 65C832 interpreter je projektna rekonstrukcija; usporedba potvrđuje podudarnost s tom referencom.
## Gradnja i izvori
GPL-3.0-or-later, kao postojeći emulator. Izvori su engine.rs, generirani opcodes.rs, wasm-engine.js i prateće skripte. build.cjs čita postojeću tablicu opkoda, prevodi modul i priprema engine.wasm, wasm-bytes.js i build.json. Potreban je Rust s ciljem wasm32-unknown-unknown; nema dodatnih Rust paketa. Za preglednik prevoditelj nije potreban. Ugrađeni bajtovi omogućuju file:// bez preuzimanja Wasm datoteke preko mreže.
Nakon promjene izvora: node build.cjs, zatim node prepare-page.cjs. Prevoditelj, opcije gradnje i SHA-256 nalaze se u build.json. Referentni CPU izvori su označeni hashovima. Promjena referentnog modela zahtijeva novu provjeru prototipa. Ako Wasm nije dostupan pri pokretanju, stranica prikazuje JS referencu i razlog. Neočekivani Wasm trap zaustavlja prototip; ne nastavlja tiho s potencijalno djelomično izmijenjenim stanjem.
<!-- measured-results -->
## Rezultati prototipa · 19. listopada 2026.
| Zadatak | JS (s) | Wasm + JS (s) | Omjer JS/Wasm |
| --- | ---: | ---: | ---: |
| Prvi GUI prikaz | 27.681 | 7.158 | 3.87× |
| Unos znaka | 1.224 | 0.368 | 3.32× |
| Pomak pokazivača | 0.418 | 0.215 | 1.95× |
| Sustav s jednom Orao32 instancom | 0.795 | 0.319 | 2.49× |
| Sustav s dvjema Orao32 instancama | 0.679 | 0.262 | 2.59× |
Jedan lokalni prolaz pod v24.18.0 / V8, bez preglednikova DOM-a, predaje slike/zvuka i ograničenja na stvarno vrijeme. Prevođenje Wasma nije uključeno. Oba motora izvršavaju isti broj događaja, iste emulirane cikluse i daju identičan framebuffer. Prvi prikaz u oba slučaja traje 4,315 emulirane sekunde; Wasm ne mijenja takt 25 MHz niti skraćuje emulirani posao.
Orao32 mjerenja obuhvaćaju početnih približno 0,1 emuliranu sekundu nakon rezervacije svake jezgre i istodobni nativni sustav. To nisu mjerenja dugotrajnog igranja niti obećanje navedenog ubrzanja izvornog 6502 interpretera, koji ostaje JS. Dobitak i odziv u pregledniku ovise o računalu, JIT-u, predaji slike i vremenskom ograničenju. Ovo nije višestruko statističko mjerenje ni univerzalni faktor ubrzanja.
Prošlo je 8.202 CPU slučaja sa svih 256 opkoda i 16 kombinacija modova/širina, 240 dekoderskih slučajeva, RMW natjecanje dviju jezgri, izvorni kernel i IPC, usporedba prvog prikaza i unosa korak po korak, provjere jedne/dviju izvornih Orao32 instanci te 13 pregledničkih provjera. Provjereni su i file://, GUI/tekst, puni zaslon i povrat na JS kad WebAssembly nije dostupan. Cijeli zapisi su verification.json i benchmark.json. To potvrđuje podudarnost s postojećim interpreterom u ispitanim slučajevima, ne autentičnost čipa ili potpunu buduću kompatibilnost.
Prva, neoptimizirana granica JS/Wasm bila je sporija od reference. Ubrzanje je dobiveno smanjenjem kopiranja stanja; česti povrati prema JS-u i dalje su glavno ograničenje. RAM je pogled unutar Wasm memorije s ne-nultim byteOffsetom. Most prilagođava postojeći dijagnostički GUI pregled tome; budući kod koji stvara DataView nad RAM-om mora koristiti i ram.byteOffset. To je konkretan dodatni trošak održavanja koji treba uzeti u obzir pri odluci o nastavku.
Prototip ostaje eksperimentalan i može biti napušten. Nije uveden u stabilni karusel, nije pripremljen novi objavni ZIP i nije izvršena udaljena objava.