KERNAL
| KERNAL | ||
|---|---|---|
|
| ||
| Yleistä tietoa | ||
| ohjelmatyyppi | ydin | |
| kehittäjä | Commodore International | |
| Kehitysmalli | suljettu lähde | |
| Todellinen tila | epäjatkuva | |
| Tekninen informaatio | ||
| Tuetut alustat | ||
KERNAL [ 1 ] on Commodoren nimeämä nimi ROM - käyttöjärjestelmän ytimelle sen 8 - bittisissä kotitietokoneissa ; alkuperäisestä vuoden 1977 PET :stä , jota seurasivat läheisesti liittyvät, mutta laajennetut versiot, joita käytettiin sen seuraajissa: VIC-20 , Commodore 64 , Plus/4 , C16 ja C128 .
Kuvaus
8-bittisten Commodore-koneiden KERNAL koostuu matalan tason, laitteistoa lähellä olevista käyttöjärjestelmärutiineista, jotka vastaavat suunnilleen IBM - yhteensopivien tietokoneiden BIOSia ( toisin kuin BASIC-tulkkirutiinit, jotka sijaitsevat myös ROM-muistissa) sekä korkeammista tason laiteriippumaton I/O-toiminnallisuus, ja käyttäjä voi kutsua sitä hyppytaulukon kautta, jonka keskimmäinen (vanhin) osa pysyy taaksepäin yhteensopivuussyistä [ 2 ] suurelta osin identtisenä läpi 8-bittisen sarjan. KERNAL-ROM vie viimeiset 8 kt 8-bittisen CPU:n 64 kt:n osoiteavaruudesta ($E000-$FFFF).
Hyppytaulukkoa voidaan muokata osoittamaan käyttäjän kirjoittamia rutiineja, esimerkiksi kirjoittamalla näytön näyttörutiinit uudelleen näyttämään animoitua grafiikkaa tai kopioimalla merkistö RAM-muistiin. Tämä hyppypöydän käyttö oli tuolloin uusi pienille tietokoneille. [ 3 ]
VIC-20-kasetille julkaistut Adventure International -pelit ovat esimerkki ohjelmistoista, joissa käytetään KERNAL-järjestelmää. Koska ne käyttävät vain hyppypöytää, pelejä voidaan ladata levymuistiin , ladata Commodore 64:ään ja pelata ilman muutoksia. [ 4 ]
KERNALin kirjoitti alun perin Commodore PET:lle John Feagans, joka esitteli ajatuksen BASIC-rutiinien erottamisesta käyttöjärjestelmästä. Sen ovat kehittäneet useat ihmiset, varsinkin Robert Russell, joka lisäsi monia ominaisuuksia VIC-20- ja C64-malleihin.
Esimerkki
Seuraava 6502 assembler - alirutiini [ 5 ] (kirjoitettu ca65 assembler-muodossa/syntaksissa) tarjoaa yksinkertaisen mutta tyypillisen esimerkin KERNALIN käytöstä:
CHROUT = $ffd2 ; CHROUT on merkkitulostusrutiinin osoite
CR = $0d ; PETSCII-koodi kuljetusta varten
;
Hei:
ldx #0 ; aloita merkillä 0 lataamalla 0 x-indeksirekisteriin
Seuraava:
lda viesti , x ; lataa tavu osoiteviestistä+x akkuihin
beq tehty ; Jos akku on nolla, olemme valmiita ja haluamme haarautua silmukasta
jsr CHROUT ; kutsu CHROUT tulostaaksesi merkki nykyiselle tulostuslaitteelle (oletus näytölle)
x:ssä ; suurenna x siirtyäksesi seuraavaan merkkiin
b ne seuraava ; silmukan taaksepäin, kun viimeinen merkki ei ole nolla (merkkijonon enimmäispituus 255 tavua)
lahjoittaa:
rts ; paluu aliohjelmasta
;
viesti:
.byte "Hei maailma"
.byte CR , 0 ; Carriage Return ja merkkijonon nollamerkintä
Tämä tynkä käyttää rutiinia CHROUT, jonka osoite on osoitteessa $FFD2(65490), lähettääkseen tekstijonon oletustulostuslaitteeseen (esimerkiksi näyttöruutuun).
Nimi
KERNAL tunnettiin ytimenä [ 6 ] Commodoressa PET:n ajoista lähtien, mutta vuonna 1980 Robert Russell kirjoitti sanan väärin muistikirjoissaan kernaliksi . Kun Commodoren tekniset kirjoittajat Neil Harris ja Andy Finkel poimivat Russellin muistiinpanot ja käyttivät niitä VIC-20-ohjelmoijan käsikirjan pohjana, kirjoitusvirhe seurasi niitä ja pysyi ennallaan. [ 7 ]
Vanhan Commodore-myytin ja muun muassa kirjailija/ohjelmoija Jim Butterfieldin raportoiman mukaan " sana " KERNAL on lyhenne (tai ehkä todennäköisemmin retro-lyhenne ) , joka tarkoittaa Keyboard Entry Read , Network , A nd L. muste. , mikä on hänen roolinsa huomioon ottaen järkevää. Berkeley Softworks käytti sitä myöhemmin nimeäessään GUI-käyttöjärjestelmänsä ydinrutiineja 8-bittisille kotitietokoneille: GEOS KERNAL.
Laitteesta riippumaton I/O
Yllättäen KERNAL toteutti laiteriippumattoman I/O API:n, joka ei täysin eroa Unixista tai Plan-9 :stä , jota kukaan ei julkisesti tiedossa käyttänyt. Vaikka jälkimmäisissä järjestelmissä voitaisiin perustellusti väittää, että "kaikki on tiedostoa", toiset voisivat helposti väittää, että "kaikki on GPIB -laitetta " edellisessä.
6502-arkkitehtuurin silloisista rajoituksista johtuen I/O-kanavan avaaminen vaatii kolme järjestelmäkutsua. Edellinen asettaa yleensä loogisen tiedostonimen SETNAM. Toinen puhelu, SETLFS, asettaa GPIB/IEEE-488 "laitteen" osoitteen kommunikoimaan. Lopuksi kutsutaan OPENsuorittamaan varsinainen tapahtuma. Sovellus käyttää sitten CHKINja järjestelmäkutsuja CHKOUTmäärittääkseen sovelluksen nykyiset tulo- ja lähtökanavat. Sovelluksissa voi olla kuinka monta tiedostoa auki samanaikaisesti (joihinkin järjestelmäriippuvaisiin rajoituksiin asti; esimerkiksi C64 sallii kymmenen tiedoston avaamisen kerralla). Sen jälkeen, CHRINja CHROUTovat hyödyllisiä tuloa ja lähtöä vastaavasti. CLOSEsulje sitten kanava.
Huomaa, että I/O-kanavan "luomiseksi" ei ole järjestelmäkutsua, koska laitteita ei voida luoda tai tuhota dynaamisesti normaaleissa olosuhteissa. Samoin Unixissa ei ole keinoja hakea tai suorittaa "I/O-ohjaus" -toimintoja, kuten ioctl (). Itse asiassa KERNAL osoittaa tässä paljon lähempänä Plan-9-filosofiaa, jossa sovellus avaa erityisen " komento "-kanavan osoitetulle laitteelle suorittaakseen tällaisia " meta " tai " kaistan ulkopuolisia " tapahtumia. Esimerkiksi " raapatakseen " tiedoston levyltä käyttäjä tavallisesti "avaa" nimetyn resurssin S0:THE-FILE-TO-RMVlaitteessa 8 tai 9, kanavassa 15. 8-bittisessä Commodore-maailmassa vallitsevan käytännön mukaan kanava 15 edustaa "komentokanavaa". " oheislaitteille luottaen viestintätekniikoihin komentojen ja tulosten välittämiseen, mukaan lukien harvinaiset tapaukset. Esimerkiksi Commodore BASICissa saatat löytää seuraavankaltaisia ohjelmistoja:
70 ...
80 REM ROTATE LOKIA NYKYISI AVAIN LOOGISELLA KANAVALLA #1.
90 CLOSE 1
100 OPEN 15 , 8 , 15 , " R0 : ERROR.1 = 0 : ERROR.0 " : REM
NIMI TIEDOSTO VIRHE . _ LUE VIRHE KANAVA 120 SULJE 15 130 JOS A = 0 SIIRRY 200 140 TULOSTA "VIRHE LOKITIEDOSTON UUDELLEENNIMEÄMISESSÄ:" 150 TULOSTUS " KOODI: " + A 160 TULOSTUS " VIESTIT : " + B$ 170 LOPETA H JATKO 200 LUODAAN UUDEN LOKITIEDOSTOA ALKUUN ... 210 OPEN 1 , 8 , 1 , "0:ERROR.0,S,W" 220 ...
Vakiintuneiden dokumenttien mukaan laitenumerot on rajoitettu alueelle [0,16]. Tämä rajoitus johtuu kuitenkin IEEE-488-protokollan erityisestä mukautuksesta, ja se koskee käytännössä vain ulkoisia oheislaitteita. Kun kaikki olennaiset KERNAL-järjestelmäkutsut ovat vektoroituja, ohjelmoijat voivat siepata järjestelmäkutsuja toteuttaakseen virtuaalisia laitteita millä tahansa osoitteella alueella 32 256). Voidaan mahdollisesti ladata binäärilaiteajuri muistiin, korjata KERNAL I/O -vektorit, ja siitä lähtien voitaisiin ottaa yhteyttä uuteen (virtuaaliseen) laitteeseen. Tähän mennessä tätä ominaisuutta ei ole koskaan tiedetty julkisesti käytettäväksi, luultavasti kahdesta syystä: (1) KERNAL ei tarjoa keinoa dynaamisesti määrittää laitetunnuksia ja (2) KERNAL ei tarjoa keinoa ladata uudelleen sijoitettavaa binaarikuvaa. Siten törmäystaakka sekä I/O-tilassa että muistitilassa lankeaa käyttäjälle, kun taas alustan yhteensopivuus useissa eri koneissa on ohjelmiston tekijän vastuulla. Näitä toimintoja tukevat ohjelmistot voidaan kuitenkin helposti toteuttaa haluttaessa.
Loogiset tiedostonimien muodot riippuvat yleensä osoitetusta laitteesta. Yleisin käytetty laite on tietysti levykejärjestelmä, joka käyttää samanlaista muotoa kuin MD:NAME,ATTRS, jossa M on jonkinlainen lippu ($ hakemistolistalle, @ ilmaisee halun korvata tiedosto, jos se on jo olemassa, muuten käyttämätön ), D on fyysisen levyaseman numero (valinnainen) (0: tai 1: kaksiasemaisissa järjestelmissä, vain 0: yksilevyasemissa, kuten 1541, et al., jonka oletusarvo on 0: jos ei ole määritetty) , NAMEon enintään 16 merkkiä pitkä resurssin nimi (useimmat merkit sallittuja, lukuun ottamatta tiettyjä erikoismerkkejä), ja ATTRSse on valinnainen pilkuilla eroteltu luettelo määritteistä tai lippuista. Jos käyttäjä esimerkiksi haluaa korvata ohjelmatiedoston nimeltä PRGFILE, hän saattaa nähdä tiedostonimen sellaisena kuin @0:PRGFILE,Psitä käytetään laitteen 8 tai 9 yhteydessä. Sillä välin RS-232-ohjaimen (laite 2) tiedostonimi koostuu vain neljästä merkistä. , koodattu binäärimuotoon. [ 8 ]
Muut laitteet, kuten näppäimistö (laite 0), kasetti (laite 1), näyttöliitäntä (laite 3) ja tulostin (laite 4 ja 5), eivät vaadi tiedostonimiä toimiakseen, olettaen kohtuulliset oletusarvot tai vain ne. ei tarvitse niitä. ehdottomasti.
Viitteet
- ↑ Commodore 64 -ohjelmoijan viiteopas . Commodore Business Machines, Inc., 1982, s. 268
- ↑ KERNAL-hyppytaulukko, jota käytetään kaikkien KERNALin aliohjelmien käyttämiseen, on joukko JMP (hyppy) -käskyjä, jotka johtavat varsinaisiin aliohjelmiin. Tämä ominaisuus varmistaa yhteensopivuuden käyttäjän kirjoittamien ohjelmistojen kanssa siinä tapauksessa, että KERNAL ROM -muistissa oleva koodi on siirrettävä myöhemmässä versiossa.
- ^ "VIC-20:n tutkiminen" .
- ↑ Kevelson, Morton (tammikuu 1986). "Puhesyntetisaattorit Commodore-tietokoneille / Osa II" . s. 32 . Haettu 17. heinäkuuta 2014 .
- ↑ Monet KERNAL-alirutiineista (esim. OPEN ja CLOSE) vektorisoitiin RAM-muistin sivun kolme kautta, jolloin ohjelmoija voi siepata niihin liittyvät KERNAL-kutsut ja lisätä tai korvata alkuperäisiä toimintoja.
- ↑ Ydin on ohjelman, tyypillisesti käyttöjärjestelmän , tärkein osa, joka on aina muistissa ja tarjoaa peruspalvelut. Se on konetta lähinnä oleva käyttöjärjestelmän osa, joka voi aktivoida laitteiston suoraan tai liittää toiseen ohjelmistokerrokseen, joka ohjaa laitteistoa.
- ↑ On The Edge: The Spectacular Rise and Fall of Commodore , sivu 202.
- ↑ Commodore 128 Programmers Reference Guide , Commodore Business Machines, Inc., 1986, s. 382
Katso myös
- GEOS , graafinen käyttöjärjestelmä Commodore 64:lle ja 128:lle.