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