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
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.
| TEXT | GUI | |
|---|---|---|
| Risoluzione | VGA 80×25 | VBE grafica |
| Diagnostica | F9 — testuale | F10 — grafica |
| Setup | F2 in entrambe | |
| Boot Menu | F8 in entrambe | |
| Impostazione | Setup → Display, salvata su disco | |
Tutte raggiungibili dalla schermata iniziale, in entrambe le modalità.
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.
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.
| Area | LBA |
|---|---|
| Stage1 firmware | 0 |
| Stage2 firmware + Stage2 NATALIZIOOS (offset 0xC000) | 34 |
| Volume FAT16 | 66 |
| Kernel NATALIZIOOS | 15000 |
| Difetto | Effetto |
|---|---|
| Kernel assente dall'immagine (stub da 86 byte) | non c'era niente da caricare |
| Volume FAT12 dichiarato FAT16 | catena di cluster illeggibile |
| Tabella FAT a cavallo dei 64 KB | INT 13h si bloccava |
| GDT caricata da un offset | selettore invalido → triple fault |
| Salto in modalità protetta non rilocato | saltava nella tabella dei vettori |
call KERNEL_TARGET relativo | saltava a 0x6790 |
| Vettore INT 13h mai salvato | gestore saltava a 0000:0000 |
dap_lba_high non azzerato | 15 secondi per settore |
Splash bloccato su INT 15h AH=86h | countdown mai scaduto |
| Boot Selector senza timeout | attesa infinita |
gui_mode mai derivato dalla configurazione | la scelta GUI non aveva effetto |