Der Diskette aufs Byte geschautLast, but not least — ein Nachtrag zum Floppykurs Wie wir bemerken konnten, stieß unser Floppykurs auf reges Interesse. Leider hat sich aber in den ersten zwei Teilen des Floppykurses der Fehlerteufel unbemerkt breitgemacht. Wir wollen nun hier an dieser Stelle mit einem Nachtrag die eventuell entstandene Verwirrung (hoffentlich) beseitigen. Zuerst die Arbeit... Auf Seite 33 in Heft 10/88 wurde im Listing 1, welches die erste Möglichkeit des Befehlsaufrufes zeigen soll, bei der Befehlssequenz LD A, # FF das #FF vergessen. Falls Sie diesen Befehl wie dort abgedruckt eingetippt haben, werden die Fehlermeldungen nicht unterdrückt. Nach der Verbesserung funktioniert die Routine einwandfrei. Ein weiterer Fehler hat sich auf der gleichen Seite in der mittleren Spalte eingeschlichen. Dort muß die im Z-80-Prozessor nicht vorhandene Befehlsfolge 'LD (ADR+2),C' durch 'LD A,C' und 'LD (ADR+2),A' ersetzt werden. Ein sehr gravierender Fehler ist in Heft 11/88 auf Seite 25 zu finden. Hier wird gesagt, daß man bei Aufruf von &88 (Test Drive) im Akku das Statusregister 0 zurückerhält. Dies ist jedoch nicht richtig. Nach Abarbeitung von 'Test Drive1 erhalten Sie im AKKU das Statusregister 3 mit AND &C0 verknüpft zurück, folglich ist es wenig sinnvoll, die Bits 1 bis 7 auszublenden. Um den Originalwert von Status 3 zu bekommen, laden Sie ihn mit 'LD A, (# BE4C)' in den AKKU. Den genauen Aufbau von ST3 entnehmen Sie bitte dem dritten Teil des Floppykurses (Heft 12'88). Hier sei nur noch erwähnt, daß Sie mittels folgender Be- fehle Auskunft über den Zustand des gewünschten Laufwerkes erhalten können: LD A,(#BE4C) ; ST3 in AKKU BIT 5,A ; Laufwerk bereit? ZERO-Flag ist zurückgesetzt, wenn das DRIVE bereit ist JR NZ,NONERR ; kein Fehler BIT 6,A ; Diskette schreibgeschützt ? ZERO-Flag ist gelöscht, wenn die Diskette schreibgeschützt ist JR Z,NONERR ; kein FehlerDas Kommando TEST DRIVE (&88), steht im AMSDOS an der Adresse &C630. Von dort wird nach &C638 verzweigt und der Befehlscode sowie die Laufwerksnummer an den FDC übergeben. Hierauf wird 'Resultphase auslesen“ angesprungen. Im AMSDOS wird die Routine 'Resultphase ausle-sen' an der Adresse &C91C normalerweise dazu benutzt, um die Resultphase an der Adresse &BE4C abzulegen. Hierbei wird vor Abschluß der Routine der Wert aus &BE4C mit &C0 AND- verknüpft, um den Interruptcode zu isolieren. Dies ist jedoch nur beim Statusregister 0 sinnvoll, beim ST3 ergibt sich hierdurch ein absurder Wert, der keine Aussagekraft mehr hat. So ist es auch nicht weiter verwunderlich, daß diese Routine immer ein gelöschtes CARRY-Flag zurückgibt, da beim AND-Befehl das CARRY gelöscht wird. Es handelt sich hierbei also um einen Fehler im AMSDOS. Im gleichen Heft befindet sich ein Druckfehler auf Seite 27, Spalte 3. Dort steht die Befehlssequenz 'LD IX, (#E42)', richtig muß es jedoch 'LD IX,(# BE42)' heißen. Mit dieser falschen Adresse kann man dann natürlich nicht die richtige Startadresse derzwei-ten Tabelle ermitteln. Im Listing tritt dieser Fehler zum Glück nicht auf, so daß dieses einwandfrei läuft. ... dann das 'Vergnügen'! Nun noch ein Nachtrag zu einem Thema, das wir ganz gezielt nicht in den Floppykurs integriert haben. Es handelt sich hierbei um die EINFACHE SCHREIBDICHTE. Von einfacher Schreibdichte (engl. Single Density) spricht man dann, wenn die Daten im MF-Format aufgezeichnet werden, das heißt bei einer 3“-Diskette befinden sich dann zwar immer noch 40 Spuren auf einer Diskettenseite, die Spurgröße hat sich jedoch halbiert, so daß nur noch 3125 Byte statt wie beim MFM-Format 6250 Byte auf einer Spur Platz finden. Jetzt werden Sie sich sicherlich fragen, warum auf einer Spur 6250 Byte passen, wenn 9*512 (Sektoranzahl * Sektorlänge) doch nur 4608 Byte ergeben. Diese Differenz läßt sich sehr einfach beantworten. Sie kommt dadurch zustande, daß zwischen jedem Sektor auf einer Spur eine Lücke, die GAP #03 ist. Ebenfalls hat jede Spur auch eine Kennzeichnung, die Speicherplatz benötigt. Den genauen Aufbau einer Spur entnehmen Sie bitte Kursteil 3. Um den genauen Ablauf des Lesens und Schreibens auf Diskette (das ist die Magnetisierung der Diskettenoberfläche) zu erklären, wäre ein tiefes Eindringen in die Physik notwendig. Um jedoch unnötige Verwirrung zu vermeiden, wollen wir dies lieber sein lassen. Das MF-Format findet im AMSDOS keine Verwendung, es ist jedoch denkbar, daß es über kurz oder lang einen Kopierschutz mit Single Density geben wird. In unserem Diskettenmonitor DMON haben wir bewußt darauf verzichtet, da einfache Schreibdichte heute noch nicht angewandt wird (sollte dieses Problem jedoch akut werden, wird es sicherlich einen Update von DMON geben). Ein weiteres Thema, das wir hier noch ansprechen wollen, ist die in unseren Listings oft auftauchende Fehlerbehandlungsroutine ERROR: oder ERR:. Wie eine solche, immens wichtige Routine programmiert werden kann, soll Ihnen Listing 1 und 2 verdeutlichen. Wichtig ist hierbei die richtige Behandlung des Stacks; darauf müssen Sie aber selbst achten, da man nicht im voraus sagen kann, wie aus dem Hauptprogramm in die Fehlerbehandlung verzweigt wird (CALL, JP, etc.). Prinzipiell gibt es zwei verschiedene Routinen. Die erste kann bei folgenden Befehlen verwendet werden: - DATEN LESEN
- GELÖSCHTE DATEN LESEN
- SPUR LESEN
- ID LESEN
- DATEN SCHREIBEN
- GELÖSCHTE DATEN SCHREIBEN
- SPUR FORMATIEREN
- SPUR ÜBERPRÜFEN ( > = , < = , =)
Eine Möglichkeit für diese ERROR-Routine entnehmen Sie bitte Listing 1. Sie deckt fast das gesamte Spektrum der Fehlermöglichkeiten ab. Besondere Fehler, wie etwa OR (Over Run), die nur dann auftreten, wenn Ihre Routine fehlerhaft ist, wurden nicht berücksichtigt. Die zweite Fehlerbehandlungsroutine kommt beim Befehl LAUFWERKSSTATUS ERMITTELN zum Einsatz, ihr Aufbau wird in Listing 2 dargestellt. Hierbei ist zu beachten, daß Bit 6 immer gesetzt wird, falls die Diskette schreibgeschützt ist. Dies kann bei DATEN LESEN zu Fehlinterpretationen führen, da es dabei unrelevant ist, ob die Diskette über Schreibschutz verfügt oder nicht. So, das war es nun endgültig von der Floppy-Programmierung. Wir hoffen, daß diese Berichtigungen den letzten Zweifel beseitigt haben und Sie unserem Kurs wertvolle Anregungen und Informationen entnehmen konnten. Sollten Sie weitere Fragen zum Thema FDC-Programmierung haben oder eigene Erkenntnisse und Vorschläge an die anderen Leser weitergeben wollen, so tun Sie dies ruhig, die Autoren des Kurses stehen gerne zur Verfügung. Christoph Hipp/ Alexander Knopp/ Ulrich Weiß/jb, CPCAI |