KERNAL - KERNAL

Kernal je Commodore se jmenuje pro ROM -resident operačního systému jádra v jeho 8-bitové domácí počítače ; z původního PET z roku 1977, následované rozšířenými, ale silně souvisejícími verzemi používanými u jeho nástupců: VIC-20 , Commodore 64 , Plus/4 , C16 a C128 .

Popis

KERNAL 8bitových počítačů Commodore se skládá z rutin OS na nízké úrovni, téměř hardwaru, zhruba ekvivalentních systému BIOS v kompatibilních počítačích IBM PC (na rozdíl od rutin interpretů BASIC , také umístěných v ROM) a také funkčnost I/O na vyšší úrovni, nezávislá na zařízení, a uživatelsky ji lze volat pomocí skokové tabulky v paměti RAM, jejíž centrální (nejstarší) část z důvodu zpětné kompatibility zůstává z velké části identická v celé 8bitové řadě. Kernal ROM zabírá poslední 8 KB adresového prostoru 64 KB 8-bit CPU ($ E000- $ FFFF).

Tabulku skoků je možné upravit tak, aby ukazovala na rutiny psané uživatelem, například přepisováním rutin zobrazení obrazovky na zobrazení animované grafiky nebo kopírováním znakové sady do paměti RAM. Toto použití skokového stolu bylo v té době v malých počítačích novinkou.

The Adventure Mezinárodní hry publikované na VIC-20 na kazetě jsou příkladem software, který používá kernal. Protože používají pouze skokovou tabulku, lze hry ukládat do paměti , ukládat na disk Commodore 64 a spouštět bez úprav.

KERNAL původně napsal pro Commodore PET John Feagans , který představil myšlenku oddělení základních rutin od operačního systému. Byl dále vyvinut několika lidmi, zejména Robertem Russellem , který přidal mnoho funkcí pro VIC-20 a C64.

Příklad

Jednoduchý, ale charakteristický příklad použití KERNAL je dán následujícím podprogramem 6502 v jazyce sestavení (napsáno ve formátu/syntaxi assembleru ca65 ):

   CHROUT  = $ffd2          ; CHROUT is the address of the character output routine
   CR      = $0d            ; PETSCII code for Carriage Return 
   ;
   hello:
           ldx #0           ; start with character 0 by loading 0 into the x index register
   next:
           lda message,x    ; load byte from address message+x into the accumulator
           beq done         ; if the accumulator holds zero, we're done and want to branch out of the loop
           jsr CHROUT       ; call CHROUT to output char to current output device (defaults to screen)
           inx              ; increment x to move to the next character
           bne next         ; loop back while the last character is not zero (max string length 255 bytes)
   done:
           rts              ; return from subroutine
   ;
   message:
           .byte "Hello, world!"
           .byte CR, 0      ; Carriage Return and zero marking end of string

Tento kódový stub využívá CHROUTrutinu, jejíž adresa se nachází na adrese $FFD2(65490), k odeslání textového řetězce na výchozí výstupní zařízení (např. Na obrazovku).

Název

KERNAL byl znám jako jádro uvnitř Commodore od dob PET, ale v roce 1980 Robert Russell ve svých zápisnících toto slovo překlepal jako kernal . Když techničtí spisovatelé Commodore Neil Harris a Andy Finkel sbírali Russellovy poznámky a používali je jako základ pro příručku programátora VIC-20, překlep je následoval a zasekl se.

Podle počátku Commodore mýtu, a uvádí autor / programátorem Jim Butterfield mimo jiné, „slovo“ kernal je zkratka (nebo možná více pravděpodobné, je backronym ), stojící na K eyboard E nZkuste R EAD, N SÍŤ, A nd L inkoustu , což ve skutečnosti dává smysl vzhledem k jeho roli. Společnost Berkeley Softworks ji později použila při pojmenovávání základních rutin svého GUI OS pro 8bitové domácí počítače: GEOS KERNAL.

Na I/O nezávislých na zařízení

KERNAL překvapivě implementoval I/O API nezávislé na zařízení, ne zcela odlišné od Unixu nebo Plan-9 , které nikdo ve skutečnosti nevyužil, pokud je veřejně známo. Zatímco jeden by mohl rozumně tvrdit, že „všechno je soubor“ v těchto posledních systémech, jiní by mohli snadno tvrdit, že „všechno je zařízení GPIB “ v prvním systému.

Vzhledem k tehdejším omezením architektury 6502 vyžaduje otevření I/O kanálu tři systémová volání. První obvykle nastavuje logický název souboru prostřednictvím SETNAMsystémového volání. Druhé volání, SETLFSstanoví adresu „zařízení“ GPIB/IEEE-488, se kterou bude komunikovat. Nakonec OPENje povolán k provedení skutečné transakce. Aplikace pak používá CHKINa CHKOUTsystémová volání pro nastavení aktuálních vstupních a výstupních kanálů aplikace zahrnuje, v uvedeném pořadí. Aplikace mohou mít libovolný počet souběžně otevřených souborů (až do určitého limitu závislého na systému; např. C64 umožňuje otevření deseti souborů najednou). Poté, CHRINa CHROUTbýt užitečné pro skutečně provádějící vstup a výstup, resp. CLOSEpak zavře kanál.

Všimněte si, že neexistuje žádné systémové volání k „vytvoření“ I/O kanálu, protože zařízení nelze za normálních okolností vytvářet ani dynamicky ničit. Podobně neexistují žádné prostředky pro vyhledávání ani pro provádění funkcí „řízení I/O“, jako je ioctl () v Unixu. KERNAL se zde skutečně ukazuje mnohem blíže filozofii Plan-9, kde by aplikace otevřela speciální „příkazový“ kanál pro uvedené zařízení k provádění takových „meta“ nebo „out-of-band“ transakcí. Například k odstranění („poškrábání“) souboru z disku uživatel obvykle „otevře“ prostředek volaný S0:THE-FILE-TO-RMVna zařízení 8 nebo 9, kanál 15. Podle zavedené konvence v 8bitovém světě Commodore kanál 15 představuje „příkazový kanál“ pro periferie, spoléhající se na techniky předávání zpráv pro komunikaci příkazů i výsledků, včetně výjimečných případů. Například v Commodore BASIC mohou najít software ne nepodobný následujícímu:

    70 ...
    80 REM ROTATE LOGS CURRENTLY OPENED ON LOGICAL CHANNEL #1.
    90 CLOSE 1
    100 OPEN 15,8,15,"R0:ERROR.1=0:ERROR.0":REM RENAME FILE ERROR.0 TO ERROR.1
    110 INPUT# 15,A,B$,C,D:REM READ ERROR CHANNEL
    120 CLOSE 15
    130 IF A=0 THEN GOTO 200
    140 PRINT "ERROR RENAMING LOG FILE:"
    150 PRINT "  CODE: "+A
    160 PRINT "  MSG : "+B$
    170 END
    200 REM CONTINUE PROCESSING HERE, CREATING NEW LOG FILE AS WE GO...
    210 OPEN 1,8,1,"0:ERROR.0,S,W"
    220 ...

Čísla zařízení podle zavedené dokumentace jsou omezena na rozsah [0,16]. Toto omezení však pocházelo ze specifické úpravy protokolu IEEE-488 a ve skutečnosti platí pouze pro externí periferie. Díky vektorování všech relevantních systémových volání KERNAL mohou programátoři zachytit systémová volání k implementaci virtuálních zařízení s libovolnou adresou v rozsahu [32 256]. Je možné, že lze načíst binární ovladač zařízení do paměti, opravit vektory KERNAL I/O a od toho okamžiku by bylo možné řešit nové (virtuální) zařízení. Doposud tato schopnost nebyla nikdy veřejně známá jako využívaná, pravděpodobně ze dvou důvodů: (1) KERNAL neposkytuje žádné prostředky pro dynamické přidělování ID zařízení a (2) KERNAL neposkytuje žádné prostředky pro načítání přemístitelného binárního obrazu. Břemeno kolizí v I/O prostoru i v paměťovém prostoru tedy padá na uživatele, zatímco kompatibilita platformy v celé řadě počítačů spadá na autora softwaru. V případě potřeby však lze snadno implementovat podpůrný software pro tyto funkce.

Logické formáty názvů souborů obvykle závisí na konkrétním adresovaném zařízení. Nejčastěji používaným zařízením je samozřejmě systém disket, který používá formát podobný tomu MD:NAME,ATTRS, kde M je druh příznaku ($ pro výpis adresářů, @ pro indikaci touhy přepsat soubor, pokud již existuje, nepoužívaný jinak.), D je (volitelné) číslo fyzické diskové jednotky (0: nebo 1: u systémů s dvěma jednotkami, pouze 0: u jednodiskových jednotek, jako je 1541 a kol., které je ve výchozím nastavení 0: pokud není zadáno ), NAMEje název zdroje až 16 znaků dlouhý (většina znaků je povolena kromě určitých speciálních znaků) a ATTRSje volitelný seznam atributů nebo příznaků oddělených čárkami. Pokud chce například uživatel přepsat soubor programu s názvem PRGFILE, může se mu zobrazit název souboru, který se @0:PRGFILE,Ppoužívá ve spojení se zařízením 8 nebo 9. Mezitím se název souboru pro ovladač RS-232 (zařízení 2) skládá jednoduše ze čtyř kódovaných znaků. v binárním formátu.

Jiná zařízení, jako je klávesnice (zařízení 0), kazeta (zařízení 1), zobrazovací rozhraní (zařízení 3) a tiskárna (zařízení 4 a 5), ​​nevyžadují ke svému fungování žádné názvy souborů, a to buď za předpokladu rozumných výchozích hodnot, nebo je jednoduše nepotřebují. vůbec.

Poznámky

externí odkazy