KERNAL
| KERNAL | ||
|---|---|---|
|
| ||
| Informacje ogólne | ||
| typ programu | jądro | |
| deweloper | Commodore Międzynarodowy | |
| Model rozwoju | zamknięte źródło | |
| Rzeczywisty stan | nieciągły | |
| Specyfikacja | ||
| Obsługiwane platformy | ||
KERNAL [ 1 ] to nazwa wyznaczona przez Commodore dla jądra systemu operacyjnego rezydentnego w pamięci ROM na 8 - bitowych komputerach domowych ; od oryginalnego PET z 1977 r., a następnie blisko spokrewnionych, ale rozszerzonych wersji stosowanych w jego następcach: VIC-20 , Commodore 64 , Plus/4 , C16 i C128 .
Opis
KERNAL 8-bitowych maszyn Commodore składa się z niskopoziomowych, prawie sprzętowych procedur systemu operacyjnego, z grubsza równoważnych BIOS -owi na komputerach zgodnych z IBM ( w przeciwieństwie do procedur interpretera BASIC, również znajdujących się w pamięci ROM), a także wyższych Niezależna od urządzenia funkcjonalność wejścia/wyjścia i może być wywołana przez użytkownika za pomocą tablicy przeskoków, której środkowa (najstarsza) część, ze względu na kompatybilność wsteczną, pozostaje w dużej mierze identyczna w całej serii 8 - . KERNAL ROM zajmuje ostatnie 8 KB z 64 KB przestrzeni adresowej 8-bitowego procesora ($E000-$FFFF).
Tablicę skoku można zmodyfikować tak, aby wskazywała na procedury napisane przez użytkownika, na przykład przez przepisanie procedur wyświetlania na ekranie w celu wyświetlania animowanej grafiki lub przez skopiowanie zestawu znaków do pamięci RAM. To użycie tabeli skoków było wtedy nowością dla małych komputerów. [ 3 ]
Gry Adventure International wydane na VIC-20 na kartridżu są przykładem oprogramowania wykorzystującego KERNAL. Ponieważ używają tylko tabeli skoków, gry mogą być pobierane do pamięci dyskowej , ładowane na Commodore 64 i uruchamiane bez modyfikacji. [ 4 ]
KERNAL został początkowo napisany dla Commodore PET przez Johna Feagansa, który przedstawił ideę oddzielenia procedur BASIC od systemu operacyjnego. Został opracowany przez różnych ludzi, w szczególności Roberta Russella, który dodał wiele funkcji do VIC-20 i C64.
Przykład
Poniższa podprogram języka asemblera 6502 [ 5 ] (napisany w formacie/składni asemblera ca65) dostarcza prostego, ale charakterystycznego przykładu użycia KERNAL:
CHROUT = $ffd2 ; CHROUT to adres funkcji wyprowadzania znaków
CR = $0d ; Kod PETSCII dla zwrotu karetki
;
Witam:
ldx #0 ; zacznij od znaku 0, ładując 0 do rejestru indeksu x
następny:
lda wiadomość , x ; załaduj bajt z adresu message+x do akumulatora
beq zrobione ; jeśli akumulator ma zero, skończyliśmy i chcemy wyjść z pętli
jsr CHROUT ; wywołaj CHROUT, aby wysłać znak do bieżącego urządzenia wyjściowego (domyślnie na ekranie)
w x ; zwiększ x, aby przejść do następnego znaku
b ne następny ; pętla wstecz, gdy ostatni znak nie jest zerem (maksymalna długość ciągu 255 bajtów)
podarować:
rts ; powrót z podprogramu
;
wiadomość:
.byte "Witaj świecie"
.byte CR , 0 ; Powrót karetki i zerowanie końca sznurka
Ten skrót używa procedury CHROUT, której adres jest pod adresem $FFD2(65490), do wysłania ciągu tekstowego do domyślnego urządzenia wyjściowego (na przykład ekranu wyświetlacza).
Imię
KERNAL był znany jako jądro [ 6 ] w Commodore od czasów PET, ale w 1980 r. Robert Russell błędnie napisał to słowo jako kernal w swoich notatnikach. Kiedy pisarze techniczni Commodore, Neil Harris i Andy Finkel, podnieśli notatki Russella i wykorzystali je jako podstawę podręcznika programisty VIC-20, błąd ortograficzny pojawił się po nich i pozostał bez zmian. [ 7 ]
Zgodnie ze starym mitem Commodore, opisanym m.in. przez pisarza/programistę Jima Butterfielda, „ słowo ” KERNAL jest akronimem (lub, co bardziej prawdopodobne, akronimem retro ) , oznaczającym Keyboard Entry Read , Network , And L atrament. , co właściwie ma sens, biorąc pod uwagę jego rolę. Berkeley Softworks użył go później, nazywając podstawowe procedury swojego systemu operacyjnego GUI dla 8-bitowych komputerów domowych: GEOS KERNAL.
We/wy niezależne od urządzenia
Co zaskakujące, KERNAL zaimplementował niezależny od urządzenia interfejs API I/O, który nie różni się całkowicie od Unixa lub Plan-9 , których nikt nie wykorzystał, o ile jest to publicznie znane. Podczas gdy można rozsądnie argumentować, że „wszystko jest plikiem” w drugim systemie, inni mogą z łatwością twierdzić, że „wszystko jest urządzeniem GPIB ” w pierwszym.
Ze względu na ograniczenia architektury 6502 w tym czasie, otwarcie kanału I/O wymaga trzech wywołań systemowych. Pierwsza z nich zwykle ustawia logiczną nazwę pliku poprzez SETNAM. Drugie wywołanie, SETLFSustawia adres „urządzenia” GPIB/IEEE-488, z którym ma się komunikować. Na koniec wywoływany jest w celu OPENwykonania rzeczywistej transakcji. Następnie aplikacja używa wywołań systemowych CHKINi do CHKOUTskonfigurowania, odpowiednio, bieżących kanałów wejściowych i wyjściowych aplikacji. Aplikacje mogą otwierać jednocześnie dowolną liczbę plików (do pewnego limitu zależnego od systemu; na przykład C64 umożliwia jednoczesne otwarcie dziesięciu plików). Następnie CHRINi CHROUTsą przydatne odpowiednio dla wejścia i wyjścia. CLOSEnastępnie zamknij kanał.
Zauważ, że nie ma wywołania systemowego do "tworzenia" kanału I/O, ponieważ urządzenia nie mogą być dynamicznie tworzone lub niszczone w normalnych warunkach. Podobnie, nie ma możliwości pobierania ani wykonywania funkcji "sterowania we/wy", takich jak ioctl () w systemie Unix. W rzeczywistości KERNAL demonstruje tutaj znacznie bliższy filozofii Plan-9, w której aplikacja otwierałaby specjalny kanał „ polecenia ” do wskazanego urządzenia, aby wykonać takie transakcje „ meta ” lub „ poza pasmem ”. Na przykład, aby „ zdrapać ” plik z dysku, użytkownik normalnie „otworzy” nazwany zasób S0:THE-FILE-TO-RMVna urządzeniu 8 lub 9, kanał 15. Zgodnie z konwencją przyjętą w 8-bitowym świecie Commodore, kanał 15 reprezentuje „kanał poleceń”. " w przypadku urządzeń peryferyjnych, polegająca na technikach przesyłania wiadomości do przekazywania poleceń i wyników, w tym w rzadkich przypadkach. Na przykład w Commodore BASIC możesz znaleźć oprogramowanie podobne do następującego:
70 ...
80 REM ROTATE LOGÓW AKTUALNIE OTWARTYCH NA KANALE LOGICZNYM #1.
90 CLOSE 1
100 OPEN 15 , 8 , 15 , "R0:ERROR.1=0:ERROR.0" : REM ZMIEŃ BŁĄD PLIKU.0 NA ERROR.1
110 INPUT# 15 , A , B$ , C , D : REM ODCZYTAJ KANAŁ BŁĘDU
120 ZAMKNIJ 15
130 JEŚLI A = 0 TO PRZEJDŹ DO 200
140 WYDRUKUJ „BŁĄD ZMIANY NAZWY PLIKU DZIENNIKA:”
150 DRUKUJ „ KOD: „ + A
160 DRUKUJ „ WIADOMOŚĆ : ” + B$
170 KONIEC
200 REM KONTYNUUJ PRZETWARZANIE TUTAJ, TWORZENIE NOWEGO PLIKU LOGÓW W CZASIE PRACY...
210 OPEN 1 , 8 , 1 , "0:ERROR.0,S,W"
220 ...
Numery urządzeń, zgodnie z ustaloną dokumentacją, są ograniczone do zakresu [0,16]. Ograniczenie to wynika jednak ze specyficznej adaptacji protokołu IEEE-488 iw efekcie dotyczy tylko zewnętrznych urządzeń peryferyjnych. Dzięki wektoryzacji wszystkich odpowiednich wywołań systemowych KERNAL programiści mogą przechwytywać wywołania systemowe w celu implementacji urządzeń wirtualnych o dowolnym adresie z zakresu 32 256). Można by ewentualnie załadować binarny sterownik urządzenia do pamięci, załatać wektory KERNAL I/O i od tego momentu można by zaadresować nowe (wirtualne) urządzenie. Do tej pory ta funkcja nigdy nie była publicznie znana, prawdopodobnie z dwóch powodów: (1) KERNAL nie zapewnia możliwości dynamicznego przypisywania identyfikatorów urządzeń oraz (2) KERNAL nie zapewnia możliwości ładowania relokowalnego obrazu binarnego. W ten sposób ciężar kolizji zarówno w przestrzeni we/wy, jak i w pamięci spada na użytkownika, podczas gdy kompatybilność platformy na wielu różnych maszynach spada na autora oprogramowania. Jednak w razie potrzeby można łatwo wdrożyć oprogramowanie wspierające te funkcje.
Logiczne formaty nazw plików zwykle zależą od konkretnego adresowanego urządzenia. Najpopularniejszym urządzeniem jest oczywiście system dyskietek, który używa formatu podobnego do MD:NAME,ATTRS, gdzie M jest rodzajem flagi ($ dla listy katalogów, @ oznacza chęć zastąpienia pliku, jeśli już istnieje, w przeciwnym razie nieużywany ), D to numer fizycznego dysku (opcjonalnie) (0: lub 1: dla systemów z dwoma dyskami, tylko 0: dla dysków z jednym dyskiem, takich jak 1541 i in., domyślnie 0: jeśli nie określono) , NAMEto nazwa zasobu o długości do 16 znaków (większość dozwolonych znaków, z wyjątkiem niektórych znaków specjalnych) i ATTRSjest opcjonalną listą atrybutów lub flag oddzielonych przecinkami. Na przykład, jeśli użytkownik chciał nadpisać plik programu o nazwie PRGFILE, może zobaczyć nazwę pliku @0:PRGFILE,Pużywaną w połączeniu z urządzeniem 8 lub 9. Tymczasem nazwa pliku dla kontrolera RS-232 (urządzenie 2) składa się po prostu z czterech znaków , zakodowane w formacie binarnym. [ 8 ]
Inne urządzenia, takie jak klawiatura (urządzenie 0), kaseta (urządzenie 1), interfejs wyświetlacza (urządzenie 3) i drukarka (urządzenie 4 i 5), nie wymagają do działania nazw plików, zakładając rozsądne wartości domyślne lub po prostu nie potrzebujesz ich. absolutnie.
Referencje
- ↑ Instrukcja obsługi programisty Commodore 64 . Commodore Business Machines, Inc., 1982, s. 268
- ↑ Tablica skoków KERNAL, używana do dostępu do wszystkich podprogramów w KERNAL, jest tablicą instrukcji JMP (skoków) prowadzących do właściwych podprogramów. Ta funkcja zapewnia kompatybilność z oprogramowaniem napisanym przez użytkownika w przypadku konieczności przeniesienia kodu w pamięci KERNAL ROM w późniejszej wersji.
- ^ „Odkrywanie VIC-20” .
- ↑ Kevelson, Morton (styczeń 1986). „Syntezatory mowy dla komputerów Commodore / Część II” . p. 32 . Pobrano 17 lipca 2014 .
- ↑ Wiele podprogramów KERNAL (np. OPEN i CLOSE) zostało przeniesionych przez trzecią stronę w pamięci RAM, umożliwiając programiście przechwycenie powiązanych wywołań KERNAL i dodanie lub zastąpienie oryginalnych funkcji.
- ↑ Jądro jest najbardziej podstawową częścią programu, zazwyczaj systemu operacyjnego, która zawsze znajduje się w pamięci i zapewnia podstawowe usługi . Jest to część systemu operacyjnego, która znajduje się najbliżej maszyny i może bezpośrednio aktywować sprzęt lub być interfejsem do innej warstwy oprogramowania, która steruje sprzętem
- ↑ On The Edge: The Spectacular Rise and Fall of Commodore , strona 202.
- ↑ Commodore 128 Programmer Reference Guide , Commodore Business Machines, Inc., 1986, s. 382
Zobacz także
- GEOS , graficzny system operacyjny dla Commodore 64 i 128.