1.1 Compatibilità tra NASM e MASM
1.1.1 Novità di NASM 2.15.5
1.2 Librerie di I/O IOLIBCM e IOLIBEX
2.1 Il POST
2.1.1 La sequenza del POST
2.2 Installazione delle ISR del BIOS
2.2.1 Esempio pratico per le ISR del BIOS
2.3 La BDA - BIOS Data Area
2.4 La memoria CMOS
2.5 La sequenza di boot
2.5.1 Esempio di bootloader
2.5.2 Generazione dell'eseguibile
2.5.3 Installazione del bootloader
3.1 Classificazione delle interruzioni
3.1.1 Interruzioni hardware
3.1.2 Interruzioni software
3.1.3 Eccezioni della CPU
3.1.4 NMI - Non Maskable Interrupt
3.2 Gestione delle interruzioni da parte della CPU
3.3 Funzionamento del PIC 8259
3.3.1 Collegamento dei PIC in cascata
3.4 Programmazione del PIC 8259
3.4.1 Comandi di inizializzazione del PIC
3.4.2 Comandi operazionali del PIC
3.5 Un esempio pratico: interfaccia con la tastiera
3.5.1 Considerazioni sulla programmazione della tastiera
4.1 Funzionamento del dispositivo RTC + RAM
4.2 Struttura dell'area User Buffer della RAM-CMOS
4.2.1 Registro A
4.2.2 Registro B
4.2.3 Registro C
4.2.4 Registro D
4.2.5 Gestione dei diversi tipi di interruzione
4.3 Struttura dell'area Storage Registers della RAM-CMOS
4.3.1 Il millennium bug
4.4 Programmazione del dispositivo RTC + RAM
4.5 Un esempio pratico: orologio/calendario + allarme
4.5.1 Vettori di puntatori
5.1 Funzionamento del dispositivo PIT 8254
5.1.1 Struttura interna di un timer
5.1.2 Il control word register
5.2 Modalità operative dei timer
5.2.1 Modo 0: Interrupt on terminal count
5.2.2 Modo 1: Hardware retriggerable one-shot
5.2.3 Modo 2: Rate generator
5.2.4 Modo 3: Square wave mode
5.2.5 Modo 4: Software triggered strobe
5.2.6 Modo 5: Hardware triggered strobe
5.3 Impiego dei PIT 8254 sui PC
5.3.1 Timer 0 - PIT 1
5.3.2 Timer 1 - PIT 1
5.3.3 Timer 2 - PIT 1
5.3.4 Il PIT 2
5.4 Programmazione dei PIT 8254
5.5 Esempi pratici
5.5.1 Visualizzare l'orologio del BIOS
5.5.2 Visualizzare i ticks del Timer 0 - PIT 1
5.5.3 Riprogrammare il Timer 0 - PIT 1
5.5.4 Gestione dello speaker attraverso il Timer 2 - PIT 1
6.1 Organizzazione della memoria base sotto DOS
6.1.1 Vettori di interruzione - da 00000h a 003FFh
6.1.2 Area dati ROM-BIOS - da 00400h a 004FFh
6.1.3 Area comunicazioni del DOS - da 00500h a 006FFh
6.1.4 Kernel del DOS, Device Driver, etc - da 00700h a ?????h
6.1.5 Disponibile per i programmi DOS - da ?????h a 9FFFFh
6.1.6 Buffer video per la modalità grafica - da A0000h a AFFFFh
6.1.7 Buffer video per la modalità testo in b/n - da B0000h a B7FFFh
6.1.8 Buffer video per la modalità testo a colori - da B8000h a BFFFFh
6.1.9 Video ROM BIOS - da C0000h a CFFFFh
6.1.10 Disponibile per altri BIOS e buffer - da D0000h a EFFFFh
6.1.11 PC ROM BIOS - da F0000h a FFFFFh
6.2 Suddivisione della memoria base sotto DOS
6.3 Granularità della memoria base sotto DOS
6.4 La catena dei Memory Control Blocks
6.5 Servizi DOS per la gestione dei blocchi di memoria
6.5.1 Allocazione di un blocco di memoria
6.5.2 Deallocazione di un blocco di memoria
6.5.3 Ridimensionamento di un blocco di memoria già allocato
6.5.4 Codici di errore
6.6 Restituzione della memoria allocata in eccesso per un programma
6.6.1 Riduzione del program segment di un eseguibile COM
6.6.2 Riduzione del program segment di un eseguibile EXE
6.7 Strategie di allocazione della memoria
6.8 Esempi pratici
7.1 La HMA - High Memory Area
7.2 La memoria estesa e lo standard XMS
7.2.1 Definizioni convenzionali
7.2.2 Installazione dell'eXtended Memory Manager
7.3 Interfaccia di programmazione XMS
7.4 Servizi XMS
7.4.1 Servizio n. 00h: Get XMS Version Number
7.4.2 Servizio n. 01h: Request High Memory Area
7.4.3 Servizio n. 02h: Release High Memory Area
7.4.4 Servizio n. 03h: Global Enable A20
7.4.5 Servizio n. 04h: Global Disable A20
7.4.6 Servizio n. 05h: Local Enable A20
7.4.7 Servizio n. 06h: Local Disable A20
7.4.8 Servizio n. 07h: Query A20
7.4.9 Servizio n. 08h: Query Free Extended Memory
7.4.10 Servizio n. 09h: Allocate Extended Memory Block
7.4.11 Servizio n. 0Ah: Free Extended Memory Block
7.4.12 Servizio n. 0Bh: Move Extended Memory Block
7.4.13 Servizio n. 0Ch: Lock Extended Memory Block
7.4.14 Servizio n. 0Dh: Unlock Extended Memory Block
7.4.15 Servizio n. 0Eh: Get EMB Handle Information
7.4.16 Servizio n. 0Fh: Reallocate Extended Memory Block
7.4.17 Servizio n. 10h: Request Upper Memory Block
7.4.18 Servizio n. 11h: Release Upper Memory Block
7.4.19 Servizio n. 12h: Reallocate Upper Memory Block
7.5 Libreria XMSLIB
7.6 Esempi pratici
7.6.1 Accesso alla HMA via XMS
7.6.2 Conversione in linguaggio C del programma HMATEST.ASM
7.6.3 Accesso alla memoria estesa via XMS
8.1 Lo standard LIM-EMS 4.0
8.1.1 Definizioni convenzionali
8.1.2 Installazione dell'Expanded Memory Manager
8.2 Interfaccia di programmazione EMS
8.3 Servizi EMS
8.3.1 Servizio n. 40h: Get EMM Status
8.3.2 Servizio n. 41h: Get Page Frame Address
8.3.3 Servizio n. 42h: Get Unallocated Page Count
8.3.4 Servizio n. 43h: Allocate Pages
8.3.5 Servizio n. 44h: Map/Unmap Handle Pages
8.3.6 Servizio n. 45h: Deallocate Pages
8.3.7 Servizio n. 46h: Get Version
8.3.8 Servizio n. 47h: Save Page Map
8.3.9 Servizio n. 48h: Restore Page Map
8.3.10 Servizio n. 4Bh: Get Handle Count
8.3.11 Servizio n. 4Ch: Get Handle Pages
8.3.12 Servizio n. 4Dh: Get All Handle Pages
8.3.13 Servizio n. 4E00h: Get Page Map
8.3.14 Servizio n. 4E01h: Set Page Map
8.3.15 Servizio n. 4E02h: Get & Set Page Map
8.3.16 Servizio n. 4E03h: Get Size of Page Map Save Array
8.3.17 Servizio n. 5000h: Map/Unmap Multiple Handle Pages - Logical/Physical Method
8.3.18 Servizio n. 5001h: Map/Unmap Multiple Handle Pages - Logical/Segment Method
8.3.19 Servizio n. 51h: Reallocate Pages
8.4 Libreria EMSLIB
8.5 Esempi pratici
8.5.1 Trasferimento di stringhe in memoria espansa