★ APPLICATIONS ★ DIVERS ★ Die zweite Möglichkeit für DIN.COM ★![]() |
COMDIN (Computer Schau) | Applications Divers |
Wolfgang Gentzsch, der Programmautor des vorhergehenden Artikels hat mit seinem Programm bestimmt vielen Lesern einen Gefallen getan. Schwierigkeiten der Erzeugung von DIN.COM können aber bei CPC-Besitzem auftreten, die bisher noch wenig mit CP/M gearbeitet haben aber trotzdem dieses File abspeichem wollen. Deshalb hat ComputerSchau mal wieder in die Trickkiste gegriffen. Erzeugen wir dieses File doch einfach von Basic aus. Etwas „untertrieben” habe ich in obigen Vorspann. Denn mit Basic alleine schafft man es auch noch nicht so ohne weiteres. Aber mit dem, von den Grundlagenartikeln schon bekannten Maschinenprogramm SECTOR klappt es, wenn man etwas trickst, ganz hervorragend. Dazu braucht man nun kein Textverarbeitungsprogramm und auch nicht den unkomfortablen CP/M-Editor sondern das erzeugende Programm ist ein normales Basiclisting. Aber mit ein paar kleinen Tricks, die es in sich haben. Wie Ihnen sicherlich bekannt ist, kann man Maschinenprogramme als sogenannte Datastatements in Basicprogrammen ablegen und durch den Programmlauf in die entsprechenden Speicherstellen po-ken. Ist dieser Vorgang beendet, dann können die Maschinenprogramme auch als Binärfile abgespeichert und von den Basicprogrammen eingelesen werden. Der Header ist das Problem Mit einem Programm vom Typ .COM ist dies aber nicht so ohne weiteres möglich. Versuchen Sie ruhig einmal ein COM-File als Binärfile zu laden, es geht nicht. Erinnern Sie sich noch an das Problem des Lesers, der Eproms brennen wollte? Der Grund dieser Tatsache ist, daß bei Binärfiles nicht nur der reine Maschinencode auf der Disk abgelegt wird, sondern diesem ein Header, also ein Vorspann (mit Informationen für den CPC selbst) voran-slehr. COM-Files dagegen sind „headerlos ”. Es ist nun aber nicht möglich, mit den normalen Befehlen für den Abspeichervorgang headerlose Files mit dem Extend COM zu erzeugen. Deshalb müssen wir einen direkten Diskettenzugriff durchführen. Dieser Zugriff ist wie Ihnen schon bekannt mit SECTOR möglich. Was ist also alles zu tun, um mittels dieser Maschinenroutine das gewünschte File zu erzeugen? Nun als erstes brauchen wir zunächst einmal die Daten von DIN-.COM. Dies habe ich für Sie schon erledigt, indem ich mittels einer modifizierten Version des Programmes READER, die Daten in den Bereich ab &9000 eingelesen hatte. Die Daten von DIN.COM standen nun im Speicher. Vorher hatte ich mir aber den Fileeintrag dieses Programmes näher angesehen und festgestellt, daß drei Records für ihn benötigt werden. Dies bedeutete, daß ein Sector für das Programm ausreicht. Nachdem ich die Daten im Speicher hatte, nahm ich meinen DATA-Generator und ließ mir ein Datalisting zeigen. Eine Generierung von DIN.COM ist damit aber noch nicht möglich, denn beim Abspeichern als Binärfile hat man wieder den Header, an dem sich CP/M „verschluckt ”. Also muß ein anderer Weg gegangen werden. Bitte Listing ansehen Um dies nun detailliert aufzuzeigen, sollten Sie sich beim Lesen des nun folgenden auch immer wieder das Listing COMDIN betrachten. In den Zeilen bis 150 steht nichts außergewöhnliches. Diese Zeilen dürften für Sie „Klartext” sein. Die Zeilen 160 und 170 dienen dazu, Sie darauf aufmerksam zu machen, daß Sie eine Diskette im Systemformat einlegen sollen, denn unter CP/M können Sie mit Data-only-Disketten wenig anfangen. Und nun kommen bereits die ersten Tricks in den Zeilen 180 bis 210. Durch OPENOUT” din.com” und den nachfolgenden Print befehlen wird dafür gesorgt, daß ein Eintrag dieses Namens ins Inhaltsverzeichnis der Diskette erfolgt und auch irgendwelche Zeichen in das eigentliche File geschrieben werden. Der Schreibvorgang ist erforderlich, damit im Fileeintrag auch die gewünschte Recordlänge steht. Ist dieser nämlich niedriger, dann wird später zu wenig gelesen und der CPC stürzt ab. Eine direkte Manipulation im Inhaltsverzeichnis wäre umständlicher gewesen, deshalb dieser kleine „Dreh ”. Anschließend wird das File korrekt geschlossen. Nun wird schon wieder getrickst. Um nämlich nachher zu wissen, auf welchen Sektor und auf welche Spur wir die Daten direkt schreiben müssen, ist es nötig diese Informationen zu kennen. Durch „öffnen” des Files aber erfahren wir dies. Ab der Speicherstelle &A719 und den folgenden stehen nämlich die Blocknummern des eröffneten Files. Da wir nur einen Sektor haben, können wir nun die Blocknummer aus dieser Speicherstelle abholen. Durch Zeile 210 wird diese Blocknummer in Track und Sector umgerechnet. In der Formel zur Umrechnung weist die Zahl 18 daraufhin, daß bei CP/M zwei Spuren ä 9 Sektoren reserviert sind. Der Befehl MOD wird vielen 464-Besitzern unbekannt sein. Er ist in deren Handbuch nicht erwähnt, aber trotzdem vorhanden. Er bewirkt, daß ein gerundeter Rest (Modulo) bei einer Teilung von Dividend durch Divisor gebildet wird. (Werfen Sie doch mal einen Blick in ein 664- oder 6128-Handbuch!) Damit wissen wir nun, wohin wir mit den Daten für unsere deutsche Tastatur unter CP/ M müssen. Nun werden die Daten aus den Datazeilen gelesen und in den ab &9000 reservierten Buffer abgelegt. Der Rest wird dann durch die bekannte Maschinenroutine erledigt, nachdem vorher die entsprechenden Werte für den Befehl usw. übergeben wurden. Das heißt diesen Teil kennen Sie ja schon. Am Ende des Programmlaufes steht das fertige Programm auf der Diskette. Wie Sie sehen, es ist vieles machbar, wenn man den CPC etwas genauer kennt. Lothar Miedel , Computer-Schau
|