Dieser Anhang bietet eine kurze Übersicht über die Befehle des Commodore 1541 Diskettenlaufwerks. Er ist nicht als Lehrbuch gedacht, sondern soll dazu dienen lange ungenutztes Wissen wieder aufzufrischen.
Falls Sie eine genauere Erklärung der Funktionsweise des Diskettenlaufwerks und eine detailierte Beschreibung aller Befehle mit zahlreichen Beispielen suchen, sollten Sie einen Blick auf das original C1541 Handbuch werfen. Es ist (in englischer Sprache) als e-Text bei Project64 (http://project64.c64.org), sowie in verschiedenen anderen Sprachen (u.a. Deutsch) bei iDoc (http://www.softwolves.pp.se/idoc/) verfübar.
Das 1541 Disketten Laufwerk ist ein sehr flexibles Gerät. Es enthält eine CPU, RAM und ROM und stellt somit einen kleinen Computer dar, der viele verschiedene Befehle ausführen kann.
Verwenden Sie folgendes Programm um einen Befehl an das Diskettenlaufwerk zu senden:
Mit dem folgenden Programm können Sie den Status des Diskettenlaufwerks anzeigen:
- NEW - Diskette formatieren
-
Abkürzung: N
Syntax: "NEW:<Diskname>,<id>"
Dabei ist der <Diskname> maximal 16 Zeichen lang und <id> kann entweder weggelassen werden (um nur das Directory einer bereits formatierten Diskette zu löschen), oder muß exakt zwei Zeichen lang sein.
- COPY- Erstellt eine Kopie einer Datei auf der gleichen Diskette
-
Abkürzung: C
Syntax: "COPY:<destfile>=<sourcefile>" oder
"COPY:<destfile>=<sourcefile1>, <sourcefile2>, ..."
Wenn mehrere Quelldateien angegeben werden, werden sie alle hintereinander in die Zieldatei kopiert.
- RENAME - Datei umbenennen
-
Abkürzung: R
Syntax: "RENAME:<newname>=<oldname>"
- SCRATCH - Dateien löschen
-
Abkürzung: S
Syntax: "SCRATCH:<file>"
Über die Joker '?' und '*' können mehrere Dateien auf einmal gelöscht werden.
- INITIALIZE - Reset der C1541
-
Abkürzung: I
Syntax: "INITIALIZE"
- VALIDATE - Prüft und repariert die logische Konsistenz der Diskette
-
Abkürzung: V
Syntax: "VALIDATE"
Validate repariert Inkonsistenzen die dadurch enstehen können, daß Dateien geöffnet, aber nie geschlossen werden. Achtung: Validate löscht alle Random Dateien.
- POSITION - Setzt die Lese/Schreib Position in einer relativen Datei
-
Abkürzung: P
Syntax: "P"+CHR$(Channel)+CHR$(RecLow)+CHR$(RecHi)+CHR$(Pos)
Beispiel:
OPEN 15, 8, 15 ; Befehlskanal öffnen
OPEN 5, 8, 5, "RelativeFile,L,";CHR$(40)
; Erstelle eine relative Datei mit
; 40 Byte Recordgröße
PRINT#15,"P"+CHR$(5)+CHR$(17)+CHR$(0)+CHR$(1)
; Setze die Dateiposition auf das erste
; Byte von Record 17 (Die Nummerierung
; von Records und der BytePos beginnt
; mit 1 (nicht 0))
PRINT#5,"Wichtige Daten" ; Daten schreiben
PRINT#15,"P"+CHR$(5)+CHR$(9)+CHR$(0)+CHR$(4)
; Setze die Dateiposition auf das vierte
; Byte von Record 9 (Die Nummerierung
; von Records und der BytePos beginnt
; mit 1 (nicht 0))
INPUT#5,X$ ; Daten lesen
CLOSE 5 ; Datei schließen
CLOSE 15 ; Befehlskanal schließen
- BLOCK-READ - Liest einen Block der Diskette ins Floppy RAM
-
Abkürzung: B-R
Syntax: "B-R:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector)
Beispiel:
OPEN 15, 8, 15 ; Befehlskanal öffnen
OPEN 5, 8, 5, "#" ; Kanal 5 als RAM Puffer öffnen
PRINT#15,"B-R: 5 0 18 2" ; Track 18 / Sector 2 in den Puffer von
; Kanal 5 einlesen
PRINT#15,"B-P: 5 0" ; Zeiger auf den Anfang des Blocks
FOR I = 0 TO 253 ; Ein Block ist max. 254 Byte
GET#5, A$ ; Ein Byte holen
IF (ST <> 0) THEN ... ; Auf Ende des Blocks prüfen
... ; Byte verarbeiten
NEXT I
CLOSE 5 ; Datenkanal schließen
CLOSE 15 ; Befehlskanal schließen
- BLOCK-WRITE - Schreibt einen Block der Diskette aus dem Floppy RAM
-
Abkürzung: B-W
Syntax: "B-W:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector)
Beispiel:
OPEN 15, 8, 15 ; Befehlskanal öffnen
OPEN 5, 8, 5, "#" ; Kanal 5 als RAM Puffer öffnen
PRINT#5, X$ ; Schreibt Daten ins RAM
PRINT#5, Y$ ; Schreibt mehr Daten ins RAM
PRINT#5, Z$ ; Schreibt noch mehr Daten ins RAM
(insgesamt: max. 254 Byte)
PRINT#15,"B-W: 5 0 18 2" ; Schreibt den RAM Puffer für Kanal 5
; auf Track 18 / Sector 2
CLOSE 5 ; Datenkanal schließen
CLOSE 15 ; Befehlskanal schließen
- BUFFER-POINTER - Setzt den Zeiger für einen Puffer
-
Abkürzung: B-P
Syntax: "B-P:"+STR$(Channel)+STR$(Pos)
Beispiel: siehe BLOCK-READ
- BLOCK-ALLOCATE - Markiert einen Diskettenblock als belegt
-
Abkürzung: B-A
Syntax: "B-A:"+STR$(Drive)+STR$(Track)+STR$(Sector)
Beispiel:
OPEN 1, 8, 15 ; Befehlskanal öffnen
PRINT#1,"B-A: 0 12 7" ; Block (Track 12 / Sector 7) belegen
INPUT#1, EN$, ER$, TR$, SC$ ; Fehlermeldung lesen - Ergibt
; den tatsächlich belegten Block
CLOSE 1 ; Befehlskanal schließen
PRINT "Track:;TR$;"Sector";SC$
- BLOCK-FREE - Markiert einen Diskettenblock als frei
-
Abkürzung: B-F
Syntax: "B-F:"+STR$(Channel)+STR$(Pos)
Beispiel:
OPEN 1, 8, 15 ; Befehlskanal öffnen
PRINT#1,"B-F: 0 12 7" ; Block (Track 12 / Sector 7)
; als frei markieren
CLOSE 1 ; Befehlskanal schließen
- BLOCK-EXECUTE - Liest einen Disk Block ins Floppy RAM und führt ihn aus.
-
Abkürzung: B-E
Syntax: "B-E:"+STR$(Channel)+STR$(Drive)+STR$(Track)+STR$(Sector)
Anmerkung: Offensichtlich benötigt Block Execute die vollständige Emulation der MOS 6502 CPU in the 1541. Wenn Sie diesen Befehl nutzen wollen, stellen Sie bitte sicher, daß 'Complete Floppy 1541 Emulation' aktiviert ist. Andernfalls erscheint die Fehlermeldung 'Command Not Emulated'.
- USER1 - Liest einen Block der Diskette ins Floppy RAM
-
Abkürzung: U1
USER1 arbeitet wie BLOCK-READ , mit der Ausnahme, daß U1 den Link auf den nächsten Datenblock als Teil der Daten ansieht. Daher ist ein mit U1 gelesener Block 256 (und nicht nur max. 254) Bytes lang.
- USER2 - Schreibt einen Block der Diskette aus dem Floppy RAM
-
Abkürzung: U2
USER2 arbeitet wie BLOCK-WRITE mit der Ausnahme, daß U2 den Link auf den nächsten Block als Teil der Daten ansieht. Daher muß ein mit U2 geschriebener Block 256 (und nicht nur max. 254) Bytes lang sein.
- USER3..USER8 - Führt ein Benutzerprogramm in der Floppy aus
-
Abkürzung: U3..U8
Das ausgeführte Programm beginnt ab der Adresse $0500 + 3*(x-3) (also $0500 for U3, $0503 for U4...)
Anmerkung: Offensichtlich benötigt Block Execute die vollständige Emulation der MOS 6502 CPU in the 1541. Wenn Sie diesen Befehl nutzen wollen, stellen Sie bitte sicher, daß 'Complete Floppy 1541 Emulation' aktiviert ist. Andernfalls erscheint die Fehlermeldung 'Command Not Emulated'.
- USERI - Umschalten der C1541 zwischen C64 und VC20 Modus
-
Abkürzung: UI
Syntax: "UI+" or "UI-"
Dies ist eine tote Funktion in Power64. Sie führt bei einer echten C1541 zu einer geringfügigen Anpassung der Übertragungsgeschwindigkeit.
- USERJ - Reset der C1541
-
Abkürzung: UJ
Syntax: "UJ"
Äquivalent zu INITIALIZE
- MEMORY-READ - Daten aus dem Floppy RAM lesen
-
Abkürzung: M-R (Es ist nur die Abkürzung, nicht aber die Langform, zulässig)
Syntax: "M-R"+CHR$(LowAddress)+CHR$(HighAddress)+CHR$(Size)
Beispiel:
OPEN 1, 8, 15 ; Befehlskanal öffnen
PRINT#1, "M-R"+CHR$(52)+CHR$(18)+CHR$(3) ; 3 Bytes ab Addr. $1234
; lesen
GET#1, A$, B$, C$ ; Alle Werte auf EINMAL lesen
CLOSE 1 ; Befehlskanal schließen
- MEMORY-WRITE - Schreibt Daten ins Floppy RAM
-
Abkürzung: M-W (Es ist nur die Abkürzung, nicht aber die Langform, zulässig)
Syntax: "M-W"+CHR$(LowAddress)+CHR$(HighAddress)+CHR$(Size)
Beispiel:
OPEN 1, 8, 15 ; Befehlskanal öffnen
PRINT#1, "I" ; Floppy erst initialisieren!
PRINT#1, "M-W"+CHR$(52)+CHR$(18)+CHR$(8)
; 8 Byte ab Adresse $1234
PRINT#1, "POWER64" ; 8 Byte schreiben (inkl. CR)
CLOSE 1 ; Befehlskanal schließen
- MEMORY-EXECUTE - Führt ein Benutzerprogramm in der Floppy aus
-
Abkürzung: M-E (Es ist nur die Abkürzung, nicht aber die Langform, zulässig)
Syntax: "M-E"+CHR$(LowAddress)+CHR$(HighAddress)
Anmerkung: Offensichtlich benötigt Block Execute die vollständige Emulation der MOS 6502 CPU in the 1541. Wenn Sie diesen Befehl nutzen wollen, stellen Sie bitte sicher, daß 'Complete Floppy 1541 Emulation' aktiviert ist. Andernfalls erscheint die Fehlermeldung 'Command Not Emulated'.
- PARTITION - Partition einer 1581 Diskette erstellen oder auswählen
-
Dieser Befehl funktioniert nur mit 1581 Disketten, nicht mit 1541 oder 1571 Disketten!
Schreibweise: / (Es ist nur die Abkürzung, nicht aber die Langform, zulässig). Je nachdem welche weiteren Parameter dem Befehl mitgegeben werden, ändert sich seine Funktion.
Syntax:
a) "/:<Partition>" - Wählt eine bestimmte Partition aus
b) "/" - Direkte Rückkehr ins Wurzelverzeichnis der Diskette, eine stufenweise Rückkehr in übergeordnete Verzeichnisse ist nicht möglich.
c) "/:<Partition>,"+CHR$(StartTrack)+CHR$(StartSector)+
CHR$(BlockCntLow)+CHR$(BlockCntHigh)+",C"
Erstellt eine Partition mit BlockCnt Blöcken ab StartTrack/StartSector. Diese
Partition besteht zunächst nur aus einer unstrukturierten Sammlung von Blöcken. Um in einer Partition ein Unterverzeichnis erstellen zu können, muß man zunächst in die Partition wechseln und sie dann formatieren.
Beispiel:
OPEN 1, 8, 15 ; Befehlskanal öffnen
PRINT#1, "/:SubDir,"+CHR$(12)+CHR$(0)+CHR$(232)+CHR$(3)+",C"
; Partition anlegen: 1000 Blöcke ab Spur 12 Sektor 0
; 1000 = 3*256 + 232 = 25*40
PRINT#1, "/:SubDir" ; Wechseln in die neue Partition
PRINT#1, "N:POWER64,64" ; Partition formatieren
PRINT#1, "/" ; Wechsel zurück ins Hauptverzeichnis
CLOSE 1 ; Befehlskanal schließen
Wie auch auf einer Original 1581 können nur Partitionen formatiert werden, die:
.) mindestens 120 Blöcke groß sind
.) ein Vielfaches von 40 Blöcken groß sind
.) mit dem Sektor 0 einer Spur beginnen.