Eines kann man über Floppies, Festplatten und deren weitläufige Verwandtschaft sicher sagen: Sie verursachen massenhaft Probleme. Zumindest, wenn man nach den Briefen der Feser des SCHEIBENKLEI-STERs und dieser Zeitung urteilt. Häufige Fragen, die wir als Autoren des SCHEIBENKLEISTERS gestellt bekommen, sollen künftig regelmäßig hier veröffentlicht, beantwortet oder zur Diskussion gestellt werden. Wohlgemerkt: Hier geht es zwar “nur” um Massen-speicher, aber das ist immer noch ein weites Feld.
Gleich zu zwei bisher unbeantworteten Leserfragen:
“Im SCHEIBENKLEISTER ist beschrieben, wie man in einem TEAC FD55F-Lauf-werk zwischen 40 und 80 Spuren umschaltet, indem man einen Widerstand (R15) über einen Schalter anschließt. In meinem Laufwerk dieses Typs ist der betreffende Widerstand nicht zu finden. Das Laufwerk hat die genaue Bezeichnung TEAC FD55F 31U. Wer weiß darüber etwas?”
“Wo kann man beim TEAC FN35C die Drehgeschwindigkeit abgleichen?”
Leider kennen wir keines dieser Laufwerke aus eigener Anschauung - kann jemand helfen? Danke!
Viele haben sich - nach der Anleitung der Zeitschrift c’t, Ausgabe 2/88 - eine billige Platte selbst gebaut; kommerzielle Versionen gibt es auch schon. Zwar finden wir diesen Anschluß nicht besonders glücklich, blockiert er doch den DMA-Bus bis in alle Ewigkeit für andere ACSI-Geräte (Laserdrucker, Wechselplatte, Streamer, CD-ROM...). Trotzdem besteht heftiges Leserinteresse, den Diskmonitor SED und auch die restliche KLEISTER-Soft-ware an diese Lösung anzupassen.
Bis auf die Menüs HARD und HDX im SED4.0 sind alle Optionen hardware-unabhängig, laufen also mit der c’t-Lösung. Die Optionen in HARD und HDX verlassen sich darauf, daß angeschlossene Platten das ACSI-Protokoll beachten, was die “Billiglösungen” nicht tun. Zudem nutzt der SED Eigenheiten der ATARI-Platten, die etwa ein OMTI-Controller nicht bietet. Eine Anpassung ist also aufwendig, aber wir sind bereit, das in Kooperation mit Lesern anzupacken. Findet sich dazu ein programmierwütiger Besitzer des c’t-Adapters. vorzugsweise in unserer Nähe (Unterfranken)?
In eigener Sache
“Anton Stepper ist ein Pseudonym von CB.”
FALSCH! Warum glaubt mir nur keiner, daß Anton verdammt echt ist?
“Claus Brod ist ein Pseudonym von Anton Stepper.”
Warum vermutet keiner so etwas? Trotzdem FALSCH!
“Viren können auf schreibgeschützte Disketten schreiben.”
FALSCH! Das ist und bleibt eine Ente.
Soviel für diesmal. KLE1-STER-Leser und andere: Werden Sie Ihre Fragen los, schreiben Sie an die Redaktionsadresse, zu meinen Händen, oder direkt an Claus Brod, Am Felsenkeller 2, D-8772 Marktheidenfeld (geht schneller). Wenn Sie keine Veröffentlichung wünschen, merken Sie das bitte an.
CB
Die folgende Bemerkung bezieht sich auf den Artikel ‘Wie man mehr aus seinem Desktop.inf macht’ aus Heft 4/ 89. Sie schreiben dort: “Dem ‘#c’ folgen zunächst 16 Zifferngruppen aus je 3 Ziffern.”... "Im Monochrommodus ist nur die erste Dreiergruppe von Bedeutung. Dabei steht ‘777’ für die normale und ‘000’ für die invertierende Darstellung.” Da ich über wenig Programmiersprachenkenntnisse verfüge, habe ich mich mit einer Textverarbeitung über die Datei Desktop. inf hergemacht und die angesprochene Dreiergruppe geändert. Weder nach einem Reset noch nach einem Kaltstart war das Bild invertiert. Es klappte dann nach Ändern der beiden ersten Dreiergruppen in ‘000’ und ‘777’.
Obwohl ich vieles noch nicht verstehe, lese ich ihre Zeitschrift mit großem Interesse, ärgere mich aber mit schöner Regelmäßigkeit darüber, daß Probleme und Listings in so vielen verschiedenen Sprachen (C, Assembler, Pascal, Modula 2 etc.) behandelt und veröffentlicht werden. Allein finanziell übersteigt es meine Möglichkeiten, für die nötigen Voraussetzungen zu sorgen, um an ein Umsetzen der Probleme auf meinen Rechner denken zu können (einige Hundert bis Tausend Mark für diverse Compiler und Literatur). Ich kann mir nicht vorstellen, daß ich mit diesem Problem alleine bin, und möchte Sie daher fragen, ob es nicht möglich ist, die Listings mit so etwas wie dem MCI [Anmerkung der Redaktion: Eine (eventuell gepackte) Zahlenmenge, die den Code des Programms darstellt - ‘DATA-Zeilen’ - mit Fehlererkennung aufgrund von zum Beispiel Quersummenberechnung | zu veröffentlichen. Irgendein kluger Kopf kann doch sicher etwas Vergleichbares für Ihre Zeitschrift entwickeln. Von der etwaigen Lösung, die veröffentlichten Programme auf einer Diskette anzubieten, halte ich nichts, da nicht alle Programme für jeden brauchbar sind und eine Diskette mit ein oder zwei für mich brauchbaren Programmen für 20 bis 30 DM plus Heftpreis wieder zu teuer wären.
H. Kreimeyer, Oldenburg
Red.: Sie haben Recht: ln dem Artikel ist es etwas ungenau ausgedrückt: Zu dem Monochrommodus gehören die zwei ersten Farbregister, so daß auch beide im Desktop.inf so geändert werden müssen, wie sie es beschreiben. Man möge uns diese kleine Ungenauigkeit verzeihen.
Nun zu Ihrer Anregung mit den Programmdaten-'Listings'. Da uns schon mehrere Leser bezüglich dieses Themas geschrieben haben, möchten wir an dieser Stelle einmal Stellung nehmen. Sicherlich haben wir uns schon oft Gedanken darüber gemacht. Leider ist der ATARI ST ein sehr sprachbegabter Rechner, dessen Fremdsprachenkenntnisse sich immer mehr aus weiten. Angefangen hat es mit C, Assembler, BASIC und Pascal: Fortran. Modula 2. und viele andere folgten. Wem soll man es recht machen? Zugegeben. C ist die ‘Muttersprache’ des ST. Daher ist es auch nicht verwunderlich, daß viele Listings in G veröffentlicht werden.
Um das Dilemma ein wenig zu umgehen, haben wir uns entschlossen, mehr Programme in OMIKRON.BASIC zu bringen, da man bei dieser Sprache davon ausgehen kann, daß sie jeder, der einen ST hat, auch besitzt - sie ist als Sprache beim Kaut dabe oder ansonsten für einen sehr geringen Preis zu beziehen. Von der von Ihnen angesprochenen Lösung der 'Datazeilen', also dem Abdrucken der eigentlichen Zahlen des Programmes. halten wir bei einem Rechner wie dem ATARI ST relativ wenig. Ein einigermaßen interessantes und verständliches Programm wird durch das Kompilieren inklusive Initialisierung derart lang, daß ein Eintippen der Zahlen nicht zu verantworten wäre (oder würden Sie 2 kBytes, was teilweise noch sehr untertrieben ist. Zahl für Zahl eintippen?). Auf der anderen Seite wurde uns bei ähnlichen Zahlenkolonnen schon ab und zu Seitenschinderei vorgeworfen, was auch irgendwo verständlich ist. Nebenbei, im folgenden Leserbrief finden Sie ein Listing, das kompiliert 6803 Bytes ergeben hat - der ST ist halt nicht sparsam bei Bytes. Die Methode der Programmcodeveröffentlichung hätte nur bei reinen Assemblerprogrammen Sinn, da hier die Zahlen im Vergleich zum eigentlichen Assemblertext noch kurz sind, aber trotzdem würden wir immer auch den Source-Text abdrucken. Langer Rede kurzer Sinn: Momentan sehen wir keine vernünftige Alternative zum reinen Abdrucken des Quelltextes und Herausgeben einer Monatsdiskette. Wir versuchen aber, einen großen Teil unserer Leser anzusprechen und somit auch ab zu mal eine nicht so bekannte Programmiersprache zu bringen. Einen kleinen Trost und Tip: Versuchen Sie mal. die C-, Modula 2- oder etc. -Programme zu lesen und in die Sprache Ihrer Wahl zu übersetzen. Sie werden merken, wie oft dies gut geht und daß Sie dabei viel lernen.
Seit einem etwa dreiviertel Jahr lerne ich als Autodidakt die Sprache C und komme mit ihr ganz gut zurecht. Ich vermisse aber in allen Lehrbüchern eine meiner Meinung nach auch für Anfänger sehr wichtige Erläuterung. Ein Buch zum Beispiel beschreibt auf ein paar Seiten sehr gut, wie man “C’est si bon” auf den Bildschirm ausgeben kann. Aber wie bekomme ich diesen schlichten Satz mit meinem Drucker auf ein Stück Papier? Darauf geht das Buch mit keiner Zeile ein. Das gilt auch für andere Bücher! Im C-Kurs in den ST-Computer-Heften 5/86 bis 9/86 ebenfalls Fehlanzeige. Das Handbuch für Drucker gibt auch nur Beispiele in BASIC mit LPRINT.
Für mich ist es lästig, daß ich -ich bin Hobby-Mathematiker -Ergebnisse mit 13 Nachkommastellen vom Bildschirm abschreiben muß. Meine Frage lautet daher: Mit welcher Befehlssequenz kann ich in der Sprache C meinen Drucker veranlassen, ein Wort auszudrucken?
H. Möller, Frankfurt
Red.: Die Tatsache, daß dies in den Büchern nicht erwähnt ist, ist wohl darin begründet, daß der Drucker nicht mehr zu STDIO (Standardein-/ausgabe) gehört, sondern hardwarespezifisch ist. Die erste Methode, die Sie im folgenden finden. funktioniert so, daß Sie Zahlenausgabe in einen String mit sprintf() umleiten und dann mit einer eigenen Routine prn_out() den String zeichenweise ausgeben.
Sicherlich wird man bei einem anderen Rechner aber keine Routine Cprnout finden. Die einzige Methode, die ich noch herausgefunden habe, ist die auf dem ANSl-Standard beruhende folgende Art. Sie ist in Turbo-C geschrieben und müßte daher auf allen ANS1-Cs funktionieren. Mit Laser-C funktioniert es jedenfalls nicht (hoffentlich bald, denn nach dem Source-Level-Debugger müßte ja Zeit für ANS1-C vorhanden sein)! In diesem Fall ist es möglich, eine Datei auf den Drucker zu öffnen, da im neuen Standard eine Datei mit Namen ‘prn:’, ‘com:' und ‘aux:’ direkt auf bestimmte Ausgabegeräte umgelenkt und nicht mit diesem Namen auf einem Laufwerk angelegt wird.
/**************************************************/
/* Druckerausgabe: hardwarespezifisch direkt */
/* übers BIOS -> Cprnout() */
/**************************************************y
#include <stdio.h> /* Standard-I/O */
#include <osbind.h> /* BIOS-Routinen */
void prn_out(char*); /* Funktionsdefinition */
void main()
{
int a=1; /* eine Variable */
float f=3.141592654; /* noch eine */
char mystring[20]; /* Ausgabestring */
sprintf(mystring,"%d %3.7f\n",a,f); /* Ausgabe in String */
prn_out(mystring); /* Druckerausgabe */
}
void prn_out(string) /* String als Übergabe */
char *string;
{
int i=0; /* Zähler*/
while(string[i]) /* bis zum Ende */
Cprnout(string[i++]); /* Zeichen ausgeben */
}
#include <stdio.h> /* Standard-Ein/Ausgabe */
#include <string.h> /* Stringbefehle */
void main()
{
FILE *fd2; /* Datei-Handle */
int a=1; /* 'ne Variable */
float f=3.141592654; /* PI */
char mystring[20]; /* String zum Ausgeben */
sprintf(mystring,"%d %3.7f\n",a,f); /* in den String */
fd2=fopen("prn:","w"); /* prn: ist Drucker */
fwrite(mystring,sizeof(char),strlen(mystring),fd2); /* Ausgabe */
fclose(fd2); /* Datei schließen */
}
Ich möchte in C einige der geschützten und ungeschützten Adressen (auch Bitvektoren) manipulieren. Die Poke-Befehle arbeiten im Supervisor-Modus nicht einwandfrei. Wie kann ich die Vektoren und Adressen beeinflussen? Wie werden Daten an einer bestimmten Adresse gespeichert?
Maximilian M., Erbach
Red.: Gerade C bietet sehr gute Möglichkeiten im Verändern von Adressen. Prinzipiell geht man folgendermaßen vor: Man definiert einen Zeiger auf den Datentyp (char, int...), auf den man zugreifen möchte, und weist diesem Zeiger über eine CAST-Operation (Erzwingen eines Typs) den Wert der Adresse zu, auf die man zugreifen möchte. Dann kann durch ‘*zeiger’ in den Zeiger etwas hineingeschrieben oder aus ihm herausgelesen werden. Möchten Sie auf geschützte Adressen zugreifen, muß sich der Prozessor im Supervisor-Modus befinden, was über den XBIOS-Befehl Super() möglich ist. Dieser wechselt durch Übergabe des Wertes OL in den Supervisor-Modus und gibt den aktuellen Stapelzeiger zurück. Der Supervisor-Modus wird durch ‘Super(stapelzeiger)’ wieder verlassen, wobei das Argument den alten Stapelzeiger wieder herstellt -deshalb hat man sich den alten Wert vom ersten Aufruf zu merken. Um Ihnen zu zeigen, wie dies praktisch geschieht, folgt dieser Erklärung ein kleines Listing, das in MEGAMAX Laser C erstellt wurde:
/* Megamax Laser C - Zugriff auf (reservierte) Speicherbereiche */
#include <osbind.h>
#define PHYSTOP 0x42eL /* Systemvariablen */
#define SEEKRATE 0x43eL
#define SSHIFTMD 0x44cL
main()
{
char *poi_l, val_l; /* Zeiger auf 1 Byte */
int *poi_2, val_2; /* Zeiger auf 2 Bytes, ein Wort */
long *poi_4, val_4; /* Zeiger auf 4 Bytes, ein Langwort */
long ssp; /* alter Stapelzeiger */
poi_1 = (char*) SSHIFTMD; /* Adreßzuweisung mit CAST-Operation */
poi_2 = (int*) SEEKRATE;
poi_4 = (long*) PHYSTOP;
ssp=Super(OL); /* In Supervisor-Modus schalten */
val_1=*poi_1;
val_2= *poi_2;
val_4= *poi_4;
Super(ssp); /* Zurückschalten */
printf("Modus; %d Seekrate; %d Phystop: %lx\n", val_l, val2, val_4);
Crawcin(); /* Auf Taste warten */
}
Ich habe folgendes Problem: Ich besitze seit zwei Jahren einen 260ST, der inzwischen auf 1 Megabyte aufgerüstet ist, und habe zu Weihnachten die Festplatte Megafile 20 bekommen. Im Handbuch der Festplatte war zu lesen, daß man das TOS im ROM haben muß, um die Festplatte ordnungsgemäß betreiben zu können. Da bei meiner Festplatte die Treiberdiskette fehlte, habe ich mir von einem Bekannten die Treibersoftware für die VORTEX HD Plus besorgt. Mit dieser Software ist es mir gelungen, obwohl ich das TOS von der Diskette lade, die Festplatte zu formatieren und zu bespielen. Bis jetzt habe ich keine Fehlfunktion bemerkt. Nun frage ich mich natürlich, welchen Sinn hat dann noch das TOS im ROM, und kann ich meine Festplatte kaputtmachen, wenn ich meinen Rechner nicht Umrüsten lasse?
Christian H., Hamburg
Red.: Ihre Festplatte können Sie, bezogen auf die Hardware, sicherlich nicht kaputtmachen, allerdings besitzt das RAM-TOS des ATAR1 ST an einigen Stellen noch Fehler, die sich beim Betrieb der Harddisk in Datenverlust bemerkbar machen können. Das bekannteste Problem ist, daß die Festplatte bei einer großen Anzahl von Ordnern auf einer Partition nicht mehr das tut, was sie soll. Der ATARI-Treiber schließt übrigens das RAM-TOS schlichtweg aus, in dem er beim Start abfragt, ob das ROM-TOS vorhanden ist - ist dies nicht Fall, so installiert er sich erst gar nicht. Zusammengefaßt kann man sagen, daß es sicherlich sinnvoll ist, die Festplatte nur mit ROM-TOS zu fahren. Wenn Sie möchten, können Sie auch warten, denn bald bringt ATARI das neueste TOS auf den Markt, das auch kompatibel zum neuen TT sein soll.
Ich bin Besitzer eines OKIDATA Microline 390, der, ebenso wie der NEC-P6, einen Zeilenvorschub von 1/360 Inch kennt, jedoch dafür einen anderen Steuercode als der P6 benutzt. Deshalb war bisher der Ausdruck über 360x360 im SIGNUM! 2-Druckertreiber nicht möglich. Ich habe nun die verantwortlichen Adressen im 24-Nadeltreiber herausgesucht und entsprechend gepatcht... Der Steuercode, der vorher für den P6 gesendet wurde, war hex 1C 33 und ist für den OKIDATA in hex 1B 5B umzuwandeln. Das BASIC-Programm, welches den PATCH-Vorgang ausführt, sieht folgendermaßen aus:
In der ersten Zeile ist der Pfad des Druckertreibers einzutragen. Sollte Ihr Drucker einen anderen Code verwenden, können Sie dies in der 3. und 5. Zeile ändern. Da ich nicht beurteilen kann, ob es verschiedene Druckertreiberversionen gibt, und weil unter Umständen beim Patchen etwas schiefgehen kann, sollte man vor dem Patchvorgang eine Sicherheitskopie an fertigen und mit dieser arbeiten. Damit dürfte einem noch besseren Ausdruck nichts mehr im Wege stehen.
Anmerkung der Redaktion:
Machen Sie sich vor dem Patchversuch auf jeden Fall eine Sicherheitskopie des Druckertreibers. Sollte Ihnen der Patch nicht gelingen, wenden Sie sich an Application Systems /// Heidelberg.
OPEN "I",#1,"A:\SIGNUM\PR24N.PRG" !Druckertreiberfile öffnen
SEEK #1, 10875 !Zeiger auf 1. Adresse positionieren
OUT #1, 27 !1. Steuercode patchen
SEEK #1, 10885 !Zeiger auf 2 Adresse positionieren
OUT #1,91 !2. Steuercode patchen
CLOSE #1