HOME
Indice:
Overview
Architettura
Tasti
Config
SFU
Lingue
v0.x
v1.x
v2.x
v3.x
v4.x
v5.x
v6.x
Diagnostic Suite
Fix
Build
Roadmap
1. Overview del progetto
NATALIZIOFIR_32 è il firmware/bootloader custom per il sistema operativo NATALIZIOOS .
Supporta sia Legacy BIOS sia un percorso UEFI-style (NatalizioPkg), tutto codice originale in assembly (NASM), senza dipendenze TianoCore/EDK II.
Target: IA-32 (solo 32-bit al momento)
Partizionamento: Hybrid (Protective MBR + GPT)
Filesystem: FAT16 (OS.BIN + BOOT.EFI)
Test: QEMU su WSL
Policy: Legacy BIOS non deprecato — dual-path first-class
SFU: capsule NFUP (UPDATE / ROLLBACK / USB)
i18n: EN · IT · ES · DE
Linea corrente: v6.10 (Diagnostic Suite F10 + Diag Text F9; firmware-only)
Componente Percorso Ruolo
Stage1 bootloader/stage1/boot.asmProtective MBR, carica Stage2 (128 settori)
Stage2 bootloader/stage2/stage2.asmGPT, FAT16, splash, setup, boot, SFU RAM map
Legacy legacy/*.asmINT 10h/13h/15h/16h/1Ah, config, splash, bootmenu
Setup / HII NatalizioGui/Hii/Form Browser AMI-style + Update tab
GUI / VBE NatalizioGui/Fb/, Engine/Framebuffer, theme, font, input
UEFI path uefi/, NatalizioDxe/, NatalizioPkg/Boot/Runtime Services, protocolli
Capsules scripts/make_capsules.pyNFUP UPDATE.CAP / ROLLBACK.CAP
2. Architettura dual-path
Legacy BIOS path
Real Mode → IVT handlers (INT 10h video, 13h disk, 15h memory, 16h keyboard, 1Ah RTC) → splash → Setup opzionale → GPT/FAT → carica OS.BIN o jump PE.
UEFI Natalizio path
System Table a 0x7300, Boot Services (AllocatePool, OutputString, LoadImage stub, Events, TPL…), Runtime Services (GetTime, Get/SetVariable, ResetSystem), protocolli Console / BlockIo / SimpleFS / DevicePath. Nessuna dipendenza esterna.
[Power On]
│
▼
Stage1 (MBR 0xEE) ──► Stage2 @ 0x8000 (128 settori da LBA 34)
│
├─ DS/ES/SS=CS, text mode (v5.10)
├─ load_config (LBA 161) [verbose, choice, timeout, PIN, SFU status, lang]
├─ gui_init (VBE se GUI e non TEXT)
├─ show_splash (countdown / F2 / F8 / Enter) [testi i18n]
│ ├─ F2 → Form Browser (HII Setup)
│ ├─ F8 → Boot Menu rapido
│ └─ Enter / timeout → boot
├─ install_legacy_bios (IVT)
├─ parse GPT + FAT16
└─ boot_choice → OS.BIN | BOOT.EFI | Halt
3. Tasti (splash e Setup)
Contesto Tasto Azione
Splash F2 / QApre BIOS Setup (Form Browser)
Splash F8Boot Menu rapido (1–4)
Splash Enter / SpaceBoot immediato
Splash nessun tasto Auto-boot dopo timeout (default 5 s)
Setup ← →Cambia tab
Setup Main E I S DLingua EN / IT / ES / DE
Setup 1–4Boot option
Setup 0, 5–9Timeout auto-boot (0 = infinito)
Setup G / TGUI splash / TEXT detailed POST
Setup RReset defaults
Setup Security P / DImposta / disabilita PIN
Setup Update SU GIÙUPDATE → ROLLBACK → USB
Setup Update 1 / 2Seleziona UPDATE.CAP / ROLLBACK.CAP
Setup Update INVIO / U / AApplica capsule selezionata
Setup Update FRiscan prototype / USB
Setup F10Save & Exit
Setup ESCDiscard e esci
Boot option (firmware-only, v5.9+):
Tasto boot_choice Target
10 OS.BIN (FAT16)
21 BOOT.EFI (UEFI PE32)
4. Config persistente
Settore LBA 161, magic little-endian NF32 (0x3233464E).
Offset Campo Valori
0–3 Magic NF32
4 Version config layout ver
5 boot_verbose0=GUI, 1=TEXT POST
6 boot_choice0=OS.BIN, 1=BOOT.EFI, …
7 boot_timeout0–9 secondi (0=wait forever)
8–9 PIN (XOR-obfuscated) chiave 0x5C (v4.10)
10 setup_pin_en0/1
11 sfu_last_result0=none, 1=OK, 2=FAIL
12 sfu_last_slot0=UPDATE, 1=ROLLBACK, 2=USB
13–14 sfu_last_veres. 0x0401
15 ui_lang0=EN, 1=IT, 2=ES, 3=DE
5. System Firmware Update (SFU)
Capsule NFUP (magic 0x5055464E). Header 512 byte + payload Stage2. Apply scrive su LBA 34 (Stage2) settore per settore con barra di progresso, poi reboot.
Sorgente Dove Note
Update firmware prototype LBA 70 = UPDATE · LBA 107 = ROLLBACK Voci separate in Setup → Update
Update from USB Disco BIOS 0x81, CAP a LBA 0 make run-usb
Checksum header su payload[0..15] (path RAM)
Fallback: se CAP non in RAM → lettura da disco (v4.9)
Dopo flash: stato salvato in config (Main: Last SFU)
UPDATE e ROLLBACK devono essere visibilmente diversi (stringhe versione patchate a lunghezza uguale)
6. Lingue (da v4.10)
In tab Main / Lang : E=English · I=Italiano · S=Español · D=Deutsch. Persistente su LBA 161.
Localizzati: titoli SFU, voci Update, warning flash, hint splash (F2 / INVIO), tab Setup, News.
7. Changelog — fase v0.x (base boot)
Ver Contenuto
v0.0 MBR bootloader + Protected Mode + load OS da settore 2
v0.1 Stage1 Protective MBR (0xEE) + Stage2 + layout hybrid
v0.2 GPT Header reale (EFI PART), partition array, CRC32, backup GPT
v0.3 Parse GPT dinamico + Extended Read INT 13h AH=42h (DAP)
v0.4 Scan multi-partizione, nome UTF-16LE NATALIZIOFIR
v0.5 FAT12: BPB, root, chain → OS.BIN come file
v0.6 Passaggio a FAT16
v0.7 Modulo Legacy: INT 10h / INT 16h installati in IVT
v0.8 INT 13h (disk + check AH=41h); INT 10h cursor/mode
v0.9 PM Service API @ 0x7000 (putchar, puts, clear… magic NFIR)
8. Changelog — fase v1.x (BIOS Setup + UEFI minimi)
Ver Contenuto
v1.0 INT 15h / INT 1Ah; avvio UEFI 32-bit (efi.h, efi_main, PE32)
v1.0.1 BIOS Setup Utility + Boot Selector (F2/DEL)
v1.0.2–1.0.4 Accesso Setup affidabile; wait infinito fino a tasto
v1.1 Boot Services minimi (OutputString, AllocatePool, Stall…)
v1.2 Runtime Services (Get/SetTime, Get/SetVariable, ResetSystem)
v1.3 FAT: OS.BIN + BOOT.EFI; opzione 2 carica PE @ 0x100200
v1.4 Handoff SystemTable (0x7300) a BOOT.EFI
v1.5–1.5.3 Setup AMI-style (tab Main/Boot/Exit); fix Stage2 size / IVT order
v1.6–1.6.1 Splash NATALIZIOOS; rename progetto → NATALIZIOFIR_32
v1.7 Modalità GUI vs Detailed (D/F8); print_info silenzioso in GUI
v1.8 G/T in Setup; POST Phoenix-style in TEXT
v1.9 Config persistente (magic NF32); GUI/TEXT sopravvive al reboot
9. Changelog — fase v2.x (EDK-style, no deps)
Ver Contenuto
v2.0 Struttura NatalizioPkg / Boot / Dxe / Bds — 100% codice proprio
v2.1 Protocol DB (install/locate); doc dual-path
v2.2 Console DXE + LocateProtocol; ConOut su System Table
v2.3 Block I/O, GetMemoryMap, SimpleFS, ExitBootServices
v2.4 LoadImage/StartImage stubs + Device Path
v2.5 Event services (Create/Check/Close/Wait) + UnloadImage
v2.6 HandleProtocol + InstallConfigurationTable (CFG_DB 0x7800)
v2.7 RaiseTPL/RestoreTPL, SetWatchdogTimer, CalculateCrc32, CopyMem/SetMem
v2.8 Stage2 → 128 settori (~64KB); CONFIG_LBA=161; keyboard INT 16h
v2.9 Makefile size guard; clamp boot flags; magic LE
10. Changelog — fase v3.x (GUI, HII, polish)
Ver Tag Contenuto
v3.0 UI Setup/splash AMI/Phoenix-style (chrome VGA text, tab, help)
v3.1 GUI NatalizioGui: VBE/VESA, GOP stub, Engine (theme/font/window/widgets)
v3.1.1–3.2.3 FIX Black screen: VBE probe-only / text forced; GDT rename; movzx
v3.3 FB VBE LFB Protected Mode (32/24/16 bpp) + fallback text
v3.4 UI Raffinamento Setup Aptio-like
v3.5–3.5.5 HII Form Browser da zero (no IFR opcodes NASM); TEXT mode skip VBE
v3.6 Boot F8 Boot Menu rapido; POST messaggi aggiornati
v3.7 Splash Countdown auto-boot 5 s; RTC time in Setup
v3.8 Config Timeout 0–9 configurabile e persistente; System Date; ESC=Discard / F10=Save
v3.9 Info CPUID vendor in Main; R =Reset defaults; POST beep speaker
v3.10 FIX System Time/Date : salva BCD prima di usare DH/DL; cursore rtc_col
11. Changelog — fase v4.x (SFU, USB, i18n, security)
Ver Tag Contenuto
v4.0 ARCH Inizio serie 4.x; consolidamento Setup / Boot / Security / Exit
v4.1 FIX Fix generali, hardening base, revisione form browser
v4.2 FEAT Raffinamento path boot e servizi legacy/UEFI
v4.3 SFU Capsule NFUP interne; splash text professionale; mini file manager Update
v4.4 DISK Disk info in Setup (INT 13h AH=08h); TEXT POST righe Disk / Config LBA / progress GPT
v4.5 SFU Integrazione SFU in tree ufficiale; stringhe versione patchabili; barra flash settore-per-settore
v4.5.x FIX UPDATE e ROLLBACK su LBA distinti (70 / 107); apply da RAM; fix label VBE duplicate; progress lento/preciso
v4.6 SEC Checksum NFUP su payload prima del flash; baseline stringhe 4.6
v4.7 CFG Last SFU persistente (result/slot/ver) mostrato in Main tab
v4.8 USB Tab Update: voci separate Update firmware prototype e Update from USB (drive 0x81); make run-usb
v4.8.x FIX Navigazione SU/GIÙ tra UPDATE / ROLLBACK / USB; ripristino lista CAP dopo USB; ES=CS su force list; fallback disco se “Not NFUP”
v4.9 FIX Stabilizzazione SFU disk/RAM; force list sempre UPDATE+ROLLBACK; versioni 4.9 / 4.9.1
v4.10 i18n SEC Lingue EN/IT/ES/DE (Main E/I/S/D, persistenti); PIN XOR 0x5C; wipe coda config; clamp sel CAP
Layout disco rilevante (v4.x / v5.x firmware-only)
LBA Contenuto
0 Protective MBR
1 GPT Header
2–33 Partition entries
34+ Stage2 (target flash SFU)
70 UPDATE.CAP (prototype)
107 ROLLBACK.CAP (prototype)
161 Config NF32
162+ Volume FAT16 (OS.BIN, BOOT.EFI, …)
~1800 / ~1900 CAP raw (build recenti SFU)
~2000 Log ring NFLOG (v5.x se abilitato)
Setup Main (v4.10+) — campi visualizzati
Firmware Version / Architecture / Legacy ACTIVE / UEFI ACTIVE
System Time / System Date (RTC BCD)
CPU Vendor (CPUID)
Last SFU : OK/FAIL UPDATE|ROLLBACK|USB
Language: English|Italiano|Espanol|Deutsch
Boot options, Display G/T, timeout
12. Changelog — fase v5.x (Setup avanzato, PE experiment, normalizzazione)
Ver Tag Contenuto
v5.1 UI Setup multi-tab; stringhe e layout base serie 5
v5.2 FEAT Persistent log storage; Advanced/Debug espansi; tab News separata da Main
v5.3–5.5 FEAT Integrazione feature 5.0.13-internal; 10 tab Setup; LOG LBA; branding
v5.6–5.7 UI Animazioni splash e Setup; polish footer (non-distruttivo)
v5.8 FEAT Linea stabile pre-PE: animazioni, tab complete, SFU, i18n
v5.9 ARCH Progetto Linux PE chiuso — ritorno al firmware-only (base = stack 5.8 pulito, senza kernel/initrd nel bootloader)
v5.10 FIX Stage2: DS/ES/SS=CS + stack; text mode + banner sempre visibile; splash testo default; text mode prima del PM; Makefile senza doppi run; branding 5.10
Tab Setup (linea 5.x)
Main | Adv | Boot | Sec | Lang | Update | Debug | Diag | News | Exit
Debug : console, POST/CPUID/memoria, CMOS-RTC, serial, dump live
Adv : quiet/debug/log/legacy e altre opzioni avanzate
News : changelog build (separata da Diag)
v5.10 — dettaglio fix stabilità
All’ingresso Stage2: cli, DS=ES=SS=CS, SP=0x7C00, sti
Mode VGA testo 03h + messaggio NATALIZIOFIR Stage2 v5.10 sempre stampato
Se TEXT verbose: skip VBE; altrimenti gui_init solo se path GUI ok
Prima del Protected Mode: di nuovo mode 03h (OS.BIN su B8000)
Makefile: run-wsl / run-usb-wsl al posto di target run duplicati
Niente Linux PE nel firmware (esperimento archiviato a parte)
Diagnostic Suite (v6.5-F9 → v6.10)
Introdotto nella serie 6.x . Due percorsi separati:
Tasto Quando Cosa
F9Solo splash TEXT Diagnostic Text (menu in-process, legacy/f9_launch.asm)
F10Solo splash GUI Diagnostic Suite binary @ LBA 3000 (trampoline → 0:8000)
Suite shipping: v0.4 (legacy/diag_suite.bin, 32 KB)
Trampoline: load LBA 3000 → 0x2000:0, copia a 0:8000, DS=ES=SS=0, SP=0x7C00
Menu: CPU / MEMORY / STORAGE / DISPLAY / BOOT / SETTINGS + TOOLS (sysinfo, about, SFU, SMART, HALT, REBOOT)
F9 su splash GUI è ignorato ; F10 su splash TEXT fa fallback al menu text
12b. Changelog — fase v6.x (Secure Boot stub, F9/F10, Diagnostic Suite)
Ver Tag Contenuto
v6.0–6.4 FEAT FIX
Secure Boot stub in Setup; News; stabilizzazione form_browser / simboli
v6.5 FEAT
Stage2 CS=0x800 ORG 0 (fino a ~64 KB); linea stabile pre-F9
v6.5-F9 DIAG
F9 diagnostics; path text stabile; tentativi GUI placeholder
v6.6 FIX
Label diag duplicate; trampoline / black screen
v6.7 UI
Barra progresso GUI centrata/sottile; hint F10; version polish
v6.8 DIAG
Diagnostic Suite (ex placeholder); F10=Suite, F9=text only; trampoline DS=0
v6.8.2 FIX
Binary Suite stabile; solo barra progresso (niente digit/star GDT thrash che bloccava F10)
v6.9 DIAG
Suite aggiornata a v0.4 @ LBA 3000; stringhe 6.9
v6.10 FIX
Stringhe 6.10; Makefile banner; F10 keyboard flush + signature soft; audit generale
Layout disco aggiunto in v6.x
LBA Contenuto
3000 Diagnostic Suite binary (32 KB, v0.4)
Il resto del layout (MBR/GPT/Stage2@34/config@161/FAT/CAP) resta come in v4.x–v5.x.
13. Problemi risolti (sintesi 3.x–6.x)
Problema Fix
Schermo nero VBE Probe-only / text fallback; multi-bpp (v3.1.1–3.3, v4.5); text default (v5.10)
Schermo nero post-Stage1 OK Segmenti Stage2 + banner + mode 03h (v5.10)
Form Browser NASM IFR / st0 Draw esplicito; label status0 (v3.5.x)
TEXT mode rotto Skip VBE se boot_verbose=1 (v3.5.5)
System Time/Date errati Salva BCD + rtc_col (v3.10)
Stage2 troncato / tastiera morta 128 settori + INT 16h (v2.8)
UPDATE = ROLLBACK (stesso LBA) LBA 70 vs 107 (v4.5.x)
Update failed DISK/CAP Buffer RAM / disk fallback / checksum (v4.5–4.9)
Lista CAP scompare dopo USB sfu_force_proto_list + ES=CS (v4.8.x)
Not NFUP capsule Apply legge CAP da disco se non in RAM (v4.9)
Solo inglese i18n EN/IT/ES/DE (v4.10)
Tab Diag sparito / merge News 10 tab separate, limiti FB (v5.2+)
Makefile warning override run run-wsl / run-usb-wsl (v5.10)
DISK ERROR DAP Letture a chunk 16/64 settori (v2.8 / Stage1)
F10 apriva Setup (scancode 0x44) Rimosso map F10→Setup (v6.7+)
F10 nero dopo load Suite Trampoline DS=ES=SS=0 (v6.8)
F10 freeze + numeri/stelle splash Disabilitati digit/twinkle GDT ogni tick (v6.8.2)
F9 stringhe corrotte Menu text label esplicite (v6.5-F9+)
Stage2 troppo grande / label wrap CS=0x800 ORG 0 (v6.5+)
14. Build e test
unzip -o NATALIZIOFIR_32-v6.10.zip
cd NATALIZIOFIR_32
make clean && make && make run
# Log atteso:
# F10 Diagnostic Suite : LBA 3000 (32768 bytes)
# Image OK (v6.10 + Diagnostic Suite)
# QEMU tipico
qemu-system-i386 -m 64 -vga std \
-drive format=raw,file=build/nataliziofir.img
Prerequisiti: nasm, python3, qemu-system-i386. Dopo make verificare che QEMU usi build/nataliziofir.img appena generato.
Splash GUI: Setup → G → Save → reboot → F10 per la Diagnostic Suite.
15. Roadmap
ESC dalla Suite → soft return al firmware
GUI splash: countdown/stelle senza GDT thrash
GUI splash grafica affidabile (LFB/BMP) senza regressioni
HII: IFR/VFR parser reale
Secure Boot stub / firma capsule
Altre lingue (FR, PT, …)
Track 64-bit NATALIZIOFIR_64 (futuro)
Integrazione kernel NATALIZIOOS
Linux PE: chiuso come esperimento (solo archivio separato se presente)