# Orao 2026 v0.5 — BOS/SM i VDOS 0.1

## Povijesna pretpostavka

Po korisnikovoj odluci VDOS tretiramo kao preimenovani IDOS. To je prihvaćena osnova projekta, bez tvrdnje da smo pronašli izvorni PEL kod ili dokazali licencni odnos. Suvremeni [opis BOS/SM-a](https://retrospec.elite.org/pcsux/SK/1986/09/SEPT8616.jpg) daje uzor posredovanja između ROM banaka; ne daje ulazne adrese ili punu tablicu poziva. Ulaz F40000 i cijeli ABI u nastavku novi su Orao 2026 dogovori.

Ovo nije potpuna rekonstrukcija IDOS-a 2.30: nema originalnog DOS boota, BASIC datoteka, tekstualnog/random-access API-ja, učitavanja .CMD modula ili izvornih PEL diskovnih poziva. Probna ljuska, ROM, sektorni driver, VTOC, katalog i rad s binarnim datotekama izvršavaju se na emuliranom nativnom CPU-u. JavaScript predaje tipkovnički ulaz i datoteke uređaju te prezentira CPU izlaz; ne tumači DOS naredbe i ne čita strukturu datotečnog sustava umjesto CPU-a.

## Mediji i volumeni

Disketa sada ima **140 KiB = 143360 bajtova**, prema naknadnoj korisnikovoj odluci. Jedan volumen ima 35 tragova × 16 logičkih sektora × 256 bajtova. Postojeći PIO kontroler prenosi 512 bajtova, pa CPU ROM čita fizički blok i odabire polovicu; pri pisanju CPU prvo čita blok i zadržava drugu polovicu. Izloženi PIO model ima 280 blokova, s osam blokova po tragu. To nije Disk II/FDC/flux emulacija.

HDD ostaje **20 MiB = 20971520 bajtova**. Privremeno ga dijelimo na 146 neovisnih volumena po 143360 bajtova (0–145), ukupno 20930560 bajtova. Zadnjih 40960 bajtova ostaje neiskorišteno. Konačna organizacija HDD-a odgođena je prema korisnikovoj odluci. Raspored volumena vlastiti je dogovor, bez particijske tablice i povijesne IDOS tvrdnje.

Fizički PIO LBA = `volumen * 280 + ((trag * 16 + sektor) >> 1)`. Parni logički sektor zauzima prvu, neparni drugu polovicu bloka. Slike disketa koriste redoslijed DOS logičkih sektora, poput .do slika. ProDOS redoslijed, nibble slike i fizičko ispreplitanje nisu podržani. Import/export cijelog medija zadržava točnu veličinu. Mediji i zaštita ostaju pri resetu; prije ponovnog učitavanja ili zatvaranja stranice treba preuzeti .img. Nema automatske trajne pohrane ili CPU snapshotova.

## Korištenje

1. Otvorite index.html i nakon boota pritisnite **Pokreni VDOS**.
2. Odaberite A: disketu ili B: HDD te volumen. Disketa dopušta samo volumen 0.
3. Novi volumen inicijalizirajte tipkom ili eksplicitnom naredbom `INIT DA`. To briše njegov katalog. Ostali volumeni ostaju neizmijenjeni. INIT ne ugrađuje DOS pokretački kod.
4. Upišite tekst ili umetnite binarnu datoteku do 16 KiB, pa izvršite `BSAVE IME`.
5. `CATALOG` prikazuje imena. `BLOAD IME` čita sadržaj i izvornu ulaznu adresu; sadržaj se može preuzeti ili pokrenuti kao novi nativni proces uz AUTO/C1/C2.
6. `DELETE IME` briše datoteku, `HELP` ispisuje naredbe, a `EXIT` završava ljusku.

Imena imaju najviše 30 ASCII znakova, počinju slovom A–Z, ne sadrže zarez ni kontrolne znakove. Ljuska pretvara mala slova naredbe i imena u velika; sadržaj datoteke ostaje neizmijenjen. Imena s razmacima nisu pod navodnicima. BSAVE stvara samo novu datoteku, bez automatskog prepisivanja. Tekst iz polja sprema se kao sadržaj binarne B datoteke u UTF-8, ne kao povijesna DOS tekstualna datoteka. Ulazna adresa upisuje se heksadecimalno.

Ljuska je običan proces s jedinstvenim prioritetom i jednom izvršnom niti. Može se premještati i pauzirati. Za dvije Orao32 instance potrebno ju je završiti kao i ostale nativne procese. Kernel na C0 i AV na C3 nastavljaju rad. Izvorni Orao32 ROM nije promijenjen; njegova opcijska kartica pristupa istim sirovim sektorima diskete, ali nije dobila povijesni VDOS ili nativni F40000 ABI.

## BOS/SM pozivni dogovor

`JSL $F40000`, A sadrži broj usluge u donjem bajtu. Podržan je nativni Orao 2026 profil E8=1/E16=0. Poziv čuva P (uključujući širine i decimalnu zastavicu), DBR, DP, pune X/Y, stog i povratnu programsku banku; A je radni registar. Rezultat se čita iz privatnog RAM-a `$0303`, bez obećanja rezultata u carry zastavici. ROM tijekom rada postavlja DBR/DP na nulu i isključuje decimalnu aritmetiku, pa vraća izvorni kontekst. Scheduler može prekinuti i premjestiti proces u pozivu.

Rezervirani procesni RAM: `$0080–$00F3` za ROM scratch, `$0300–$033D` parametri, `$0500–$05F0` ulaz, `$0900–$0DFF` DOS sektori/ime, `$2000–$21FF` PIO blok, `$4000–$7FFF` sadržaj datoteke. Pozivateljev stog mora ostati izvan tih prostora. Ugrađena ljuska počinje na 1000, sa stogom 1FF0. Nema zajedničkog scratch RAM-a između procesa ni dvostrukog izvođenja istog procesa.

| Adresa | Namjena |
| --- | --- |
| 0300 | Uređaj: 0 disketa, 1 HDD |
| 0301–0302 | Volumen, little-endian |
| 0303 | Rezultat poziva |
| 0304 | Detalj pogreške PIO uređaja |
| 0305–0307 | Brojač dovršenih naredbi, busy, zadnja usluga ljuske |
| 0308 | Znak za ispis |
| 030A–030B | Trag i sektor za sirove 256-bajtne operacije |
| 0310–0311 | Duljina datoteke, little-endian, do 16384 bajta |
| 0312–0313 | Binarna ulazna adresa, little-endian |
| 0314–0315 | Duljina primljenog ulaza |
| 0316–0317 | Ciljni PID za IPC SEND |
| 0318–0319 | IPC RECEIVE timeout, postojeće virtualne kernel jedinice; 0 bez roka |
| 0320–033D | Ime, do 30 ASCII bajtova; kraća imena popunjena nulama |
| 0340–0341 | Zadnji rezultat naredbe ljuske i detalj PIO pogreške, sačuvani tijekom sljedećeg čekanja ulaza |

| A | Usluga |
| --- | --- |
| 01 | Ispiši znak iz 0308 na izlazni uređaj i u CPU konzolni FIFO |
| 02 | Čekaj liniju iz postojećeg ulaznog uređaja; CPU kopira do 240 bajtova na 0500 i dodaje nulu |
| 03 | Prepusti raspored postojećem kernelu |
| 10 | Inicijaliziraj odabrani volumen |
| 11 | Ispiši katalog |
| 12 | BSAVE novog B zapisa iz 4000, duljina/ulazna adresa iz parametara |
| 13 | BLOAD B zapisa u 4000; vraća duljinu i ulaznu adresu |
| 14 | DELETE |
| 20 / 21 | Pročitaj / zapiši logički sektor u/iz 0C00 |
| 30 / 31 | IPC SEND / RECEIVE; CPU kopira sadržaj između 4000 i postojećih kernel FIFO-a |

Za diskovne pozive 0303: 0 OK, 1 parametar/usluga, 2 nema medija, 3 zauzeto, 4 PIO pogreška (0304 detalj), 5 neprepoznat format, 6 postojeće ime, 7 nema prostora ili kataloškog mjesta, 8 neispravna struktura, 9 nepodržan oblik, 10 nema datoteke, 11 zaštita. IPC usluge zadržavaju postojeće kernel rezultate: 1 pun red, 2 nema procesa, 3 neispravan zahtjev, 4 timeout, 5 preduga poruka. To su zasebni skupovi rezultata.

## Datotečni sloj i granice

VTOC je na T17/S0; INIT stvara 15 povezanih kataloških sektora T17/S15…S1. Tragovi 0–2 i 17 rezervirani su. Binarna datoteka ima standardno četverobajtno zaglavlje: 16-bitna ulazna adresa i 16-bitna duljina. Podržana je jedna T/S lista, do 122 parova; trenutačni limit sadržaja od 16 KiB stane u taj oblik. Učitavanje većih datoteka, višestrukih T/S lista, sparse zapisa i drugih tipova izričito se odbija. Kataloški lanci imaju ograničenje i detekciju ciklusa. Ovo ne jamči rad proizvoljnih zaštićenih ili oštećenih Apple disketa.

PIO lease na C06300/C06301 serijalizira cijelu DOS operaciju po uređaju i prati PID pri migraciji. Za to vrijeme drugi raw/nativni/Orao32 klijenti dobivaju BUSY; zamjena medija, zaštite i izvoz slike čekaju kraj operacije. Izlaz procesa i reset oslobađaju lease. C06310 je izlazni uređaj: čitanje spremnosti rezervira jedno FIFO mjesto za PID, a pisanje predaje jedan CPU bajt i oslobađa rezervaciju. Time dvije jezgre ne gube znak pri istodobnom ispisu. Nema DMA ili host filesystem izvršavanja.

BSAVE unaprijed alocira sektore u RAM kopiji VTOC-a, zapisuje sadržaj i T/S listu, zatim VTOC i katalog posljednji. DELETE prvo uklanja kataloški unos, zatim oslobađa sektore. Puni disk i postojeće ime odbijaju se prije prvog zapisa. **Nema dnevnika ni atomarnosti cijele datoteke**: prekid procesa/reset tijekom upisa može ostaviti nedovršenu strukturu ili izgubljene slobodne sektore. Atomarnost pojedinog 512-bajtnog PIO zapisa nije atomarnost DOS operacije. Završite naredbu prije preuzimanja slike.

Tehnička osnova: [Appleov izvorni DOS Manual](https://mirrors.apple2.org.za/ftp.apple.asimov.net/documentation/os/dos/a2_the_DOS_Manual.pdf), [DOS 3.3 izvorni listing](https://mirrors.apple2.org.za/ftp.apple.asimov.net/documentation/source_code/apple2_SRC_DOS_33C_1983.pdf) i [CiderPress2 dokumentacija njegove implementacije](https://ciderpress2.com/formatdoc/DOS-notes.html). Ni jedan od tih izvora sam ne potvrđuje povijesni PEL ABI. Sve adrese, povezivanje s postojećim kernelom i raspored volumena ovdje su naše odluke.

Gradnja: `node firmware/build.cjs` i `node firmware/build-storage.cjs`. Prva reproducira boot, kernel, AV, BOS ROM, ljusku i njihove manifeste; druga zadržani Orao32/nativni PIO alat. Starije verzije i dokumenti ostaju sačuvani. Nema novog objavnog ZIP-a ili udaljene objave.
