# Lokalna runda optimizacija

{
  "date": "2026-10-24",
  "status": "Local working version; no new ZIP or remote deployment",
  "version": "0.25.0",
  "wasmVersion": "0.18.0",
  "nativeVersion": "0.1.17",
  "defaultEngine": "wasm",
  "feature": "Optimization round: faster byte-event CPU fast paths (stack/control instructions), Wasm device mirroring, deferred top-of-stack BASIC32 AOT, faster IDE editing; unchanged language, ROMs and behavior",
  "publicationBaseline": "v0.23.0",
  "binaryFormat": "Callable native 65C832 code at 8000; BASIC runtime ABI 1 required, not standalone EXEC"
}

## Poznate granice ove runde

- JS pogon: faze s punim ponovnim iscrtavanjem bile su u prvom prolazu sporije nego u v0.24; uzrok su bile polimorfne skrivene klase CPU objekata (polja nastajala lijeno), ne brzi put stoga. `fast-cpu.js` sada dodjeljuje sva polja u konstruktoru i svodi događaje generatora na jedan oblik; sve faze su brže od v0.24 (vidi `orao-tests/orao-opt-report.md`).
- Granice faza u mjernom scenariju čekaju na miran GUI, ne na obradu tipke u IDE-u; sirovi tekstni međuspremnik IDE-a zato se na tim granicama može razlikovati između verzija. Nakon smirivanja (40 M događaja po tipki) zasloni su identični prije/poslije (`orao-tests/opt/screen-dump.cjs`).

## Nastavak runde (isti dan)

- JS: jedna skrivena klasa CPU objekata i jedan oblik događaja (`adopt`); dekoder odgovara arene procesa odmah nakon privatnog RAM-a i ROM-a.
- BASIC32 (zajednički izvor): AOT runda 4 (konstantni pomaci inline kroz nula-podstavljeni prozor, `i32.mul` s ranim izlazom, 32-bitni popovi u pomoćnim rutinama), rustc `opt-level=2` umjesto `z` (−28 % događaja u tipkanoj sesiji; slika 578 KB, pakirano 177 KB), pri čemu je nastavak pakirane slike premješten s FB2000 na slobodni FE5000 (alokacija 128 + 108 KB, granica 236 KB), LZ4 raspakirnik s MVN blokovima.
- Wasm v18: zrcaljen GUI caller registar C06525 (Global 160 B).
- Renderer C3 (`firmware/build-gui-renderer.cjs`): `fill_sixteen` piše osam riječi preko `STA long,X` umjesto `STA [dp],Y` + INY (94 umjesto 160 događaja po 32 bajta, isti bajtovi istim redom; identični kadrovi u svim fazama koje završavaju mirovanjem).
- Renderer C3: tekstualni glifovi koriste tablicu tinte po boji (16 riječi na 0xA00, ključ 0xA40, obnova samo pri promjeni boje): 31 umjesto 58 događaja po ne-praznom polubajtu, isti bajtovi.
- Jezgrin video/audio segment C3 (`firmware/build-kernel.cjs`): tihi put miksera (bez uključenih kanala okvir nula izravno, 13 umjesto ~22 instrukcija po uzorku); aktivni kanali nepromijenjeni. Orao32 ROM netaknut.
- BOS (`firmware/build-bos.cjs`): čekanje diskovnog kontrolera spava (WAI) između provjera umjesto vrtnje; kontroler dovršava zahtjeve lijeno bez isteka pa je sigurno za podatke, uz dovršetak na granici kvanta (≤1 ms).
- Renderer C3: petlja usporedbe/upisa kadra drži zastavicu niza u X i čita gost-način jednom po liniji (dvije varijante petlje); isti upisi istim redoslijedom, kadrovi identični, sustavski scenarij −13 % događaja.
- Ispitano, nije zadržano: nativna predmemorija baze procesa na jezgri (unutar šuma).

[Priručnik](upute.html) · [AOT prevoditelj](basic32/aot.cjs) · [BASIC](basic32/basic.rs) · [Editor](basic32/ide.rs) · [Mjerenja](../../../../../orao-tests/opt/results/).
