KERNAL

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Disambiguazione – Se stai cercando il nucleo dei sistemi operativi, a volte trascritto incorrettamente "Kernal", vedi Kernel.

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[modifica | modifica wikitesto]

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.[1]

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[modifica | modifica wikitesto]

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.[2]

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.[3]

Esempio di codice[modifica | modifica wikitesto]

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

CHROUT  = $ffd2          ; CHROUT invia un carattere al dispositivo di output corrente
CR      = $0d            ; codice PETSCII per "Ritorno carrello" 
;
hello:
        ldx #0           ; inizia con il carattere in posizione 0
next:
        lda message,x    ; legge il carattere X-esimo del messaggio
        beq done         ; uscita dal ciclo quando viene letto un byte a zero
        jsr CHROUT       ; chiamata a CHROUT per visualizzare il carattere sul dispositivo
                         ; di output corrente (generalmente lo schermo)
        inx              ; prossimo carattere
        bne next         ; cicla finché il carattere letto non vale 0 - fine stringa
                         ; (lunghezza max. della stringa 255 byte)
done:
        rts              ; esce dalla subroutine
;
message:
        .byte "Hello, world!"
        .byte CR, 0      ; Ritorno carrello e 0, 0 è il marcatore di fine stringa

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).

Note[modifica | modifica wikitesto]

  1. ^ Brian Bagnall, On The Edge: The Spectacular Rise and Fall of Commodore, Variant Press, 2006, p. 202, ISBN 978-0-9738649-0-8.
    (EN)

    «The kernel is the most fundamental part of a program, typically an operating system, that resides in memory at all times and provides the basic services. It is the part of the operating system that is closest to the machine and may activate the hardware directly or interface to another software layer that drives the hardware.»

    (IT)

    «Il kernel è la parte più fondamentale di un programma, normalmente un sistema operativo, che risiede in memoria per tutto il tempo e che fornisce i servizi di base. È la parte del sistema operativo che è più vicina alla macchina e che può attivare l'hardware direttamente oppure interfacciarsi con un altro livello software che gestisce l'hardware.»

  2. ^ Brian Bagnall, On The Edge: The Spectacular Rise and Fall of Commodore, Variant Press, 2006, p. 202, ISBN 978-0-9738649-0-8.
    (EN)

    «The kernal jump table, used to access all the subroutines in the kernal, was an array of JMP (jump) instructions leading to the actual subroutines. This feature ensured compatibility with user-written software in the event that code within the kernal ROM needed to be relocated in a later revision.»

    (IT)

    «La jump table del kernal, utilizzata per accedere a tutte le subroutine del kernal, era un vettore di istruzioni JMP (salto) che portavano alle subroutine vere e proprie. Questa caratteristica assicurava la compatibilità con il software scritto dall'utente nel caso in cui il codice all'interno della ROM del kernal fosse stato, in versioni successive, spostato per necessità.»

  3. ^ Brian Bagnall, On The Edge: The Spectacular Rise and Fall of Commodore, Variant Press, 2006, p. 202, ISBN 978-0-9738649-0-8.
    (EN)

    «Many of the kernal subroutines (e.g., OPEN and CLOSE) were vectored through page three in RAM, allowing a programmer to intercept the associated kernal calls and add to or replace the original functions.»

    (IT)

    «Molte delle subroutine del kernal (ad esempio OPEN e CLOSE) erano vettorizzate tramite la pagina tre in RAM, permettendo ad un programmatore di intercettare le chiamate al kernal associate ed aggiungere o sostituire le funzioni originali.»

Bibliografia[modifica | modifica wikitesto]

Voci correlate[modifica | modifica wikitesto]

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica