von Bernd Dongus Hallo Leute ! Meine Aufgabe wird es sein, in den kom- menden Ausgaben des USER-MAG den Assem- blerbereich des XL/XE abzudecken. Zu diesem Zweck wurde die Assembler-Ecke ins Leben gerufen. Sie ist nicht nur für Profis, sondern auch für Anfänger gedacht. Auf diese Weise sollte für je- den etwas dabei sein. Tja, dann wollen wir mal anfangen. Assemblerkurse gab's ja schon zu Genü- ge, von daher möchte ich die Befehle an sich nicht mehr erklären. Außer Hardware bietet der ATARI-8-bit dem Käufer auch eine gute Software, nämlich sein Betriebssystem. Hier findet man Routinen für Grafik, Text, Mathematik und für den seriellen bzw. parallelen Datentransfer. Eines der Geräte am seriellen Ausgang ist die Diskettenstation. Mit ihr wol- len wir uns nun etwas näher beschäfti- gen. Die Station versteht bestimmte Kommandos, die von einer OS-Routine gesendet werden. Für die Parameter- übergabe an diese Routine existiert im XL/XE ein Speicherblock, der folgender- maßen aufgebaut ist: DDEV $300 Erkennungskode DUNIT $301 Laufwerksnummer DCMD $302 auszuführendes Kommando DSTAT $303 Fehlernummer DBUF $304 Anfang des Daten- $305 puffer DTOUT $306 Wartezeit bis zum $307 Timeout DLEN $308 Pufferlänge $309 DAUX1 $30A Hilfsparameter DAUX2 $30B Im Betriebssystem gibt es zwei Rou- tinen, die diesen Block benutzten. 1. DSKINT $E453 2. SIOINT $E459 Zunächst gehen wir auf die Funktions- weise von SIOINT ein, da hier die eigentliche Übertragung stattfindet. Bevor man SIOINT aufruft, muß man in DSTAT festlegen, ob die Operation eine Lese- oder Schreibausführung ist. Das geschieht folgendermaßen: DSTAT = $80 : Puffer wird gesendet = $40 : Puffer wird empfangen = 0 : es wird nur auf eine Rückmeldung gewartet Natürlich muß man auch die Zeit bis zum Timeout, die LW#, den Pufferanfang, seine Länge und das Kommando selbst mit den Hilfsparametern festlegen.(LW# heißt Laufwerksnummer). Der Timeout ist dabei eine nützliche Sache. Er löst einen erneuten Versuch aus das Kommando auszuführen, wenn es sich nicht nach ein paar, in DTOUT stehenden, Sekunden zurückmeldet. Dies ist natürlich sehr mühselig, deshalb gibt es den Sprung- vektor DSKINT. Hier wird einem viel Arbeit abgenommen. Diese Erleichterung gilt allerdings nur für folgende Kom- mandos : $21,$50,$57,$52 Sie werden gleich noch näher erläutert. Für diese vier erübrigt sich das Setzen von DTOUT, DSTAT und DLEN. Bei Kommando $53 (Statusabfrage) kann man DBUF auch weglassen, da dieses von DSKINT auf $2EA gesetzt wird. Für die restlichen Operationen ($22,$23,$24,$4E,$4F) muß man alles so handhaben, wie oben be- schrieben. Genug aber der Vorrede! Nehmen wir doch ein paar der Befehle unter die Lupe. Die Wichtigsten am Be- sten zuerst : $21,$50,$57,$52,$22 OK, OK das ist wohl etwas abstrakt, hier also die ASCII-Codes: ! , P , W , R , " Kurzerklärungen --------------- ! und " : Beides sind Befehle um eine Diskette zu formatiern. ! ist für Single, " für Medium (od. Enhanced) Density Nach diesem Kommando stehen ab dem Pufferanfang die Nummern der fehler- haften Sektoren. Am Ende dieser Tabelle steht $FFFF. Wird bei ! DSKINT benutzt, so wird in DLEN die Anzahl der fehler- haften Sektoren übergeben. R : Lesen eines Sektors. Es wird der Sektor, der in DAUX1 und DAUX2 steht gelesen. P und W : Schreiben eines Sektors. DAUX1 und DAUX2 enthalten auch hier die Sektornummer. Der einzige Unterschied ist, daß bei W überprüft wird, ob die Daten richtig geschrieben wurden (Verify). So das war's für heute. War auch lang genug. Beim nächsten Mal lass ich mich dann ausführlich über den Bootsektor aus. Auf der Magazindisk befinden sich einige Beispielprogramme zum Thema dieser Assembler-Ecke. Sie sind durch die Kennung .SRC erkennbar. Erstellt wurden sie mit dem BIBO-Assembler.