# Diskovna podloga Orla 2026 v0.4

17. listopada 2026. Novi sektorski kontroler i CPU upravljački programi za ovaj emulator. Ovo nije rekonstruirani PEL/IDOS/VDOS niti vjerna emulacija uPD765, ATA, MFM/flux zapisa, pogonskog motora ili rotacijske faze.

## Mediji

| Uređaj | Sektora × bajtova | Kapacitet | Adresiranje |
| --- | --- | --- | --- |
| 0 · Floppy 3,5″ HD | 2880 × 512 | 1.474.560 bajtova, uobičajeno 1,44 MB | 80 cilindara, 2 strane, 18 sektora po tragu; LBA 0–2879 |
| 1 · HDD | 40960 × 512 | 20.971.520 bajtova = 20 MiB | LBA 0–40959, bez izmišljene fizičke CHS geometrije |

Floppy geometriju potvrđuju [Appleova tehnička bilješka 14779, str. 1–2](https://savagetaylor.com/TIL/TIL14779.pdf) i [izvor Linuxova floppy upravljačkog programa, v6.12, tablica H1440](https://github.com/torvalds/linux/blob/v6.12/drivers/block/floppy.c#L406-L418). Za pretvorbu floppy CHS u LBA vrijedi `((cilindar*2)+strana)*18+(sektor-1)`, pri čemu je sektor 1–18. HDD veličina je eksplicitna implementacijska odluka za traženih „20 MB”: koristi binarnu veličinu 20 MiB, ne 20.000.000 bajtova.

Novi mediji popunjeni su nulama. Uvoz/izvoz koristi točne sirove sektorske slike (.img), bez zaglavlja, particijske tablice ili datotečnog sustava koji bi emulator sam dodavao. Slika s već postojećim datotečnim sustavom može se umetnuti ako ima odgovarajuću veličinu; ova verzija vidi njezine sektore, ne datoteke. Nema DIR, FAT, DOS boot ni automatskog učitavanja programa iz datoteke. To je podloga za budući BOS/SM i njegov datotečni sustav.

Sadržaj medija je zajednički svim klijentima. Izolirani su registri i FIFO pojedinog zahtjeva, ne podaci na disku. Zapis na isti LBA mijenja isti sektor. Mediji su stanje vanjskih uređaja, nisu dio 8 MiB RAM-a računala. Nijedan upravljački program ne koristi DMA.

## PIO registri

Nativni prozor je `$C06200–$C0621F`. Dostupan je C0 te aktivnom nativnom procesu na C1/C2. Kontekst registara veže se uz PID i prati proces pri migraciji. C3 i neaktivna aplikacijska jezgra nemaju pristup. To je nova logika nadzornog kontrolera, nije svojstvo WDC procesora.

Opcijska Orao32 kartica izlaže isti registar blok na `$A000–$A01F`, s odvojenim kontekstom za svakog gosta i pristupom samo floppyju. Kartica je zadano isključena. Uključenje ne mijenja izvorni ROM; isključenje vraća prijašnji RAM prozor. Pokusni panel uključuje karticu prije učitavanja 6502 programa.

| Pomak | Funkcija |
| --- | --- |
| 00 | R/W izbor uređaja: 0 floppy, 1 HDD; Orao32 dopušta samo 0 |
| 01 | R status: bit 0 BUSY, 1 DRQ, 2 ERROR, 3 MEDIA, 4 PROTECTED, 5 DONE |
| 02 | R rezultat: 0 OK, 1 NO_MEDIA, 2 RANGE, 3 PROTECTED, 4 BUSY, 5 PROTOCOL, 6 UNIT, 7 ABORTED rezervirano |
| 03 | W naredba: 0 ABORT/reset konteksta, 1 READ, 2 WRITE, 3 FLUSH |
| 04–07 | R/W 32-bitni LBA, little endian |
| 08 | R/W sljedeći bajt sektorskog FIFO-a |
| 09–0A | R broj preostalih FIFO bajtova, little endian |
| 0B–0E | R broj sektora uređaja, little endian |
| 0F–10 | R veličina sektora, 512 little endian |
| 11–13 | R cilindri/strane/sektori po tragu; HDD vraća nule |
| 14–17 | R generacija medija, little endian |
| 18 | R potpis $4F |
| 19 | R verzija sučelja 1 |

READ najprije daje BUSY; nakon virtualne latencije kontroler puni vlastiti 512-bajtni buffer i daje DRQ. CPU mora pročitati svih 512 bajtova. To su stvarna CPU čitanja i upisi u RAM. Buffer se ne prepisuje drugim klijentom.

WRITE daje DRQ i prima 512 CPU upisa. Tek tada prelazi u BUSY; po isteku latencije atomarno objavljuje cijeli sektor na medij i postavlja DONE. Nedovršeni FIFO, ABORT, završetak vlasnika ili reset prije dovršetka zahtjeva ne objavljuju djelomični sektor. Ako je virtualni rok već prošao, dovršetak se primjenjuje prije oslobađanja vlasnika. PIO klijent mora provjeriti ERROR i pričekati završetak pisanja.

Približna virtualna latencija floppyja je 10 ms + 3 ms po promijenjenom cilindru; HDD-a 2 ms. To su rekonstrukcijske vrijednosti za blokovni model, ne povijesno izmjereni rokovi ili tvrđenja o točnoj mehanici. Polling koristi virtualni tick, ne zidni sat ili JavaScript timer. CPU jezgre i AV nastavljaju raditi tijekom čekanja. FLUSH daje dovršetak kontrolera; ne sprema datoteku na računalo domaćina.

Po uređaju postoji jedan aktivni fizički prijenos. Drugi klijent dobiva BUSY bez promjene prvog prijenosa; floppy i HDD mogu raditi usporedno. Umetanje, vađenje, promjena zaštite i preuzimanje odbijaju se dok je uređaj zauzet. Pogrešna veličina slike ne mijenja postojeći medij. Nevaljan izbor uređaja blokira iduću naredbu dok se ne odabere valjan uređaj ili ne izvrši ABORT, umjesto pristupa starom uređaju.

## Orao32: što radi i što ne radi

Sačuvani 16-KiB ROM ima SHA-256 `fdfdd0c2da51e32e5b79e4398296345b48588c0f24de0ab2826810a88b155085`. Statička pretraga monitor/BASIC područja nalazi kandidate JSR prema `$B000`, `$B006`, `$B00C`, `$B012`, `$B042` i `$B048`. Sama pretraga nije dokaz pune semantike tih rutina, diskovne geometrije ili kontrolera. U očuvanom profilu ondje nije isporučen pripadajući diskovni firmware. Nismo proizvoljno spojili te ulaze na novi kontroler niti tvrdili da izvorne DOS naredbe sada rade.

Praktično rješenje ove verzije jest novi 6502 strojni program koji izravno koristi pokusnu karticu. Izvorni NMOS interpreter i ROM ostaju byte-identični; JS priključuje samo hardverske registre na instancu. CPU čita/upisuje iste floppy sektore kao nativni program. Nakon prijenosa program skače na izvorni reset ulaz `$FF89`, tako da se monitor i njegovi RAM vektori pravilno inicijaliziraju i pri vrlo ranom pokretanju gosta. Pokretanje ovog programa zamjenjuje dotadašnje izvršavanje i radne podatke u navedenim rasponima; nije transparentna DOS nadogradnja starog programa.

## Pokusni programi i trajnost

`firmware/build-storage.cjs` gradi `programs/native-disk.bin`, `programs/orao32-disk.bin`, manifest i lokalni JS pratitelj bez vanjskih ovisnosti. Oba programa počinju na `$1000`. Parametri su `$1300` uređaj, `$1301` naredba 1/2, `$1302–$1305` LBA, `$1306` rezultat i `$1307` oznaka dovršetka. Sektorski buffer je `$2000–$21FF`. Nativni program završava STP-om; panel nakon očitanja rezultata završava proces i oslobađa prioritet. Orao32 varijanta koristi samo NMOS 6502 instrukcije i vraća izvorni monitor. Ovo su demonstracijski programi, ne završni sistemski pozivi BOS/SM-a.

Reset cijelog računala zadržava umetnute medije, njihove izmjene i zaštitu, ali prekida nedovršene prijenose, briše CPU zadatke i isključuje gostujuće kartice. Lokalni reset Orla32 zadržava medij i instaliranu karticu. Slike treba izričito preuzeti prije zatvaranja ili ponovnog učitavanja stranice. Nema automatskog spremanja u preglednik i nema CPU snapshot sučelja.
