# Orao 2026 v0.23 · Nativni ABI i izgradnja

Dokumentacija implementiranog eksperimentalnog sustava, 2026-10-23. Ovo nisu autentični povijesni Orao32/PEL registri. [Korisnički vodič](../user-guide.md) opisuje sintaksu i granice.

## Izvršavanje

basic32/basic.rs, streams.rs i soft32.rs su no_std izvor novog interpretera. rustc proizvodi build-only Wasm IR; aot.cjs ga prevodi u prave 65C832 instrukcije. IR nije VM pri radu emulatora. Isti BASIC i Datoteke binarni programi koriste JS, Wasm i Rust desktop. Host predstavlja dovršene CPU piksele i mehaničke redove uređaja; ne parsira BASIC, nazive datoteka ili VDOS.

C0 upravlja prozorima, ulazom, tekstom i objavom stanja. C1/C2 izvršavaju procese. C3 rasterizira nepromjenjivi snapshot i šalje samo promijenjene piksele. Kursor je CPU softver. Zadržava se prethodna dovršena slika dok nova nastaje.

## Memorija i formati

| Adresa | Namjena |
| --- | --- |
| 360000–3DFFFF | 512 KiB dodijeljenog radnog prostora BASIC-a |
| 3E0000 / 3E2000 / 3E2004 | 256 × 256 bitmap / revizija / grafički način |
| 3E4000–3F3FFF | 64 KiB radnog prostora Datoteka |
| 400000 | BASIC nativni kod, 373211 bajta |
| 500000 | Datoteke nativni kod, 39656 bajta |
| FC0000–FDFFFF | Komprimirani BASIC payload u rezerviranim ROM bankama |
| FE0000 / FE0010 | BASIC B32 header / CPU raspakirač |
| FE1000 / FE1010 / FE2000 | FM2 header / raspakirač / Datoteke payload |
| F40000 | BOS, 4416 bajta u ovoj verziji |

Svaki proces ima privatno donje RAM mapiranje. Samo vlasnici BASIC/Datoteke procesa dobivaju njihove dodatne memorijske mogućnosti. GUI međuspremnike i transport štite postojeća prava CPU jezgri. Ovo nije NMOS 6502 memorijska karta.

## BOS i parametri

Nativni ABI: E8=1, E16=0; 32-bitni operandi i indeksi, 8-bitni A za broj poziva. Poziv je JSL F40000. BOS čuva P, DBR, DP, X/Y i povratni bank. Rezultat je bajt 0303; 0 je uspjeh. Pozivatelj poštuje širine, privatno mapiranje i prava procesa.

| Poziv | Učinak |
| --- | --- |
| 01 | Ispis bajta iz 0308 |
| 02 | Ulazni redak u 0500; duljina 0314/0315, EOF status18 |
| 10 | Inicijalizacija aktivnog VDOS volumena |
| 11 | Katalog kroz stdout |
| 12 | Create-only spremanje binarnog zapisa |
| 13 / 14 | Učitavanje / brisanje |
| 15 | Učitavanje i pokretanje nativnog programa |
| 16 | Create-or-replace uz novu kopiju prije zamjene kataloga |
| 20 / 21 | Postojeće sirovo čitanje/pisanje DOS logičkog sektora |
| 40 / 50 | Pokretanje iz staging buffera / postojećeg monitora |
| 60–66 | Postojeći GUI/clock ABI |
| GUI paket67 | Atomski dokument Datoteka kroz postojeći user-stage/request7; nije novi BOS dispatcher poziv |

Brojevi poziva/adrese u tablici su heksadekadski, osim eksplicitnog EOF status18 koji je decimalan (0x12). Uređaj je 0300, volumen little-endian 0301/0302, status0303, binarna duljina0310/0311, load adresa0312/0313, naziv do30 bajtova u0320, staging podaci u4000. Spremanje uključuje postojeći četverobajtni DOS binarni header. Ulazni redak ima do240 bajtova.

BOS16 čuva provjerenu staru TS listu dok novu kopiju ne objavi. Ne briše postojeći zapis prije provjere/alokacije. Nakon zamjene oslobađa stare podatkovne i TS sektore. Treba prostor za novu kopiju. Nema journalinga za gubitak napajanja; nakon neuspjele kasne fizičke operacije ne tvrdi se potpun transakcijski oporavak.

## Ulaz i izlaz procesa

| Port | Mehanički kanal |
| --- | --- |
| C06314 | Omogući/isključi vlastiti raw stdout capture; uključenje čisti red i overflow |
| C06315 / 16 / 17 | Pop bajta / dostupnost / overflow |
| C061A0 / A1 | Ciljni PID low/high, ograničen vlasništvom terminala |
| C061A2 / A3 | Staging retka / predaja retka vlastitom podprocesu |
| C061A4 / A5 | Stanje vlastitog podprocesa / blokirani zahtjev bez preostalog retka |
| C061A6 | Zatvaranje stdin vlastitom podprocesu; EOF je trajan |
| C061A8 | Zaustavljanje vlastitog podprocesa |
| C061AB | EOF zadnjeg BOS ulaznog čitanja |

Raw capture je ograničen na4096 bajtova. Nativni podproces nasljeđuje aktivni capture vlasnika terminala. Rezervacija i povratni pritisak čuvaju red kada je pun; roditelj ga prazni tijekom čekanja. BASIC tokovi imaju odvojene16KiB međuspremnike, neovisan FILE staging i do8 etapa. Ne postoje host pipeovi ili parser datotečnog sustava. Aplikacija koja ignorira EOF može nastaviti rad; vlasnik je prekida s Ctrl+C.

## GUI dokument i vlasništvo

Offset448 metapodataka prozora označava BASIC terminal,452 Datoteke. Offset60 je sačuvani stari guest serial, ne terminal flag. Datoteke koriste lazily pokrenuti proces i prozor0; uobičajene aplikacije imaju svoj postojeći raspon prozora.

Dokument je12 redaka ×64 bajta, dva panela po32. GUI67 prima16 komada po48 bajtova i nulti-length commit tek nakon punog maskiranja. C0 staging30E000, commit30E800; maska307FA0 i revizija307FA8. C3 ima kopiju32E800. Publisher uključuje dva snapshot bloka. Vlasnik i file flag provjeravaju se prije prihvata.

Pri dovršavanju GUI poziva vraća se izvorni Q.slot u kernel selektor K. Focus enqueue može privremeno promijeniti odabrani proces; bez povratka selektora istodobni CREATE Datoteka/BASIC-a mogao je lažno prijaviti nedostatan resurs.

## Ponovljiva izgradnja

Iz korijena ove podverzije:

~~~text
node basic32/build.cjs
node files/build.cjs
node firmware/build.cjs
~~~

Potrebni su lokalni Node.js i rustc s ciljem wasm32-unknown-unknown. Izlazi/basic32 build.json i files/build.json sadrže adrese, veličine i SHA-256. Compiler koristi relativna imena izvora za jednake bajtove u drugom direktoriju. AOT i LZ4 raspakirač provjeravaju vlastite granice i byte-exact povrat. GPL licenca je u COPYING.

Wasm CPU iz vlastite mape prototypes/wasm-v16: node build.cjs, zatim node prepare-page.cjs. Potrebno je zadržati vezu na ovaj JS izvor, wasm-bytes.js fallback i reference-manifest.json. Izmjena engine odabira ne mijenja firmware semantiku.

Lokalni Rust razvoj je izvan web paketa: firmware/build-outline.cjs gradi izvedeni ROM, a build.ps1 -Offline izvršne datoteke i manifest. Izvorni assets/orao-2026.rom, Orao32 ROM i firmware/base ostaju očuvani. Native izvedeni BOS ima isti bytecode kao web uz lokalno razriješene putanje gradnje.

## Provjere i ograničenja

verification.json uz podverziju povezuje provedene javne zapise. Lokalna QA uključuje20 Rust testova i prošireni pipes scenarij s neovisnim DOS3.3 pregledom sektora;6000bajta stdout-a nativnog programa preko manjeg FIFO-a; native/script potrošače; EOF; pun/zaštićen medij; Ctrl+C; postojeće BASIC/monitor/grafiku/Datoteke; stvarni Edge;8202 CPU slučaja;52 stroga native/JS stanja i26 BOS naredbi. Izvorni ROM i prethodne javne arhive provjeravaju se hashovima. Dokaz je o implementaciji, ne conformance test stvarnog neproizvedenog hardvera.

Za buduće izdanje dokumentaciju, runtime i izvore uspoređuj s potpunom focused publikacijskom osnovicom. Inkrementalni ZIP sam nije potpuna osnovica. Stare arhive, originalni transkript i tape/source preuzimanja ne regeneriraju se.
