KERNAL
# KERNAL

Il KERNAL (acronimo per Keyboard Entry Read, Network, And Link) è il nome del kernel del sistema operativo residente nella ROM degli home computer a 8 bit prodotti da Commodore International.

## Storia

Il KERNAL nacque per il Commodore PET del 1977 e successivamente fu integrato anche nei Commodore VIC-20, Commodore 64, Commodore 16, Commodore Plus/4 e Commodore 128. Fu inizialmente scritto da John Feagans, che introdusse l'idea di separare le routine di base del sistema operativo e fu poi ulteriormente sviluppato da più persone, in particolare da Robert Russell, che aggiunse molte delle funzionalità per il VIC-20 e il C64.

All'inizio del suo sviluppo per il PET, il KERNAL era noto internamente a Commodore come kernel ma nel 1980 Russel sbagliò a scrivere il termine sui suoi appunti segnando kernal. Quando Neil Harris e Andy Finkel, coloro i quali erano deputati alla stesura della documentazione dei prodotti Commodore, iniziarono a lavorare sugli appunti di Russell per stilare il manuale del programmatore del VIC-20 non si accorsero dell'errore ortografico, riportandolo nei documenti ufficiali.

Un'altra versione, riportata dallo scrittore/programmatore Jim Butterfield e da altri, afferma invece che la parola KERNAL è l'acronimo (o forse l'acronimo inverso) di Keyboard Entry Read, Network, And Link, che infatti ha un certo senso considerando il ruolo stesso del KERNAL.

Berkeley Softworks usò in seguito il termine per dare un nome alle routine centrali del suo sistema operativo a GUI per i computer a 8 bit, il GEOS KERNAL.

L'errore fu corretto quando fu sviluppato il sistema operativo per la serie di computer Amiga: l'Amiga ROM Kernel utilizzava la trascrizione esatta.

## Caratteristiche tecniche

Il KERNAL consiste in delle routine di basso livello, vicine all'hardware della macchina (a differenza delle routine di alto livello dell'interprete BASIC, anch'esse residenti in ROM), chiamabili tramite una jump table, di cui la parte centrale, per ragioni di retrocompatibilità, rimase nel corso degli anni sempre la stessa per tutti i computer della serie a 8 bit.

La ROM del KERNAL occupava gli ultimi 8 KB dei 64 KB di spazio indirizzi della CPU (da $E000 a $FFFF). Diverse routine del KERNAL erano chiamabili attraverso una jump table presente nella pagina 3 della RAM (indirizzi $0300-$0333): le chiamate a queste routine potevano essere intercettate semplicemente modificando gli indirizzi presenti nella jump table di modo che puntassero a versioni modificate o sostitutive delle stesse, scritte dall'utente.

## Esempio di codice

Un semplice, caratteristico, esempio dell'utilizzo del KERNAL è dato dal seguente codice in assembly 6502 (scritto con l'assembler ca65):

Questo esempio di codice utilizza la routine CHROUT, che si trova all'indirizzo esadecimale $FFD2 (65490), per inviare una stringa di testo al dispositivo di output corrente (generalmente rappresentato dallo schermo).

