Commodore 1570&1571 - Das große Floppybuch
Commodore 1570&1571 - Das große Floppybuch | |||
---|---|---|---|
Sprache | deutsch | ||
Autor(en) | Rainer Ellinger | ||
Verlag | Data Becker | ||
Jahr | 1985 | ||
ISBN | ISBN 3-89011-124-6 | ||
Neupreis | |||
Datenträger | |||
Seitenzahl | 554 | ||
letzte Auflage | 2., überarb. u erw. Aufl. | ||
Genre | Programmieren / Hardware | ||
Information |
Buchrückseite[Bearbeiten | Quelltext bearbeiten]
DAS STEHT DRIN: Das große Floppybuch zur 1570/1571 gibt Ihnen das notwendige Wissen zur Programmierung Ihres neuen Diskettenlaufwerkes. Für Anfänger, Fortgeschrittene und Profis. Dieses Buch beschreibt wirklich alle Leistungsmerkmale dieser schnellen Floppy.
Aus dem Inhalt:
- Einführung für Einsteiger
- Die Floppy und das COMMODORE-BASIC
- Sequentielle und relative Dateien
- Fremde Diskettenformate verarbeiten
- Programmierung im DOS--Puffer
- Die CP/M-Fähigkeiten der 1570/471
- Floppy intern: Schaltungsaufbau und Funktion
- 1571 Fast-Load
- Das DOS im Detail
- Komplettes DOS-Listing (mit Cross-Reference)
UND GESCHRIEBEN HAT DIESES BUCH:
Rainer Ellinger ist langjähriger Mikrocomputer-Spezialist mit sehr weitreichenden [[[Assembler]]- und Hardwarekenntnissen. Sein besonderes Anliegen war es, die teils
komplizierten Sachverhalte in eine auch für den weniger versierten Leser, verständliche Sprache zu verpacken.
Inhaltsverzeichnis[Bearbeiten | Quelltext bearbeiten]
Kapitel1: Einführung für Einsteiger 1.1 Der erste Kontakt mit der Floppy 1.1.1 Nach dem Auspacken ............................. 14 1.1.2 Was ist eine Diskette? ......................... 18 1.1.3 Die Diskettenformate ........................... 23 1.2 Die Floppy und COMMODORE BASIC 1.2.1 Von BASIC 2.0 bis BASIC 7.0 .................... 26 1.2.2 HEADER - Formatieren einer Diskette ............ 30 1.2.3 DLOAD/RUN - BASIC-Programme laden und starten .. 32 1.2.4 DSAVE - BASIC-Programme speichern .............. 34 1.2.5 DVERIFY - Programme überprüfen ................. 36 1.2.6 BLOAD/BSAVE - Bereiche speichern und laden ..... 37 1.2.7 DIRECTORY - Der Inhalt der Diskette ............ 39 1.2.8 SCRATCH - Programme und Dateien löschen ........ 41 1.2.9 DS/DSS/ST - Wenn ein Fehler auftritt ........... 43 1.3 Systembefehle der Floppy 1.3.1 Der Befehlskanal ............................... 47 1.3.2 COLLECT - Ordnen der Diskette .................. 49 1.3.3 RENAME - Umbenennen einer Datei ................ 50 1.3.4 CONCAT - Dateien verketten ..................... 51 1.3.5 COPY - Dateien kopieren ........................ 52 1.3.6 BACKUP - Disketten duplizieren ................. 54 1.3.7 DCLEAR - Schließen aller Kanäle ................ 55 1.3.8 BOOT - CP/M- und Autostart-Programme ........... 56 1.3.9W ildcards und Joker ............................ 58 1.4 Die sequentielle Datei 1.4.1 Was ist eine sequentielle Datei? ............... 60 1.4.2 Das Eröffnen einer Datei ....................... 62 1.4.3 Das Speichern von Daten ........................ 64 1.4.4 Schließen der sequentiellen Datei .............. 65 1.4.5 Abrufen aus einer Datei ........................ 66 1.4.6 Anfügen von Daten .............................. 71 1.4.7 Anwendung der sequentiellen Datei .............. 73 1.5 Die relative Datei 1.5.1 Was ist eine relative Datei? ................... 74 1.5.2 Das Eröffnen einer Datei ....................... 76 1.5.3 Das Speichern von Daten ........................ 77 1.5.4 Schließen der relativen Datei .................. 78 1.5.5 Ändern des Records ............................. 79 1.5.6 Anfügen neuer Records .......................... 79 1.5.7 Suchen eines Records ........................... 80 1.5.8 Anwendung der relativen Datei .................. 83 Kapitel2: Programmierung für Fortgeschrittene 2.1 Die Direktzugriffsbefehle 2.1.1 Der Direktzugriff auf einzelne Sektoren ........ 88 2.1.2 BLOCK-READ und BLOCK-WRITE ..................... 91 2.1.3 BLOCK-ALLOCATE und BLOCK-FREE .................. 94 2.2 Der Aufbau der Diskette 2.2.1 Das Directory .................................. 95 2.2.2 Die Blockbelegungstabelle - BAM ................ 98 2.2.3 Ein- oder zweiseitige Disketten ................ 101 2.2.4 Manipulationen an Directory und BAM ............ 102 2.3 Der Aufbau der Dateien 2.3.1 Programme, sequentielle und USER-Dateien ....... 104 2.3.2 Die relative Datei, die Side-Sektoren .......... 106 Kapitel3: Programmierung für Freaks 3.1 Programme im DOS-Puffer 3.1.1 MEMORY-READ und MEMORY-WRITE ................... 110 3.1.2 MEMORY-EXECUTE und BLOCK-EXECUTE ............... 112 3.1.3 Die USER-Befehle ............................... 114 3.1.4 Die USER0-Befehle .............................. 116 3.1.5 Autostart-Files ................................ 125 Kapitel4: Die C1570/71 und CP/M 4.1 Wie steuert CP/M die Floppy? 4.1.1 BDOS und BIOS .................................. 130 4.1.2 DPB - DerDiskparameterblock .................... 131 4.2 CP/M-Floppytechnik intern 4.2.1 MFM-Datenaufzeichnung unter CP/M ............... 134 4.2.2 Das IBM-System-34-Format ....................... 138 4.2.3 Fremde Disketten-Formate lesen ................. 141 4.2.4 Der Controller WD1770 - Programmierung ......... 146 Kapitel5: Programmierung für Profis 5.1 Wie die Bytes auf der Diskette aussehen... 5.1.1 Der Aufbau eines Sektors ....................... 154 5.1.2 Die Sync-Markierungen .......................... 155 5.1.3 GCR-Codierung, was ist das? .................... 157 5.2 Wer die Bytes auf die Diskette bringt 5.2.1 1570/71 - Schaltschema ......................... 160 5.2.2 Die Interface-Bausteine ........................ 162 5.2.3 Der Controller WD1770 - Technik ................ 169 5.2.4 Die Technik des COMMODORE-Controllers .......... 171 5.2.5 Der 1541- und 1570/71-Modus .................... 173 5.2.6 Der serielle Bus - Technik und Funktion ........ 174 5.2.7 Der Steppermotor ............................... 185 Kapitel6: C1570/71-Praxis 6.1 Der C64 und die C1571 - keinProblem 6.1.1 1570/71-Busfürden C64 selbstgebastelt .......... 188 6.1.2 Turbo-Betriebssystem für den C64 ............... 188 Kapitel7: Das Disk-Operating-System(DOS) 7.1 Die DOS-Routinen 7.1.1 Das DOS - eine Einführung ...................... 196 7.1.2 Die wichtigsten DOS-Routinen ................... 197 7.1.3 Die Zeropage ................................... 199 7.1.4 Das 1570/71 - DOS V3.0 im Detail ............... 200 7.1.5 Fehler im DOS .................................. 201 7.2 C1570/71 ROM-Listing 7.2.1 Wie wurde kommentiert? ......................... 202 7.2.2 C1571 DOS - Listing ............................ 205 7.2.3 Das C1570-ROM im Vergleich ..................... 477 Kapitel8: Die Floppy im Griff - Übersichtstabellen 8.1 Die Zeropage ..................................... 482 8.2 Die Floppy-Errors im Überblick ................... 493 Kapitel9: Der Drive/Diskmon 128 9.1 Die Befehle des Drive/Diskmon 128 ................ 498 9.2 Source-Listing des Drive/Diskmon 128 ............. 504 9.3 DATA-Ladeprogramm für den Drive/Diskmon128........ 531 Anhang A Stichwortverzeichnis ............................... 547
Leseprobe[Bearbeiten | Quelltext bearbeiten]
(1. Auflage - Seite 138: Kapitel "Kapitel 4: Die C1571 und CP/M"; Unterkapitel "4.2.2 DAS IBM SYSTEM 34 FORMAT")
Mit ’IBM System 34’ wird ein Diskettenformat benannt, daß sehr verbreitet ıst. So gut wie alle Disketten-Controllerbausteine zeichnen die Daten nach diesem System auf. Das ’IBM System 34’-Format, von nun an kurz ’IBM-34’ genannt, ist allerdings nicht die Art und Weise, wie die Daten auf der Diskette verwaltet werden, sondern die Methode, nach der auf der Diskette Spuren und Sektoren aufgebaut oder die Sync-Markierungen erstellt werden usw.
Im IBM-34-Format können Sektoren mit 128,=256, 512 und 1024 Bytes pro Sektor benützt werden, wobei die meisten Diskettenformaten Sektoren mit 256 Bytes Umfang verwenden. Aus diesem Grund werden wir nur den Aufbau einer Spur mit 256-Byte-Sektoren besprechen. Bei anderen Sektorgrößen wird das gleiche Prinzip der Sektorenaufzeichnung verwendet.
IBM-34-Disketten arbeiten immer mit dem Indexloch, das schon in Kapitel 1.1.2 erwähnt wurde. Dabei steuert diese Loch, an welcher Stelle die Sektoraufzeichnung auf der Spur beginnen soll.
Im Diagramm sehen Sie den Zustand der Indexloch-Lichtschranke oben eingezeichnet. Beim Auftreten des Indeximpulses werden auf der Spur 80 Bytes mit dem Wert $4E aufgezeichnet. Dieser Wert wird beim Formatieren als Füllwert für Lücken benützt. Durch diese Lücke nach dem Indexloch hat der Controller Zeit, die Schreib-/Leseelektronik zu aktivieren. Danach folgt der ’Pre-Index’, eine Marke die aus 12 Bytes mit dem Wert $00 besteht. Bei diesem Wert werden am Schreib-/Lesekopf nur noch durch die Taktbits Impulse ausgelöst. Dadurch kann der Controller seine Leseelektronik so einstellen, daß sie bei normalen Datenbytes Takt- und Datenbits automatisch trennt. Die $00-Bytes dienen dazu dem Controller mitzuteilen, welches die Taktbits sind. Die Markierung mit $00-Bytes wird auch ’Sync’ genannt, da der Controller damit synchronisiert wird.
Nach der Indexlücke folgt nun die sogenannte ’Index-Mark’. Dadurch wird dem Controller mitgeteilt, daß die vorhergehende Lücke zum Indexloch gehörte, da auch zwischen den einzelnen Sektoren Lücken vorhanden sind. Die ’Index-Mark’ besteht bei MFM aus drei Bytes mit dem Wert $F6, gefolgt von einem $FCByte. Beim Wert $F6 wird beim Formatieren das Taktbyte $C2 verwendet. das bedeutet, daß zwischen dem dritten und vierten Datenbit das Taktbit fehlt, das an dieser Stelle normalerweise nötig wäre. Dadurch identifiziert der Controller die ’Index-Mark’, da bei Datenbytes mit dem Wert $F6 dieses Taktbit nicht fehlt.
Im weiteren Verlauf der Spur ist nun eine Lücke mit 50 $4EBytes vorhanden. Somit hat der Controller Zeit, sich auf. die Verarbeitung der Sektoren einzustellen. Nach dieser Lücke folgen 12 Bytes mit dem Wert $00, die eine Sync-Markierung darstellen. Die nächsten 3 Bytes haben den Datenwert $F5 und sind mit dem Taktbyte $Al aufgezeichnet. Sie stellen zusammen mit dem darauf angegebenen $FE Byte, die ’ID Adress Mark’ dar. Diese Markierung weist darauf hin, daß nun der Header des Sektors folgt. Die weiteren sechs Bytes sind der Sektorheader.
Zuerst wird die Spurnummer des Sektors genannt. Darauf folgt ein Byte, daß die Diskettenseite angibt. Dabei wird der Wert '0' für die Vorderseite und der Wert ’1’ für die Rückseite der Diskette verwendet.
Das nächste Byte ist die Sektornummer des nach dem Header folgenden Datenteils. Die vierte Angabe ist das Sektorkennzeichen, das die Größe des Datensektors angibt. Dabei haben die einzelnen Bytewerte folgende Bedeutung:
00 128 Bytes pro Sektor. 01 256 Bytes pro Sektor. 02 512 Bytes pro Sektor. 03 1024 Bytes pro Sektor.
Der Sektorheader wird mit zwei Prüfsummenbytes, auch CRC-Bytes genannt, abgeschlossen.
Dem Sektorheader folgt wieder eine 22 Bytes große Lücke mit dem Wert $4E, der sich 12 Bytes des Wertes $00 anschliesen, die eine Sync-Markierung darstellen.
Nun folgt die ’Data Adress Mark’ die den Beginn des Datenbereichs kennzeichnet. Sie besteht aus 3 Bytes mit dem Datenwert $F5 und dem Taktbyte $Al, sowie einem Byte mit dem Wert $FB. Im Anschluß an die ’Data Adress Mark’ sind die 256 Datenbytes des Sektors aufgezeichnet.
Zum Schluß werden zwei Prüfsummenbytes abgelegt. Diese werden nach dem CRC-Verfahren errechnet. CRC ist eine Abkürzung für ’cyclic redundancy check’. Bei dieser Methode wird aus den einzelnen Bits eines Datenbytes ein Polynom gebildet. Dieses Polynom wird durch ein Generatorpolynom, das G(x)=X16+X12+X5+1 lautet, dividiert. Normalerweise geht diese Division nicht auf und es entsteht ein Rest. Die CRC-Bytes sind der Wert, den man zum Polynom des Datenbytes addieren muß, damit sich bei der Division durch das Generatotpolynom keinen Rest ergibt. Dies hört sich kompliziert an, ist jedoch mit einer einfachen digitalen Schaltung lösbar.
Zum Schluß folgt wieder eine Lücke mit $4E-Bytes. Die Größe dieser Lücke hängt von der Sektorgröße ab. Darüberhinaus werden bei Laufwerken mit Gleichlaufschwankungen, die bis zu 3% betragen dürfen, größere Lücken verwendet, als bei relativ gleichlaufstabilen Laufwerken. Nach dieser Lücke folgt die Sync-Markierung vor der ’ID Adress Mark’ des nächsten Sektors.
Wie eine Spur genau aufgebaut wird ist auch dem ROM-Listing zu entnehmen. Die Routine $8A86 formatiert eine Spur im IBM-34-Format. Aus ihr ist ersichtlich, wie welche Markierungen erzeugt werden, welchen Umfang die Lücken haben und mit welchen Parametern der Formatiervorgang gesteuert wird.