C 64
Software

DOS 5.1 – Teil 2

Das interessante Programm DOS 5.1 auf Ihrer Demo-Diskette bietet noch mehr als wir bisher gedacht hatten. Einige Leser schrieben uns: Sie entlockten dem DOS noch einige bemerkenswerte Geheimnisse. Außerdem wird das Programm noch um einige Befehle erweitert, zum Beispiel durch Merge.

Wie schon in der Ausgabe 5/84 des 64'er-Magazins berichtet (»Wie bitte, Sie besitzen ein tolles Programm und wissen es gar nicht?«), gab es zum DOS 5.1 nur sehr wenig Literatur. Daraufhin setzten sich einige Tüftler hin und versuchten anhand eines Assemblerlistings, ihm seine Geheimnisse zu entlocken. Einer von Ihnen ist Herbert Heise. Sein Bericht steht stellvertretend für alle anderen Zusendungen, die wir erhalten haben. Doch lesen Sie selbst.

Geheimnisvolles DOS

Ich würde diesen Beitrag über das DOS gern fortsetzen und durch drei Programme abrunden. Denn das DOS hat noch folgende nützliche Eigenschaften:

  1. %NAME bedeutet, ein Maschinenprogramm absolut laden.
  2. @#9 ändert die Geräteadresse des DOS in 9.
  3. @Q schaltet das DOS ab.
  4. @$:*=PRG listet nur PRG-Files.
  5. Das Auslisten mit @$ läßt sich über Space steuern.
  6. DOS-Befehle funktionieren auch im Programmbetrieb.

Als ich mir das Diskettenlaufwerk gekauft hatte, wußte ich mit dem DOS wenig anzufangen. Dies liegt wohl hauptsächlich an der mangelnden Beschreibung im Handbuch. Mit der Zeit erfuhr ich durch Zufall und durch Bekannte, daß hinter dem DOS doch mehr steckt. Ich wurde neugierig und schaute mir das DOS genauer an. Damit das besser ging, erstellte ich mir zum DOS zuerst ein Assemblerlisting. Ich habe es gelesen und versucht, es zu verstehen. Was ich dabei herausgefunden habe, möchte ich hier beschreiben.

Später werde ich ein Programm 1 vorstellen, das es vereinfacht, das DOS zu kopieren.

Ein Programm 4 wird den Namen (=Einschaltmeldung) ändern.

Zum Schluß erweitere ich das DOS um den MERGE-Befehl. Über »+« kann damit ein Programm zugeladen werden.

Ich empfehle, zuerst das DOS zu laden.

Erklärung der Befehle /,↑,%

Das DOS erlaubt, ein Programm auf drei verschiedene Arten zu laden.

Um die Beschreibung etwas zu vereinfachen, werde ich die Programme, die ich laden will, einfach »Test« nennen. Normalerweise soll ein Basicprogramm geladen werden. Über Basic gebe ich »LOAD ” TEST ”,8« ein. Beim DOS erspart man sich die Anführungszeichen und schreibt ganz kurz: /TEST. Soll nach dem LOADING sofort ein RUN ausgeführt werden, schreibt man einfach ↑ TEST.

Die dritte Möglichkeit besteht darin, ein Maschinenprogramm absolut zu laden. Da dies seltener vorkommt, wird dies meist verschwiegen. In Basic lautet der Befehl LOAD ” TEST ”,8,1.

Geschieht dies im Direktmodus, so teilt mir der Computer bald sein OUT OF MEMORY mit und ich muß ein NEW eingeben. Dies wird beim DOS mit %TEST vermieden. Um diesen Befehl testen zu können, wird natürlich ein Maschinenprogramm benötigt. Das DOS ist zwar ein solches, versucht man es aber mit zum Beispiel %DOS so erhält man eine Fehlermeldung. Diejenigen, die von Data Becker »Profimat« oder »Profiass« besitzen, können dies damit probieren.

Ein Tip am Rande

Man spart sich Tipparbeit, wenn man sich mit @$ das Inhaltsverzeichnis auf den Bildschirm holt. Danach fährt man mit dem Cursor hoch zum gewünschten Programmnamen und drückt die Tasten »/«, »↑«, »%« oder »←« und ein RETURN. Schon erscheint ein LOADING beziehungsweise SAVING des Programms.

>Wer der Meinung ist, das DOS läßt sich nur mit einer Floppy einsetzen, den kann ich jetzt eines Besseren belehren. Soll das DOS zum Beispiel mit einem Kassettenrecorder arbeiten, genügt die Eingabe »@ # 1«. Dadurch adressieren wir Gerät 1. Es können nun die Abkürzungen /,↑,% benutzt werden. Natürlich kann man mit @ keinen Fehlerkanal lesen. Da nach jedem SAVE-Befehl mit »←« versucht wird, diesen zu lesen, kann auch diese Abkürzung nicht verwendet werden.

DOS 5.1 arbeitet mit Disk oder Kassette

Die Glücklichen, denen zwei Diskettenlaufwerke zur Verfügung stehen, wählen zum Beispiel über: @#9 ihre Station aus.

Anmerkungen:

Die Geräteadresse wird beim Aufruf mit »SYS 52224« festgelegt. Das DOS nimmt sich dabei den Wert aus der Speicherstelle 186(=$ba). Demnach wird das Gerät adressiert, von dem das DOS geladen wurde.

Sicher kennen viele den ’RESET-Befehl' über ’SYS 64738’. Damit bringt sich unser Rechnergenie in den Einschaltzustand. Soll das DOS danach wieder arbeiten, müssen wir ihm die richtige Gerätenummer zuweisen (zum Beispiel @ # 8).

Wer hätte das gedacht: Das DOS kann sich abschalten. Die Syntax lautet »@Q«. Eine Kontrolle mit dem Klammeraffen »@« ergibt SYNTAX ERROR.

Dies ist nützlich bei Programmen, die sich mit dem DOS nicht vertragen wollen. Beispielsweise tun dies Simons Basic und manche BACKUP-Programme nicht. Natürlich kann ersatzweise auch kurz der »Saft« abgedreht werden (das heißt Computer ausschalten).

DOS und das Inhaltsverzeichnis

Die Diskette hat viele Vorteile, unter anderem wird auf dieser automatisch ein Inhaltsverzeichnis angelegt. Dieses ist als Programm »$« gespeichert. Man kann es also über LOAD"$", 8 laden und mit LIST anschauen. Das DOS bietet diesen Befehl auch an. Er lautet »@$«. Dabei wird ein eventuell vorhandenes Programm nicht überschrieben. Zusätzlich kann das Auslisten gestoppt werden. Es genügt ein Druck auf die SPACE-Taste und das DOS verweilt in einer Warteschleife. Ein zweiter Tastendruck veranlaßt das DOS weiterzuarbeiten. Komfortabel wird das Ganze dadurch, daß man unter den Programmnamen auswählen kann. Dies geschieht durch Angabe von »*« oder »?«. Eine dritte Möglichkeit erlaubt Filetypen zu unterscheiden. »@$:*=PRG« listet alle vorhandenen PRG-Files aus. Entsprechendes gilt für »@$:T?S=SEQ« und »@$:TES*=USR«.

DOS innerhalb von Programmen

Aus dem Beitrag über das DOS in der Ausgabe 5/84 geht hervor, daß man das DOS nur im Direktmodus benutzen kann. Dem muß ich widersprechen. Die Befehle haben allerdings eine andere Form. Allgemein ist es notwendig, den Namen in Anführungszeichen zu setzen. Die Befehle lauten dann zum Beispiel »@"$"«, »/"TEST"«, »←"TEST"« und »@" "«. So darf man auch im Direktmodus vorgehen. Ich denke aber, es wird sich keiner diese Mühe machen. Die Befehle werden ganz normal durch Doppelpunkt getrennt, zum Beispiel »@"S:TES*" :@" ":@"$"«.

DOS als Programm ohne Lader

Als ich zum ersten Mal mit dem DOS Bekanntschaft machte, störte mich die Tatsache, daß es in Form zweier Programme abgespeichert war. Das DOS ließ sich außerdem ohne Kopierprogramme schlecht auf eine andere Diskette kopieren. Deshalb habe ich aus dem DOS eine Art Basicprogramm gemacht. Dieses kann ich mit LOAD laden und mit SAVE abspeichern. Wollen Sie es mir nachmachen?

Dann laden Sie bitte das DOS auf dem bisher üblichen Weg, falls es nicht ohnehin schon geschehen ist. Tippen Sie nun das Programm »DOS verschieben« ein (Listing 1 und 2). Mit einem RUN ohne Datafehler verschiebt sich das DOS direkt hinter das Programm. Dies erlaube ich nur einmal, da das Programm sonst doppelt so lang oder länger würde. Löschen Sie jetzt alle Programmzeilen außer Zeile 100. Es darf kein NEW eingegeben werden. Es können aber beliebig Zeilen hinzugefügt werden. Zum Beispiel könnte man die Bildschirmfarben festlegen und alle Tasten mit Repeatfunktion versehen (Listing 3). Damit ist meine DOS-Version fertig und kann abgespeichert werden.

0 rem listing 1
1 :
2 rem dos verschieben 11.05.1984
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
10 ifpeek(46)>12thenprint"{clr}das programm sollte nur einmal gestartet werden!":x
15 :
20 gosub310:poke46,peek(46)+4
30 poke45,peek(45)+29and255
40 ifpeek(45)<29thenpoke46,peek(46)+1
45 :
50 clr:a=peek(45)+peek(46)*256-1024-29
60 b=12*4096+12*256
70 fori=0to1023:pokea+i,peek(b+i):next
75 :
80 a=a+1024
90 fori=0to28:readb:pokea+i,b:next
95 :
100 a=peek(45)+peek(46)*256-29:sysa:end
110 :
300 rem datakontrolle
310 fori=0to28:readb:s=s+b:next
320 ifs<>3210thenprint"datafehler":x
330 print"data ok!":restore:return
340 :
1000 data164,20,165,21,132,90,133,91,56
1010 data233,4,132,95,133,96,160,0,169
1020 data208,132,88,133,89,32,191,163
1030 data76,0,204
Listing 1. Mit diesem Programm wird das DOS 5.1 kopierbar wie ein normales Basicprogramm.
0 rem listing 2
1 :
2 rem dos-routine 15.05.1984
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
200 ldy $14  ; sys-einsprungpunkt
210 lda $15
220 sty $5a  ; = blockende + 1
230 sta $5b
240 sec
250 sbc #$04 ; blockende - 4*256
260 sty $5f  ; = blockanfang
270 sta $60
280 ldy #$00 ;
290 lda #$d0
300 sty $58  ; = neues blockende +1
310 sta $59
320 jsr $a3bf; block-verschiebe-routine
330 jmp $cc00; dos-einsprung
Listing 2. Die im Listing 1 enthaltenen DATA-Werte als Assemblerlisting.
0 rem listing 3
1 :
2 rem dos gestutzt
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
10 poke53280,9
20 poke53281,0
30 poke650,128
40 printchr$(147);chr$(158)
90 :
100 a=peek(45)+peek(46)*256-29:sysa:end
Listing 3. In Verbindung mit Listing 1 lassen sich Bildschirmfarben und andere Einstellungen mühelos integrieren.

DOS unter neuem Namen

Tippen Sie das Programm »Neuer Name für DOS« (Listing 4) ein. Die Bezeichnung für das eigene DOS muß der Variablen Z$ zugeordnet werden. Hierfür werden die Zeilen 0 bis 99 verwendet. Der String darf bis zu 98 Zeichen enthalten und hat dieselbe Form wie beim PRINT-Befehl (PRINT Z$;). Ein RUN schreibt diesen String in das DOS. Jedes SYS 52224 erzeugt nun diesen Namen auf dem Bildschirm. Diese DOS-Version kann natürlich in ein Basicprogramm umgewandelt werden, wie ich es oben beschrieben habe.

0 rem listing 4
1 :
2 rem neuer name fuer dos 15.05.1984
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
10 z$=chr$(147)
20 z$=z$+chr$(17)+"        herbies dos manager"+chr$(13)
30 z$=z$+chr$(17)+"        checked by me"+chr$(13)
40 z$=z$+chr$(17)+"        (c) 1984 herbiesoft"
90 :
100 l=len(z$):p=52347
110 ifl>98thenprint"string to long!!!":stop
120 fori=1tol:a$=mid$(z$,i,1)
130 pokep+i,asc(a$):nexti
140 pokep+i,0:sys52224
Listing 4. Verändern Sie den Namen des DOS.

MERGE-Befehl für das DOS

Es wurden schon viele Methoden vorgestellt, die es ermöglichen sollten, ein Programm so zu laden, daß es an ein bestehendes angehängt wird. Ich erlaube mir nun, dem DOS diese zusätzliche Last aufzubürden.

Das Programm »DOS plus MERGE« (Listing 5 und 6) erzeugt diesen Befehl. Als Zeichen dient »+«. Ein MERGE-Befehl sieht dann aus wie »+TEST«. »+« und »/« arbeiten fast gleich. Sie unterscheiden sich nur in der Ladeadresse.

0 rem listing 5
1 :
2 rem dos mit merge 15.05.1984
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
10 for i=0 to 36
20 reada:s=s+a
30 poke53081+i,a
40 next
50 if s<>4511 then print"datafehler!":end:x
60 sys53081
70 print"ok!"
80 end
90 :
1000 data169,043,141,032,204,162,104
1001 data160,207,142,021,204,140,010
1002 data204,096,169,047,141,122,204
1003 data169,255,133,020,133,021,032
1004 data019,166,166,095,164,096,076
1005 data038,206,*
Listing 5. Erweitern Sie das DOS mit dem Merge-Befehl.
0 rem listing 6
1 :
2 rem dos erweiterung merge 21.05.1984
3 rem by herbert heise
4 rem <c> 1984 herbiesoft
5 :
1000 rem konstanten
1005 :
1010 lda #"+"
1020 sta $cc20 ; ">" im programm
1030 ldx #$68
1040 ldy #$cf  :rem adresse-1 von merge
1050 stx $cc15
1060 sty $cc0a
1070 rts
1090 :
2000 rem merge
2005 :
2010 lda #$2f
2020 sta $cc7a
2030 lda #$ff
2040 sta $14
2050 sta $15
2060 jsr $a613 :rem zeile suchen
2070 ldx $5f
2080 ldy $60
2090 jmp $ce26 :rem load-routine
Listing 6. Auch hier wieder die in Listing 5 enthaltenen DATA-Werte als Assembler-Listing.

Ich sollte noch etwas anmerken. Hat das DOS das neue Zeichen »+« akzeptiert, so wird es vergeßlich. Denn das Zeichen »>« erfüllt seine Funktion nur noch im Direktbetrieb wie »+« auch.

Wie schon in der Ausgabe 5 angedeutet, lassen sich sämtliche Befehle, die normalerweise mit OPEN 15, 8, 15,"…. übertragen werden, mit dem Klammeraffen abkürzen. Dazu gehören auch die Direktzugriffsbefehle wie B-R oder etwa B-W, und so weiter. Auch der im normalen Basic mögliche Replace-Befehl: SAVE"@:name", 8 läßt sich abkürzen mit ←@:name. Damit kann man ein Programm erneut unter gleichem Namen abspeichern, ohne daß es zu einem FILE EXIST ERROR kommt. Der Replace-Befehl funktioniert natürlich auch beim erneuten Schreiben von zum Beispiel sequentielle Dateien, die bereits unter gleichem Namen existieren. Allerdings wird dabei die alte Version überschrieben.

(Herbert Heise/gk)
PDF Diesen Artikel als PDF herunterladen
Mastodon Diesen Artikel auf Mastodon teilen
← Vorheriger ArtikelNächster Artikel →