Magic Disk 64

home to index to text: MD8907-UTILITIES-6.1.txt

Willkommen zu den Utilities der Juli-Ausgabe !
Auf die Juliausgabe haben wir für Sie diesmal 4 Superutilities gepackt, die es auch im Sommermonat Juli anzutesten lohnt! Voila:

  THE MAGIC WRITER            Seite 03 - 06          
  DISK DATEI                  Seite 07 - 13          

BASIC TEXTER Seite 14

  THE MDG-PACKER/LINKER       Seite 15 - 28          

Mit dem MAGIC WRITER können Sie in Zukunft auf professionelle Weise mit Ihren Freunden komunizieren.
" Mist, wo war noch mal TANK ACTION drauf?"- über Probleme dieser Art werden Sie mit der DISK DATEI nur noch lachen . . .
TippEx ade; der BASIC TEXTER hilft Ihnen, Ihre Mitteilungen einfach, schnell und fehlerUNfreundlich an- zufertigen . . .
THE MDG-PACKER/ LINKER packt Ihre Daten in besonders " linker" und platzsparender Weise . . .
Soweit die Anwenderprogramme der Juli-Ausgabe. Wir wünschen Ihnen schönes Wetter und, falls Sie in den Urlaub fahren, viel Erholung.

                                  Die Redaktion      
THE MAGIC WRITER                                     

Ein wahrhaft " magischer Schreiberling" liegt Ihnen mit diesem Utility vor, der sich durch sehr einfache Handhabung und Unkompliziertheit auszeichnet.
Kommen wir deshalb auch ( unkompliziert wie wir sind!) auch sofort zur Bedienungsanleitung:
a) DER EDITIERMODUS Formulieren Sie, frei von der Leber ( oder auch dem Herzen!) weg, die Zeilen, die Sie Ihren Lieben mitteilen möchten und achten Sie auf richtige Kommasetzung! Um wichtige Textpassagen herauszuarbeiten, besitzen Sie eine Art Textmarker, den Sie mit F5 oder mit > SHIFT< aktivieren können. Der Text erscheint dann reversblinkend auf dem Bildschirm.
Bevor Sie nun den Editiermodus dürfen Sie nicht vergessen, an die linke obere Bildschirmecke auf der letzten Seite ( kompliziert, nicht? !) einen" Klammeraffen" zu positionieren, da der Rechner sonst nie zum Ende kommt.
Den direkten Editiermodus ( Schreibmodus) verlassen Sie mit F7 ; mit +/- blättern Sie vor/ zurück.
b) SOUNDS Damit Ihre geschriebenen Zeilen auch die richtige Wirkung beim Empfänger erzielen ( bei unseren Briefen an LYNN, die Schönheit aus dem Nachbarhaus, wählen wir immer " Love Me Do" . . .), haben Sie natürlich auch bei dem MAGIC WRITER die Möglichkeit, einen passenden Sound auszuwählen. Die Programmierer des Programms haben sich natürlich nicht lumpen lassen und einige Musikstücke gleich mitgeliefert . . .
KOMMT NOCH WAS . . . F1 DRÜCKEN!
c) CHARSET Beim Zeichensatz scheiden sich normalerweise die Geister, also geben wir Ihnen die Möglichkeit, Ihren eigenen ( oder auch geklauten!) Zeichensatz zu verwenden. Da wir Sie nicht zu einem gemeinen Dieb abstempeln wollen, befinden sich auf dieser Diskette gleich mehrere Zeichensätze.
Achten Sie bitte bei der Verwendung von eigenen Zeichensätzen darauf, daß dieser im Speicherbereich von $2800 bis $2 a00 liegt.
d) COLOUR Dieses Menü gliedert sich so problemlos, daß auf eine ellenlange Anleitung verzichtet werden kann.
Nachdem Sie Ihren Brief fertiggeschrieben und abgespeichert haben, empfiehlt es sich, diesen zu packen ( siehe MDG-Packer/ Linker!) . Die dazu erforderlichen Werte lauten:

              Hex $37; 0810                          
              Dez 55; SYS 2064                       

Übrigens: Vergessen Sie auf keinen Fall, Ihren fertig geschriebenen Brief ausreichend zu frankieren . . .

                             Oliver Menne/Stefan Gnad
DISK DATEI                                           

Bei Disk Datei handelt es sich, wie es der Name schon verrät, um ein Dateiprogramm. Hier die Funktionen:
a) DISKETTE EINLESEN Die sich auf der Diskette befindenden Programmnamen werden in den Speicher eingelesen.
- Alle Files einlesen:
Der Rechner liest ( ohne Kompromisse!) die sich auf der Diskette befindlichen Files.
- Files einzeln einlesen:
Der Rechner fragt Sie, ob Sie ein bestimmtes Programm in Ihre Liste aufnehmen wollen, oder nicht ( wie herzlos!) . Die Auswahl treffen Sie mit J/ N.
- Zurück zum Menü:
" Was gibt es heute als Vorspeise?" b) DATEN EDITIEREN - Daten ändern:
Sie können den gewünschten Datensatz mit +/- aussuchen und mit >*< auswählen. Nun erscheint ein Pfeil unter eben diesen Datensatz, der mit > CRSRlinks< bewegt werden kann. Nachdem Sie mit > RETURN< den Datensatz editiert haben, gelangen Sie mit > M< wieder zurück ins Editiermenü.
- Daten erweitern:
Sollten Sie einen Datensatz vergessen haben, so ist das kein Problem; mit diesem Menüpunkt können Sie die Liste um einen Eintrag erweitern.
- Einzeln löschen:
Der zu löschende Datensatz wird wie bei " Daten ändern" ausgewählt und mit >*< gelöscht. Mit der > M<- Taste gelangen Sie ( immer noch) zurück ins Menü.
- Block löschen:
Mit diesem Menüpunkt sind Sie in der Lage, ganze Blöcke zu löschen. Es müssen Startund Endpunkt eingegeben werden.
- Zurück zum Menü:
" Was gibt es heute als Hauptgericht?" c) DATEN SORTIEREN - Nach Namen:
Der Rechner sortiert die Datensätze nach dem gemeingültigen und aus der Grundschule bekannten Alphabet.
- Nach Blöcken:
Der Rechner sortiert die Datensätze nach den, auf der Diskette benötigten Blöcken.
- Nach ID:
Der Rechner sortiert die Datensätze nach der ID-Nummer der zum Programm gehörigen Diskette.
- Zurück ins Menü " Sind Sie jetzt schon satt?"" Was, Sie wollen noch was zum Essen? !""' Hungrig', ich verstehe immer ' Hungrig' !"" Bevor ich Ihnen jetzt noch einen Schweinebraten bringe, drücken Sie bitte F1 !" d) DATEN AUFLISTEN - Ausgabe auf Drucker:
Die Datensätze werden in drei Spalten pro Zeile auf dem Drucker ( soweit vorhanden!) ausgegeben. Die dazugehörige Titelzeile kann sowohl editiert als auch abgespeichert werden.
- Ausgabe auf Bildschirm:
Die Datensätze werden auf dem Monitor ( soweit vorhanden!) ausgegeben. Mit +/- kann vorbzw. zurückgeblättert werden; mit > RETURN< gelangen Sie zurück ins Menü.
- Zurück zum Menü:
" So, der zweite Schweinebraten, Sie Freßsack!" e) DATEN ABSPEICHERN Mit diesem Befehl speichern Sie die Datei auf Diskette ab.
f) DATEN LADEN - Liste erweitern:
Die sich bereits im Speicher befindenden Daten werden um eine Datei erweitert.
- Neue Liste laden:
Die sich im Speicher befindenden Daten werden gelöscht, und eine neue Datei wird geladen.
- Zurück zum Menü:
" Was haben Sie denn so als Nachspeise anzubieten, Herr Ober?"" Was, Nachspeise auch noch? ! BATSCH!" g) DIRECTORY - Der Disketteninhalt ( und damit Ihr Werk!) wird Ihnen vor Augen geführt.
So, Anleitung fertig -" Herr Ober, bitte zwei kühle Bier . . . !"

                            Oliver Menne/Stefan Gnad 
BASIC TEXTER                                         

Was schrieb Ludwig der 16 . an dem Tag, als das Volk in Paris gerade die Bastille erstürmt hatte, noch in sein Tagebuch?" Rien"," nichts" . Damit beschrieb das ( sich zu diesem Zeitpunkt noch auf dem dazugehörenden Hals befindliche) gekrönte Haupt die Ereignisse des vergangenen Tages aus seiner Sicht: Tote Hose, die Luft raus, stinklangweilig!
Wenn wir diese Anleitung, ganz in französicher Tradition, mit " Rien" beginnen und gleichzeitig abschließen, so heißt das natürlich nicht, daß BASIC TEXTER nichts bietet ( dann wäre es ja auch nicht auf der Magic Disk . . . !), sondern daß das Programm mehr als denkbar einfach zu bedienen ist. In diesem Sinne:
" RIEN"

                             Oliver Menne/Stefan Gnad
THE MDG PACKER/LINKER                                

Der " MDG Packer/ Linker" ist ein unverzichtbares Werkzeug für das Packen, Linken und Verlegen von Programmen. Der Packer arbeitet mit einem einfachen " Bytepress"- Algorithmus, d. h. mehr als drei aufeinanderfolgende gleiche Bytes werden zu einem drei-Byte Code zusammengefaßt. Der Linker ermöglicht das Zusammenfassen von mehreren Teilprogrammen, zu einer einzigen Datei auf Diskette. Beim Starten dieser Datei werden dann die einzelnen Programmteile im Speicher genau so verschoben, als hätte man die Einzeldateien alle nacheinander von Diskette eingeladen. Die Fähigkeit des Verlegens von Programmen äußert sich darin, daß das gepackte und gelinkte Programm in einen beliebig wählbaren Speicherbereich gelegt werden kann. Darüberhinaus können Programme mit einer einfachen Schutzkodierung versehen werden. Auch " Levelcrunching", das Packen von Programmteilen, die nachgeladen werden, ist realisierbar. Der " MDG Packer/ Linker" packt alle Programme, die im gepackten Zustand ( !) nicht mehr als ca.230 Blöcke auf Diskette belegen. Nahezu alle den Packund Linkvorgang betreffende Parameter können eingestellt werden, damit das Programm flexibel einsetzbar ist. Dabei wurde Wert darauf gelegt, daß stets Defaultwerte vorgegeben sind, so wird der Benutzer nicht mit einem Parameterwust alleingelassen. Die bislang existierenden Packer benutzen beim Entpacken zumeist den gesamten Speicher des C64, da sie das zu entpackende Programm zunächst an das Ende des Speichers verschieben. Ihre Entpackroutine ist oft leider nicht Geschwindigkeitsoptimiert, wodurch die Programme dann langsamer entpackt werden, als ein schneller Floppyspeeder sie einladen könnte. Der " MDG Packer/ Linker" hingegen entpackt selbst das längste Programm in maximal zwei bis drei Sekunden. Der Speicher wird dabei nicht weiter verwüstet, als unbedingt notwendig.
Anwendungsbereiche:
Dies klingt für jemanden der bislang noch nicht mit einem Packer oder Linker gearbeitet hat, alles sehr abstrakt. Betrachten wir daher zunächst einige mögliche Anwendungen für den " MDG PACKER/ Linker" :
Basicprogramme enthalten manchmal Maschinenprogramme oder Grafikdaten in Form von Datazeilen. Da das Lesen und POKEn der Daten qualvoll lange dauert, bietet es sich an, die Speicherbereiche, die in den Datazeilen abgelegt sind, mit einem Monitor abzuspeichern, und dann mit dem " MDG Packer/ Linker" mit dem Basicprogramm zu verbinden.
Der Maschinenprogrammierer hat ein Programm oft in Form von mehreren Objektcodes oder Datenfiles auf Diskette abgelegt, die beim Starten des Programms von einem Ladeprogramm eingelesen werden. Während der Programmentwicklung ist dies sehr hilfreich. Einmal fertiggestellt, ist das Programm jedoch einfacher zu handhaben, wenn es nur noch als eine einzige Datei auf Diskette gespeichert ist. Folglich bietet es sich an, die Einzelfiles " aneinanderzuhängen", und nach dem Einladen - Einzelfile für Einzeilfile - an ihren Zielspeicherbereich zu kopieren. Genau diese Aufgabe erledigt der " MDG Packer/ Linker" .
Bei Programmen, die mit SYS ( ADRESSE) gestartet werden, wie z. B. Monitore, vergißt man oft die Start- adresse. Mit dem " MDG Packer/ Linker" können diese in mit RUN startbare Programme verwandelt werden.
Nach RUN wird das Programm dann an seine ursprüngliche Adresse verschoben, und automatisch der Befehl SYS ( ADRESSE) ausgeführt.
Eine Reihe von Programmen, die sich nacheinander aufrufen, z. B. Teile eines Demos, die aber alle im gleichen Speicherbereich, z. B. ab $0801, laufen, sollen in einem Programm zusammengefaßt werden. Dies ist normalerweise eine aufwendige Arbeit, da viele Verschieberoutinen programmiert werden müssen, wobei Fehler unterlaufen können. Mit dem " MDG Packer/ Linker" würde man zunächst die einzelnen Teile an freie Speicherbereiche verlegen. Beim Aufruf wird der jeweilige Demoteil dann nach $0801 kopiert und gestartet. Die einzelnen Files, die nun alle an verschiedenen Adressen liegen, müßten Sie nur noch zusammenlinken.
Schließlich können auch noch Levels gepackt werden, damit weniger Diskettenspeicher belegt wird. Programmteile, die nachgeladen werden, werden dabei zunächst gepackt eingeladen, und dann mit einem Befehl, der in das Hauptprogramm eingefügt werden muß, entpackt.
Die Bedienung des Packers/ Linkers:
Das Programm wird mit LOAD" MDGPACKER/ LINKER",8 geladen, und mit RUN gestartet. Die Titelmeldung des Programms erscheint, gefolgt von der Aufforderung, einen Dateinamen einzugeben:
. . . ENTER FILENAME:($ FOR CATALOG RETURN TO SAVE) Geben Sie nun den Namen ein, unter dem das Programm, das bearbeitet werden soll, auf Diskette gespeichert ist. Die Cursortasten sowie die Tasten INST, DEL, CLR und HOME dürfen dabei benutzt werden. Bei Eingabe eines Dollar-Zeichens wird das Inhaltsverzeichnis der Diskette gelistet. Anschließend gelangen Sie zur Namenseingabe zurück. Wenn mehrere Programme zusammengefaßt werden sollen, muß der Name des ersten Files eingegeben werden. Die anderen Programmteile werden später abgefragt. Die Reihenfolge richtet sich nach den Startadressen der Einzelprogramme ( das File mit der niedrigsten Startadresse muß zuerst eingegeben werden) . Nach der Eingabe des Filenamens gibt der Packer folgenden Text aus: WHILE REPACKING $01 IS:$30 Hier können Sie den Inhalt von Speicherstelle 1 während des Entpackens des Files bestimmen. Der hexadezimale Wert $30 ist als Defaultwert vorgegeben.
Er kann in der Regel übernommen werden. Drücken Sie hierzu einfach RETURN. Wenn die Entpackten Daten in den I/ O-Bereich ab $ D000 geschrieben werden sollen, muß die Vorgabe $30 durch den Wert $35 ersetzt werden. Dies ist z. B. nötig, wenn Sie den Inhalt des Farbspeichers direkt einladen wollen.
Als nächstes erscheint die Frage:
REPACK CODE TO ADDRESS:$ XXXX Anstelle von $ XXXX wird stets die Startadresse des jeweiligen Files auf Diskette ausgegeben. Die hier einzugebende Adresse bestimmt, ab welcher Speicherstelle der Entpacker den Code ablegen wird. Durch überschreiben können Sie eine von der ursprünglichen Adresse abweichende Speicherstelle wählen. Wenn der eingegebene Wert nicht angenommen wird, wurde zuvor schon ein File mit einer höheren Endadresse, als die aktuelle Startadresse eingelesen. Dies kann Probleme beim Entpacken verursachen und ist nur im Bereich oberhalb von $ D000 gestattet, damit sowohl in den I/ O Bereich, als auch in den darunterliegenden Rambereich entpackt werden kann. Wenn Ihre Adresse nicht angenommen wird, start- en Sie den " MDG Packer/ Linker" neu. Geben Sie die Files nun in der richtigen Reihenfolge ein. Der " MDG PACKER/ LINKER" gibt nun die Endadresse des Codes im Speicher aus, und beginnt mit der Arbeit. Nach kurzer Zeit erscheint:
FILE LENGTH ( BYTES) :$ XXXX PACKERCODE ( BYTES) :$ XXXX und eventuell: RETRY USING BEST CRUNCHBYTE ($ XX) ?
Die Hexzahl nach " FILE LENGTH" ist die ursprüngliche Länge der Datei." PACKERCODE" ist die neue Länge des aktuellen Codes. Diese entspricht noch nicht der neuen Filelänge, da das Programm noch um ca.200 Bytes ( dezimal) für die Entpackroutine wächst.
Die Frage " RETRY USING BEST CRUNCHBYTE?" erscheint, wenn der " MDG PACKER/ LINKER" nachträglich bemerkt, daß ein anderes Kennbyte zur Markierung von Bytefolgen günstiger gewesen wäre, als der vorgegebene Erfahrungswert $ CB. Wenn Sie hier " Y" eingeben, wird das File erneut gepackt, wobei dann meist noch ein paar Bytes eingespart werden können. Nun wird wieder die Ihnen schon bekannte Frage nach dem Filenamen ausgegeben. Es können noch beliebig viele weitere Files hinzugelinkt werden. Nach der Eingabe des letzten Files drücken Sie bei der Namenseingabe ein- fach nur RETURN. Damit wird dem Linker mitgeteilt, daß die eingelesenen Daten nun abgespeichert werden sollen. Bevor das Zielfile geschrieben werden kann müssen Sie noch einige Fragen beantworten:

DESTINATION FILE'S ADRESS: $0801                     

Hier bestimmen Sie die Startadresse des gepackten Programms. Mit dieser Eingabe können Sie das Programm also an eine beliebige Adresse verlegen.
Als Defaultwert ist $0801, der Start des Basicspeichers vorgegeben. Falls das Entpacken des Programms später mit RUN gestartet werden soll, drücken Sie RETURN. Falls Levels oder generell Programmteile, die nachgeladen werden, gepackt werden sollen, oder das gepackte Programm, aus welchen Gründen auch immer, an einer abweichenden Adresse stehen sollen, so überschreiben Sie den alten Wert. In diesem Fall läßt sich das Entpacken nicht mehr mit RUN starten. Der Befehl zum Starten des Entpackungsvorganges lautet dann SYS ( ADRESSE) bzw. JSR oder JMP STARTADRESSE, wenn der Aufruf in einem Maschinenprogramm stattfindet.
Das Programm kann aber auch dann mit JSR/ JMP( STARTADRESSE) entpackt werden, wenn die START-ADRESSE $0801 ist. In diesem Fall darf das Programm aber nicht von Basic aus mit LOAD geladen werden, das das anschließende Neusetzen der Basic-Linkzeiger den Sprungbefehl am Anfang des Programms löschen würde.
Die nächste einzustellende Adresse betrifft den Speicherbereich, der für die Entpackroutine gewählt werden soll. Diese Rountine steht zunächst am Anfang des gepackten Programms. Sie kopiert sich dann an die hier gewählte Adresse: REPACKERS MEMORY ADRESS:$0100 Als Defaultwert ist $0100 vorgegeben. Sie können eine andere Adresse einstellen, falls dieser Speicherbereich schon genutzt wird. Der Entpacker benutzt übrigens die Zeropage-Speicherstellen $2 d/$2 e und $ ae/$ af.$ ae/$ af zeigt nach dem Entpacken auf die Speicherstelle, die auf das letzte entpackte Byte folgt.
Nun gibt der PACKER die höchste, während des Entpackens benutzte Speicherstelle aus:

WHILE REPACKING MEMORY WILL BE USED UP TO $XXXX      

Anders als bei vielen anderen Packern wird der Code vor dem Entpacken nicht bis an das Ende des Sperichers verschoben, sondern nur so weit nach oben, wie unbedingt notwendig. Falls keine Verschiebung nötig ist, weil sich Qellund Zielbereich beim Entpacken nicht überlappen, wird diese Meldung nicht ausgegeben. Die nächsten beiden Fragen betreffen die Vorgehensweise nach dem Entpacken:

JUMP-IN ADRESS: (RTS TO RETURN  RUN TO  START  BASIC)
($)XXXX                                              
AFTER REPACKING $01 IS: $YY                          

Bei XXXX geben Sie entweder eine Adresse ein, zu der nach dem Entpacken gesprungen werden soll, oder das 6502- Mnemnonic " RTS", um die Instruktion RTS auszuführen, oder " RUN", um ein Basicprogramm zu starten.
Als Defaultwert ist hier entweder " RUN", oder eine Adresse vorgegeben, abhängig von den zuvor eingeladenen Programmfiles.
Falls hier " RUN" gewählt wird, springt der Entpacker vor dem Starten des Programms noch die Betriebssystemsroutine $ a533 an, die das Neusetzen der Basic-Links bewirkt. Dies wird normalerweise beim LOAD-Befehl automatisch gemacht, blieb aber beim La- den des gepackten Files ohne Einfluß auf den gepackten Basiccode.
$ YY bestimmt den Zustand von Speicherstelle 1, bevor obige Instuktion ausgeführt wird. Der vorgegebene Wert ist von der eingegebenen Einsprungadresse abhängig und kann in der Regel übernommen werden.
Das I-Flag des Prozessors wird übrigens während des Entpackens gestetzt. Nachher wird es gelöscht, wenn $ YY so gewählt wird, daß Kernal-Rom und I/ O-Chips eingeblendet sind.
Die Adresse die nun eingegeben werden muß, ist nur für Basicprogramme von Bedeutung:

POINTER $2d/$2e IS: $XXXX                            

Wenn sich ein Basicprogramm im Speicher befindet, muß der Zeiger $2 d/$2 e auf den Beginn des Variablenspeichers zeigen. Als Defaultwert wird hier das Ende eines eingelinkten Files mit der Startadresse $0801 vorgegeben, falls ein solches File existiert.
Der vorgebene Wert muß in der Regel nur verändert werden, wenn ein Basic-Hauptprgramm den PACKER als Levelcruncher benutzt. In diesem Fall muß die Endadresse des Basicprogramms+1 eingeben werden.
Die vorletzte Einstellung betrifft eine einfache Kodierung des Zielprogramms, die es z. B. unmöglich macht, mit einem Diskmonitor Texte innerhalb des Programms zu finden und zu verändern.
SIMPLE CODELOCK ?
Wenn eine solche Kodierung gewünscht wird, muß hier " Y" für " YES" eingegeben werden.
Nun fehlt nur noch eines der neuer Filename:

DESTINATION FILENAME: ($ FOR CATALOG)                

Die Eingabe eines Dollar-Zeichens listet wieder das Directory. Wenn Sie nun einen Dateinamen eingeben, wird das gepackte und gelinkte Programm unter diesem Namen gespeichert.
Wird die STOP-TASTE gedrückt, während das Programm auf eine Eingabe wartet, gelangt man wieder in die Dateinamen-Eingabezeile. Alle schon komplett eingelinkten Files bleiben dabei erhalten. STOP-RESTORE beendet das Programm. ABER VORSICHT: STOP-RESTORE sollte nicht gedrückt werden, wenn Diskzugriffe ausgeführt werden, sonst könnte der Rechner abstürzen.
Bei einem Neustart mit RUN sind alle zuvor eingelesenen Daten wieder gerlöscht.
Falls irgendwelche Probleme auftreten, hält der PACKER folgende Fehlermeldungen für Sie bereit:

- NO FILES TO LINK: Diese  Meldung  wird  ausgegeben,
                    wenn  noch  keine  Files  geladen
                    worden  sind,  und  abgespeichert
                    werden soll.                     

- DISK ERROR: Diskettenfehler - CAN' T REPACK: Der PACKER verarbeitet keine Programme die bis ganz an das Ende des Speichers entpackt werden sollen, falls sich Quellund Zielbereich

                überlagern.   Zwischen   Speicherende
                und Fileende müssen dann noch  einige
                Bytes freibleiben.                   

- OUT OF MEMORY: Ein File würde beim Entpacken über das Speicherende hinausgeschrieben werden, oder der gesamte gepackte CODE ist länger als ca.230 Blocks.
- EMPTY FILE: Es soll ein Fiel eingelinkt werden, das keine Daten enthält.
Fröhliches einund wieder auspacken wünschen

                            Oliver Menne/Stefan Gnad 

Valid HTML 4.0 Transitional Valid CSS!