        Reassembler fuer Programme unter SCP 1700
        =========================================

S p e i c h e r a u f b a u  u n d  A r b e i t s w e i s e
-----------------------------------------------------------

Der Reassembler dekodiert eine Datei mit abarbeitungsfaehigem Code vom Typ .CMD
in eine Assembler-Quelltextdatei vom Typ .A86 . Hierbei werden die als Befehlscode
deklarierten Daten als Befehle entschluesselt. Codierungen, die keine Befehle dar-
stellen, werden jedoch als Daten ausgewiesen. Der Nutzer des Programms kann wahl-
weise bestimmte Bereiche zu Code-, Daten- oder Reservierungsbereichen erklaeren.
Der Reassembler erzeugt fuer Adressverbindungen in vielen Faellen symbolische Be-
zuege (D000 usw.). Dem Nutzer des Programms wird empfohlen, die Gueltigkeit des
Quellprogramms im einzelnen zu ueberpruefen.
Das Programm laeuft auf dem UBT-Rechner (Modell 8080). Fuer das Reassembler-Pro-
gramm, fuer das Steuerprogramm, fuer die zu decodierende Datei und fuer die zuge-
hoerigen Tabellen steht also ein 64K-Byte-Speicher zur Verfuegung.
Nachfolgend wird das Prinzip des Decodierens dargestellt.

		       ------------------------------
		       |	Terminal	    |
		       ------------------------------
   Diskette			     |			        Diskette
--------------         ------------------------------        --------------
| CTL-Datei  |-------->| Bereichsinformationen in   |------->| CTL-Datei  |
|            |         | CTLTBL (Code, Daten usw.)  |        |            |
|            |         |----------------------------|        |            |
| SYM-Datei  |-------->| Symboldefinition in SYMTBL |------->| SYM-Datei  |
|            |         ------------------------------        |            |
|            |                       |                       |            |
|            |         ------------------------------        |            |
|            |         |                            |        |            |
| CMD-Datei  |-------->|    R e a s s  1 7 0 0      |------->| A86-Datei  |
|            |         |                            |        |            |
|            |         ------------------------------        |            |
|            |                      |                        |            |
|            |         ------------------------------        |            |
| DOC-Datei  |-------->| Kommentare in CMTTBL       |------->| DOC-Datei  |
--------------         ------------------------------        --------------
                                    |
				    |
		      ------------------------------
		      |		Terminal	   |
		      ------------------------------


Symbole werden in die Symboltabelle (SYMTBL) eingeordnet.In die CTL-Tabelle
(CTLTBL) werden die Grenzadressen von Abschnitten, die als Befehle (I) oder
als Datenbereiche (B,W,S) deklariert werden, eingetragen. Bereiche ausserhalb
des Codesegments gelten als Datenbereiche. Kommentarzeilen koennen an bestimm-
ten Stellen des zu reassemblierenden Programms erscheinen. Die Eingabe erfolgt
durch Angabe der Adresse und des Kommentartextes in die Kommentartabelle
(CMTTBL). Diese drei Tabellen koennen vor dem Reassemblieren durch das R-Kom-
mando von den auf der Diskette befindlichen Dateien .CTL, .SYM, .DOC eingele- 
sen werden. Waehrend des Reassemblierens werden CTLTBL und SYMTBL aktuali-
siert. Vom Nutzer koennen CTLTBL und SYMTBL jederzeit veraendert werden (C-
und E-Kommando). Die Eingabe oder das Loeschen von Kommentar in CMTTBL kann
nur durch den Nutzer selbst erfolgen (;-Kommando). Der neue Stand dieser Ta
bellen kann mit Hilfe des S-Kommandos jederzeit auf die Diskette geschrieben
werden.
Der Einlesebereich fuer die CMD-Datei kann mit seiner Anfangsadresse vorher
definiert werden (O-Kommando). Die Anfangsadresse fuer CMTTBL ist ebenfalls
angebbar (U-Kommando). Diese beiden Kommandos muessen nicht notwendig gegeben
werden, da Standardwerte im Programm festgelegt wurden. Die Differenz zwischen
der durch das U-Kommando angegebenen Adresse und der durch das O-Kommando an-
gegebenen Adresse ist die maximale Laenge fuer eine zu reassemblierende CMD-
Datei. Die Adresse, die durch das O-Kommando festgelegt wird, besitzt Ein-
fluss auf die Laenge von SYMTBL. Die Laenge der CTL-Tabelle ist im Programm
mit 600H Byte festgelegt worden. Dies ist in der Mehrzahl der Faelle ausrei-
chend.
Waehrend des Reassemblierens werden relative Adressen erzeugt. So beginnt je-
des Segment mit der Adresse 0. Die Laenge der einzelnen Segmente, die Gesamt-
laenge der zu reassemblierenden Datei, sowie ihre Lage im Hauptspeicher kann
man aus einer Uebersicht, die nach dem Einlesen der zu reassemblierenden Da-
tei erscheint, ersehen.
Der Reassembler erzeugt symbolische Adressen bei Anwendung des B-Kommandos.
Dabei werden diese Symbole den einzelnen Segmenten durch den gleichen Anfangs-
buchstaben zugeordnet.
				zum Beispiel
	Codesegment		C0110
	Datasegment		D2100
	Extrasegment		E0001
	Stacksegment		S0012

Diese Symbole werden aus der Deutung von Instruktionen im Codesegment gewon-
nen. Dabei wird der Segment-override-Praefix ausgewertet. In Befehlen, die
keinen Segment-override-Praefix enthalten, wird eine angesprochene Adresse
grundsaetzlich dem Datasegment zugeordnet.

     0H -----------
        | Steuer- |
	|programm |
   100H |---------|
	|	  |
	|  REASS  |
	|	  |
  2300H |---------| -ergibt sich aus der REASS-Laenge
	| CTLTBL  |
  2900H |---------|
        | SYMTBL  |
  5000H |---------| - OFFSET - Eingabe mit O-Kommando
        |         |
        |   CMD   |
        |         |
 0C000H |---------| - Eingabe mit U-Kommando
        | CMTTBL  |
  E005H |---------| - letzte freie Adresse; sie wird bei REASS-Meldung
        |         |                       ausgegeben.


K o m m a n d o s
-----------------

Das Programm wird mit dem Kommando REASS gestartet.
Nach der Anforderung durch '*' koennen Kommandos eingegeben werden. Die Adres-
sen werden in hexadezimaler Form ohne fuehrende Nullen und ohne hexadezimales
Kennzeichen 'H' vom Beginn des Codesegments (Adresse 0) angegeben.
Angenommen, das Codesegment sei hexadezimal C80 lang, so stimmt die Daten-
segmentadresse 10H mit der, in REASS anzugebenden, hexadezimalen Adresse C90 ueberein.
Bei Adressangaben (aaaa) kann der wirklichen virtuellen Segmentadresse fuer
das Daten-, Extra- oder Stacksegment die zweibuchstabige Bezeichnung 'DS',
'ES' oder 'SS' vorangestellt werden. Im obigen Falle kann also als Adresse
entweder C90 oderDS10 angegeben werden.

1) ?	Ausgabe von Anfangsadressen

2) ;    Eingabe von Kommentar in CMTTBL
   ;aaaa,<kommentartext><CR>    Loeschen der alten Eintragung vor der Adresse aaaa
                                und Eingabe des Textes vor Adresse aaaa .
   ;,<text><CR>                 Eingabe des Textes vor der aktuellen Adresse
   ;<CR>          Ausgabe des gesamten Kommentars
   ;a<CR>         Loeschen einer Eintragung vor der Adresse aaaa

3) O    OFFSET fuer Anfangsadresse der CMD-Datei
   O<CR>       Ausgabe des aktuellen OFFSET
   Oaaaa<CR>   Eingabe des OFFSET (Anfangsadresse fuer die CMD-Datei)

4) U    Eingabe der Anfangsadresse der Kommentartabelle
   Uaaaa<CR>   Adresse aaaa -> CMTTBL
   U<CR>      Ausgabe der aktuellen Anfangsadresse fuer die Kommentartabelle

5) R    Lesen einer Datei von der Diskette in den zugehoerigen Speicherbereich
        Der bisherige Inhalt wird ueberschrieben.
      Rdev:name.typ<CR>
  z.B.  RA:name.CMD<CR>    Einlesen der Codedatei ab OFFSET
                           Das Codesegment (CSEG) steht ab virtuell 0.
        RB:name.SYM<CR>    Einlesen einer Symboldatei ab 2300H
        RA:name.CTL<CR>    Einlesen einer CTL-Datei z. B. ab 2900H
        RB:name.DOC<CR>    Einlesen Kommentardatei ab CMTTBL
               .A86  nicht zulaessig

6) S    Schreiben einer Datei auf die Diskette vom zugehoerigen Speicherbereich
      Sdev:name.typ
  z.B.  SA:name.SYM
        SB:name.CTL
        SA:name.DOC   identisch  Sname.DOC  (Geraet A: ist Standard)
        SB:name.A86   Die Quellzeilen der neuen Datei werden waehrend des
                      Reassemblierens auf die Diskette geschrieben. Das
                      Z-Kommando schliesst diese .ASM-Datei ab.

7)  Reassemblieren des Maschinencodes aus dem CMD-Bereich zu Quellzeilen
    vom Typ .A86 mit den Kommandos  A, B und L .
A - Die CTL-Tablelle wird veraendert, z. B. wenn im Codesegment 8 druckbare
    Zeichen aufeinander folgen. Keine Bildung von Symbolen, eine vorhandene
    Symboltabelle wird beachtet.
B - Bildung von Symbolen fuer das decodierte Programm; eine vorhandene CTL-
    Tabelle wird beruecksichtigt, aber nicht veraendert.
L - Beruecksichtigung der Symbol- und der CTL-Tabelle, aber keine Veraenderung
    dieser Tabellen

Die Parameter bei  A, B und L  sind gleich. Es werden reassembliert:
   
A<CR>           zz Zeilen ab aktueller Adresse
Aaaaa<CR>       zz Zeilen ab Adresse aaaa
Aaaaa,bbbb<CR>  n Zeilen ab Adresse aaaa bis vor Adresse bbbb
A,bbbb<CR>      n Zeilen ab aktueller Adresse bis vor Adresse bbbb
A=zz<Z>         Setzen des Zeilenzaehlers auf zz (Standard=10)

8) D    Ausgabe in hexadezimalem Format und in KOI7-Code
   Die Parameter sind analog zu A, B, L.
    zusaetzlich:
    DS<CR>
    DS.symbol<CR>
	Ausgabe der Symbole und zugehoerigen Adressen von Anfang oder 
	vom angegebenen Symbol an.
9) Z    Schliessen der .A86-Datei
   Z<CR>    Die Pseudooperation  END  wird erzeugt.
Hinweis: Falls eine Datei auf der Diskette erzeugt werden soll, ist mit dem
         S-Kommando eine .A86-Datei vor den A-, B- oder L-Kommandos zu eroeff-
         nen. Diese A86-Datei wird durch das Z-Kommando geschlossen. Wurde
         keine A86-Datei eroeffnet, so bewirken die A-, B-, L-Kommandos nur
         die Bildschirmausgabe der Quellzeilen.

10) Q    Unterdruecken der Bildschirmausgabe der Quellzeilen
    Das Zeichen "Q" wird unmittelbar vor die Kommandos A, B oder L gesetzt und
    wirkt nur fuer das eine Kommando. Das Schreiben in eine geoeffneten Datei
    bleibt wirksam. Q kann vor jedes Kommando gesetzt werden, ist aber nur
    fuer die Kommandos A, B oder L von Interesse.
    QA...<CR>
    QB...<CR>
    QC...<CR>

11)     Reassemblieren einer gesamten Datei
    AZ<CR>
    BZ<CR>
    LZ<CR>
Der CMD-Bereich wird entsprechend den im Datei-Header ausgewiesenen Bereichen
reassembliert, und das Z-Kommando wird sofort ausgefuehrt. Eine gewuenschte
.A86-Datei auf der Diskette muss vorher mit dem S-Kommando eroeffnet sein.

    N<CR>     Der CMD-Bereich wird in zwei Durchlaeufen reassembliert. Das
              Gleiche bewirken die Kommandos  QBZ<CR>  AZ<CR> .
   QN<CR>     entspricht  QBZ  QAZ .

12)	Loeschen aller Symbole und CTL im Hauptspeicher
    X<CR>
    Nach Eingabe dieses Kommandos erscheint auf dem Terminal die Anfrage:
    Y/N PURGE ALL SYMBOLS & CTL
    Es sind  nur zwei Antworten moeglich: Y
					  N
    Bei jeglichen anderen eingegebenen Zeichen wird die Anfrage wiederholt

13)	Eingabe von Symbolen in SYMTBL
    Eaaaa,.symbol<CR>
    Beim Reassemblieren wird anstelle der Adresse aaaa das angegebene Symbol
    eingesetzt.

14)	Loeschen von Symbolen in SYMTBL
    K.symbol<CR>

15)	Eingabe/Aenderung der CTL-Tabelle
    C<CR>   	Ausgabe der CTL-Tabelle
    Caaaa<CR>	Ausgabe der CTL-Tabelle ab Adresse aaaa
    Caaaa,I<CR> Code ab Adresse aaaa wird als Befehl reassembliert
    Caaaa,B<CR> Code ab Adresse aaaa wird als DB-Bereich reassembliert
    Caaaa,W<CR> Code auf den Adressen aaaa,aaaa+1 wird als DW-Bereich
		reassembliert
    Caaaa,S<CR> Code wird von aktueller PC-Adresse bis Adresse aaaa als
		DS-Bereich interpretiert
    Caaaa,E<CR> Die Adresse aaaa wird als END interpretiert
    Caaaa,K<CR> Die Adresse aaaa wird in CTLTBL geloescht

16)	ORG- und EQU-Vereinbarungen
    Paaaa <CR>
    Paaaa,<CR>	beide Kommandos bewirken  ORG aaaaH
    Paaaa bbbb<CR>
    Paaaa,bbbb<CR>   beide Kommandos bewirken	ORG aaaaH
					SYMB1	EQU ....
					SYMB2	EQU ....
    Die ORG- und EQU-Vereinbarungen werden in die offene A86-Datei ge-
    schrieben. Die Adresse bbbb ist die untere Grenze fuer die EQU-Ver-
    einbarungen. Die obere Grenze bis zu der EQU-Vereinbarungen gesetzt
    werden ist die Adresse aaaa, die gleichzeitig fuer die ORG-Verein-
    barung verwendet wird.

17)	F-Kommando
    F<CR>
    Faaaa<CR>
    Faaaa bbbb<CR>
    Faaaa,bbbb<CR>
    Das F-Kommando bewirkt die Suche nach einer bestimmten Wortkodie-
    rung aaaa im Quellcode. Die Adresse, deren Inhalt die gesuchte Wort-
    codierung enthaelt, wird ausgegeben. Nach Adressenerhoehung wird 
    fortlaufend weiter nach der naechsten Adresse gesucht, die das ge-
    suchte Wort enthaelt. Ein Abbruch dieses Kommandos kann nur durch
    Druecken einer beliebigen Taste am Terminal erreicht werden. Falls
    die Adresse bbbb nicht eingegeben wird, wird die aktuelle Suchadres-
    se als Startadresse verwendet. Falls die Wortkonstante aaaa auch
    nicht angegeben wird, wird die aktuelle Wortkonstante verwendet, die 
    beim vorherigen F-Kommando angegeben war.
