-------------------------------------------------------- TEIL 1: AUSFÜHRLICHE ANLEITUNG MIT WORKSHOP -------------------------------------------------------- Diskbasic 64 - erleichtert den Umgang mit dem Laufwerk »Diskbasic« ist eine Basic-Erweiterung, die den C 64 um 22 Befehle und Funktionen bereichert. Mit Hilfe dieser Befehle erlernen Sie dann die Systemprogrammierung des Laufwerks. Bevor wir die Anwendung der Befehle in der Praxis beschreiben (der Hauptteil dieses Artikels), zunächst zu einer kurzen Beschreibung von Diskbasic selbst, damit es später nicht mit Grundsätzlichem Probleme gibt. Obwohl Diskbasic in reiner Maschinensprache geschrieben ist, kann es wie ein normales Basicprogramm geladen, gestartet und ggf. kopiert werden. LOAD "DISKBASIC",8 RUN Auf dem Bildschirm erscheint eine Einschaltmeldung. Diskbasic reagiert ziemlich empfindlich auf andere Soft- oder Hardware-Erweiterungen, diese sollten Sie vor dem Start also ggf. abschalten oder entfernen. Das Programm wurde in erster Linie für ein 1541-Laufwerk geschrieben, die Zusammenarbeit mit anderen Laufwerken sollte aber keine Probleme bereiten. Die neuen Befehle können wie normale Basicbefehle angewendet und eingesetzt werden. Ausnahme: Soll ein neuer Befehl direkt nach THEN stehen, muß er mit einem Doppelpunkt von THEN abgetrennt werden. Bei einigen Befehlen (z.B. BASIC, SCRATCH, HEADER) erscheint eine Sicherheitsabfrage, die durch Tastendruck oder beantwortet werden soll. Die neuen Befehle FPOKE ADR,X: Schreibt den Wert X (0 bis 255) in die Speicherzelle ADR (0 bis 65535) der Floppy 1541. Beispiel: FPOKE 0,192 führt einen Bump für Puffer 0 aus. FSYS ADR: führt ein Maschinenprogramm im Floppy-Speicher (RAM oder ROM) ab ADR aus. Beispiel: FSYS $EA6E ruft die Diagnose-Fehler Routine auf (rote LED blinkt langsam). MERGE: Hängt ein auf Diskette gespeichertes Basicprogramm an das im Speicher stehende an. Syntax wie LOAD-Befehl. START: Lädt ein auf Diskette gespeichertes Basicprogramm und startet es mit RUN. Syntax wie LOAD. DIR: Anzeige des Directories auf dem Bildschirm DISK: Anzeige des Fehlerkanals FRESET: Führt einen Reset des Drives aus (UJ) und wartet eine Sekunde BASIC: Schaltet Diskbasic ab. Neustart ggf. mit SYS 49152. HEADER "NAME": formatiert eine Diskette SCRATCH "FILENAME": löscht (ein) File(s) von Diskette COLLECT: führt Validate aus INIT: initialisiert die Diskette SET X: stellt alle angeschlossenen und eingeschalteten Laufwerke auf die neue Gerätenummer X (normal: 8) ein DEVICE X: die Befehle von Diskbasic sprechen ab jetzt die Gerätenummer X an (normal: X=8) DRIVE X: die Befehle von Diskbasic sprechen ab jetzt das Laufwerk X (0 (normal) oder 1) an. Dieser Befehl eignet sich für Doppel-Laufwerke. Weiter sind einige Erweiterungen der Basic-Funktionen dazugekommen, die ganz normal hinter PRINT, in numerischen Termen oder als Argumente verwendet werden dürfen (Beispiel: PRINT DS, FPOKE $1C00,FPEEK($1C00)+5, A=E-ADR"FILENAME" und so weiter). Hexadezimalen Werten wird das Dollerzeichen vorangestellt, binären das Prozent. Beispiel: PRINT $AB1E wirkt wie PRINT 43806, PRINT %1001 wirkt wie PRINT 9. Kommt in einer hexadezimalen Zahl die Folge DEF vor, muß zwischen D und E ein Leerzeichen gesetzt werden (Verwechslungsgefahr mit DEF FN). Beisiel: LET C = $4D EF ergibt C = 19951. DS ergibt den Disk-Status. Beispiel: entnehmen Sie die Diskette aus dem Laufwerk und geben ein: INIT:PRINT DS ergibt 74, da die Fehlermeldung 74,DRIVE NOT READY,18,00 im Puffer steht. ADR "FILENAME" ergibt die Ladeadresse (Startadresse des Files) von FILENAME. Beispiel: R = 1 + ADR"DISKBASIC":PRINT R ergibt 2050, da die Startadresse des Programms 2049 ist. Zuletzt seien noch die beiden Tastenfunktionen erwähnt. Durch Druck auf wird der Disk-Status abgerufen, zeigt das Directory am Bildschirm an. Im Rahmen Ihrer Experimente mit Diskbasic werden Sie die neuen Fehlermeldungen bemerken, die das Programm ausgibt, z.B. ILLEGAL DRIVE NUMBER, falls der Parameter hinter DRIVE ungleich 0 oder 1 ist. Die Meldung FIRST REMOVE PROTECT! erscheint immer dann, wenn der Schreibschutz aktiviert ist und Sie einen Schreib-Befehl auf Diskette (z.B. HEADER) ausführen wollen. Die Meldung ?SYSTEM ERROR weist darauf hin, daß Sie das Programm nicht zweimal hintereinander mit SYS 49152 aktivieren dürfen. Diskbasic arbeitet mit anderen Erweiterungen zusammen, die nicht den Speicherbereich $C000-$CFFF belegen, da es die Systemvektoren dynamisch verbiegt. Dazu muß erst die andere Erweiterung geladen und aktiviert werden, danach Diskbasic. Systemprogrammierung für die Commodore Floppy VC 1541 Nun kommen wir endlich zur Praxis. Für die folgenden Beispiele wird die Befehlserweiterung Diskbasic vorausgesetzt! Das Gelernte in der Praxis Es gibt auf dem C 64, wie Sie vielleicht wissen, verschiedene, na, nennen wir's mal Hierarchiestufen des Bedienens und Programmierens. Die höchste und einfachste Stufe ist beispielsweise das Bedienen von fertigen Programmen, die zweithöchste das Programmieren in Basic, dann kommt das Programmieren in Maschinensprache mit einem Assembler und als unterste Stufe das Schreiben von Maschinenprogrammen unter Verwendung eines Monitors (diese Methode ist die langwierigste, aber effektivste Stufe). Wozu programmiert man dann in einer der unteren Stufen, wo es doch viel einfacher ist, in Basic zu schreiben als in Assembler (Maschiensprache)? Ein Basic-Benutzerprogramm, das bedient wird, bietet eben nur bestimmte Mögichkeiten, die der Programmierer vorgesehen hat, während man in Maschinensprache zwar mit mehr Aufwand jedoch alles programmieren kann, was auch immer erwünscht ist. Zwei Ebenen in der 1541 Was hat dieser Exkurs mit der 1541 zu tun? Sehr viel: Diese Hierarchie existiert natürlich auch bei der Laufwerksprogrammierung. Blutige Anfänger werden ihr Laufwerk wohl nur benutzen, um mit SAVE und LOAD Programme zu speichern und laden. Weiter Fortgeschrittene kennen auch schon die Programmierung der sequentiellen Dateien, und die Systembefehle wie S, N, I, V und so weiter. Und dann gibt's noch eine Gruppe, die Experten, die sich auch schon mit relativen Dateien auskennen und (jetzt wird's wichtig!) wissen, wie man mit M-R, M-W, U1, U2, B-R und B-W und so weiter auf jeden Speicherplatz der Diskettenstation (des ROMs und RAMs) und auf jeden Block (jeden Sektor, jede Stelle) der Diskette (in diesem Fall die Magnetscheibe, die man ins Laufwerk steckt) zugreift. Daß Sie die Befehle zum Lesen und Schreiben jedes Diskettenblocks (U1, U2 bzw. B-R und B-W) und die Befehle zum Lesen und Schreiben des Floppy RAMs zumindest verstehen (M-R, M-W), sei im Folgenden vorausgesetzt. Bei der Erweiterung DISKBASIC V2 werden die Befehle M-R und M-W durch FPOKE und FPEEK ersetzt. Der Befehl zum Ausführen von Maschinenprogrammen im FloppyRAM (M-E, Memory Execute) heißt hier FSYS. Genaueres zu den Floppy-Systembefehlen findet sich im Bedienungshandbuch zur Diskettenstation. Ansonsten kann's eigentlich losgehen. Zugriff auf Spur 36 bis 41 Wenn Sie etwa den Track 18, Sektor 1 in den Floppyspeicher einlesen wollen, geben Sie gewöhnlich diese Befehlsfolge: OPEN 15,8,15,"I":REM initialisieren OPEN 3,8,3,"#":REM Direktzugriffsdatei PRINT#15,"U1 3 0 18 1":REM Block lesen Mit GET#3, INPUT#3 und PRINT#3 können Sie nun auf den Block schreiben oder von ihm lesen. Soll auf ein bestimmtes Byte positioniert werden, findet der B-P-Befehl Anwendung. Mit »U2 3 0 18 1« werden die Daten wieder auf die Diskette zurückgeschrieben. Diese Methode ist die zweiteleganteste Methode zum direkten Diskettenzugriff, aber auch die am meisten verbreitete. Sie hat aber einen Nachteil: Eine Diskette hat nicht nur 35 Spuren (Tracks), die meisten Disketten können sogar 40, einige sogar 41 oder 42-spurig beschrieben werden! Das wollen wir gleich ausprobieren. Die folgenden Experimente sollten auf einer völlig leeren Diskette ohne wichtige Daten durchgeführt werden. Formatieren Sie diese Diskette bis Track 40, dazu eignet sich beispielsweise das im 64'er Magazin vorgestelle Programm Disk Demon, auch verschiedene Kopier- oder Schnellformatierprogramm bieten ein entsprechende Funktion. Zur Sicherheit sollten die neuen Tracks 36 bis 40 (oder 41) auf Lese- und Schreibfähigkeit getestet werden, falls das mit dem Formatierprogramm möglich ist. Dann versuchen Sie, wie oben beschrieben, doch mal, mit »U1 3 0 37 9« die Spur 37, Sektor 9 in den Floppyspeicher zu lesen! (Die Tracks 36 bis 41 haben je 17 Sektoren, die von 0 bis 16 durchnumeriert werden). Das Lesegerät quittiert den Versuch mit der Fehlermeldung 66,ILLEGAL TRACK OR SECTOR. Die Spur 37 ist vom DOS nicht vorgesehen, sie kann nicht gelesen werden, obwohl sie tatsächlich vorhanden und sogar schon formatiert ist. Wir werden nun eine anfangs etwas kompliziert aussehende Methode kennenlernen, doch auf diese Tracks zugreifen zu können. Der Disc-Controller Im Floppy-RAM gibt es einige Speicherzellen, in denen das Hauptprogramm der Station, welches auch Ihre Befehle auswertet (S, N, I, V etc.) und Dateien verwaltet einem zweiten, Interrupt gesteuerten Unterprogramm mitteilt, was dieses nun zu tun hat. Das Unterprogramm wird auch »Disc Controller«, kurz »DC« genannt. Aufgaben des DC sind: Tracks auf der Disk suchen (den Lesekopf an die richtige Position fahren), die Motoren kontrollieren, einzelne Tracks und Sektoren lesen und schreiben und sogar Disketten formatieren. Auch verwaltet der DC, der bei größeren Laufwerken als eigener zweiter Prozessor realisiert ist, die Hardware, also Leuchtdioden (LEDs), Motoren und Schreib- und Lesesignale vom »Tonkopf«. Wohlgemerkt: Dieses Unterprogramm wird vom Interrupt-Timer, der beim C 64 Dinge wie das Cursorblinken, Tastatur und so weiter steuert, einige Male in der Sekunde aufgerufen. Der DC schaut dann in den erwähnten Speicherzellen der Zeropage nach, ob das Hauptprogramm etwas von ihm will, wenn nicht, wird der Interrupt sofort beendet, sonst wird der »Job« ausgeführt. Nach Abarbeitung des Befehles wird eine Fehlernummer oder das OK-Kennzeichen in den selben Speicherzellen zurückgegeben. Das Hauptprogramm wartet, wenn es einen Job an den DC übergeben hat, bis sich die Speicherzelle verändert hat, und prüft, ob der DC einen Fehler gemeldet hat. Wenn ja, wird die entsprechende Meldung an den C 64 gesendet. Ein Beispiel Diese etwas trockene Materie soll an einem konkreten Beispiel verdeutlicht werden. Der Anwender gibt vom C 64 aus den Befehl, das Directory zu laden. Der C 64 schickt an die Diskettenstation den Auftrag, eine Datei mit dem Dollarzeichen zum Lesen zu öffnen. Das Inhaltsverzeichnis findet sich üblicherweise auf Track 18 der Diskettenstation und beginnt dort bei Sektor 0. Das Hauptprogramm der Floppy will also zunächst einmal Track 18, Sektor 0 lesen. Dazu schreibt es die beiden Parameter 18 und 0 in die Zeropage-Speicherzellen 6 und 7 des Floppy-RAMS. Sodann wird eine bestimmte Codezahl (nämlich 128), die den Befehl »Lesen« symbolisiert, in die Floppy-Speicherzelle 0 geschrieben. Der DC, der laufend die Speicherzelle 0 ausliest, stellt fest, daß eine Änderung eingetreten ist. Er erkennt die 128 als den Befehl, einen Sektor zu lesen. Die Angaben, welchen Sektor auf welchem Track holt sich der DC aus den Speicherzellen 6 und 7. Er führt nun seine Routinen aus, die den Steppermotor auf Track 18 bewegen, warten, bis Sektor 0 unter dem Kopf erscheint, der dann gelesen und decodiert wird. Gelang das alles einwandfrei, schreibt der DC eine Null in Speicherzelle 0, ein Zeichen dafür, daß alles zur Zufriedenheit ablief. Trat ein Fehler auf, etwa weil die Diskette nicht vorhanden oder nicht formatiert war, wird eine Fehlercodenummer ungleich Null in Adresse 0 vermerkt. Das Hauptprogramm wartet so lange, bis der DC den Lesevorgang beendet und seine Rückmeldung in Zelle 0 zurückgegeben hat. Abhängig davon, ob es die Null (fehlerfrei) oder etwas anderes war, wird dann entweder der gelesene Block weiter verarbeitet oder eine Fehlermeldung an den C 64 zurückgeschickt. Durch diese auf den ersten Blick umständliche und ungünstige Unterteilung zwischen Hauptprogramm und DC bringt den Vorteil mit sich, daß die 1541 praktisch zwei Programme gleichzeitig ausführen kann. Viele moderne Großrechner und PCs arbeiten übrigens auch nach einem ähnlichen Prinzip! Der Anwender als DC Die Schutzvorrichtungen, die die Track- und Sektornummern prüfen, befinden sich nicht im DC, sondern im Hauptprogramm, das den DC steuert. Wenn Sie aufgemerkt mitgelesen haben, müßte es bei Ihnen eben geklingelt haben. Wie wäre es, wenn einfach wir einmal Hauptprogramm spielen und den DC steuern! Das geht einfach, indem wir die Jobnummern in die Speicherzellen schreiben. Wie das geht, erfahren Sie jetzt. Dazu ein Ausschnitt aus der Speicherbelegung im Floppy-RAM: Zelle Funktion 0 Jobcode Puffer 0, Fehlermeldungsrückgabe 1 Jobcode Puffer 1, Fehlermeldungsrückgabe 2 Jobcode Puffer 2, Fehlermeldungsrückgabe 3 Jobcode Puffer 3, Fehlermeldungsrückgabe 4 Jobcode Puffer 4, Fehlermeldungsrückgabe 6, 7 Track und Sektorangabe für den Job für Puffer 0 8, 9 Track und Sektorangabe für den Job für Puffer 1 10,11 Track und Sektorangabe für den Job für Puffer 2 12,13 Track und Sektorangabe für den Job für Puffer 3 14,15 Track und Sektorangabe für den Job für Puffer 4 Die entsprechenden Speicherzellen für Puffer Nr. 5 (Zellen 5 und 16 bis 17) sind also nicht benutzt, denn die 1541 hat nur fünf (Nummern 0 bis 4) Puffer), aber dennoch vorhanden (werden nicht vom DC abgefragt). Jobs und Puffer Unsere Aufgabe soll sein: Lesen von Track 37, Sektor 9 in den Puffer Nummer 2. Hier eine Auflistung aller Jobcodes: Code Hex dez. Funktion 80 128 Lesen eines Sektors in den Puffer 90 144 Schreiben des Pufferinhaltes in einen Sektor, danach automatisch: A0 160 Verify eines Sektors mit Pufferinhalt B0 176 Positionieren auf einen Track & Sektor C0 192 Kopftransport (BUMP) D0 208 Programm im Puffer ausführen E0 224 Jobprogramm ausführen, nachdem Laufwerk bereit ist. Ab jetzt wird das Diskbasic aktiv. Wir benutzen die Befehle FPOKE und FPEEK zum Schreiben der Jobcodes ins Floppyram. Das erste Programm Zuerst etwas Einfaches zur Übung: Wir wollen den Schreib/Lesekopf zur Justierung zum Anschlag zurückfahren (BUMP). Dabei entsteht das typische »Rattern«, das Sie von der Formatierung oder Lesefehlern kennen: 10 FPOKE 6,18:REM Tracknummer für Puffer 0 15 FPOKE 0,$C0:REM Jobcode für "BUMP" 20 IF FPEEK(0) = $C0 THEN 20:REM warten bis Job fertig 25 IF FPEEK(0) = 1 THEN PRINT"FEHLERLOS.":END 30 PRINT "FEHLER NUMMER"FPEEK(0) 35 END Probieren Sie das Programm aus, nachdem Sie wie oben gezeigt Diskbasic aktiviert haben! Jetzt wollen wir Track 37, Sektor 9 in den Puffer 2 einlesen: 10 FPOKE 10,37:REM Track für Job für Puff. 2 15 FPOKE 11,9:REM Sektor 20 FPOKE 2,$80:REM Jobcode für Puffer 2 für »Lesen« 25 IF FPEEK(2) = $80 THEN 25:REM warten bis Job fertig 30 IF FPEEK(2) = 1 THEN PRINT"FEHLERLOS.":END 35 PRINT "FEHLER NUMMER"FPEEK(2) 40 END Nun haben Sie tatsächlich den Track 37, Sektor 9 im Puffer 2 des Disk Laufwerkes. Bisher wissen wir zwar, daß es fünf Puffer gibt, die von 0 bis 4 durchnumeriert sind, wir wissen aber noch nicht, was ein Puffer überhaupt ist. Ein Puffer ist einfach ein Speicherbereich von 256 Byte (1 Page) im RAM der 1541. Ein solcher Bereich wird benötigt, damit beispielsweise das Hauptprogramm den vom DC gelesenen Sektor auch auswerten kann. Wir werden bei unseren Experimenten bevorzugt mit Puffer 2 arbeiten, da er im normalen Betrieb der 1541 nicht belegt ist. Hier die Adressen der Puffer: Puffer Adresse 0 $0300-$03FF (Hauptarbeitspuffer) 1 $0400-$04FF (aktueller Dir. Teil) 2 $0500-$05FF (normal frei) 3 $0600-$06FF (letzter Dir. Block) 4 $0700-$07FF (Track 18, Sektor 0 nach I) 5 bei 1541 nicht vorhanden Mit dem Befehl FPEEK(X) können Sie nun für X = $0500-$05FF den Sektor aus dem Floppy-RAM lesen, mit FPOKE verändern und mit dem Jobcode für Schreiben ($90), den Sie im obigen Programm in Zeile 20 und 25 für $80 (Lesen) einsetzen, auf Disk zurückschreiben. Das Blinken der roten LED im Fehlerfalle erzeugt übrigens auch das Hauptprogramm, nicht der Diskkontroller, genau wie das Anschalten der LED vor Diskzugriff. Dies müssen wir, wenn uns etwas daran liegt (Schönheitsfehler), per Hand simulieren. Wenn Sie im Fehlerfalle zur Fehlernummer, die das Programm ausgibt, 18 addieren, bekommen Sie die Fehlernummer, die das Hauptprogramm auf Kanal 15 den Computer normalerweise mitteilt. Tips und Hinweise Hier noch einige Hinweise: Es wurde schon erwähnt, daß auf dieser Ebene keine Schutzmaßnamhen mehr existieren. Wenn Sie also versuchen, Track 100 zu lesen, versucht dies der DC auch, die Folge wäre, daß der Steppermotor versucht, den Lesekopf auf Track 100 zu positionieren. Die Folge wäre ein verstellter Kopf. Passen Sie also auf! Noch etwas gibt es zu beachten: Bei der Floppy können Sie durch Programmierung im Gegensatz zum Computer mechanische Teile bewegen. Diese sind einem Verschleiß unterworfen, so daß Sie bei der Programmierung mit viel Sorgfalt vorgehen sollten, um Beschädigungen auszuschließen. Zum Schluß noch ein Tip: Mit der folgenden Zeile wird der Schreib/Lesekopf der Floppy schneller bewegt, da der IRQ und damit der DC nun schneller ausgeführt werden: OPEN 1,8,15 PRINT#1,"M-W"CHR$(5)CHR$(28)CHR$(3)CHR$(25)CHR$(0)CHR$(25) CLOSE 1 Nikolaus Heusler Literatur: Disk-Demon, 64'er 8/87 DMS, 64'er 9/89 In die Geheimnisse der 1541 eingetaucht, 64'er Sonderheft 25 Alles über die 1541, Karsten Schramm, Markt & Technik Verlag Das große Floppy-Buch, Data Becker ---------------------------------------------------------------------- TEIL 2: HIER NOCH EINE KURZANLEITUNG NUR FÜR DAS PROGRAMM ---------------------------------------------------------------------- Direkten Zugriff auf den Floppyspeicher: Diskbasic 64 >>Diskbasic 64<< ist eine Basic-Befehlserweiterung, die mit Hilfe der neuen Basicbefehle FPOKE, FPEEK und FSYS extrem komfortabel direkten Zugriff auf den Speicher (RAM und ROM) der Floppy erlaubt. Jetzt kann endlich auch der Basicprogrammierer bequem das Laufwerk voll ausreizen. Einige interessante Sonderfunktionen sind enthalten. Dieses Programm definiert neue Basicbefehle, die das Arbeiten mit der Floppystation 1541 erleichtern. Sie können in Basic-Programmen oder im Direktmodus verwendet werden (wie normale Basic-Befehle). Laden Sie die Erweiterung, zu deren Betrieb keinerlei Assemblerkenntnisse erforderlich sind, mit dem Befehl LOAD"DISKBASIC",8 Der Start erfolgt mit RUN. Eine Einschaltmeldung erscheint. Jetzt sind die neuen Befehle aktiv. Dabei gilt die übliche Einschränkung für Basic-Befehlserweiterungen: Soll ein neuer Befehl direkt hinter THEN stehen, muß er mit einem Doppelpunkt von THEN abgetrennt werden. Hier die neuen Befehle: FRESET ergibt einen Floppyreset (entspricht UJ) FPOKE X,Y Schreibt in die Floppyspeicherzelle X den Wert Y. (ähnlich wie Memory-Write) DIR Gibt das Directory ohne Programmverlust auf dem Bild- schirm aus. INIT Initialisiert die Floppy (entspricht I) COLLECT Validiert die Diskette (entspricht Validate) DEVICE X Die Diskbefehle wirken jetzt auf Gerät Nr. X (4-191). Dieser Wert ist am Anfang auf 8 eingestellt. DRIVE X Die Befehle wirken auf DRIVE X (0-1). Achtung: Nicht alle Befehle berücksichtigen den DRIVE Befehl. Manche wirken immer auf Drive 0. DISK Gibt den Fehlerkanal aus. FSYS X Springt in ein Maschinenprogramm, das im Floppyspei- cher ab Zelle X steht und mit 96 (RTS) endet. (entspricht M-E) SCRATCH A$ Das Programm A$ wird gelöscht. (entspricht S) HEADER A$ Formattiert die Disktte unter dem Namen A$. A$ kann nach einem Komma die ID enthalten. (entspricht N) SET X Gibt dem aktuellen Laufwerk die Nummer X. Funktioniert nur, wenn der DEVICE-Befehl vorher auf die alte Nummer angewendet wurde. START "..." Wie LOAD (mit Autostart) MERGE "..." Wie LOAD (neues Programm wird angehängt) Neue Funktionen: DS Diese Variable enthält die Nummer des letzten Disk- errors, z.B. PRINT DS % ..... deutet ..... als Binärzahl, z.B. %100101 entspricht 37 $ ..... deutet ..... als HEX Zahl, z.B. $A6BF8 entspricht 683000 FPEEK (X) ergibt den Wert der Floppyspeicherzelle X (Memory-Read) ADR "TEST" ergibt die Startadresse des Programmes "TEST". Bsp.: PRINT ADR "DISKBASIC" Speicherbelegung: 776/777 Vektor EGONE (Befehlsauswertung) 778/779 Vektor EVAL (Funktionsauswertung) 788/789 Vektor IRQ (Interrupt) 49152 Initalisierung 49223 - Befehlsausführung 50799 - Neue IRQ-Routine (für Funktionstasten) 49284 - Formelauswertung 50000 - Unterprogramme 52000 - Texte der Befehle 52700 - Weitere Texte 52992 - I/O Latch 2024 Flag, ob gedrückt 2025 Flag, ob gedrückt 181 Device Nummer 182 Drive Nummer 251/2 Arbeitsspeicher 20/1 Arbeitsspeicher 34/5 Arbeitsspeicher 247 Flag: 1 = SCRATCH, 0 = HEADER 247-50 Arbeitsspeicher für MERGE 2 Arbeitsspeicher Bei Betätigung von wird der Fehlerkanal ausgegeben, durch Druck auf erscheint (natürlich ohne Programmverlust) das Directory. Die Befehle MERGE und START eignen sich auch für die Datasette. Neue Fehlermeldungen: ?SYSTEM ERROR Es ist aus technischen Gründen nicht erlaubt, Diskbasic zweimal hintereinander zu starten. ?ILLEGAL DRIVE NUMBER ERROR Der Parameter beim DRIVE-Befehl darf nur 0 oder 1 lauten. ?DISK ERROR Sie sollten Ihr Laufwerk reparieren lassen, bei der DS-Funktion ist die Fehlernummer > 255 Bei den Befehlen HEADER, COLLECT und SCRATCH wird über die FPEEK Funktion zuerst geprüft, ob auf der Diskette ein Schreibschutz klebt. Dann wird der Basic-Programmablauf nicht unterbrochen, aber die Meldung >>FIRST REMOVE PROTECT<< ausgegeben. Beispiele aus der Praxis Mit FPOKE $1C00, %11010100 (entspricht FPOKE7168,212) schaltet den Hauptmotor ein. Mit FPOKE 7168,224 schalten Sie ihn wieder ab. Mit dem Befehl PRINT FPEEK(7168)AND 16 können Sie erkennen, ob sich auf der Diskette ein Schreibschutzkleber befindet, dann erscheint 0, oder nicht, wenn 16 erscheint. Andere Werte sind nicht möglich. Hier ein kleines Basicprogramm dazu: 10 A = FPEEK (7168) : I = 128 20 PRINT (AANDI)/I;: I = I/2 :IF I=.5 THEN PRINT : GOTO 10 30 GOTO 20 Nach dem Start dieses Programmes erscheinen acht Zahlenreihen auf dem Schirm, die den acht Bits der Speicherzelle $1c00 der Floppy entsprechen. Jede dieser acht Zahlenreihen hat eine Bedeutung (von links nach rechts):                                   Ziffer Zweck                                   1 SYNC Markierung erkannt 2 Immer 1 (Timing-Steuerung) 3 Immer 1 (Timing-Steuerung) 4 Wenn 0: WRITE PROTECT ON 5 Wenn 1: rote LED an 6 Wenn 1: Laufwerkshauptmotor an 7 Spule 1 des Steppermotors 8 Spule 2 des Steppermotors                                   Übrigens: Die oben angesprochene WRITE-PROTECT-Prüfung beruht auf dem Testen der Ziffer #4. Es soll noch angemerkt werden, daß der Steppermotor, der den Schreib/Lesekopf bewegt, nur bei eingeschaltetem Hauptmotor bewegt werden kann. Die verwendete FPOKE-Adresse 7168 ist der Port B der Floppy VIA #2 (vergleichbar mit der CIA eines C 64) und übernimmt Steuerungsaufgaben der Mechanik. Das Demoprogramm, das nach dem Laden und Starten von Diskbasic geladen und mit RUN gestartet wird, enthält eine komfortable Oberfläche, mit deren Hilfe Sie bequem auf wichtige mechanische Komponenten im Laufwerk Einfluß nehmen können. Studieren Sie dieses Programm, wenn Sie sich beispielsweise für die Programmierung der beiden Motoren oder die Abfrage der Lichtschranke oder des Lesekopfes im Laufwerk interessieren. Die Steuerung erfolgt über folgende Tasten: - schaltet den Hauptmotor ein und aus <+> - bewegt den Lesekopf um einen halben Track nach außen <-> - bewegt den Kopf einen halben Track nach innen (Richtung Track 1) - setzt den Sync-Zähler auf Null (siehe unten) - schaltet den Hauptmotor aus und beendet das Programm Das Programm zeigt laufend den Zustand von Hauptmotor, Schrittmotor, roter LED und Schreibschutzlichtschranke an. Dazu werden die acht Bits der Speicherzelle 7168 ($1c00) ausgelesen und wie in obiger Tabelle erklärt ausgelesen. Bei laufendem Hauptmotor >>schwebt<< gelegentlich eine Sync-Markierung (wird zur Synchronisation der Diskettendaten verwendet) am Lesekopf vorbei, das Programm zählt diese Ereignisse. Der entsprechende Zähler (lassen Sie das Programm doch mal einige Zeit bei eingeschaltetem Hauptmotor laufen!) wird mit der S-Taste auf Null zurückgestellt. Die vom Lesekopf ankommenden Daten werden nach dem Umschalten des PCR (Port Control Register) auf die Betriebsart >>Lesen<< mit dem Befehl FSYS $FE00 (siehe Floppy-ROM-Listing) direkt aus Adresse $1c01 (Lesekopf-Daten) entnommen und entsprechen in keinster Weise den auf Diskette gespeicherten Daten (dazu ist Basic viel zu langsam). Der Grund dafür, daß auch bei nicht eingelegter Floppy Daten vom Lesekopf kommen liegt wahrscheinlich in Störungen der Verstärkerelektronik. Aber wie gesagt, in Basic sind genauere Untersuchungen mangels Geschwindigkeit nicht möglich.