KERNAL - KERNAL - Wikipedia
KERNAL[1] je Komodor jméno pro ROM - rezident operační systém jádro v jeho 8-bit domácí počítače; z originálu PET z roku 1977, následovaný rozšířenými, ale silně souvisejícími verzemi použitými v jeho nástupcích: VIC-20, Commodore 64, Plus / 4, C16, a C128.
Popis
KERNAL 8bitových strojů Commodore se skládá z nízkoúrovňových rutin OS blížících se hardwaru zhruba ekvivalentních BIOS v kompatibilních s IBM PC (na rozdíl od ZÁKLADNÍ tlumočník rutiny, také umístěné v ROM), stejně jako vyšší I / O funkce nezávislé na zařízení a lze je volat uživatelem prostřednictvím skokový stůl v RAM, jejíž centrální (nejstarší) část, z důvodu zpětné kompatibility,[2] zůstává do značné míry identický v celé 8bitové sérii. KERNAL ROM zabírá posledních 8 KB 8bitového CPU s 64 kB adresním prostorem ($ E000 - $ FFFF).
Skokovou tabulku lze upravit tak, aby ukazovala na rutiny psané uživatelem, například přepsání rutin zobrazení obrazovky pro zobrazení animované grafiky nebo kopírování znakové sady do paměti RAM. Toto použití skokového stolu bylo v té době pro malé počítače nové.[3]
The Adventure International hry publikované pro VIC-20 na kazetě jsou příkladem softwaru, který používá KERNAL. Protože hry používají pouze skokový stůl, mohou být paměť vyhozena na disk, načten do Commodore 64 a spustit bez úprav.[4]
KERNAL původně napsal pro Commodore PET John Feagans, který představil myšlenku oddělení rutin BASIC od operačního systému. Dále jej rozvíjelo několik lidí, zejména Robert Russell, který přidal mnoho funkcí pro VIC-20 a C64.
Příklad
Jednoduchý, přesto charakteristický příklad použití KERNAL je uveden v následujícím textu 6502 montážní jazyk podprogram[5] (napsáno v ca65 formát / syntaxe assembleru):
CHROUT = $ ffd2; CHROUT je adresa rutiny výstupu znaků CR = $ 0d; PETSCII kód pro návrat vozíku; ahoj: ldx # 0; začněte znakem 0 načtením 0 do rejstříku indexů x další: lda message, x; načíst bajt z adresové zprávy + x do akumulátoru hotovo; pokud je v akumulátoru nula, skončili jsme a chceme se rozvětvit ze smyčky jsr CHROUT; volání CHROUT na výstup char do aktuálního výstupního zařízení (výchozí na obrazovce) inx; přírůstek x pro přechod na další znak bne další; smyčka zpět, zatímco poslední znak není nula (maximální délka řetězce 255 bajtů) hotovo: rts; návrat z podprogramu; zpráva: .byte "Ahoj světe! ".byte CR, 0; Carriage Return a konec značky s nulovým označením
Tento útržek kódu využívá CHROUT
rutina, jejíž adresa se nachází na adrese $ FFD2
(65490), k odeslání textového řetězce do výchozího výstupního zařízení (např. Na obrazovku).
Název
KERNAL byl znám jako jádro[6] uvnitř Commodore od doby PET, ale v roce 1980 Robert Russell toto slovo napsal špatně kernal ve svých poznámkových blocích. Když techničtí autoři Commodore Neil Harris a Andy Finkel shromáždili Russellovy poznámky a použili je jako základ příručky programátora VIC-20, překlepy je následovaly a uvízly.[7]
Podle raného Commodoreova mýtu a hlášeného spisovatelem / programátorem Jim Butterfield mimo jiné je „slovo“ KERNAL zkratka (nebo možná spíše, a backronym ) stojící za K.očnice Entry Read, Nsíť, And Linkoust, což ve skutečnosti dává smysl vzhledem k jeho roli. Berkeley Softworks později jej použil při pojmenovávání hlavních rutin svého operačního systému GUI 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í, které není zcela odlišné od API Unix nebo Plán 9, které nikdo ve skutečnosti nevyužil, pokud je to veřejně známo. Zatímco v těchto posledních systémech lze rozumně tvrdit, že „všechno je soubor“, ostatní by mohli snadno tvrdit, že „vše je GPIB -zařízení "v prvním.
Z důvodu omezení v té době architektury 6502 vyžaduje otevření I / O kanálu tři systémová volání. První typicky nastavuje logický název souboru prostřednictvím SETNAM
systémové volání. Druhý hovor, SETLFS
, stanoví adresu „zařízení“ GPIB / IEEE-488, se kterou bude komunikovat. Konečně OTEVŘENO
je povolán k provedení skutečné transakce. Poté byla aplikace použita CHKIN
a POKOJ
systémová volání k nastavení aktuálních vstupních a výstupních kanálů aplikace. Aplikace mohou mít libovolný počet současně 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é, CHRIN
a CHROUT
se osvědčí pro skutečné vedení vstupu a výstupu. ZAVŘÍT
poté 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í dynamicky vytvořit nebo zničit. Stejně tak neexistují žádné prostředky pro vyhledávání ani pro provádění funkcí „ovládání I / O“, jako např ioctl () v systému Unix. Ve skutečnosti se zde KERNAL mnohem blíží 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 pro odstranění („poškrábání“) souboru z disku uživatel obvykle „otevře“ volaný prostředek S0: THE-FILE-TO-RMV
na zařízení 8 nebo 9, kanál 15. Podle zavedené konvence v 8bitovém světě Commodore představuje kanál 15 „příkazový kanál“ pro periferní zařízení, který se při komunikaci s příkazy a výsledky spoléhá na techniky předávání zpráv, včetně výjimečných případů. Například v Commodore BASIC, mohou najít software, který se neliší od následujících:
70 ... 80 REM OTOČTE LOGY AKTUÁLNĚ OTEVŘENÉ NA LOGICKÉM KANÁLU # 1. 90 ZAVŘÍT 1 100 OTEVŘENO 15,8,15,"R0: ERROR.1 = 0: ERROR.0":REM PŘEJMENUJTE CHYBU SOUBORU.0 NA CHYBU.1 110 VSTUP# 15,A,B $,C,D:CHYBOVÝ KANÁL PŘEČTĚTE REM 120 ZAVŘÍT 15 130 LI A=0 PAK JÍT DO 200 140 TISK „CHYBA RENAMOVÁNÍ LOG SOUBORU:“ 150 TISK " KÓD: "+A 160 TISK „MSG:“+B $ 170 KONEC 200 REM POKRAČUJTE ZDE SE ZPRACOVÁNÍM, VYTVOŘÍME NOVÝ LOGOVÝ SOUBOR, JAK JSME ... 210 OTEVŘENO 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 přišlo ze specifické úpravy protokolu IEEE-488 a ve skutečnosti se vztahuje pouze na externí periferie. Se všemi souvisejícími systémovými voláními KERNAL mohou být programátory zachycena systémová volání k implementaci virtuálních zařízení s jakoukoli adresou v rozsahu [32 256). Je možné si načíst binární ovladač zařízení do paměti, opravit I / O vektory KERNAL a od tohoto okamžiku by mohlo být adresováno nové (virtuální) zařízení. Dosud tato funkce 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 a v paměťovém prostoru tedy spadá na uživatele, zatímco kompatibilita platformy napříč širokou škálou strojů spadá na autora softwaru. V případě potřeby lze nicméně snadno implementovat podpůrný software pro tyto funkce.
Logické formáty souborů obvykle závisí na konkrétním adresovaném zařízení. Nejběžnějším používaným zařízením je samozřejmě systém disket, který používá podobný formát MD: JMÉNO, ATTRS
, kde M je příznak svého druhu ($ pro výpis adresáře, @ pro označení touhy přepsat soubor, pokud již existuje, jinak se nepoužívá.), D je (volitelné) číslo fyzické diskové jednotky (0: nebo 1: pro dual-drive systems, just 0: for single-disk units like the 1541, et al., which defaults to 0: if left unpecified), NÁZEV
je název zdroje o délce až 16 znaků (většina znaků je povolena s výjimkou určitých zvláštních znaků) a ATTRS
je volitelný seznam atributů nebo příznaků oddělených čárkami. Například pokud chce uživatel přepsat programový soubor s názvem PRGFILE
, mohou vidět název souboru jako @ 0: PRGFILE, P
používá se ve spojení se zařízením 8 nebo 9. Mezitím název souboru pro ovladač RS-232 (zařízení 2) sestává jednoduše ze čtyř znaků zakódovaných v binárním formátu.[8]
Ostatní zařízení, jako je klávesnice (zařízení 0), kazeta (zařízení 1), rozhraní displeje (zařízení 3) a tiskárna (zařízení 4 a 5), nevyžadují pro fungování žádné názvy souborů, ať už za předpokladu rozumných výchozích hodnot, nebo je jednoduše nepotřebujete vůbec.
Poznámky
- ^ Commodore 64 Programmer's Reference Guide. Commodore Business Machines, Inc., 1982, str. 268
- ^ Tabulka skoků KERNAL, používaná pro přístup ke všem podprogramům v KERNAL, je řada instrukcí JMP (skok), které vedou ke skutečným podprogramům. Tato funkce zajišťuje kompatibilitu s uživatelem napsaným softwarem v případě, že je třeba v rámci pozdější revize přesunout kód v rámci KERNAL ROM.
- ^ „Zkoumání VIC-20“.
- ^ Kevelson, Morton (leden 1986). „Syntezátory řeči pro počítače Commodore / část II“. Ahoj!. str. 32. Citováno 17. července 2014.
- ^ Mnoho z podprogramů KERNAL (např. OPEN a CLOSE) bylo vektorováno přes stránku tři v RAM, což umožnilo programátorovi zachytit přidružené volání KERNAL a přidat nebo nahradit původní funkce.
- ^ The jádro je nejzásadnější část programu, obvykle operačního systému, který vždy spočívá v paměti a poskytuje základní služby. Je to část operačního systému, která je nejblíže stroji a může aktivovat hardware přímo nebo rozhraní k jiné softwarové vrstvě, která řídí hardware
- ^ On The Edge: The Spectacular Rise and Fall of Commodore, strana 202.
- ^ Referenční příručka programátorů Commodore 128Commodore Business Machines, Inc., 1986, str. 382