Das Betriebssystem unterteilt sich in vier Teile: Im unteren Adressbereich
(0000h - 7FFFh) sind der Kernel und das Dateisystem untergebracht. Der obere
Adressbereich (8000h - FFFFh) beherbergt den Basic-Interpreter und die
kShell. Diese Trennung wurde nötig, da das Betriebsystem so gewaltig
anwuchs, dass es nicht mehr in einem einzigen 32kb-Eprom unterzubringen war.
Inhaltsverzeichnis:
Der Kernel
Das Dateisystem
Der Basicinterpreter
Die kShell
Gerätenummern
Kommandos
Umleitungen und Pipes
Umgebungsvariablen
Starten von Programmen
Der Kernel
Der Kernel (engl. "Kern") enthält alle wichtigen
Betriebsystem-Funktionen. Er ist für die Speicherverwaltung zuständig und
enthält den Interrupt-Händler. Des weiteren beherbergt er alle Treiber,
die zum ansprechen der angeschlossenen Geräte benötigt werden, z.B.
Tastatur-, LCD-, RS232- und Drucker-Treiber. In ihm ist natürlich auch das
Datei-Subsystem untergebracht, das es erst ermöglicht, über File-Handles
Dateien und Treiber zu öffnen.
Das Dateisystem
Das Dateisystem ist proprietär, das heißt, dass es eine absolute
Eigenentwicklung und zu nichts anderem kompatibel ist. Es ist auf
Silicon-Disks (z.B. batteriegepuffertes SRAM) zugeschnitten und entfaltet
dort seine volle Geschwindigkeit. Es werden alle gängigen DOS-Funktionen
unterstützt, wie z.B. Unterverzeichnisse und eine Undelete-Funktion. Es
kann Laufwerke mit einer maximalen Größe von 16 Mb verwalten, daher macht
es wenig Sinn, eine Festplatte anzuschließen (wer braucht überhaupt die
vielen Gigabytes an Speicher, wenn der Prozessor nur einen Adressraum von
64kb hat?)
Der Basic-Interpreter
Den Basic-Interpreter habe ich mir vom Commodore 64 abgeguckt. Ich hatte damals
viele Basic-Erweiterungen für den C64 geschrieben, so dass ich den Code
des Basic-Interpreter-ROMs schon fast im schlaf auswendig aufsagen konnte ;-). So lag
es also nahe, den Basic-Interpreter für mein System nachzuprogrammieren, damit
ich auch die alten CBM-Basic-Programme auf meinem Computer ausführen kann.
Das Basic brauche ich hier somit nicht näher zu beschreiben;
wer etwas über die
Kommandos wissen möchte, braucht nur in das C64 Benutzerhandbuch gucken
;-). Aber eins sei noch gesagt: Die altbekannten peek's, poke's und sys'
funktionieren natürlich nicht, sie führen höchstens zum Absturz des
Systems. Wenn man aber alte Basic-Programme ausführen möchte, die mittels poke's
auf den Bildschirmspeicher zugreifen, sollte man mit dem Kommando 'trap 1' diese
pokes 'entschärfen'.
Hier ist eine (unvollständige) Liste der Befehle, die ich zusätzlich zu den
CBM-Kommandos in meinen Interpreter eingebaut habe:
| adr(Ausdruck) |
Funktion. Liefert Speicheradressen zurück. Wird eine positive Zahl
angegeben, wird sie als Basic-Zeilennummer interpretiert und die
Funktion liefert die Startadresse der Basiczeile im Speicher zurück.
Wird eine Stringvariable (z.B. a$) als Ausdruck angegeben, so wird deren Adresse
im Speicher zurückgeliefert. |
| deek(adr) |
Funktion. Wie peek(), liefert aber eine 16Bit-Zahl zurück:
peek(adr)+256*peek(adr+1) |
| dez("string") |
Funktion. Wandelt eine hexadezimale Zahl (string) in eine
Dezimalzahl (Integer) um. |
| env$("var") |
Funktion. Gibt den Inhalt der angegebenen Umgebungsvariable
zurück. |
| hex$(integer) |
Funktion. Wandelt eine integer Zahl in eine hexadezimale Zahl
(string) um. |
| lib nr,func,x,y, oa,ox,oy |
Bibliotheksfunktion 'func' der Bibliothek 'nr' aufrufen.
x und y sind Eingabeparameter, oa, ox und oy stehen für Variablen, die
die Ausgabeparameter zugewiesen bekommen. Alle Parameter sind ganze
Zahlen im Bereich von 0 bis 255. Parameter können auch weggelassen werden. |
| maxx(0) |
Funktion. Liefert die Breite des Bildschirms/Terminals zurück |
| maxy(0) |
Funktion. Liefert die Höhe des Bildschirms/Terminals zurück |
| cls |
Bildschirm löschen |
| doke adr,wert |
Wie poke, jedoch für 16Bit-Zahlen: poke adr,wert%256 : poke
adr+1,wert/256 |
| exit |
Beendet den Basic-Interpreter und kehrt zur kShell zurück |
| help |
Listet alle Kommandos und Funktionen auf |
| old |
Holt ein durch "new" gelöschtes Basicprogramm zurück |
| setenv "string" |
Setzt eine Umgebungsvariable. Der String muss folgendes Format haben:
"Variablenname=Variablenwert" (vgl. set-Kommando der kShell)
|
| shell |
Startet eine neue Instanz der kShell. Wird ein Befehls-String
angegeben, so wird der Befehl sofort von der Shell verarbeitet und zur
Basic-Eingabeaufforderung zurückgekehrt ("ready.") |
| trap |
Schaltet die peek/poke/sys-Falle ein, wenn der Parameter '1' angegeben
wird. Der Basic-Interpreter versucht dann, die altbekannten peeks, pokes und sys'
des C64 auf die eigenen internen Adressen umzuleiten. Ein 'poke 53281,x' bewirkt
somit z.B. die Veränderung der Hindergrundfarbe auch auf dem MyCPU-System. |
Die kShell
Dies ist die "Kernel Shell". Sie ist eine Art
"DOS-Eingabeaufforderung", mit der sich das System bedienen und
steuern lässt. In der Tat versteht sie viele DOS-Kommandos, aber auch ein
paar Unix-Kommandos sind dabei. Bei den DOS-Kommandos ist darauf zu achten,
dass das System den Backslash "\" nicht oder nur teilweise kennt.
Es ist darum besser, wie unter Unix immer den Schrägstrich "/" zu
verwenden. Wie unter DOS gibt es auch bei meinem Betriebsystem Laufwerke,
jedoch werden sie nicht von A: bis Z: gezählt, sondern von 0: bis 15:. Der
Grund dafür lässt sich im Basic-Interpreter finden, da er nur mit
Geräte-"adressen" umgehen kann (z.B. load "datei"
,8,1). Hier folgt nun eine Liste der verschiedenen Geräte:
| Gerät |
Alias |
Beschreibung |
| 0: |
|
Tastatur |
| 1: |
COM1: |
Erste serielle Schnittstelle |
| 2: |
COM2: |
Zweite serielle Schnittstelle |
| 3: |
CON: |
Bildschirm (+Tastatur) |
| 4: |
PRN: |
Drucker (automatische Konvertierung von PETSII
nach ASCII und Anfügen von LF nach CR) |
| 5: |
LPT1: |
physikalischer Druckeranschluss (keine
Konvertierung der Druckdaten) |
| 6: |
|
frei (später evt. Sound-Device) |
| 7: |
|
frei |
| 8: |
|
erstes Massenspeichergerät (vgl. MS-DOS:
"A:") |
| 15: |
|
letztes Massenspeichergerät (vgl. MS-DOS:
"H:") |
Durch diese Gerätebezeichnungen ist es z.B. möglich, folgende Konstrukte
in der Shell einzugeben:
|
copy con: 8:/datei.txt |
Erzeugt eine Datei. Der text wird am
Bildschirm eingegeben. Abbruch durch CTRL-C + Enter. |
|
copy 8:/datei.txt con: |
Gibt die soeben erzeugte Datei auf dem
Bildschirm aus. |
|
copy 8:/datei.txt prn: |
Gibt die Datei auf dem Drucker aus. |
|
copy com1: lpt1: |
Empfängt Daten von der seriellen Schnittstelle und
gibt sie auf dem Drucker aus. |
Beschreibung der kShell-Kommandos
attrib [+a | -a] [+h | -h] [+r | -r] [[Gerät:][Pfad]Dateiname]
Setzen bzw. zurücksetzen von Dateiattributen. Im Dateinamen können
Joker-Zeichen verwendet werden. Werden keine Attribute angegeben, so werden
die momentan gesetzten Attribute der spezifizierten Datei ausgegeben. Wird
kein Dateiname angegeben, werden alle Dateien des aktuellen Verzeichnisses
mit ihren Attributen aufgelistet. Das Attribut 'D' bezeichnet ein
Unterverzeichnis.
basic [Kommando]
Startet den Basic-Interpreter. Wird ein Kommando angegeben, so wird
dieses vom Basic-Interpreter ausgeführt und der Interpreter beendet sich.
call Adresse [accu [xreg [yreg [-c] [-z] [-v]]]]
Ruft eine Maschinensprache-Unterroutine auf. Zusätzlich zur Startadresse
der Routine können noch die Registerwerte und Flags als Aufrufparameter
mitgegeben werden. Wird eines der Flag-Kennzeichner -c/-z/-v angegeben,
so wird das entsprechende Flag beim Routinenaufruf auf eins gesetzt.
Über dieses call-Kommando können Unterroutinen im Kernel (0000h-7FFFh) und
in der ersten RAM-Seite (8000h-FFFFh) aufgerufen werden.
cd [[Gerät:][Pfad]]
Wechselt das aktuelle Gerät und/oder den Pfad. Wird kein Parameter
angegeben, so wird das aktuelle Gerät und der Pfad ausgegeben.
chkdsk [-f] [Gerät:]
Prüft das angegebene Gerät auf Fehler und repariert sie automatisch. Der
Parameter -f zwingt chkdsk dazu, einen vollständigen Gerätetest
durchzuführen.
cls
Säubert den Bildschirm.
coldstart
Führt einen Kaltstart (Reset) des Systems durch.
console lcd | screen | tty | ttydisp | ttykeyb | keyb
Wählt die Konsole für Tastatur-Eingaben und Bildschirm-Ausgaben."tty"
bezeichnet die erste serielle Schnittstelle. Die Schnittstellenparameter
werden auf 115200 baud, 8 Datenbits, 1 Stoppbit, keine Parität und
Hardware-Handshake gestellt. "lcd" schaltet auf LCD-Betrieb und impliziert
die Benutzung der lokalen Tastatur. "screen" verhält sich genauso, texte
werden auf dem angeschlossenen Bildschirm ausgegeben (ist noch nicht
implementiert).
copy [Gerät:][Pfad]Dateiname(Quelle) [+ [G:][P]Datei [+
[G:][P]Datei]] [Gerät:][Pfad]Dateiname(Ziel)
Kopiert Dateien. Quelle und Ziel können Joker-Zeichen (* und ?) enthalten.
Der Befehl kann auch dazu benutzt werden, um mehrere Deteien miteinander zu
verbinden (a + b + c = d). Wird als Ziel nur ein Pfad angegeben, so muss
dieser durch einen Schrägstrich ("/") abgeschlossen werden, um dem System
zu verdeutlichen, dass keine Datei gemeint ist.
date [tt.mm.jjjj]
Setzt das aktuelle Tagesdatum. Werden Tag, Monat und Jahr nicht als Parameter
mit angegeben, so fragt das System selber nach. Wenn dann keine Eingabe
gemacht wird, bleibt das Datum unverändert.
deltree [Gerät:][Pfad]Verzeichnis
Löscht das angegebene Verzeichnis mit samt seinen Unterverzeichnissen.
Joker-Zeichen sind im Verzeichnisnamen nicht erlaubt.
del [Gerät:][Pfad]Dateiname
Löscht eine oder mehrere Dateien. Der Dateiname kann Joker-Zeichen enthalten.
Versehentlich gelöschte Dateien können mit dem Kommando "undel" zurückgeholt
werden.
dir [Gerät:][Pfad][Dateiname] [-a] [-o] [-p]
Listet den Inhalt des angegebenen Verzeichnisses auf. Der Parameter -a zeigt
auch versteckte Dateien an. Der Parameter -o führt zur sortierten Ausgabe
(noch nicht implementiert). Der Parameter -p zeigt den Inhalt seitenweise an.
df [Gerät:]
Zeigt den freien Speicher auf dem angegebenen Gerät an. Wird kein Gerät
angegeben, wird der freie Speicher aller Geräte angezeigt.
echo [text]
Gibt den angegebenen Text auf dem Bildschirm aus. Der Text kann in Anführungszeichen stehen,
um die Ausgabe zu formatieren (z.B. Ausgabe führender Leerzeichen). Die Anführungszeichen
werden nicht mit gedruckt. Folgt direkt nach dem hinteren Anführungszeichen ein Semikolon,
so wird kein Zeilenumbruch gedruckt.
exit
Beendet die aktuelle Instanz der kShell.
format Gerät:
Löscht alle Daten auf dem angegebenen Gerät und bereitet es für
die Datenspeicherung vor.
goto Label
Dieser Befehl steht nur in Shell-Skripten zur Verfügung. Die Skriptausführung wird beim
angegebenen Label fortgesetzt. Ein Label wird durch ein vorangestellten Doppelpunkt markiert.
(vgl. MSDOS Batchdateien)
if Ausdruck1 Operator Ausdruck2 Befehl
Dieser Befehl steht nur in Shell-Skripten zur Verfügung.
Er Vergleicht die beiden Ausdrücke 1 und 2 über den angegeben Operator miteinander. Nur wenn
das Ergebis des Vergleichs war (true) ist, wird der angegebene Befehl ausgeführt.
Es stehen folgende Operatoren zur Verfügung:
= (gleich), <> (ungleich), < (kleiner), > (größer), <= (kleiner oder gleich),
>= (größer oder gleich). Die zu vergleichenden Ausdrücke können Zeichenketten und
dezimale Zahlen sein.
info Wert
Gibt Systemspeziefische Informationen in Abhängigkeit von der Zahl "Wert" aus.
help
Listet alle Kommandos auf, die die kShell versteht.
kshell [Kommando]
Startet eine neue Instanz der Shell. Wird ein Kommando angegeben, so wird dieses
ausgeführt und die Instanz der Shell wieder beendet.
load Dateiname Startadresse [RAM-Seite [ROM-Seite]]
Lädt eine Datei in den Arbeitsspeicher an die angegebene Startadresse.
Zusätzlich kann die Seitennummer einer RAM- bzw. ROM-Seite angegeben werden,
um die Datei in sonst unzugänglichen Speicher zu laden.
md [Gerät:][Pfad]Verzeichnis
Erzeugt ein neues Unterverzeichnis
mode COM1|COM2:baud,Datenbits,Stoppbits,Parität,Handshake
Stellt den Modus einer seriellen Schnittstelle ein. "Datenbits" und
"Stoppbits"
sind Zahlenwerte. "Parität" kann "n" (keine), "e" (gerade) oder
"o" (ungerade) sein. "Handshake" kann "n"
(keins), "h" (Hardware-RTS/CTS) oder "s"
(Software-XON/XOFF) sein.
move [Gerät:][Pfad]Verzeichnis(alt) [Gerät:][Pfad]Verzeichnis(neu)
Verschiebt ein Verzeichnis (nur innerhalb eines Gerätes) oder benennt es um.
pwd
Gibt das aktuelle Gerät und den aktuellen Pfad aus.
ramdrive [-n] [-r] Größe [Gerät:]
Erzeugt ein RAM-Laufwerk zur Datenspeicherung. Die "Größe" ist ein Zahlenwert und
beschreibt die gewünschte Laufwerksgröße in Kilobyte. "Gerät" gibt die Gerätenummer an,
wenn keine Gerätenummer angegeben wird, wird das nächste freie Gerät belegt. Der
Parameter -n führt beim Anlegen eines Lauferks dazu, dass der belegte Speicher nicht
formatiert wird. Dafür wird aber ein 'chkdsk' ausgeführt. Wird der Parameter -r
angegeben, wird das Laufwerk wieder gelöscht. Werden gar keine Parameter
angegeben, wird der Laufwerkstatus angezeigt (Ramdrive installiert oder nicht).
rd [Gerät:][Pfad]Verzeichnis
Löscht ein Unterverzeichnis. Das Unterverzeichnis muss leer sein, bevor es
gelöscht werden kann.
ren [Gerät:][Pfad]Dateiname(alt) Dateiname(neu)
Benennt eine Datei um.
save Dateiname Startadresse Endadresse [RAM-Seite [ROM-Seite]]
Speichert den angegeben Speicherbereich in eine Datei. Um sonst unzugänglichen
Speicher sichern zu können, können zusätzlich die Nummern der RAM- und ROM-Seiten
angegeben werden.
set [Variablenname[=NeuerWert]]
Weist einer Umgebungsvariable einen Wert zu. set ohne Parameter gibt den Inhalt aller
definierten Umgebungsvariablen auf dem Bildschirm aus. set gefolgt von einem Variablennamen
gibt nur den Inhalt der spezifizierten Variable aus. Umgebungsvariablen werden durch zwei
%-Zeichen referenziert, beispielsweise gibt ein 'echo %path%' den aktuellen Suchpfad aus.
shift
Dieser Befehl steht nur in Shell-Skripten zur Verfügung. Er bewirkt das Schieben der
Aufrufparameter: %0 bekommt den Wert von %1, %1 den Wert von %2 und so weiter. Durch diese
Maßnahme können mehr als nur 10 Parameter in Skripten verarbeitet werden.
stack
Gibt den aktuellen Stand des Stack-Pointers aus. Der Stack-Pointer bewegt
sich Rückwerts, ein FFh bedeutet, dass kein Stack-Speicher belegt ist.
status
Gibt den Status der letzten Operation aus (Bitmaske). 0 bedeutet, dass
kein Fehler vorliegt.
term Bitmaske
Stellt Terminal-Parameter über eine Bitmaske ein. Hier eine Liste mit gängigen
Terminals und den zugehörigen Bitmasken: ANSI-Terminal=$00, Hyperterm=$30, Linux=$10,
VT100 kompatibles Terminal=$04, XTERM=$20
time [hh:mm:ss]
Setzt die aktuelle Uhrzeit. Werden Stunde, Minute und Sekunde nicht als Parameter
mit angegeben, so fragt das System selber nach. Wenn dann keine Eingabe
gemacht wird, bleibt die Uhrzeit unverändert.
type [Gerät:][Pfad]Dateiname
Gibt den Inhalt der angegebenen Datei auf dem Bildschirm aus.
undel [Dateiname]
Rettet eine bereits gelöschte Datei. Wenn kein Dateiname angegeben wird, werden alle
Dateien, die zurückgeholt werden können, aufgelistet.
ver
Gibt die Version der kShell aus.
warmstart
Führt einen Warmstart des Systems durch. Die Konsole für die Ein-/Ausgabe wird wieder
hergestellt und der Stack wird gelöscht. Wichtige Systemvektoren bleiben unverändert.
xcopy [Gerät:][Pfad]Verzeichnis|Dateiname(Quelle) [Gerät:][Pfad]Verzeichnis(Ziel)
Dieses Kommando kopiert ganze Verzeichnisse samt ihren Unterverzeichnissen.
Existiert das Zielverzeichnis noch nicht, so wird es automatisch angelegt.
xget COM1|COM2:[Parameter] [Dateigröße]
X-Modem bzw. Y-Modem: Empfängt eine Datei (X-Modem) oder eine/mehrere Dateien (Y-Modem) von
einem angeschlossenem Terminal. Die Dateigröße muss nur angegeben werden, wenn das X-Modem-
Protokoll verwendet wird. Bei X-Modem wird die empfangene Datei unter dem Namen
"x-file"
abgespeichert. Bei einer Y-Modem-Gegenstelle ist die Angabe der Dateigröße nicht nötig, da sie
genauso wie der Dateiname mit übertragen wird. Die "Parameter" sind die gleichen wie
beim "mode"-Befehl, sie legen die Verbindungsparameter der seriellen Schnittstelle
fest.
xput [xmodem] COM1|COM2:[Parameter] Datei
X-Modem bzw. Y-Modem: Sendet eine oder mehrere Dateien zu einem über die serielle Schnittstelle
angeschlossenem Terminal. Wird der Parameter "xmodem" nicht angegeben, arbeitet das
Programm im Y-Modem-Betrieb. Bei Y-Modem können mehrere Dateien auf einmal übertragen
werden, wenn Joker-Zeichen (* oder ?) im Dateinamen benutzt werden. Die
"Parameter"
sind die gleichen wie beim "mode"-Befehl, sie legen die Verbindungsparameter der
seriellen Schnittstelle fest.
? [Numerischer Ausdruck bzw. Formel]
Mini-Taschenrechner. Berechnet das Ergebnis des angegebenen Ausdrucks. Der Taschenrechner
benutzt den Basic-Interpreter zur Berechnung, somit kann der Taschenrechner nicht
benutzt werden, wenn bereits eine Instanz des Basic-Interpreters läuft.
Umleitungen und Pipes
Wie unter DOS und Unix ist es auch bei meinem Betriebssystem möglich, die Textausgabe
(stdout) von Befehlen und Programmen umzuleiten. Die Umleitung von Texteingaben (stdin)
ist zwar vorgesehen aber noch nicht implementiert. Für die Umleitung von stdin und stdout
stehen folgende Symbole zur Verfügung:
|
< und <<
|
Umleitung der Eingabe (stdin), noch nicht implementiert
|
|
> und >>
|
Umleitung der Ausgabe, mögliche Ziele: nul oder Datei
|
| ¦ |
Filterung der Ausgabe, zur Zeit ist nur der Filter "more" definiert
|
Für die Umleitung von Ein- und Ausgabe gilt folgendes Befehlsformat:
[Laufwerk:][Pfad]Kommando Parameter Pipe-Symbol
Datei_oder_Filter
Beispiele:
8:/>mem -a ¦ more
zeigt den Inhalt des Speichers seitenweise an (Filter "more")
8:/>dir > 8:/temp/dir.txt
leitet die Ausgabe des dir-Befehls in die Datei "8:/temp/dir.txt" um.
Umgebungsvariablen
Umgebungsvariablen werden mittels des set-Kommandos definiert. Eine Liste aller zur Zeit
definierten Variablen erhält man, wenn man das set-Kommando ohne weitere Parameter eingibt.
Folgende Umgebungsvariablen gibt es:
| LIB |
Gibt den Pfad zu den Systembibliotheken an.
|
| PATH |
Gibt den allgemeinen Suchpfad an. Verzeichnisse werden durch ein
Semikolon (;) voneinander getrennt.
|
| PRG |
Diese Umgebungsvariable wird vom System gesetzt. Sie gibt die
Befehlszeile des zuletzt ausgeführten Programms an.
|
| PROMPT |
Gibt die Formatierung des Prompt-Symbols (Eingabeaufforderung) an.
Folgende Makros sind definiert:
| |
$b |
Ersatz für "|" |
| |
$cX |
Ändert die farbliche Darstellung des Prompts. Das Zeichen X steht dabei für einen
dezimalen Zahlenwert, der eine Zeichen- bzw. Hintergrundfarbe beschreibt:
0=schwarz, 1=weiss, 2=rot, 3=cyan, 4=purpur, 5=grün, 6=blau, 7=gelb, 8=orange,
9=braun, 10=hellrot, 11=grau1, 12=grau2, 13=hellgrün, 14=hellblau, 15=grau3.
Die Werte 16 bis 23 entsprechen den Werten 0 bis 7, geben aber die
Hintergrundfarbe an.
|
| |
$d |
gibt das aktuelle Datum aus |
| |
$e |
Ersatz für das ESC-Zeichen (chr$(27)) |
| |
$g |
Ersatz für ">" |
| |
$h |
Ersatz für das delete-Zeichen (chr$(20)) |
| |
$l |
Ersatz für "<" |
| |
$n |
gibt die Nummer des aktuellen Laufwerks aus |
| |
$p |
gibt den gesamten aktuellen Laufwerkspfad aus |
| |
$q |
Ersatz für "=" |
| |
$t |
gibt die aktuelle Uhrzeit aus |
| |
$$ |
Ersatz für "$" |
| |
$_ |
Ersatz für das CR-Zeichen (chr$(13)) |
|
| RC |
Diese Umgebungsvariable wird vom System gesetzt. Sie zeigt den Beendigungsstatus
des zuletzt ausgeführten Progammes an. Eine 0 zeigt gewöhnlich eine erfolgreiche
Ausführung des Programmes an.
|
Starten von Programmen
Die kShell verfügt über einen eingebauten Dateilader. Wie unter MSDOS ist es möglich, Programme
durch Eingabe ihres Dateinamens zu starten. Die kShell erkennt automatisch den Dateityp
(Skript / Basicprogramm / Maschinenspracheprogramm). Wie unter MSDOS ist der Suchpfad in der
Umgebungsvariable PATH gespeichert. Das aktuelle Verzeichnis wird nicht automatisch durchsucht,
es muss mit im Suchpfad angegeben werden ( set path=. ).
Maschinensprache-Programme werden anhand ihrer ersten beiden
Bytes erkannt. Die Bytes müssen den Wert 02h 80h haben. Ein Programm wird, nachdem es geladen
wurde, automatisch im Speicher reloziert, d.h. die absoluten Sprünge und Datenzugriffe im
Programmcode werden automatisch an den neuen Speicherbereich angepasst. Speicherresistente
Programme (TSR) werden unterstützt. Es gibt einen Bibliotheks-Mechanismus ähnlich der
dynamischen Bibliotheken unter Windows (DLL). Bibliotheken werden in dem Verzeichnis, auf
den die Umgebungsvariable 'lib' zeigt, gesucht. Sie beginnen mit den beiden Buchstaben 'SL'
gefolgt von einer eindeutigen, zweistelligen hexadezimalen Nummer.
Skript-Dateien sind Textdateien. Die ersten beiden Bytes in einem Skript müssen die
ASCII-Zeichen #! sein (vgl. UNIX-Skripte). Ein Skript kann sämtliche kShell-Kommandos enthalten.
Zusätzlich gibt es aber noch die Befehle if, goto und shift. Bemerkungen werden durch ein #
eingeleitet. Skripte können nicht geschachtelt aufgerufen werden. Skripte können mit Parametern
aufgerufen werden, die im Skript durch ein %-Zeichen referenziert werden (wie unter DOS; %1
meint den ersten und %9 den letzten Parameter; %0 ist der aktuelle Pfad plus Dateiname).
Basic-Programme werden anhand ihrer ersten beiden Bytes erkannt. Die Bytes müssen die
Werte 01h 04h oder 01h 08h haben. Zum Ausführen eines Basic-Programms wird automatisch der
eingebaute Basic-Interpreter gestartet.
|