SOURCGEN Re-assembler for Atari 800 XL

ATARI HOME
Introduction
Definitions
Disk Contents
Starting SOURCGEN
Symbol-Table & Editor
Generating Source Code
- from an SMB file
- for the ATARI OS
Creating SMB files
The Function Keys
The Functions A - U
A. ADDR/symb search
B. BYTE-change
C. CODE-search
D. DELETE symbols
E. EDIT
F. FILE
G. GO
H. HEAD
I. INDEX
J. JUNK?
K. KEY (0..9)
L. LIST symbols
M. MINIMUM-label
N. NEW
O. OBTAIN symbols
P. PREPARE labels
Q. QUIT (1)
R. RE-ADDRESS
S. SAVE symbols
T. TRACE
U. UTILITY (V. 3.2)
Die Fram-Disk
Output Menu
Fehlermeldungen
Referenzkarte
Neu im V.3.2

Neu in SOURCGEN V. 3.2

SOURCGEN V.3 benötigt einen XL- oder XE-ATARI.
Hier zunächst ist eine Aufzählung der wichtigsten Neuigkeiten:

  • Ramdisk mit Benutzung der freien Speicher unter dem Betriebssystem. Diese ist auch für diejenigen interessant, die nicht mit SOURCGEN arbeiten.
  • Die Möglichkeit beliebige Befehle zusammenzuknüpfen und als einziges Befehl ausführen zu lassen. Eine eingegebene Befehlsfolge kann durch einem einzigen Tastendruck wiederholt werden.
  • Automatisches Erkennen von Double-Density-Diskettenformaten unter TURBO-DOS und somit auch die Unterstützung von 256K Ramdisks.
  • Jegliche Art Diskettenfile kann gelesen werden. (SOURCGEN Version 2.01 liest nur Load-Files.)
  • Schnelle Suchfunktion.

Die Fram-disk: nicht nur für SOURCGEN User

Wer ohne Ramdisk mit dem SOURCGEN Reassembler arbeitet, weiß wie dieses Programm seinen Diskettenlaufwerk beanspruchen kann. Wird von SOURCGEN ein Quelltext zu einem Diskettenfile erzeugt und den Text gleichzeitig auf die gleiche Diskette geschrieben, so muss sich der Schreib-Lesekopf des Laufwerks wiederholt von einem File zu dem anderen hin und her bewegen. Aber auch mancher Ramdiskbesitzer wird sich darüber geärgert haben, dass ein File unbedingt als ein einziges zusammenhängendes Block auf der Diskette bzw. in der Ramdisk gespeichert werden muss bevor SOURCGEN auf das File zugreifen kann. So ist man manchmal gezwungen vor der Arbeit das File erst auf eine leere Diskette zu kopieren. Oder es müssen ein oder mehrere Files von der Ramdisk gelöscht und das File, das man bearbeiten möchte, neu in die Ramdisk kopiert werden.

Es lag also nah die für SOURCGEN maßgeschneidete Ramdisk "FDISK" zu schreiben, die den freien Speicher unter dem XL-Betriebssystem ausnutzt. Das sind 14K in jedem XL- und XE-Gerät die wegen ihre Unzugänglichkeit meist unbenutzt bleiben. Der Klarheit wegen nennen wir ab dieser Stelle die von FDISK erzeugte Ramdisk
die "F-Ramdisk".
FDISK wurde sehr kurz und einfach gehalten. Die F-Ramdisk wird mit "F:" in gleicher Weise wie eine Diskettenstation angesprochen. Sie kann nur ein einziges File beinhalten. Deshalb braucht das File ausser "F:" auch keinen Namen. (Im DUP des TURBODOS müssen Sie jedoch einen beliebigen Namen angeben.)
Das Kopieren eines Files in die "F-Ramdisk" löscht den vorherigen Inhalt.
Ferner wurde FDISK so geschrieben, dass sie nicht nur für SOURCGEN User brauchbar ist. Sie ist ein eigenständiges Programm und kann daher auch vom DUP des DOS 2.x oder TURBODOS und von anderen Programmen angesprochen werden.

FDISK enthält die wichtigsten Routinen, die bei diskettenorientierten Programmen benötigt werden. Diese sind die Routinen OPEN, CLOSE, GETBYTE, PUTBYTE, NOTE und POINT.

FDISK belegt die Speicheradressen $540 bis $573 und $600 bis $6FF.

Unter SOURCGEN ist die F-Ramdisk gegenüber der <RESET>-Taste unempfindlich. Ansonsten muss die F-Ramdisk nach einem Reset mit einem Sprung durch $600 (JSR $600) neu inizialisiert werden. Der Inhalt der F-Ramdisk bleibt dabei jedoch erhalten.

Wenn Sie ohne SOURCGEN die F-Ramdisk benutzen wollen, brauchen Sie nur das File FDISK zu laden. Schon ist der F-Ramdisk initiallisiert!


Ein neuer Menu-Punkt für SOURCGEN

Beim Laden von SOURCGEN V.3 erscheint jetzt der neue Menupunkt U. UTILITY.

Die U. UTILITY f-Funktion dient zwei verschiedene Zwecke:

  • das Eingeben einer beliebigen Verknüpfung von Befehlen.
  • die Verwaltung der F-Ramdisk

Befehlsketten

Nach dem Drücken der <U>-Taste können Sie unter Beachtung folgender Syntax eine beliebige Folge gültiger Befehle eingeben:

/;<BEFEHLSFOLGE>

Nach der Eingabe kann durch Betätigung der <@>-Taste (<SHIFT-8>) die Befehlsfolge beliebig oft ausgeführt werden.

Die Eingabe

/;FD:FDISK^OD:FDISK^P540^H540 6FE/F:

erledigt z.B. in einem Schwung die folgende Aufgaben:

Das File "FDISK" wird geöffnet.
Das zugehörige Symbolfile wird in den Speicher geladen.
SOURCGEN bereitet die Labels vor.
Der fertige Quelltext wird in die F-Ramdisk geschrieben.

Das Zeichen "^" interpretiert SOURCGEN als "<RETURN>".

Die obenbeschriebene Funktion ist deshalb nützlich und zeitsparend, da man solche Befehlsfolgen ohne weiteres in die Symboltabelle eintragen kann, von wo aus sie gespeichert und geladen werden können. Am besten benutzen Sie hierzu die Adressen $100 bis $1FF. Da sich in diesem Adressenbereich der Stack befindet, werden hier Symbole kaum vorkommen.
Sie können anstelle des üblichen Symbols der Befehlsfolge einen
Namen geben. Benutzen Sie hierzu am besten Inversbuchstaben um den Namen hervorzuheben. Der eigenliche Befehlsfolge beginnt immer erst ab dem ";". Alles was sich davor befindet wird von SOURCGEN ignoriert!

Wenn Sie eine schon vorhandene Befehlsfolge brauchen:
- benutzen Sie die A- oder L-Funktion um die
Befehsfoge auf den Bildschirm zu listen.
- Drücken Sie die <U>-Taste.
- Bewegen Sie den Cursor zu der Zeile der Befehlsfolge.
- Drücken Sie <RETURN>
- Drücken Sie <@> (<SHIFT-8>) um die Befehlsfolge auszuführen.

Es wird empfohlen alle auf Dauer benötigte Befehlsfolgen dem AUTOLOAD.SMB Datei zuzufügen, damit sie beim Laden von SOURCGEN immer gleich vorhanden sind.


Die Verwaltung der Fram-disk

Nach dem Drücken der <U>-Taste können Sie auch ein Befehl mit folgender Syntax eingeben:

[<GRÖSSE>]/[FILENAME]

Tippen Sie den Namen eines Diskettenfiles und drücken Sie <RETURN>. Das File wird jetzt in die F-Ramdisk kopiert.

Mit einer Eingabe für <GRÖSSE>, bestimmen Sie die Anzahl der Double-Density-Sektoren in der Ramdisk. (Ein Sektor umfaßt 253 ($FD) Bytes)
Wenn Sie hier eine Grösse weniger als $39 oder überhaupt nichts angeben, so wird von SOURCGEN die Grösse $38 angenommen. Das entpricht genau dem freien Speicher unter dem Betriebssystem (ab $C000) und reicht aus für ein File in Größe von 113 ($71) Single-Density-Sektoren. Ein Single-Density-Sektor umfasst übrigens 125 ($7D) Bytes. Wollen Sie zB. das Programm TURBO-BASIC anschauen (das sind 145 ($91) Sektoren auf Diskette) dann intialisieren Sie die F-Ramdisk mit $48.
Apropo: Turbo-Basic läuft nicht mit FDISK zusammen, da es auch den Speicher unter dem Betriebssystem benutzt.

Wird kein Filenamen angegeben so wird das mit dem F. FILE-Funktion zuletzt geöffnetes File in die F-Ramdisk kopiert.

Beim Laden eines Files wird die Startadresse der F-Ramdisk angezeigt. Das Adressenbereich $BC00 bis $C000 wird umgangen, da hier generell die Display-List und das Bildschirm-RAM liegt.

Wenn Sie noch kein File in die F-Ramdisk kopieren möchten sondern lediglich ihre Grösse festlegen wollen, geben Sie <GRÖSSE> gefolgt von dem Zeichen "/" ein.
Dies kann sinnvoll sein wenn Sie einen grösseren Quelltext erzeugen und anschießend mit ATMAS-II assemblieren bzw. weiterverarbeiten wollen. Sie lassen also mit der H. HEAD-Funktion von SOURCGEN den Quelltext erzeugen und direkt in die F-Ramdisk schreiben. Anschließend gehen Sie ins DOS, laden ATMAS und laden dann mit "<ESC>RF:<ESC><ESC>" Ihren Quelltext in den ATMAS Textbuffer.

Ein größerer Textpuffer für ATMAS-II

Tippen Sie den Namen eines Diskettenfiles und drücken Sie <RETURN>. Das File wird jetzt in die F-Ramdisk kopiert.

Mit einer Eingabe für <GRÖSSE>, bestimmen Sie die Anzahl der Double-Density-Sektoren in der Ramdisk. (Ein Sektor umfaßt 253 ($FD) Bytes)
Wenn Sie hier eine Grösse weniger als $39 oder überhaupt nichts angeben, so wird von SOURCGEN die Grösse $38 angenommen. Das entpricht genau dem freien Speicher unter dem Betriebssystem (ab $C000) und reicht aus für ein File in Größe von 113 ($71) Single-Density-Sektoren. Ein Single-Density-Sektor umfasst übrigens 125 ($7D) Bytes. Wollen Sie zB. das Programm TURBO-BASIC anschauen (das sind 145 ($91) Sektoren auf Diskette) dann intialisieren Sie die F-Ramdisk mit $48.
Apropo: Turbo-Basic läuft nicht mit FDISK zusammen, da es auch den Speicher unter dem Betriebssystem benutzt.

Wird kein Filenamen angegeben so wird das mit dem F. FILE-Funktion zuletzt geöffnetes File in die F-Ramdisk kopiert.

Beim Laden eines Files wird die Startadresse der F-Ramdisk angezeigt. Das Adressenbereich $BC00 bis $C000 wird umgangen, da hier generell die Display-List und das Bildschirm-RAM liegt.

Wenn Sie noch kein File in die F-Ramdisk kopieren möchten sondern lediglich ihre Grösse festlegen wollen, geben Sie <GRÖSSE> gefolgt von dem Zeichen "/" ein.
Dies kann sinnvoll sein wenn Sie einen grösseren Quelltext erzeugen und anschießend mit ATMAS-II assemblieren bzw. weiterverarbeiten wollen. Sie lassen also mit der H. HEAD-Funktion von SOURCGEN den Quelltext erzeugen und direkt in die F-Ramdisk schreiben. Anschließend gehen Sie ins DOS, laden ATMAS und laden dann mit "<ESC>RF:<ESC><ESC>" Ihren Quelltext in den ATMAS Textbuffer.

Jetzt liest SOURCGEN jegliche File

Zu dem F. FILE-Funktion gilt jetzt zusätzlich folgende Funktion:

F. FILE

<NUM> <ADR1> [<ADR2>]/D<x>:<FILENAME>.<EXT>

Es wird von einem beliebigen Diskettenfile gelesen. <ADR1> gilt als Anfangsadresse. Sie können für <NUM> eine beliebige Zahl eingeben.
Nach dem Drücken von <RETURN> liest SOURCGEN das File durch und gibt dann die zu <ADR1> passende Endadresse aus. Wenn Sie nicht mit einem Ramdisk arbeiten empfehlt es sich die Endadresse zu notieren. Wenn Sie dann das nächste Mal das File aufrufen, können Sie anstelle von <ADR2> die Endadresse mit angeben. Anstatt das ganze File dann durchlesen, was bei einem größeren File schon
einige Zeit in Anspruch nehmen kann, überprüft SOURCGEN gleich, ob <ADR2> tatsächlich die entsprechende Endadresse ist. Eine falsche Angabe verursacht hier eine Fehlermeldung.

Die obenbeschriebene Funktion ist eine sinnvolle Erweiterung zu SOURCGEN, da nicht alle Maschinenspracheprogramme als Load-Files aufgezeichnet sind. Es kommt zum Beispiel vor, dass ein größeres File durch ein kleineres 'Loader'-Programm in den Speicher geladen wird, wobei nur der Loader sich als Load-File auf der Diskette befindet. Es gilt dann erst das Code für den Loader anzuschauen um die
Speicherbelegung (bzw. <ADR1>) des Hauptprogrammes festzustellen.

<NUM> <ADR1> [<ADR2>]

Beim Wiederholen der Funktion, muß der Dateiname nicht nochmals eingegeben werden.


Schnelle Suche

Zu dem C. CODE-search-Funktion gilt jetzt zusätzlich folgende Funktion:

C. CODE-search

<ADR1> <ADR2> <WORD> /W

Im Adressenbereich <ADR1> bis <ADR2> wird nach dem Doppelbyte <WORD> gesucht. Diese Funktion ist wesentlich schneller als die anderen zwei in SOURCGEN eingebauten CODE-search-Funktionen, da die Darstellungsweise des gefundenen Codes nicht berücksichtigt wird.


Verbesserte HEAD-Function

Die H. HEAD-Funktion arbeitet jetzt auch dann korrekt, wenn das Adressenbereich eines Load-Files mehrere Segmente umfaßt. Nehmen wir z.B. an es werden beim Öffnen eines LOAD-Files folgende Segmente angezeigt:

4DOO 4EOO 1
2E0 2E3 2
2200 4C07 3
600 6FE 4
540 573 5
5100 54CD 6

Sie können jetzt bei der H. HEAD-Funktion beispielsweise den Adressenbereich 600 573 eingeben. Es spielt u.a. keine Rolle mehr, dass die zweite Adresse niedriger ist als die erste. (Das gleiche gilt übrigens auch für die Funktionen P. PREPARE labels, G. GO und J. JUNK?)

<ADR1> <ADR2> A/D<x>:<FILENAME>

Die Angabe "A" hinter ADR2 verursacht, dass das Listing als PC-kompatibles ASCI-Datei gespeichert wird. So ist eine Weiterverarbeitung des erzeugten Quelltextes auf dem PC mit dem ATMAS-kompatiblen Crossassembler CODEGEN möglich.

E. EDIT

<ADR1> [<ADR2>]/<ZEI>

Ab Adresse <ADR1> wird der Code entsprechend dem Zeichen <ZEI> interpretiert bzw. dargestellt.
Die Zeichen "(" und "." sind in SOURCGEN V.3 dazugekommen:

(  :Normalcode. zB. LDA #LABEL (wobei LABEL <= $FF und eine Konstante oder zero page Adresse darstellt)

. :Asci Listing (zum Anchauen von ASCI Dateien bzw. Anleitungen)


Neue Functionstaste

[Leertaste] verursacht das Listen der nächsten Zeile.