# Orao 2026 v0.24 · 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, soft32.rs, compiler.rs, compiled.rs i ide.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 |
| --- | --- |
| 540000–5DFFFF | 640 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, 584127 bajta |
| 500000 | Datoteke nativni kod, 39656 bajta |
| FC0000–FDFFFF i FB2000+ | Komprimirani BASIC payload; raspakirač mapira nastavak u slobodni dio ikonske ROM banke |
| 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-v17: 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čuje21 Rust test 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.

## IDE i compiler ABI 1

Compiler radi na CPU-u i emitira 65C832 kod u privatni $8000–$BFFF prostor. Binarni zapis VDOS-a zadržava ulaz $8000. Izlaz nije izvor, Wasm ili drugi bytecode. Za izvršavanje treba već inicijalizirani BASIC runtime ove verzije; nije samostalni BOS15/EXEC format. Privatni $4000–$7FFF ostaje DOS staging, a AOT operandni stog od $10000; CPU stog ostaje odvojen. Ne mijenjaj navedene raspone iz pokrenutog programa.

Stabilni veneer $400004 poziva exported compiled_service i vraća A u 32-bitnom načinu. Parametri su privatni dwordovi $0780 (broj servisa), $0784/$0788 (argumenti). Servisi rade nad ograničenim stogom označenih vrijednosti; generirane LDA/STA/JSL instrukcije postavljaju parametre. GOTO/IF/FOR/GOSUB koriste stvarne JML/JMP indirect instrukcije i razriješene povratne adrese. DATA je binarna tablica; DEF FN tijela su nativni potprogrami. Nema petlje za izvršavanje bytecodea ni parsiranja programskih naredbi tijekom pokretanja. INPUT/VAL prirodno parsiraju ulazne podatke.

F4 BIN ovisi o compiler ABI-ju i istom runtimeu. Ne tvrdi se kompatibilnost s ranijim/naknadnim ABI-jima. Greška prevođenja poništava spremljeni rezultat u memoriji. Jezik nije proširen; interaktivne naredbe i granice dokumentirane su u korisničkom vodiču.

IDE dokument: $3E2400–$3E2B7F (1920 znakova), $3E2008 seqlock revizija, $3E200C način (2 editor,0 konzola), $3E2010/$3E2014 stupac/redak. Pisac objavljuje neparnu reviziju, kopira cijelu sliku i metapodatke, potom parnu. C0 kopira u privatni staging $30C000 i provjerava istu parnu reviziju prije commita; C3 prima postojeći nepromjenjivi snapshot. C0 uspoređuje riječi i označava samo zahvaćene retke, uključujući stari i novi kursor. Pri mirovanju editor ne šalje nove slike. Brzi niz tipki može se obraditi prije jedne objave.

GUI action18 i upis2 u postojeći C065B4 traže IDE od istog BASIC procesa. Read-once C061AC daje zahtjev2 samo vlasniku terminala. To je mehanički odabir aplikacijskog načina, bez host parsera ili host prevoditelja. Zauzet interpreter otvara editor tek pri sljedećem promptu. Prozor i dalje koristi vlasnički flag448; ne prenamjenjuje se guest serial60.

Za samu reprodukciju compiler izlaza korisnik koristi F5/F4 unutar emulacije; rustc nije potreban za korisnički BASIC program. rustc je isključivo razvojna ovisnost za izgradnju firmware aplikacije i Wasm pogona. build.json bilježi hashove novih izvora i kompletnih generiranih binarnih programa.
