# Orao 2026 v0.9 · Grafički poslužitelj na C3

Nova lokalna razvojna verzija od 19. listopada 2026. Implementacija je projektna rekonstrukcija, ne povijesni BOS/SM ili X11. Izvedba je **JavaScript**; postojeći odvojeni Wasm prototip ostaje vezan uz v0.8 i nije prilagođen ovom protokolu.

Ispravljena je i utrka ulaznog spremnika: oznaka dostupnosti C06503 sada odgovara zaključanom događaju, a ne živom redu. Događaj koji stigne nakon zaključavanja ostaje za sljedeći prolaz; C0 više ne obrađuje prazan paket kao pomak pokazivača na (0,0).

C0 zadržava raspoređivanje, ovlasti, fokus, raspored i redoslijed prozora, prihvat ulaza i WAIT rokove. Aplikacije šalju BOS zahtjeve; C0 provjerava stvarnog vlasnika i kopira podatke u zaštićeno proizvođačko stanje. C3 prima poruke, čuva vlastite grafičke objekte, sastavlja scenu i rasterizira svaki piksel nativnim CPU instrukcijama. C3 vraća upravljanje AV petlji između poruka i raspona retka. Nema nove dretve, GPU-a, DMA-a ili host rasterizatora.

## Red poruka i transakcije

Revizija prijenosa je 1. Jedan zaštićeni red ima 64 mjesta, uz jedno uvijek prazno mjesto. C0 je jedini proizvođač, C3 jedini potrošač. Svi klijenti prolaze postojeću ograničenu BOS obradu na C0: najviše jedan zahtjev po procesu u prolazu. Sistemski i klijentski objekti prenose se u istoj uređenoj transakciji. To je lokalni binarni protokol, bez implementacije X11 žičnog formata ili mrežnog poslužitelja.

| Područje | Vlasnik i namjena |
| --- | --- |
| 300000–30FFFF | C0 politika i proizvođačko stanje; korisničke jezgre i C3 nemaju pristup |
| 310000–31FFFF | Prijašnje područje scene sada je rezervirano i nedostupno |
| 320000–32FFFF | C3 trajno stanje prozora, teksta, objekata i promjena |
| 330000–33FFFF | C3 trajna scena i maska trenutačnog crtanja |
| 340000 / 340001 | Jednobajtni indeks proizvođača / potrošača |
| 340100–3410FF | 64 opisa od 64 bajta |
| 350000–357FFF | 64 zaštićena spremnika od 512 bajta |

Proizvođač smije mijenjati samo slobodan opis i spremnik. Najprije zapisuje podatke, zatim opis, a na kraju **jednim bajtom** objavljuje oznaku spremnosti. Potrošač oslobađa mjesto tek nakon kopiranja. Višebajtni CPU upisi nisu pretpostavljeni atomskima. Svaki bajt i dalje prolazi emuliranu sabirnicu. Korisničke jezgre ne mogu čitati ni pisati ova područja, uključujući 24-bitne adresne aliasove. Pouzdani C0 POST privremeno provjerava fizičku RAM prije aktiviranja kernela.

Opis: +0 spremnost8, +1 tip8, +4 redni broj transakcije32, +8 odredišni pomak32, +12 duljina32, +16/+20/+24/+28 lijevo/gore/desno/dolje32, +32/+36 položaj pokazivača32. Sva višebajtna polja su little-endian. Tipovi su 1 sistemski opis, 2 objekt prozora, 3 dokument, 4 maska promjena, 5 COMMIT, 6 samostalna transakcija pomaka pokazivača. Prva četiri tipa prenose 512 bajta; C3 provjerava tip, duljinu i dopušteno odredište prije kopiranja.

C0 unaprijed osigurava 32 slobodna mjesta; najveća transakcija zauzima 30. Kada nema mjesta, zadržava promjene i nastavlja kernel/ulaz/klijentske pozive, spajajući novo stanje. Postojeće kvote ograničavaju i proizvođačko stanje. Zaustavljeni C3 zato ne blokira raspoređivanje procesa ili stvara neograničen red. Oznaka aktivnog proizvođača je 307F0C.

C3 primjenjuje poruke nakon završetka prethodne slike. **COMMIT** dopušta prikaz nove skupine; djelomično zaprimljena skupina ne prikazuje se. Postojeći BOS rezultat znači da je zahtjev provjeren i prihvaćen u ograničeno stanje, a ne da je već vidljiv. U ovoj reviziji nema novog javnog BOS fence/čekanja prikaza; dovršetak se vidi u sistemskoj dijagnostici. Protokolna pogreška pouzdanog pošiljatelja zaustavlja grafičku uslugu i bilježi pogrešku, umjesto pisanja izvan granica.

Broj naredbi C3 scene prenosi se kroz C06504 (niži bajt) i C06505 (viši bajt), prije objave početka crtanja. C065B0 je C0 obavijest za buđenje C3; C065B2 bilježi internu protokolnu pogrešku C3.

## Trajni objekti i optimizacija

Korisnički BOS 60–66 ostaje kompatibilan: CREATE, CLEAR, TEXT, WAIT, RECT, CLOCK i CLOSE. Tekst i pravokutnici postaju trajni objekti u C3 kopiji prozora. Prozor ima najviše osam objekata; zamjenski TEXT mijenja postojeći objekt na istim koordinatama, CLEAR uklanja sadržaj, CLOSE uklanja prozor. C0 drži ograničeno proizvođačko zrcalo radi provjere i kompatibilnosti ABI-ja; jedini vlasnik prikazivog stanja i scene je C3. Ne prenose se korisnički pokazivači.

Scena ima najviše **512 primitiva** u 330000–337FFF; granice su na 33E000–33E01F, a nepromjenjiva maska crtanja na 33F000–33FBFF. C3 koristi 32-bitne indekse u privatnom predodabiru naredbi, bez omatanja na 255. Posebna provjera popunjava svih 16 prozora i svih 64 korisničkih objekata, uz izbornik i sistemske obavijesti, te provjerava završne primitive pokazivača i stvarno crtanje objekata s indeksom većim od 255.

C0 više ne gradi popis primitiva. C3 ga sastavlja pri promjeni objekata, geometrije ili vizualnog sistemskog stanja te ga zadržava između objava. Promjena sadržaja zasad može ponovno sastaviti cijeli popis na C3; ne tvrdi se da se svaki prozor zasebno kompilira. Buduće proširenje može dodati eksplicitne javne identifikatore objekata i veće kvote.

Pomak pokazivača šalje **jednu kratku poruku** bez ponovnog prijenosa opisa prozora, dokumenata ili pune maske. C3 sam označava staro i novo područje pokazivača i pomiče zadnje dvije trajne primitive, uključujući njihove granice odrezivanja. Scena se ne sastavlja ponovno.

Zadržana je maska 64×48 pločica od 16×16 piksela. C3 predodabire samo naredbe koje presijecaju zahvaćene retke i vodoravno područje. Ako neprozirni pravokutnik potpuno prekriva raspon retka, preskače sve niže slojeve i nepotrebno punjenje pozadine. Sastavlja završne boje u privatnoj RAM te šalje samo piksele različite od VRAM-a. Dovršena slika ostaje vidljiva dok nastaje sljedeća.

## Zadržana svojstva i granice

Ovlasti, odrezivanje na klijentski dio, sistemske dekoracije i PID, povjerljivi ulaz, zajednički WAIT događaja i rokova, čišćenje nakon završetka procesa te neposredna sistemska obavijest o CPU pogrešci ostaju kao u [ugovoru v0.8](gui-v0.8.md). Stari opis memorije i sastavljanja scene u tom ugovoru zamjenjuje ovaj dokument. Rokovi koriste emulirano vrijeme. Migracija procesa ne mijenja vlasništvo ili redoslijed njegovih zahtjeva.

GUI ostaje sistemska usluga na C0/C3 i radi kada su obje aplikacijske jezgre rezervirane za Orao32. Disketa je 140 KiB, HDD privremeno koristi volumene, a bilješke i pregled ispisa ostaju RAM alati. Font Orao UI 16, hrvatski znakovi i puni zaslon sačuvani su. Nema multithreadinga, novih fontova ili promjene brzine emuliranog procesora.

Mjerenja JS v0.8/readable-2 i JS v0.9 objavljena su u [benchmark.json](../benchmark.json). Ona odvajaju stvarno vrijeme, emulirano vrijeme, cikluse jezgara, sabirnicu, video upise i podudarnost završnih slika. Arhitektura sama po sebi ne jamči ubrzanje svake radnje. Wasm nije dio ove usporedbe.
