# Linea A20

La linea A20 o linea di indirizzamento A20 è una delle tante linee elettriche che fanno parte del bus di sistema di un computer basato su architettura x86. In particolare, la linea A20 viene utilizzata per la trasmissione del 21° bit attraverso il bus di indirizzamento.
Un microprocessore, di solito, avrà un numero di linee di indirizzamento pari al logaritmo in base due del suo spazio di indirizzamento fisico. Per esempio, un Intel 80386, che ha uno spazio di indirizzamento di 4 GiB, richiede 32 linee, denominate A0, A1, ..., A31. Le linee prendono il nome dal bit dell'indirizzo che trasmettono. Perciò, la linea A0 trasmetterà il bit meno significativo, cioè il bit 0 (il primo bit). La linea A20 trasmette il bit 20 (cioè il 21º bit) , e diviene attiva nel momento in cui si raggiunge 1 MiB o 2$^{20}$. (Si noti che, nel caso dell'80386, le linee A0 ed A1 non esistono di per sé, dal momento che questo processore indirizza la memoria con parole da 4 bytes, indicando quali sono i 4 byte significativi per quel particolare trasferimento di memoria tramite linee separate Byte Enable).

## Storia

Quando IBM progettò l'IBM PC AT, decise di utilizzare i nuovi e più avanzati processori Intel 80286, che non erano del tutto compatibili con i precedenti Intel 8086 e Intel 8088 quando funzionavano in modalità reale. I precedenti microprocessori x86 non avevano le linee di bus da A20 a A31; per questo motivo, indirizzi che superavano il primo megabyte non sarebbero stati visibili al processore. L'80286 poteva, invece, indirizzare fino a 16 megabyte di memoria.
Molti programmi funzionavano e funzionano ancora secondo il comportamento appena descritto, e diventava quindi una procedura usuale accedere ai primi 64 kB di memoria senza modificare i registri di segmento del processore. Per rimanere compatibile con questi programmi, IBM decise di risolvere il problema da sé, a livello di scheda madre.
Venne inserita una porta logica sulla linea A20 tra il processore e il bus di sistema, che venne quindi denominata Porta A20. La porta A20 può essere abilitata o disabilitata via software per permettere od impedire al bus di indirizzamento di ricevere un segnale dalla linea A20. Viene settata opportunamente durante l'esecuzione di programmi che si basano sulle vecchie specifiche. Quando il sistema viene avviato, il BIOS abilita la linea A20 durante il conteggio e l'esame della memoria RAM installata, e la disabilita prima di trasferire il controllo al sistema operativo.
In origine, la porta logica era una porta collegata al controller per la tastiera Intel 8042. La sua gestione era un processo relativamente lento. Sono stati in seguito introdotte delle alternative che permettono un multitasking più efficiente per i programmi che richiedono l'accesso all'intera memoria fisica installata.
Si noti che la disconnessione della linea A20 non impedirebbe l'accesso a tutta la memoria, ma solo a quella nel range 1 MB-2 MB, 3 MB-4 MB, 5 MB-6 MB ecc. Il software in modalità reale poteva aver problemi soltanto con la memoria che si trovasse appena oltre il primo megabyte, e quindi la soluzione trovata rispondeva perfettamente alle esigenze.
Col passare del tempo, l'espressione linea A20 venne sempre più confusa dal grande pubblico con Porta-A20.
L'abilitazione della porta A20 è uno dei passaggi che un sistema operativo in modalità protetta x86 compie durante la procedura di avvio, spesso prima che il bootloader passi il controllo al kernel (ad esempio, nel caso di Linux).
La modalità 8086 virtuale, introdotta con il processore Intel 80386, permette di simulare il comportamento richiesto dai programmi in modalità reale attraverso l'uso delle caratteristiche di memoria virtuale proprie del processore: la memoria fisica può essere associata a più di un indirizzo virtuale, cosa che permette alla memoria associata al primo megabyte di memoria virtuale di esserlo anche al secondo megabyte. Un sistema operativo appositamente modificato è in grado di intercettare i cambiamenti dello stato della linea A20, e di compiere i cambiamenti necessari allo spazio d'indirizzamento della memoria virtuale - cosa che rende inutile la disabilitazione della porta A20.
Il processore Intel 80486 aggiunse un pin speciale denominato A20M#, che quando è in funzione forza il 20° bit dell'indirizzo fisico al valore zero per tutti gli accessi alla memoria cache o quella esterna da parte del processore. Questa nuova caratteristica fu vantaggiosa per i costruttori di schede madri, dal momento che rende sovrabbondante parte della circuiteria necessaria all'implementazione della porta A20. Il software ha, comunque, la necessità di gestire la porta e deve rapportarsi a periferiche esterne (il chipset) per farlo.