Home
Home
Anfang Zurück Inhalt Weiter Ende
Anfang - Zurück - Inhalt - Weiter - Ende
English
English

Anhang B: Floppy Befehle

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 anderen Sprachen (u.a. Deutsch) bei iDoc (http://www.softwolves.pp.se/idoc/) verfügbar.

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:

10 OPEN 1, 8, 15                  ; Befehlskanal öffnen
20 PRINT#1, Command$              ; Befehl schicken
30 CLOSE 1                        ; Kanal wieder schließen

Mit dem folgenden Programm können Sie den Status des Diskettenlaufwerks anzeigen:

10 OPEN 1, 8, 15                  ; Fehlerkanal öffnen
20 INPUT#1, EN$, ER$, TR$, SC$    ; Status lesen
30 CLOSE 1                        ; Kanal schließen
40 PRINT "ErrNr: "; EN$           ; Ergebnisse anzeigen
50 PRINT "Error: "; ER$
60 PRINT "Track: "; TR$
70 PRINT "Sector:"; SC$

Power20 bietet folgende Befehle für die emulierten Diskettenlaufwerke:

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 Power20. 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, "POWER20"            ; 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'.

Home Anfang Zurück Inhalt Weiter Ende Top of Page

Quelle: http://www.infinite-loop.at/Power20/Documentation/Power20-LiesMich/AB-Floppy_Befehle.html
Power20 Homepage: http://www.infinite-loop.at und http://www.salto.at - EMail:
© Roland Lieger, Goethegasse 39, A-2340 Mödling, Österreich
Letzte Änderung: 29. Feb. 2008
Valid HTML 4.01!