NATALIZIOOS × NATALIZIOFIR

HOME
Il firmware avvia il sistema operativo — sequenza completa
v0.2.4.2-DEV · FUNZIONANTE

Come si avvia

Come un computer vero: il firmware non carica il kernel, carica il bootloader, che poi carica il kernel.

NATALIZIOFIR 6.10  (POST, Setup F2, Boot Menu F8, Diagnostica F9/F10)
        ↓
   Stage2 NATALIZIOOS
        ↓
   Boot Selector → boot animation → login → menu ambienti → Desktop
make run-firmware

Le due modalità del firmware

NATALIZIOFIR può presentarsi in modalità testuale o grafica. La scelta si fa dal Setup (F2 → Display), viene salvata su disco e applicata al riavvio successivo.

Modalità TEXT

Schermata testuale — POST, versione firmware e tasti funzione. In questa modalità la diagnostica si apre con F9.
Schermata testuale — POST, versione firmware e tasti funzione. In questa modalità la diagnostica si apre con F9.

Modalità GUI

Schermata grafica in VBE — sfondo animato, barra dei tasti in basso e barra di avanzamento. Qui la diagnostica si apre con F10, nella sua versione grafica.
Schermata grafica in VBE — sfondo animato, barra dei tasti in basso e barra di avanzamento. Qui la diagnostica si apre con F10, nella sua versione grafica.
TEXTGUI
RisoluzioneVGA 80×25VBE grafica
DiagnosticaF9 — testualeF10 — grafica
SetupF2 in entrambe
Boot MenuF8 in entrambe
ImpostazioneSetup → Display, salvata su disco

Le funzioni del firmware

Tutte raggiungibili dalla schermata iniziale, in entrambe le modalità.

F2 — BIOS Setup Utility

Setup completo: menu Main, Adv, Boot, Sec, Lang, Upd, Dbg, Diag, News, Exit. In basso la voce Display, che sceglie fra modalità TEXT e GUI.
Setup completo: menu Main, Adv, Boot, Sec, Lang, Upd, Dbg, Diag, News, Exit. In basso la voce Display, che sceglie fra modalità TEXT e GUI.

F8 — Boot Menu

Scelta del dispositivo di avvio: OS.BIN (FAT16) o BOOT.EFI.
Scelta del dispositivo di avvio: OS.BIN (FAT16) o BOOT.EFI.

F9 e F10 — Diagnostica

La diagnostica esiste in due versioni: F9 testuale e F10 grafica, in base alla modalità impostata nel Setup. Non sono riuscito a fotografarle: le loro routine, in questo ambiente di test, ritornano subito senza disegnare. Sono raggiungibili premendo i tasti su una macchina reale.

La sequenza di avvio

1
NATALIZIOFIR 6.10 — POST completato, Setup / Boot Menu / Diagnostica disponibili
NATALIZIOFIR 6.10 — POST completato, Setup / Boot Menu / Diagnostica disponibili
2
Boot Selector di NATALIZIOOS — scelta fra modalità testuale e grafica
Boot Selector di NATALIZIOOS — scelta fra modalità testuale e grafica
3
Boot animation — rilevamento hardware
Boot animation — rilevamento hardware
4
Login grafico a 1024×768
Login grafico a 1024×768
5
Menu di selezione ambiente
Menu di selezione ambiente
6
Desktop con le app native
Desktop con le app native

I due difetti che bloccavano tutto

Tasti fantasma. Lo splash del firmware rilevava i tasti con INT 16h AH=01, che segnalava dati disponibili anche senza che nessuno premesse nulla. Se lo scancode fantasma valeva 0x3C (F2) o 0x43 (F9), il firmware apriva da solo Setup o Diagnostica: da lì partiva l'aggiornamento firmware, falliva, e restava bloccato.

Individuato leggendo i registri a macchina ferma — CS=0800 EIP=4907 — e incrociandoli col listato NASM: era esattamente la riga .sa_fail_wr.

Corretto leggendo i puntatori testa/coda del buffer tastiera del BIOS (0040:001A e 0040:001C), la fonte autorevole. F2, F8, F9 e F10 restano pienamente funzionanti in entrambe le modalità.

int 0x13 che non ritornava. Al passaggio di controllo, la lettura del bootloader portava i dati a destinazione (verificato byte per byte a 0x7E00) ma l'istruzione successiva non veniva mai eseguita — sia col gestore del firmware sia con quello originale del BIOS.

Risolto eliminando la lettura: lo Stage2 di NATALIZIOOS è incorporato dentro l'immagine di stage2 del firmware, all'offset 0xC000. Stage1 ne carica già 64 KB, quindi il bootloader è in memoria a 0x14000 senza toccare il disco.

Layout dell'immagine

AreaLBA
Stage1 firmware0
Stage2 firmware + Stage2 NATALIZIOOS (offset 0xC000)34
Volume FAT1666
Kernel NATALIZIOOS15000

Gli altri difetti corretti

DifettoEffetto
Kernel assente dall'immagine (stub da 86 byte)non c'era niente da caricare
Volume FAT12 dichiarato FAT16catena di cluster illeggibile
Tabella FAT a cavallo dei 64 KBINT 13h si bloccava
GDT caricata da un offsetselettore invalido → triple fault
Salto in modalità protetta non rilocatosaltava nella tabella dei vettori
call KERNEL_TARGET relativosaltava a 0x6790
Vettore INT 13h mai salvatogestore saltava a 0000:0000
dap_lba_high non azzerato15 secondi per settore
Splash bloccato su INT 15h AH=86hcountdown mai scaduto
Boot Selector senza timeoutattesa infinita
gui_mode mai derivato dalla configurazionela scelta GUI non aveva effetto
Undici sessioni di lavoro. Il metodo che ha funzionato non sono stati gli screenshot, ma il log delle eccezioni di QEMU, la lettura dei registri a macchina ferma e l'ispezione diretta della memoria — incrociati col listato NASM per risalire dall'indirizzo alla riga di codice.