
Bedienungs buch fr

A T M A S - I I

Ein Makroassembler, Editor
und Maschinensprache-Monitor
fr ATARI-Computer 400/600XL/800/800XL
und ATARI 130XE
mit Diskettenstation und min. 48KByte RAM

Die Programme, Disketten und Bedienungshandbcher
des ATMAS-Systemes
unterliegen dem Copyright der

Ing. W. Hofacker GmbH
und
Dipl.-Ing. Peter Finzel

Jegliche Rechte vorbehalten



LADEANWEISUNG
=============

1.) Entfernen Sie eventuelle Steckmodule aus dem
Cartridge-Schacht Ihres ATARlComputers.

2.) Schalten Sie das Diskettenlaufwerk und den
Fernseher (bzw. Monitor) ein.

3.) Sobald die rote LED des Diskettenlaufwerkes
erloschen ist, legen Sie die Programmdiskette mit der
Aufschrift oben und dem ovalen Ausschnitt nach hinten
in das Laufwerk ein. Schlieen Sie die Tr des
Diskettenschachtes.

4.) Schalten Sie dann Ihren ATARI-Computer ein. Bei
XL-Modellen mu whrend des Einschaltens die
OPTlONTaste gedrckt werden.

5.) ATMAS-II wird jetzt geladen, nach kurzer Zeit
erscheint der Vorspann, dann meldet sich der Editor,
der Ladevorgang ist damit beendet.

Falls die Meldung 'ATMAS-II bentigt 48KSpeicher'
erscheint, so gibt es mehrere Mglichkeiten:

a) Es befinden sich noch Steckmodule im Schacht.
b) OPTION wurde nicht gedrckt (nur bei XL).
c) Ihr Computer hat zu wenig Speicherplatz. ATMAS-II
bentigt mindestens 4BKByte.

FURZBEISPIEL FUR DEMO-PROGRAMM
==============================
 
Wenn Sie sich vor dem Durchlesen des Bedienungs-
handbuches kurz ein Demoprogramm des ATMAS-II Systemes
ansehen mchten, so knnen Sie das mit den folgenden
Befehlen erreichen:

<ESC>RD:DEMO<ESC><ESC> (Demoprogramm wird geladen)
<CTRL>-Y (Programm assemblieren)
<ESC> (zurck in den Editor)
<ESC>U<ESCk<ESC> (Programm starten)
<START> (Programm beenden)
Anmerkung: <ESC> Escape-Taste drcken.
<CTRL>Y Control-Taste gedrckt halten und
die 'Y'-Taste bettigen.



EINLEITUNG
==========

ATMAS-II ist ein leistungsfhiges Entwicklungssystem
fr Maschinenprogramme auf Ihrem Atari-Computer.
ATMAS-II besteht aus drei integrierten Teilsystemen:
Editor, MakroAssembler und MaschinenspracheMonitor.
Diese Komponenten zusammen erlauben eine komfortable
und schnelle Programmentwicklung auf Maschinenebene.

Alle drei Teile dieser integrierten Programmierumgebung
sind aufeinander abgestimmt und jeweils nur einen
Tastendruck voneinander entfernt. Ein komfortabler,
bildschirmorientierter Editor, der ber Funktionen wir
Kopier-Register, wiederholbare Befehlssequenzen und
platzsparende echte Tabulatoren verfgt, erleichtert
die Eingabe auch umfangreicher Programme. Der Makro-
Assembler arbeitet zur Erreichung einer krzest-
mglichen Assemblierzeit mit modernen Hashing
Algorithmen, so da auch lngere Programme in wenige
Sekunden assembliert werden. Schlielich steht lhner
als werkzeug zum Testen von Maschinenprogrammen ein
Monitor zur Verfgung.

Obgleich sich jemand, der noch nie in Assembler
programmiert hat, mit ATMAS-II schnell vertraut fhle
wird, bietet er dem fortgeschrittenen Benutzer viele
Mglichkeiten: Beginnend bei den leistungsfhigen
Editorfunktionen bis hin zu der Programmierung von
Makrobefehlen.

Es sollte noch angemerkt werden, da dieses
Bedienungshandbuch kein Lehrbuch der 6502-
Maschinensprache ist und das auch nicht sein kann.
Hier wird auf weiterfhrende Literatur verwiesen,
insbesondere auf ein im Herbst '85
erscheinendes Buch vom Autor dieser Bedienungs-
handbuches, das speziell auf den Atari-Computer
zugeschnitten ist. Zustzlich bieten auch die
Beispiele im Teil 4 dieses Handbuches einen kleinen
Einblick in die Assemblerprogrammierung des
Atari-Computers.

Teil 1: DER EDITOR
==================

Beim ATMAS-II Editor handelt es sich um einen bild-
schirmorientieren Editor, der ohne jegliche
Zeilennummerierung auskommt, sich im wesentlichen
hnlich einem Textverarbeitungssystem verhlt.
Dadurch entfllt die umstndliche Eingabe von LIST-
Befehlen wie Sie diese von verschiedenen anderen
Editoren kennen (z.B. in BASIC). Sie knnen sich
einfach unter Zuhilfenahme der Cursortasten durch das
Listing bewegen, das dann von oben nach unten bzw. von
unten nach oben durch das Textfenster scrollt.

1.1 Benutzung des Editors
-------------------------

Sobald ATMAS-II von der Diskette geladen worden ist,
gelangen Sie direkt in den Editor, der gleichsam die
Steuerzentrale des ATMAS-II Systemes darstellt. Von
hier aus knnen Sie den Makroassembler sowie den
MaschinenspracheMonitor aufrufen, auerdem bringt Sie
die <RESET>-Taste stets-in den Editor zurck.

Nach dem Booten werden Sie die folgende Bildschirm-
Maske des Editors sehen:

         +---------------------------+
         I P:00000 T:17408 C:1O24 OK I <---Statuszeile
         +---------------------------+
Cursor ->I C                         I
         I                           I
         I       Textfenster         I
         I                           I
         I                           I
         +---------------------------+
         I ..........................I <---Kommandozeile
         +---------------------------+

Die Statuszeile
---------------

ln der Statuszeile werden Ihnen stndig Informationen
ber Cursorposition, freien Textspexcherplatz,
Kopierreqister und Editorzustand mitgeteilt.

Aus 'P:nnnnn' knnen Sie die Entfernung (in Zeichen)
des Cursors vom Textanfang entnehmen, 'T:xxxxx' gibt
lhnen Auskunft ber den freien Textspeicherplatz,
(d.h. Sie knnen noch maximal 'xxxxx' Anschlge
eingeben). 'C:yyyy' informiert Sie ber den freien
Speicherplatz des KopierRegisters (des sog.
C-Registers) der im noch unbenutzten Zustand 1024
Zeichen umfat. Die letzten beiden Zeichen der
Statuszeile geben lhnen eine Zustandsmeldung des
Editors wieder, wenn alles in Ordnung ist, werden Sie
dort '0K' finden. Eventuelle Fehler- bzw. Zustands-
meldungen (z.B. wenn das Kopierregister geffnet ist)
werden dort ausgegeben, eine Liste der Meldungen
finden Sie im Anhang B.

Textfenster
-----------

Die nchsten 21 Zeilen bilden das Textfenster, hier
sehen Sie immer den aktuellen Text, den Sie mit den im
folgenden besprochenen Editierfunktionen bearbeiten
knnen. In wahrsten Sinne des Wortes ist dieser Bild-
schirmteil als Fenster in den Text zu verstehen, das
u.a. mit den Cursortasten nach oben und unten ber den
Text verschoben werden kann. Alle Editierfunktionen
werden sofort im Textfenster sichtbar.

Kommandozeile
-------------

Die letze Zeile des Bildschirms ist fr die Eingabe
von Kommandos reserviert. Neben einer Reihe von
DirektBefehlen, die unmittelbar im Textfenster
gegeben werden, gibt es zustzlich noch einen
Kommando-Modus des Editors, der durch die <ESC>-Taste
aufgerufen wird. Hier werden in der Regel Befehle
eingegeben, die zustzliche Information bentigen, z.B.
ein wort, nach dem zu suchen ist. Auch Befehle zur
Ein-/Ausgabe von Texten werden hier eingegeben.

1.2 Texteingabe
---------------

Sie knnen ohne Vergabe von Zeilennummern gleich mit
der Eingabe des Textes beginnen. Jedes eingegebene
Zeichen wird an der momentanen Cursorpostion abgelegt
und der Cursor bewegt sich eine Position nach rechts.
Sie knnen jederzeit eine neue Zeile mit (RETURN)
beginnen. Nenn Sie mehr als 38 Zeichen in eine Zeile
eingeben, so verschwindet der Cursor von der rechten
Bildschirmseite, sobald Sie (RETURN) drcken taucht
dieser am Anfang der nchsten Zeile wieder auf. Dieses
Verhalten erscheint auf den ersten Blick ungewhnlich,
Sie werden jedoch bald feststellen, da es bei
Assemblerprogrammen durchaus von Vorteil ist. Der
wesentliche Teil eines Assemblerprogrammes befindet
sich immer in den ersten 30 Zeichen, da dort der.
Assemblerbefehl zu finden ist. Nenn Sie lngere Zeilen
editieren wollen, (z.B. das Kommentarfeld), so haben
Sie dazu eine Spezialfunktion zur Verfgung (<CTRL>-V,
siehe 1.2 / Spezialfunktionen), die maximal 76 Zeichen
in zwei Bildschirmzeilen darstellt. Sie werden
allerdings feststellen, da sich der normale
38Zeichen Bildschirm wesentlich besser zum Editieren
von Assemblerprogrammen eignet, da alle Assembler-
befehle im Gegensatz zum ZweiZeilenmodus ununter-
brochen untereinander stehen.

Wie blich haben alle Tasten automatische wieder-
holfunktion, Kleinbuchstaben knnen mit der <CAPS>-
Taste erreicht werden.

1.3 Editierbefehle im Textmodus
-------------------------------

Wie bereits angesprochen, bietet ihnen der ATMAS-II
Editor zwei verschiedene Ebenen der Befehlseingabe.
Die einfachere der beiden Ebenen bilden die sog.
DirektBefehle, oder auch Befehle im Textmodus
genannt. Diese Kommandos werden entweder durch
Spezialtasten, z.B. <BACK SPACE), oder durch
ControlFunktionen ausgefhrt. Letzteres bedeutet-
einfach, da Sie die <CTRL>Taste (Bei 600/8OOXL:
<CONTROL>) gedrckt halten, whrend Sie eine andere
Taste bettigen, ganz hnlich dem, wie Sie in
ATARI-BASIC den Cursor fhren. Wenn Sie also im
folgenden <CTRL>-X lesen, so bedeutet das, da Sie
<CTRL> niedergedrckt halten, und dabei die 'X'Taste
drcken.

CursorSteuerung
----------------

Im Textmodus haben Sie die CursorFunktionen zur
Verfgung:

Um den Cursor nach rechts zu verschieben drcken Sie

	<CTRL>-<Pfeil rechts>

Eine Cursorbewequng nach links erfolgt mit

	<CTRL>-<Pfeil links>

Wenn Sie dabei ber das rechte Ende einer Zeile
gelangen, so wird der Cursor an den Anfang der
nchsten Zeile gesetzt. Fahren Sie ber das linke
Ende hinaus, so befindet sich der Cursor am Ende der
vorherigen Zeile.

Um den Cursor nach oben zu bewegen tippen Sie

	<CTRL>-<Pfeil oben>

Der Cursor wird dabei, falls er sich nicht schon am
linken Rand befindet, zuerst dorthin zurckgesetzt. In
diesem Falle fhrt erst der zweite Tastendruck nach
oben.

Der Cursor kann mit

	<CTRL>-<Pfeil unten>

um eine Zeile nach unten an den Anfang der nchsten
Zeile gesetzt werden. Bei allen Cursorbewegungen
knnen Sie nicht ber Anfang und Ende des Textes
hinaus. Im Unterschied zu anderen Editoren werden Sie
feststellen, da der Cursor nicht ber den Text luft,
sondern eingefgt wird. Das hat den Vorteil, da
Sie immer genau wissen, wo momentan eingefgt werden
kann.

Zeichen lschen
---------------

Um ein Zeichen links vom Cursor zu lschen drcken Sie

	<BACK-SPACE>

Wenn sich der Cursor dabei am Zeilenanfang befindet,
dann wird das Return-Zeichen gelscht, d.h. die Zeile,
in der sich der Cursor befand, wird an die vorherige
angehngt. Falls diese eine Leerzeile war und somit
nur aus einem Return-Zeichen bestand, wird die
Leerzeile gelscht.

Um ein Zeichen rechts vom Cursor zu lschen tippen Sie

	<CTRL>-<BACK-SPACE)

wie im obigen Fall kann damit auch die nchste Zeile
unter dem Cursor an die momentane angehngt werden.
Ist diese eine Leerzeile, so wird sie gelscht.

Zeilen lschen
--------------

Wenn Sie eine Zeile lschen mchten, dann drcken Sie

	<CTRL>-X

Die Zeile wird von der momentanen Cursorposition bis
zum Zeilenanfang gelscht. Befindet sich der Cursor
schon am Anfang einer Zeile, so wird die ganze
vorhergehende Zeile gelscht.

Cursor-Sprnge
--------------

	<CTRL>-E bringt Sie an den Anfang des Textes
	<CTRL>-D bringt Sie ans Ende des Textes

Tabulator
---------

Der ATMASEditor verfgt ber einen echten Tabulator,
der je nach Erfordernis 1 bis 9 Leerzeichen belegt,
aber nur als ein Zeichen abgespeichert wird. Um an
die nchste vortabulierte Stelle zu gelangen tippen
Sie einfach

<TAB>

Wenn Sie spater ber einen solchen Tabulator mit dem
Cursor fahren, werden Sie feststellen, da der Cursor
darber 'springt', und auch Einfqungen vor einen
Tnbulator den nachfolgenden Text nicht verschieben.
Der Tahulator wird nur als ein Zeichen abgespeichert,
so da Sie damit gut lesbare Listings mit geringen
Speicherplatzhedarf anfertigen knnen.

KopierRegister (C-Register)
----------------------------

Das CRegister ist ein zweiter, 1024 Zeichen groer
Textbuffer, den Sie zum Transferieren und Kopieren von
Textteilen benutzen knnen. Positionieren Sie zuerst
den Cursor auf das untere Ende des zu bewegenden
Textteiles, dann ffnen Sie das CRegister mit

	<CTRL>-R

Im linken Teil der Statuszeile wird dieser Zustand mit
der Meldung CR' festgehalten . Nenn Sie jetzt den
Cursor rckwrts bewegen, so werden die berlaufenen
Textteile in das C-Register geschrieben. Sie knnen
diesen Vorgang in der Statuszeile mit verfolgen, die
Zahl der freien Zeichen im KopierRegister ('C:1O24')
nimmt mit der Zahl der Cursorbewegungen ab.

Befindet Sich der gesamte gewnschte Text im
C-Register, so schlieen Sie dieses mit dem Befehl

	<CTRL>-F

Jetzt knnen Sie den Inhalt des Kopier-Registers an
jeder beliebigen Cursorposition einsetzen, indem Sie

	<CTRL>-J

eingeben. Der Inhalt des C-Registers wir dabei nicht
zerstrt, d.h. es sind auch komfortable Mehrfachkopien
mglich. Lschen des Kopier-Registers ist mit dem
Befehl

	<CTRL>-K

mglich. Das C-Register wird selbstttig durch Aufruf
des assemblers sowie nach einem Ein-/Ausgabebefehl
geschlossen.

Noch ein paar Anmerkungen zum C-Register: Sie knnen
damit Textteile zum Kopieren vorbereiten, wenn Sie
diese rckwrts mit <CTRL>-<Pfeil oben> oder
<CTRL>-<Pfeil links> durchlaufen. Genausogut knnen
Sie Textblcke transferieren, indem Sie den Cursor
durch die Lschbefehle <BACK-SPACE> und <CTRL>-X
rckwrts bewegen. Der gelschte Text verbleibt im
KopierRegister und kann an beliebigen anderen Stellen
wieder eingesetzt werden.

Sie knnen auch einen Textblock aus verschiedenen
Textteilen zusammensetzen, indem das C-Register an
verschiedenen Textstellen mehrfach geffnet und
geschlossen wird, ohne dazwischen seinen Inhalt mit
<CTRL>K zu lschen.

Ist das CReglster voll ('C:0000'), erscheint zu-
stzlich links oben die Fehlermeldung 'C?'.

Spezialbefehle des Editors
--------------------------

Den ZweiZeilenmodus knnen Sie mit

	<CTRL>-V

einschalten. Dadurch werden Zeilen, die lnger als 38
Zeichen sind, zweizeilig am Bildschim dargestellt. Die
maximale Zeilenlnge diese Modus betrgt somit 76
Zeichen, wobei allerdings nur 11 Zeilen dargestellt
werden knnen. Ein weiteres <CTRL>-V bringt Sie in den
normalen EinZeilenmodus zurck.

ControlZeichen, insbesondere Tabulatoren und Return-
Zeichen knnen mit

	<CTRL>-T

sichtbar gemacht werden. Alle ControlZeichen werden
'revers' dargestellt. Ein weiteres <CTRL>-T schaltet
in den Normalmodus zurck.

	<CTRL>-G

dient zur Wiederholung der in der Kommandozeile
stehenden Befehlskette. Lesen Sie dazu bitte Abschnitt
1.4.

Aufruf des Assemblers und des Monitors
--------------------------------------

Der ATMAS-II Makroassembler wird durch

	<CTRL>-Y

aufgerufen. ATMAS-II beginnt nun sofort mit der
Assemblierung des im Textbuffer befindlichen
Quelltextes (siehe Abschnitt 2), nach Abschlu der
Assemblierung bringt Sie ein beliebiger Tastendruck in
den Editor zurck.

Der Maschinensprache-Monitor kann duch Eingabe von

	<CTRL>-P

aufgerufen werden. Er meldet sich mit 'MONITOR.' und
erwartet Ihre Eingabe (s. Abschnitt 3). Zurck in den
Editor gelangen Sie durch die Eingabe von 'E'.

1.4 Befehle der Kommandozeile
=============================

Auer den Direktbefehlen im Textmodus verfgt der
ATMAS-II Editor ber einen weiteren leistungsfhigen
Editiermodus! Die Kommandozeile. Sie werden hier in
erster Linie Befehle finden, die auer dem
eigentlichen Aufruf des Befehles noch weitere Angaben
bentigen, etwa eine Zeichenkette nach der gesucht
werden soll. Weiterhin werden Sie einige Befehle
finden, die Sie schon vom Textmodus her kennen, diese
knnen aber im Kommandomodus mit Wiederholungsfaktoren
versehen und verkettet werden, eine Art von
'Befehls-Makros'.

Benutzung der Kommandozeile
---------------------------

Sie betreten den Kommandomodus durch die <ESC>-Taste,
die als Dollar-Zeichen ('$') dargestellt wird. Jetzt
knnen Sie einzelne Kommandos (siehe unten) eingeben
und dabei die <ESC>-Taste als Trennzeichen benutzen.
Die Kommandozeile wird ausgefhrt, sobald Sie <ESC>
zweimal hintereinander bettigen. Die Ausfhrung wird
mit einem Doppelkreuz hinter der-Kommandokette
quittiert, Sie befinden sich anschlieend wieder im
Textmodus. Sollte sich die Kommandozeile als
fehlerhaft erwiesen haben, so wird Ihnen das in der
linken oberen Ecke durch ein Fehlerkrzel angezeigt.

Alle Befehle (mit Ausnahme der I/O-Kommandos R und W)
knnen mit vorangestellten Wiederholungsfaktoren 2 bis
255 mal ausgefhrt werden. Zustzlich kann eine
vollstndige Wiederholung einer eingegebenen
Kommandozeile vom Textmodus aus mit <CTRL>-G erfolgen.

Eingabefehler in der Kommandozeile selbst knnen mit
<BACK SPACE) korrigiert werden. <CTRL>-X fhrt zum
Lschen der Kommandozeile und zur Rckkehr in den
Textmodus.

Editierfunktionen im Kommandomodus
----------------------------------

B : Cursor eine Position zurck
F : Cursor eine Position vorwrts
D : Ein Zeichen links vom Cursor lschen 
T : vom Cursor bis Anfang d. nchsten Zeile lschen

Mit diesen Befehlen ist z.B. eine schnelle Cursor-
Bewegung im Text mglich. ffenen Sie die Kommando-
zeile mit <ESC> und geben Sie '200F' gefolgt von
zweimal <ESC>. Jede Wiederholung der Kommandozeile mit
<CTRL>-G bringt Sie nun 200 Zeichen im Textbuffer
weiter.

Weitere Editierbefehle:
-----------------------

H<Hex-Byte> :	Einsetzen eines beliebigen ATASCII-Codes
		in den Text, z.B. zur Druckersteuerung.
		BEISPIEL: $H0F$ schaltet EPSON-Drucker
			  auf Engschrift

S<String> : 	Sucht nach der Zeichenkette (String) ab
		der momentanen Cursorposition bis zum
		Ende des Textes. Falls nicht vorhanden,
		erscheint 'S?' in der Statuszeile.
		BEISPIEL: $SLABEL$ sucht nach Wort LABEL.

!<String> : 	Setzt Zeichenkette <String> an momentane
		Cursorposition ein. Kann im Zusammenhang
		mit dem SBefehl zu einer Such- und
		Austausch-Funktion ausgebaut werden (s.u.).

Spezialfunktionen
-----------------

J : 		Wiederholt die gesamte Rommandozeile.
		Damit knnen Sie z.B. eine Such- und
		AustauschFunktion bis Textende wieder-
		holen.

K : 		Lscht den gesamten Textbuffer.
		VORSICHT: Der eingegebene Text wird
		gelscht!

U : 		USER-Befehl. Ruft ein Maschinenprogramm,
		das ab $A8OO im Speicher stehen mu, per
		JSRBelehl auf. VORSICHT Nur verwenden
		wenn Sie dort auch ein Programm stehen
		haben.

@<n> : 		Einstellung der Tabulatorweite auf <n>
		Zeichen (n von 0 bis 9). Ohne Angabe
		wird eine Weite von 8 verwendet.
		BEISPIEL: $@6$ : Tabulatorweite 6 Zeichen.

M : 		Rckkehr zum DOS. Mit 'B'-'* ATMAS-II *'
		kommen Sie wieder in ATMAS-II zurck.

Noch zwei Befehle, die das C-Register betreffen:

E : Lscht CRegister (wie <CTRL>K) _
G : C-Register in Text einfgen (<CTRL>J)

Befehle zur Ein-/Ausgabe von Text
---------------------------------

Wenn Sie einen im Textbuffer befindlichen Text auf
Diskette abspeichern wollen, so knnen Sie das mit dem
'W'-Kommando erledigen. Sie brauchen lediglich den
gewnschten Namen des Files mit einer Gertebe
zeichnung angeben.

BEISPIEL: Sie wollen den momentanen Text unter dem
Namen TEST.SRC auf Laufwerk 1 speichern. Dazu geben
Sie folgendes ein:

<ESC>WD1:TEST<ESC><ESC>

Die Extension .SRC wird von ATHAS selbst hinzugefgt,
Sie knnen selbstverstndlich auch eine andere
Extension angeben, etwa $WD1:TEST.ATM$ <ESC>.

VORSICHT: 	Der Text wird immer BEGINNEND bei der
========= 	momentanen POSITION DES CURSORS aufge-
		zeichnet. Deshalb immer zum Abspeichern
		des gesamten Textes zuvor <CTRL>-E eingeben.

Auf hnlich Heise knnen Sie ein Textfile von der
Diskette in den Speicher laden. Dazu wird der Befehl
'R' benutzt, der wie 'W' verwendet wird.

BEISPIEL: Laden des Demo-Files DEHO.SRC von der
ATMAS-II Diskette (in Laufwerk 1):

<ESC>RD1:DEMO<ESC><ESC>

Der Extender .SRC wird wiederum automatisch angehng
Das File wird nun beginnend an der momentanen
Cursorposition eingelesen. Daraus ergeben sich zwei
Mglichkeiten:

1.) Wenn ein neues File geladen werden soll, dann
lschen Sie zuvor den Textbuffer vorher mit <ESC> K
<ESC> <ESC>.

2.) Sie knnen aber auch einzelne Files in den Text-
buffer einfgen (hnlich dem Kopier-Register), indem
Sie den Cursor an die gewnschte Stelle bringen und
dann den LadeBefehl geben.

Treten whrend eines Ein-/Ausgabe-Befehles Fehler auf,
zu wird dies in der Statuszeile durch die Meldung 'RW'
angezeigt.

Listings
--------

Ausdrucke des Quelltextes knnen mit dem 'L' Befehl
hergestellt werden. Dazu gibt es mehrere Optionen:

'L'  : 	Listing scrollt ber den Bildschirm
'L0' : 	Ausgabe auf RS232 Schnittstelle Nr. 1 des 850
	interfacemodules (R1:)
'L1' : 	Ausgabe erfolgt ber den normalen PrinterHandler
	'P:', also im Regelfall ber das Atari 850
	interface-Modul.
'L7' : 	Listinq wird ber CentronicsSchnittstelle aus
	den Joystick-Ports 3 und 4 ausgegeben. Diese
	Mglichkeit besteht nur fr 400/800-Computer.

Hinweise zur fortgeschrittenen Editorbenutzung
----------------------------------------------

Die Mglichkeit der Befehlsverkettung in der Kommando-
zeile ermglicht sehr komfortable Editierhilfen:

	$SLDA$3D$ILDX$J$ <ESC>

Diese Befehlskette wrde alle LDA-Befehle ab der
Cursorposition in LDX-Befehle umtauschen. Wie
funktioniert's? Zuerst wird ein LDA-Befehl gesucht
($SLDA), der Cursor kann man sich dann hinter dem
gesuchten String postiert denken. '$3D' lscht nun
drei Zeichen links vom Cursor (Sie erinnern sich: Der
Wiederholungsfaktor!), whrend '$ILDX den String 'LDX'
einsetzt. '$J wiederum bewirkt, da die gesamte
Kommandozeile solange ausgefhrt wird, bis der Text zu
Ende ist, also ein 'S?'-Fehler (String nicht gefunden)
auftritt.

Teil 2: Der MakroAssembler
===========================

2.1 Benutzung des Makroassembleres
----------------------------------

Vom Editor aus wird der ATMAS-II Makroassembler mit

	<CTRL>-Y

aufgerufen. Er beginnt dann sofort mit der Assemblie
rung des Quelltextes, der sich im Textbuffer des
Editors befinden mu.

Die Assemblierung wird in drei Durchgnge (sog.
passes) unterteilt, wobei der zweite Durchgang seine
Aktivitt durch ein schnell vernderndes Zeichen in
der linken oberen Bildschirmecke anzeigt. Der dritte
Pass kann ein Listing des assemblierten Programmes auf
dem Drucker oder dem Bildschirm ausgeben (s. OUT-
Direktive).

Der Vorgang des Assemblierens wird so lange fort-
gesetzt, bis entweder der Quelltext zu Ende ist, ein
<CTRL>-Z Zeichen entdeckt wird (Assembler-Stop
Zeichen) oder ein Fehler erkannt worden ist. Im
letzteren Fall wird eine Fehlermeldung (s. Anhang B)
am Bildschirm ausgegeben. Ein beliebiger Tastendruck
bringt Sie in den Editor zurck, und zwar genau an die
Stelle, die den Fehler verursacht hat. Sie knnen
sofort den Fehler verbessern und den Assembler mit
<CTRL>-Y neu starten.

Dieses komfortable 'HandinHand' Arbeiten zwischen
Editor und Assembler ist ein wesentlicher Punkt, der
ATMAS-II als Entwicklungssystem fr Maschinenpro
gramme so leistungsfhig macht, und doch dabei die
Bedienung einfach gestaltet.

2.2 Eingabeformat des Assemblers
--------------------------------

Der ATMAS-II Makroassembler kennt alle Opcodes der
6502-CPU, soweit diese im 'MOS-Technology 6502-Pro-
grammierhandbuch' beschrieben sind. Ebenso folgt die
Schreibweise der Adressierungsarten der in jenem Buch
vorgeschlagenen Notation (siehe unten).

Eine Ouellteutzeile kann folgende Formate haben:

A) Leerzeile:
-------------
Besteht nur aus einem <RETURN>-Zeichen.

B) Kommentarzeile:
------------------
Beginnt mit einem '*' in der ersten Spalte.
Beispiel: * Copyright (c) M. Huber

C) Befehlszeile mit Label:
--------------------------

Beginnt mit einem Label, gefolgt von einem Trenn-
zeichen (Leerzeichen oder Tabulator), dann einem
6502-Opcode oder einer Assemblerdirektive, schlielich
kann noch nach einem weiteren Trennzeichen ein
Kommentar folgen.

Beispiele:	LOOP	LDA #$10
		DOSVEC 	EQU $000C 	DOS-EINSPRUNG

D) Befehlszeile:
----------------

Mu immer mit einem Trennzeichen beginnen: Um saubere
Listings zu bekommen empfiehlt es sich, diese mit
einem Tabulator beginnen zu lassen. Danach folgt ein
6502-Opcode oder eine Assemblerdirektive, wie im
voranstehenden Fall kann auch hier nach einem weiteren
Trennzeichen ein Kommentar stehen.

Beispiele:	<TAB>STA COLOR0 	FARBE AENDERN
		<TAB>DFB 100,120,140

Adressierungsarten:
-------------------

Im folgenden eine kurze Zusammeniassung der Schreib-
weisen der einzelnen Adresslerungsarten, jeweils mit
einem Beispiel versehen:

Implied Akku 		<OPC> 			ASL
Immediate 		<OPC> #<AUSDR>		LDA #$FF
Absolut, Zeropage 	<OPC> <AUSDR> 		STA $600
Relativ 		<OPC> <AUSDR> 		BNE *+4
Absolut X-indiziert 	<OPC> <AUSDR>,X 	CMP $3000,X
Absolut Y-indiziert 	<OPC> <AUSDR>,Y 	LDA TABLE,Y
lndirekt-indiziert 	<OPC> (<AUSDR>),Y 	EOR ($F0),Y
Indiziert-indirekt 	<OPC> (<AUSDR>,X) 	STA ($F0,X)

<OPC> 	: gltiger 6502Assemblerbefehl (Op-Code)
<AUSDR>	: arithmetlscher Ausdruck

Wie schon erwhnt, ist vor jedem <OPC> ein Label
mglich, nach jedem Assemblerbefehl kann ein Kommentar
stehen, der mit einem Trennzeichen abgesetzt ist.
AUSNAHME: Nach impliedAkku Befehlen mu das Kommen-
tarfeld durch einen Strichpunkt abgetrennt sein.

LABELS
------

Labels oestehen aus Buchstaben und Zahlen, wobei das
erste Zeichen immer ein Buchstabe sein mu. Die
maximale Lnge betrgt 8 Zeichen, wobei alle Zeichen
signifikant sind.

Gltige Labels:		Ungltige Labels:
---------------		-----------------
SCHLEIF 		1LOOP
SCHLEIF1		SCHLEIFEN (9 Buchstaben!)
S12345

Konstante:
----------

ATMAS-II kennt vier Arten von Konstanten: Dezimal,
Hexadezimal, Binr und ZeichenKonstante.

A) Dezimale Konstante
---------------------
Bestehen einfach aus der Zahl selbst (im Bereich 0 bis
65535).

	Beispiele: 10, 100, 3000, 65535

B) Hexadezimale Konstante
-------------------------
Bestehen aus einem Dollar-Zeichen ('$') und gltigen
Hexadezimalziffern (O-9,A-F).

	Beispiele: $10, $FF, $AB00, $FFFF

C) Binare Konstante
-------------------
Bestehen aus einem Prozent-Symbol mit nachfolgenden
gltigen Binrziffern (0,1).

	Beispiele: %1, %1001, %11110000

D) Zeichen-Konstante
--------------------
Werden aus einem Apostroph mit nachfolgenden ASCII
(bzw. ATASCII)-Zeichen gebildet. Die Zeichen werden in
7-BitNerte umgewandelt (Bit 7 immer Null).

	Beispiele: 'X, '#, 'e, '"

Negative Konstante:
-------------------
Alle Vonstanten knnen durch ein vorangestelltes
MinusZeichen als negative Zahlen interpretiert
werden. Die Darstellung erfolgt im Zweierkomplement
(-1 := $FFFF).

	Beispiele: -1, -$100, -%101101, -'B'

Interner Adresszhler:
----------------------

ATMAS-II fhrt whrend der Assemblierung einen
internen Adresszhler mit, der jeweils auf den Upcode.
der gerade bersetzten Anweisung zeigt (bzw. auf das
nchste freie Byte nach dem zuletzt berechneten
Ausdruck in DFB/DFW Direktiven). Dieser interne
Adresszhler kann jederzeit durch das '*'-Symbol
abgerufen werden. Dies kann in vielfltigen Weisen
benutzt werden:

A) Speicherplatz reservieren:
	ORG *+$100 reserviert 256 Bytes
B) relative Sprnge ohne Label:
	BNE *+4 berspringt die nchsten 4 Bytes
C) Adressversetzte Labels fr SoftwareStackinq
	RETADR EQU *-1 momentane Adresse minus 1

Ausdruck:
---------

Ein Ausdruck kann eine Konstante, ein Label, ein
Makroparameter (siehe 2.4), der momentane Adress-
Zhler ('*') oder eine arithmetische Verknpfung
derselben sein. Zugelassene Verknpfungen sind: +, -,
*, /, der Rechenbereich betrgt O-65535. Einige
Beispiele dazu:

	LDA #$FF 	Konstante
	LDA #LABEL1 	Label
	STA LABEL+$A0 	Verknpfung
	LDA *+$10 	momentaner Adr.-Zhler+0ffset

Zustzlich sind auch Klammern zur Klrung der Priori-
tt mglich:

	LDA #($A0+5)/1O
	LDA #LAB1(Lab1/256)*256

2.3 Assembler-Direktiven
========================

2.3.1 ORG
---------

Zweck :		bestimmt den Inhalt des assemblerinternen Adress-
		Zhlers.

Syntax : 	[<LABEL>] ORG <AL>[,<AP>] [<KOM>]

Beispiel: 	ORG $A800

ORG bestimmt die Anfangsadresse des Dbjektprogrammes,
im obigen Beispiel ist der fr diese Zwecke reser-
vierte Speicherbereich ab SABOO gewhlt.
ln manchen Fllen ist es aber nicht mglich, das
Objekiprogramm direkt in den gewnschten Speicher-
bereich zu legen, wenn dieser 2.8. von ATMAS-ll belegt
wird (s. MemoryMap im Anhang!). Hierzu knnen Sie
den zweiten Parameter der ORGDirektive verwenden, die
sogenannte 'physikalische Adresse' <AP>.

	ORG $3000,$A8OO

Dieser 0RGBefehl wrde ein Programm so assemblieren,
da es an der Adresse $3000 (logische Adresse, <AL>)
lauffhig ist, whrend der Assemblierung aber im
freien Speicherbereich ab der Adresse $A800 abgelegt
wird. Damit das Programm ausgefhrt werden kann, mu
es an die richtige Stelle verschoben werden, das kann
2.8. mit dem SAVEBefehl des Monitors geschehen, der
ein Binrfile so abspeichern kann, da es beim erneu-
ten Einlesen an den richtigen Speicherplatz kommt. In
einfacheren Fllen (2.8. wenn das Programm in dem
Adressbereich abgelegt werden soll, in dem ATMAS-II
seine Symboltabelle hat) hilft auch der
Blocktransfer-Befehl des Monitors.

2.3.2 EQU, EPZ (Equates)
------------------------

Zweck : 	Zuordnung eines Wertes zu einem Label. _

Syntax : 	<LABEL> EQU <AUSDR> [<KOM>]
		<LABEL> EPZ <AUSDR> [<KOM>]

Beispiel: 	GRUEN 	EQU $A0
		CIOV 	EQU $E456
		SAVHSC 	EPZ $58
		PLAYER 	EQU PHBASE+1024

Die EQUDirektive wird benutzt, um einen Label mit
einem bestimmten Wert zu definieren, es kann sich
dabei sowohl um ein Datum oder eine Adresse handeln.
Der erste Label des Beispieles wird z.B. sicher als
Datum fr einen immediate-Befehl verwendet werden (LDA
#GRUEN), whrend das zweite Beispiel eine ROM-Ein-
sprungadresse bezeichent (JSR CIOV).

EPZ (Equate Page Zero) hat prinzipiell die gleiche
Funktion, kann aber verwendet werden, wenn zum
Ausdruck gebracht werden soll, da der Label einen
Zeropage-Speicherplatz darstellt. Es besteht aber
kein Zwang zur Verwendung von EPZ, da ATMAS-II
Zeropage-Adresslerungsarten selbstttig erkennt. EPZ
dient hierbei nur der Verdeutlichung, Sie knnen in
allen Fllen auch EQU verwenden.

2.3.3 DFB (Define Byte)
-----------------------

Zweck : 	definiert den Inhalt einzelner Bytes im
		Objectcode

Syntax : 	[<LABEL>] DFB <AUSDR>[,<AUSDR>][ <KOM>]

Beispiel: 	TABELL 	DFB 1,2,4,8,16,32,64,128

		DFB 'A, 'B, 'C
		DFB 'X+128

Die navh DFB folgenden Ausdrcke werden als 8-Bit
werte in den Objektcode abgelegt. Die erste Zeile des
Beispieles wrde folgende Sequenz erzeugen:

	01 02 04 08 10 20 40 80

ATASClI werte werden als 7-Bit Nerte abgelegt, das
hchstwertiqe Bit ist immer Null.

2.3.4 DFW (Define Word)
-----------------------

Zweck : 	definiert den Inhalt eines 16-Bit Wortes im
		Objektcode.

Syntax : 	[<LABEL>] DFW <AUSDR>[,<AUSDR>...][ <KOM>]

Beispiel: 	ADRTAB 	DFW $A900,$AA03,$AB06
			DFW ADRTAB-1,ADRTAB+2

Die nach DFW foldenden Ausdrcke werden als 16Bit
Werte im Objektcode abgelegt. Dabei wird die Reihen-
folge der 6502-Adressen benutzt, d.h. zuerst das
niederwertige (LSB), dann das hherwertige Byte (MSB).
Die erste Zeile des Beispiels wrde demnach folgendes
erzeugen:

	00 A9 03 AA 06 AB

2.3.5 ASC (ASCII-String)
------------------------

Zweck : 	fgt einen String in ATASCII- oder Bild-
		schirmcodierung in den Objektcode ein.

Syntax : 	[<LABEL>] ASC 	<STZ><STRING)<STZ>
				[,<STZ><STRING><STZ>][ <KOM>]

		<STZ>: String-Trennzeichen, ", /, \, %, $

Beispiel:	TEXT 	ASC "HALLO"
		MELD 	ASC /DISK-FEHLER/
			ASC "MAKRO",\ASSEMBLER\
			ASC Z Normaler Bildschirmcode Z
			ASC S Inverser Bildschirmcode S

Strings nach einer ASCDlrektive werden Byte frByte
in den Objektcode bertragen. Abhngig vom Trenn-
zeichen (<STZ>) knnen verschiedene Funktionen _
angewhlt werden:

	" : Text im ATASCII-Code eintragen
	/ : ATASCII-Code, aber Bit 7=1 (Invers)
	\ : ATASCII-Code, beim letzten Zeichen wird Bit 7
	    gesetzt <Ende-Kennung>
	% : interner Bildschirmcode wird generiert!
	$ : Bildschirmcode mit Bit 7=1 (Invers)

Jeder String mu von zwei gltigen StringTrennzeichen
umschlossen werden. Anfangs- und Endtrennzeichen
mssen gleich sein.

Statt dem Anfhrungszeichen " (<SHIFT>-2) knnen Sie
auch ein beliebiges anderes nicht alphanumerisches Zeic
benutzen, die oben genannten natrlich ausgeschlos-
sen. Denkbar wren hier z. B. !, #, oder &, Bedingung
ist lediglich, da der String mit dem gleichen
Trennzeichen abgeschlossen wird. Mit diesem Trick ist
es mglich, da Sie ein Anfhrungszeichen in den Text
bekommen.

In Verbindung mit dem Displaylistkonzept der Atari-
Computer gestattet Ihnen der ASCBefehl die komfor-
table Programmierung von Titeln und Uberschriften, da
direkter Bildschirmcode erzeugt werden kann. Das Bei-
spielprogramm ASCDEMO.SRC auf der ATMAS-II Diskette
zeigt Ihnen, wie's gemacht wird.

2.3.6 OUT (Output Listing)
--------------------------

Zweck : 	Ausgabe eines Assembler-Listings
Syntax : 	[<LABEL>] OUT [L][N][M][P][0][1][2][ <KOM>]

Beispiel:	OUT L 		Listing auf Bildschirm
		OUT LP1 	Listing auf Drucker
		OUT LNMP1 	Listing auf Drucker, Symbole
				keine Makroexpansion

Mit OUT knnen Sie bestimmen, ob Sie ein Protokoll des
Assembliervorganges haben mchten und das zugehrige
Ausgabegert festlegen. Folgende Parameter werden
erkannt:

	L : Listing wird erzeugt
	N : Symboltabelle wird ausgegeben
	M : Makros werden NICHT expandiert (ausgedruckt!)
	P : Druckeroptionen:
	PO: RS232 Schnittstelle
		P1: Atari-Drucker, CentonicsSchnittstelle (850)
		P2: Joystick-Interface Port 3&4 (nur 400/800)

Nach jeweils 66 Zeilen wird ein Seitenvorschub
generiert.

2.4 Mahrofhigkeit
==================

ATMAS-II gestattet Ihnen die Verwendung von Makro-
befehlen. Darunter versteht man eine Folge von
Assemblerbefehlen, denen im Rahmen einer Makrodefini-
tion ein Name zugeordnet wurde. Bei der Verwendung
dieses Makro-Namens im Quelltext werden die gesamten,
ihm zugeordneten Assemblerbefehle erzeugt, man sagt,
der Makro-Befehl wird expandiert. Mit Hilfe von Makros
knnen Sie sich eine Art von zustzlichen Assemblerbe
fehlen schaffen, die in Wirklichkeit aus einer Sequenz
von einzelnen Maschinenbefehlen bestehen.

2.4.1 Makro-Definition
----------------------

Bevor Sie ein Makro verwenden knnen, mssen Sie es
zuerst definieren. Zu diesem Zweck dienen die zwei
Assembler-Direktiven MACRO und MEND.

Zum besseren Verstndnis zuerst ein Beispiel, das den
Basic-Befehl POKE imitiert:

	POKE 	MACRO ADRESS,DATA
		LDA #DATA
		STA ADRESS
		MEND

Die Definition wird von der MACRO-Direktive mit
voranstehendem Namen des Makros (hier: POKE) einge-
leitet. Dieser Name wird spter zum Aufruf verwendet.
Nach der MACRO-Direktive folgen die sogenannten
formalen Parameter, das sind keine Labels im eigent-
lichen Sinn, sondern nur Platzhalter fr die beim
Aufruf angegebenen tatschlich einzusetzenden
Parameter. Dieser Vorgang der Parametersubstitution
wird bei der Besprechung des Makro-Aufrufes noch
genauer erlutert.

Jetzt folgen die Assemblerbefehle, die als Operanten
sowohl gewhnliche Labels als auch die in der
MACRO-Direktive angegebenen formalen Parameter
benutzen knnen. Abgeschlossen wird die Makro-
Definition durch die MEND (Makro-Ende)-Direktive

Syntax : <MNAME> 	MACRO [<FPAR>][,<FPAR>...]
			MEND

	<MNAME>: 	Name des Makros, Syntax wie Label
	<FPAR> : 	formale Parameter

2.4.2 Makroaufruf, Makroexpansion
---------------------------------

Das in 2.4.1 definierte Makro kann im Quelltext mit

	POKE 752,1

aufgerufen werden. Bei der Assemblierung findet dann
folgendes statt: ATMAS-II erkennt, da es sich bei
POKE um ein bereits definiertes Makro handelt und fgt
die Maschinenbefehle der Definition in den Objektcode
ein. Dabei werden die formalen Parameter der Defini-
tion mit den tatschlichen Werten des Aufrufes er-
setzt. Im Beispiel wird folglich ADRESS durch 752, und
DATA durch 1 ersetzt. Nach der Makroexpansion ergibt
sich folgendes Maschinenprogramm:

	LDA #1
	STA 752

Die allgemeine Syntax fr den Makroaufruf lautet:

	[<LABEL>] 	<MNAME> [<PAR>][,<PAR>...]

Es mssen ebensoviele Parameter (<PAR>) bergeben
werden, wie formale Parameter in der Definition
angegeben wurden. Als Parameter knnen Konstante,
Ausdrcke und auch Strings verwendet werden. Ein
Beispiel zur Verwendung von Strings als Parameter
finden Sie im Teil 4.2 (MakroBibliotheken).

2.4.3 Lokale Labels
-------------------

Als nchstes Beispiel betrachten Sie bitte das Listing
des unten angegebenen Makros. Es handelt sich dabei
um ein Programm zum Lschen eines Speicherbereiches
von max. 256 Bytes (einer Page). Da das Programm mit
einer Schleife arbeitet, enthlt es folgerichtig auch
einen Label. Hrden Sie dieses Makro zweimal innerhalb
eines Programmes aufrufen, so wre das Label LOOP
doppelt verwendet, wodurch der Assembler den Fehler
'SAME LABEL TWICE' meldet.

	LOESCH 	MACRO ADRESS,LAENGE
		LDY #LANGE
		LDX #0 
		LDA #0
	LOOP 	STA ADRESS,X
		INX
		DEY
		BNE LOOP
		MEND

Auch hier bietet Ihnen ATMAS-II Untersttzung an: Ein
Label, das mit dem Happy-'a' Symbol (<SHlFT>-8) endet,
wird als lokales Label des Makros angesehen. Im
Beispiel: statt LOOP mu der Label LOOP@ verwendet
werden (auch im BNEBefehl!). Intern ersetzt ATMAS-II
das Happy-a' Symbol durch eine vierstellige Zahl, die
bei jedem Makroaufruf um eins erhht wird. Dadurch
erzeugt auch zweimalige Aufruf von LOESCH verschiedene
Labels (nmlich LOOP0001 und LOOP0002).

2.4.4 verschachtelte Makros
---------------------------

Eine Makrodefinition selbst kann wiederum einen Makro-
aufruf einschlielich der bergabe von Parametern
enthalten. Als Beispiel kann ein Double-Poke Befehl
dienen, der das bereits besprochene POKE-Makro be-
nutzt:

	DPOKE	MACRO ADRESS,WORT
		POKE ADRESS,WORT
		POKE ADRESS+l,WORT/256
		MEND

Diese Verschachtelungstechnik ist nur durch den Hard-
warestack begrenzt.

2.4.5 Makros contra Unterprogramme
----------------------------------

Sicherlich ist Ihnen bei der Beschreibung der Makros
die nahe Verwandtschaft zu Unterprogrammen aufgefallen.
Es gibt jedoch eine Reihe von wichtigen Unterschieden,
die Sie sich verdeutlichen sollten:

Makros sind universeller in der Benutzung, da Sie ber
den Mechanismus der Parameterbergabe verfgen. Sie
eignen sich daher gut zum Aufbau von Makro- (Programm)
Bibliotheken. Solche Makrosammlungen lassen sich
leicht mit dem flexiblen ATMAS-II Editor in den
Quelltext einbinden. Makros gestatten wesentlich
bersichtlichere Assemblerprogramme, man darf aller-
dings nicht bersehen, da alle in der Definition des
Makros angegebenen Maschinenbefehle bei jedem Aufruf
des Makros in das Programm eingesetzt werden. Das 
bedeutet, wenn Sie das LOESCH-Makro fnfmal im Pro-
gramm verwenden, da es ebenso oft in Ihr Programm
eingesetzt wird, und natrlich auch dementsprechend
Speicherplatz verbraucht.

Die Verwendung von Unterprogrammen ist wesentlich
optimaler in Bezug auf Speicherplatz, wobei es aller-
dings schwieriger ist, die bergabe der Parameter so
elegant wie im Makro zu gestalten. Ein weiterer, in
manchen Fllen entscheidender Gesichtspunkt ist die
Geschwindigkeit: Whrend Makros hier die bessere
Lsung darstellen, dauert es bei Unterprogrammen etwas
lnger, da JSR und RTS-Befehle auch Zeit bentigen.

3. Der Maschinensprache-Monitor
===============================

Vom Editor gelangen Sie durch die Eingabe von

	<CTRL>-P

in den MaschinenspracheMonitor. Der Bildschirm wird
gelscht und das "MONITOR."-Prompt erscheint in der
linkem oberen Bildschirmecke. Mit dem ATMAS-II Monitor
knnen Sie Maschinenprogramme starten, auf Diskette
ablegen, den Speicherinhalt prfen, verndern und
disassemblieren und dabei ein Protokoll am Drucker
mitfhren. Da der Monitor ber eine dialogorientierte
Eingabe verfgt, brauchen Sie sich keinerlei kompli-
zierte Befehlssyntax merken.

3.1 Allgemeine Benutzungshinweise
---------------------------------

Alle Eingaben innerhalb des Monitors erfolgen in hexa
dezimaler Schreibweise (ohne vorangestelltes Dollar-
zeichen!). Sollten Sie sich bei der Eingabe vertippen,
so kann diese jederzeit mit 'X' abgebroched werden.
Wenn Fragen im Dialog auftreten, werden diese mit 'Y'
(Yes) positiv beantwortet, jeder andere Tastendruck
(auch <RETURN>) beantwortet die Frage verneinend. Auch
hier ist ein Abbruch mit 'X' mglich.
Filenamen mssen immer im StandardAtari Format einge-
geben werden, d.h. zuerst einen Gertenamen (D:, D1:,
D2:...) dann der Filename mit max. 8 Zeichen, der nach
einem Dezimalpunkt noch eine max. 3 Zeichen lange
Erweiterung haben darf.

Beispiele:	D:TEST.OBJ, D2:CODE.COM, D1:FILE

3.2 Befehlsvorat des Monitors
-----------------------------

Die Befehle des Maschinensprache-Monitors bestehen aus
einfachen Buchstaben, die Parameter, soweit ntig,
werden im Dialog abgefragt.

3.2.1 M - Memory-Dump

Hit dem M-Befehl knnen Sie einen Speicherbereich in
hexaderimaler Schreibweise auf Bildschirm oder Drucker
ausgehen, weiterhin knnen Sie eine zustzliche Dar-
stellung den Speicherinhaltes in ASCII-Zeichen
erhalten.

Beispiel: 	Ihre Eingabe: 	Bildschirm:
		M 		DUMP
		D000 		FROM:D000
		D080		TO:D080
		Y		ASCII?Y
		<RETURN>	PRINT?

Nun wird der Speicherbereich von $D000-D080 sowohl in
hexadezimaler Schreibeweise als auch in ASCII ausge-
geben. Htten Sie bei der Frage ASCII? einfach
<RETURN> gedrckt, so wrde nur die hexadezimale
Schreibweise ausgegeben. Antworten Sie auf die Frage
PRINT? mit 'Y', dann mssen Sie sich fr einen
Ausgabekanal entscheiden:

(1):	whlt die serielle Schnittstelle R1: des
	ATARI-Interfaces als Ausgabekanal
(2): 	Ausgabekanal ist die Centronics-Schnittstelle des
	ATARI-Interfaces (normaler 'P:'-Printer-Handler).
(3):	Ausgabe ber Joystickinterface Port 3&4 (400/8OO)

3.2.2 D  Disassemble
---------------------

Mit dem DBefehl knnen Sie den Inhalt eines Speicher-
bereiches als 6502-Befehle rckbersetzen (disassem-
blieren) lassen. Wie bei M knnen Sie die Ausgabe auf
den Drucker umlenken.

Beispiel:	Ihre Eingabe	Bildschirm
		D		DISASSEMBLER
		D000		START?D000
		<RETURN>	PRINT?

Jetzt wird der Speicherinhalt ab der Adresse SDOOO in
disassemblierter Form ausgegeben, wobei immer nach
einer Fllung des Bildschirmes unterbrochen wird.
Durch Drcken einer beliebigen Taste (auer 'X') wird
der nchste Bildschirm ausgegeben. 'X' beendet die
Disassemblierung. Bei Ausgabe auf Drucker findet keine
Unterbrechung des Listings statt, der Ausdruck kann
mit <RESET> abgebrochen werden.

3.2.3 C - Change Memory
-----------------------

Das CKommando erlaubt Ihnen die Vernderung von
Speicherinhalten. Die Eingabe erfolgt in
hexadezimaler Schreibweise.

Beispiel:	Ihre Eingabe	Bildschirm
		C		CHANGE
		A900		ADDRESS?A900
		FF		A900 => FF
		00		A901 => 00
		X		A902 =>
				MONITOR.

Sie knnen gezielt einzelne Bytes oder auch zusammen-
hngende Speicherblcke in hexadezimaler Form ein-
geben. Durch die Eingabe von 'X' kommen Sie wieder in
den Befehls-Eingabemodus des Monitors zurck.

3.2.4 F - Fill Memory
---------------------

Mit dem FBefehl knnen Sie einen Speicherbereich mit
einem gewnschten Wert vorbesetzen.

Beispiel:	Ihre Eingabe:	Bildschirm:
		F		FILL
		A900		FROM:A900
		AFFF		TO:AFFF
		FF		WITH:FF

Wirkung: Der Speicherbereich $A900 bis $AFFF wird mit
dem Wert $FF gefllt.

3.2.5 B - Blocktransfer
-----------------------

Das B-Kommando erlaubt die Verschiebung ganzer
Speicherblcke. Dies kann ntzlich sein, wenn Sie bei
der Assemblierung mit ATMAS-II eine unterschiedliche
logische und physikalische Adresse gewhlt haben. Der
BBefehl bentigt Anfangs- und Endadresse des zu ver-
schiebenden Bereiches, sowie die Anfangsadresse des
Zielbereiches.

Beispiel:	Ihre Eingabe	Bildschirm
		B		BLOCKTRANSFER
		A800		FROM:A800
		A900		TO:A900
		AC00		INTO:AC00

Wirkung: Der Speicherblock von $A800 bis $A900 wird in
den Speicherbereich von $AC00 bis $AD00 kopiert.

3.2.6 G - Goto Address
----------------------

Mit dem G-Befehl knnen Sie ein Maschinenprogramm
starten, dessen Einsprungadresse Sie eingeben mssen.

Beispiel:	Ihre Eingabe	Bildschirm
		G		GOTO
		A800		GOTO A800

ACHTUNG: Sie mssen selbst dafr Sorge tragen, da ein
ausfhrbares Maschinenprogramm an der angegebenen
Stelle steht!

Die Kontrolle wird an den Monitor zurckgegeben, wenn
das Maschinenprogramm entweder mit einem RTS (Return
from Subroutine) oder BRK (Break-Befehl, Hex-Byte $00)
endet. Im letzteren Fall bekommen Sie die Register-
inhalte und die Prozessor-Flags angezeigt, eine her-
vorragende Mglichkeit, um ein Programm nach Fehlern
zu durchsuchen.

3.2.7 S  Binary Save
---------------------

Um ein vom Assembler erzeugtes Maschinenprogramm auf
Diskette abzuspeichern, knnen Sie entweder ins DOS
gehen (ber Editor, (ESC) M (ESC) <ESC>) oder den
MonitorBelehl S benutzen. Der Monitor speichert
Maschinenprogramme so ab, da Sie vom DOS-II (oder
dazu kompatiblen DOS-Versionen) wieder geladen werden
knnen.

Beispiel:

	Ihre Eingabe	Bildschirm
	S		SAVE
	A800		FROM:A800
	AF00		TO:AF00
	<RETURN>	INTO:
	D:TEST.OBJ	FILENAME(D:FN.EXT)? D:TEST.OBJ

Dieses Beispiel bewirkt, da der Speicherbereich von
$A800 bis $AF00 als File TEST.OBJ im Laufwerk 1 abge-
speichert wird. Der Filename mu immer im Standard-
Atari Format eingeben werden.

Der SAVE-Befehl des ATMAS-II Monitors hat noch einige
Zustze aufzuweisen, die ber den Standard hinaus-
gehen:

A) Adressversetztes Abspeichern: Sie knnen ein Pro-
gramm so abspeichern, da es beim erneuten Einlesen in
einen anderen Speicherbereich geladen wird. Das ist
sehr ntzlich, wenn Sie Programme mit getrennter lo-
gischer und physikalischer Adresse (s. ORGDirektive)
assembliert haben.

Sie mssen dazu bei den Fragen FROM bzw. TO den physi-
kalen Adressbereich angeben (wo das Programm momentan
abgelegt wurde) und bei der Frage INTO die logische
Adresse (an die das Programm geladen werden soll)
angeben.

Beispiel: 

	Ihre Eingabe	Bildschirm
	S		SAVE
	A800		FROM:A800
	A780 		TO:A980
	4000		INTO:4000
	D:TEST.OBJ	Filename(D:FN.EXT)?D:TEST.OBJ

Dieses Beispiel wrde ein Programm, das von $A800 bis
$A980 im Speicher steht, so auf die Diskette schrei-
ben, da es beim erneuten Einlesen im Bereich von
$4000 bis $4180 liegt. Hatten Sie das Programm mit
ORG $4000,$A800 assembliert, so ist es jetzt ein
lauffhiges Maschinenprogramm. ACHTUNG: Sie sollten
dieses File nicht mehr im Monitor einlesen, da sonst
ATMAS-II berschrieben wrde!

B) Append-Option: Wenn Sie als letztes Zeichen des
Filesnames ein Grer-Zeichen ('>') eingeben, so wird
das File an ein eventuell bereits bestehendes mit
gleichem Filenamen angehngt. Sie knnen damit Com-
pound-Files (aus mehreren Blcken zusammengesetzte
Files) oder Files mit INIT und RUN-Adresse erzeugen.

Beispiel:

	Ihre Eingabe	Bidschirm
	S		SAVE
	AA00		FROM:AA00
	AB00		TO:AB00
	<RETURN> 	INTO:
	D:TEST-OBJ>	FILENAME (D:FN.EXT)?D:TEST.OBJ>

Das File TEST.OBJ (von vorhin) wird in diesem Beispiel
um den Speicherblock von $AA00 bis $AB00 verlngert.
Mit derselben Methode knnen Sie auch RUN und INIT-
Adressen an ein File anfgen: Sie tragen die RUN-
Adresse (LSB, MSB) in die Adressen $02E0, $02E1 (INIT:
$02E2, $02E3) ein und hngen den jeweiligen 'Speicher-
block' (der nur aus zwei Bytes besteht FROM: 02E0 TO:
02E1) an das File an.

3.2.9 L - Binary Load
---------------------

Analog zum SaveBefehl kann hier ein Binr-File von
der Diskette geladen werden. Es kann sich dabei um ein
vom Save-Befehl erzeugtes oder um ein DOS erzeugtes
Binr-File handeln, auch zusammengesetzte Compound-
Files werden geladen. RUN und INlT Sprnge werden
nicht ausgefhrt.

Beipiel:

	Ihre Eingabe	Bildschirm
	L		LOAD
	D:TEST.OBJ	FILENAME(D:FN.EXT)? D:TEST.OBJ
			FROM: 5000 TO: 5190
			FROM: AA00 TO: AB00

Der LoadBefehl gibt Ihnen gleich an, in welchen
Speicherbereich das Binr-File geladen wurde. Im
Beispiel wurde ein File geladen, welches hnlich
zu dem im Save-Beisplel erzeugten ist.

3.2.9 E - Editor
----------------

Mit dem E-Kommando gelangen Sie zurck in den Editor,
der Cursor befindet sich noch an der Stelle, wo Sie
den Editor Verlassen haben.

3.2.1O I  Disketteninhaltsverzeichnis
--------------------------------------

Der I-Befehl zeigt Ihnen alle Filenamen des Laufwerks
1 auf dem Bildschirm an.

4. Beispiele
============

4.1 Demprogramm Farb-Scrolling
------------------------------

Das nachfolgende Beispiel soll Ihnen das Zusammenspiel
der einzelnen Komponenten von ATMAS-II verdeutlichen.
von Vorteil ware es, wenn Sie den Teil 1  (Der Editor)
dieses Handbuches schon durchgelesen htten und mit dem
Editor schon etwas vertraut sind. Teil 2 und 3 wren
nicht notwendigerweise Voraussetzung, tragen aber
sicherlich zum besseren Verstndnis bei.

Obwohl das nachtfolgende Demo-Programm auf der ATMAS-II
Diskette enlhalten ist (DEMO.SRC) sollten Sie es den-
noch von Hand eintippen, um sich besser mit dem Editor
vertraut zu machen. Falls Schwierigkeiten auftreten
sollten, knnen Sie dann immer noch auf das fertige
File Zuruckgrelfen.

************************************
* ATMAS-II Demo: Farb-Scrolling PF85
*
* Abbruch durch START-Taste
************************************

COLPF2	EQU $D018 	Farbregister
HSYNC 	EQU $D40A 	Synchron.
VCOUNI 	EQU $D40B 	Rasterzeile
RTCLL 	EQU $14 	VBI-Uhr
CUNSDL 	EQU $D01F 	Fkt.Tasten

*
* Programm liegt im USER-Bereich
* (ab SABOO)
*

	ORG $A800	res. Platz

	LDA #8		Abfrage der
	STA CONSOLD	STARTTaste vorbereiten
SCRCOL	CLC
	LDA VCOUNT	BildZaehler
	ADC RTCLK 	plus Raster-Zeile
	STA HSYNC 	syncronlsieren
	STA COLPF2 	in Farbreglster
	LDA CONSOL	Funktionstasten
	AND #1		STARTTaste?
	BNE SCRCOL	nein, weiter-->
	RTS

Zur Erinnerung einige Hinweise zum Eintippen des Pro-
grammes: Kommentarzeilen beginnen immer mit einem
Stern in der ersten Spalte. Ebenfalls mssen Zeilen,
die mit einem Label versehen sind in der ersten Spalte
beginnen. Bei allen anderen Zeilen ist es von Vorteil
am Zeilenanfang einen Tabulator zu verwenden.

Beispiel:
---------
Die erste 'EQU' Zeile sollten Sie so eintippen:

	COLPF2<TAB>EQU<LEERZ.>$D01B<RETURN>

Nachdem Sie das ganze Programm eingetippt haben, kn-
nen Sie die erste Assemblierung durch die Eingabe von
<CTRL>-Y beginnen. Sie sehen den Copyrightvermerk des
Assemblers und, wenn der Assembler keinen Fehler
erkannt hat, die Endadresse des erzeugten Objektpro
grammes.

Sollten Fehler aufgetreten sein, so werden Ihnen diese
im Klartext am Bildschirm prsentiert. Sie knnen
diesen mit Hilfe der Fehlertabelle im Anhang B auf die
Spur kommen. Als Ursachen kommen hier nur Tippfehler
in Frage.

Zuerst drcken Sie nun eine beliebige Taste um wieder
in den Editor zurck zu kommen. Der Cursor befindet
sich sofort in der fehlerhaften Zeile. Ein kleiner
Tip: Manchmal hilft die Eingabe von <CTRL>-T um zu
sehen, ob vielleicht ein Tabulator an der falschen
Stelle sitzt (Eine Zeile, die nur aus einem Tabulator
oder einem Leerzeichen besteht wird als SYNTAX-ERROR
gemeldet!).

Meldet der Assembler keinen Fehler, so knnen Sie
daran gehen, das gerade assemblierte Programm zu
starten. Dazu bettigen Sie zuerst eine beliebige
Taste um in den Editor zurck zu gelangen, und geben
anschlieend <CTRL>-P zum Aufruf des Monitors ein.

Im Monitor knnen Sie sich das vom Assembler erzeugte
Programm ansehen. Zu diesem Zweck geben Sie 'D' (Dis-
assemble) gefolgt von 'A800' und <RETURN> ein. Sie
mten jetzt ein disassembliertes Listing des Program-
mes am Bildschirm sehen. Drcken Sie jetzt 'X' um das
Disassembler-Listing abzubrechen.

Zum Starten des Programmes geben Sie 'G' (GOTO) und
die Startadresse des Programmes, in unserem Falle
'A800' ein. Wenn Sie alles richtig gemacht haben, dann
mten Sie jetzt 128 Farben ber den Bildschirm laufen
sehen. Das Farbspektakel kann mit <START> oder <RESET>
abgebrochen werden. Wenn Sie <RESET> drcken, kommen
Sie automatisch in den Editor zurck, mit <START> wird
das Programm ordnungsgem beendet, und die Kontrolle
geht an den Monitor zurck. 'E' reaktiviert schlie-
lich den Editor.

4.2 Makro Bibliotheken
----------------------

Auf der ATMAS-II Diskette finden Sie zwei weitere
Files IOLIB.SRC sowie GRAFLIB.SRC, deren Listings auf
den nchsten Seiten wiedergegeben sind. Es handelt
sich dabei um sogenannte MakroBibliotheken, d.h. sie
enthalten (neben einen kleinem Demo) nur Makro-Defini-
tionen. Die Files enthalten reichlich Kommentar, so
da eine genaue Beschreibung nicht ntig ist.

GRAFLIB.SRC enthlt Makros die hnlich den BASlC-Be-
fehlen GRAPHICS, COLOR, PLOT und DRAWTO arbeiten. Ein
Demo knnen Sie sich ansehen, wenn Sie GRAFLIB.SRC
laden, assemblieren und mit dem Monitor an der Adresse
$A800 starten.

IOLIB.SRC enthlt Makros, die hnlich den BASIC-Be-
fehlen OPEN, CLOSE, PRINT und INPUT arbeiten, sowie
zwei weitere, BGET und BPUT, die Laden und Abspeichern
von binren Dateien erlauben. Auch hier ist ein
interessantes Demo enthalten, das Sie analog zur
Vorgehensweise bei GRAFLIB bekommen.

In den Makro-Bibliotheken finden Sie Beispiele zur
Verschachtelung von Makros und zur bergabe von
String-Parametern. Verstehen Sie die beiden Files als
Anregung, was mit ATMAS-II machbar ist.

Selbstverstndlich sind Erweiterungen und Verbesse-
rungen Ihrer persnlichen Intuition berlassen.

************************************
* 	GRAFLIB.SRC
*
* 	Makro-Bibliothek
*
* 	GRAPHIK
*
*	Fuer ATMAS-II
*			PETER FINZEL
************************************
*
* IOCB-Struktur:
*
ICCOM	EQU $342
ICSTA	EQU $343
ICBAL	EQU $344
ICBAH	EQU $345
ICBLL	EQU $348
ICBLH	EQU $349
ICAX1	EQU $34A
ICAX2	EQU $34B

CIOV	EQU $e456

* CIO Befehl

COPEN	EQU 3
CCLSE	EQU 12
CGTXT	EQU 5
CPTXT	EQU 9
CGBIN	EQU 7
CPBIN	EQU 11
CDRAW	EQU $11

* ATARI Graphik-Variable

ATACHR	EBU $2FB
ROWCRS	EBU $54		CURSOR-
COLCRS	EBU $55		POSITION

*
* GRAPHICS-Befehl
*
* Aufruf: GRAPHICS <stufe>
*
* <stufe> 0 bis 15 (XLs)
*         0 bis 11 (400/800)
*
GRAPHICS MACRO STUFE
	JMP GR1@

DEV@	ASC 'S:'

GR1@	LDX #$60
	LDA #CCLSE	ZUERST KANAL 6
	STA ICCOM,X	SCHLIESSEN
	JSR CIOV
	LDA #STUFE	JETZT NEUE GRAPHIK
	STA ICAX2,X	STUFE ANWAEHLEN
	AND #$F0
	EOR #$10
	ORA #$0C
	STA ICAX1,X
	LDA #COPEN
	STA ICCOM,X
	LDA #DEV@
	STA ICBAL,X
	LDA #DEV@/256
	STA ICBAH,X
	JSR CIOV
	MEND
*
* Ausnahl der Zelchenfarbe
*
* Aufruf: COLOR <farbe>
*
* <farbe> von 0 bis 255, je nach
* 	  Graphikmodus, mss eine
* 	  Konstante sein.
*

COLOR	MACRO COL
	LDA #COL
	STA ATACHR
	MEND

*
* Positionierung des Cursor:
*
* Aufruf: POSITION <x>,<y>
*
* <x>,<y> je nach Graphikmodus, beide
* 	  muessen Konstante sein
*
*
POSITION MACRO X,Y
	LDA #X
	STA COLCRS
	LDA #X/256
	STA COLCRS+l
	LDA #Y
	STA ROWCRS
	MEND

* Graphik-Punkte setzen
*
* Aufruf: PLOT <x>,<y>
*
* <x>,<y> je nach Graphikmodus,
* 	  muss sich un Konstante
* 	  handeln
*
PLOT	MACRO X,Y
	POSITION X,Y
	LDX #$60	KANAL 6
	LDA #CPBIN
	STA ICCOH,X
	LDA #O
	STA ICBLL,X
	STA ICBLH,X 
	LDA ATACHR
	JSR CIOV
	MEND
*
* Graphik-Linien Ziehen
*
* Aufruf: DRAWTO <x>,<y>
*
* <x>,<y> je nach Graphikmodus
* 	  Konstante
*
DRAWTO	MACRO X,Y
	POSTTION X,Y
	LDX #$60	KANAL 6
	LDA #CDRAH
	STA ICCOM,X
	LDA #CCLSE
	STA ICAXl,X
	LDA #O
	STA ICAX2,I
	JSR CIOV
	MEND

*************************************
* Demo-Programm f. Graphik-Bibliothek
*
* zeichnet Raute In GRAPHlCS 7
*************************************

*
* befindet sich im reeervierten
* Speicherplatz fuer Objektcode
*
	ORG $A800

	GRAPHICS 7+16
	COLOR 1
	PLOT 79,0
	DRAWTO 159,47
	DRAWTO 79,95
	ORAWTO 0,47
	DRAWTO 79,0

ENDLOS	JMP ENDLOS
*
* Abruch mit <RESET>
*

***********************************
* 	IOLIB.SRC
*
* 	MAKRO-BIBLIOTHEK
*
* 	Input/Output
*
* 	fuer ATMAS-II
*
*		von PETER FINZEL
***********************************

* IOCB-Konstante

CIOV	EQU $E456

ICCOM	EQU $342
ICSTA	EQU $343
ICBAL	EQU $344
ICBAH	EQU $345
ICBLL	EQU $348
ICBLH	EQU $349
ICAX1	EQU $34A
lCAX2	EQU $34B

* CIO-Befehle

COPEN	EQU 3
CCLSE	EQU 12
CGTXT	EQU 5
CPTXT	EQU 9
CBBIN	EQU 7
CPBIN	EQU 11

EOL	EQU $9B

*
* MAKR0 ZUR BERECHNUB DER KANALNUMMER
* (hat nur interne Verwendung, ist
*  Beispiel zur Verwendung von ver-
*  schachtelten Makroaufrufen)
*
KANNUM	MACRO KANAL
	LDA #KANAL	IOCB-Offset
	ASL 		;aus Kanalnr.
	ASL 		;(mal 16)
	ASL
	ASL
	TAX 		; ERGEBNIS IM X-REG
	MEND

*
* Name     : OPEN
* Zweck    : oeffnen eines Files
* Aufruf   : OPEN <Num>,<Aux1>,<Aux2>,<Filename>
* Beispiel : OPEN 1,4,0,"D:TEST.DBJ"
*
OPEN 	MACRO KANAL,AUX1,AUX2,FILENAME
	JHP OP1*
FNAME	ASC FILENAME
	DFB EOL
0P1*	KANNUM KANAL
	LDA #AUXI
	SIA ICAX1,X
	LDA #AUX2
	SIA ICAX2,X
	LOA #COPEN
	SIA ICCOM,X
	LDA #FNAME
	STA ICBAL,X
	LDA #FNAME/256
	STA ICBAH,X
	JSR CIOV
	MEND
*
* Name     : CLOSE
* Zweck    : File schliessen
* Aufruf   : CLOSE <Num>
* Beispiel : CLOSE 1
*
CLOSE 	MACRO KANAL
	KANNUM KANAL
	LDA #CCLSE
	STA ICCOM,X
	JSR CIOV
	MEND

*
* Name	   : PRINT
* Zweck    : Ausgabe eines mit 'ASC'
* 	     definierten Textes, auss
* 	     mit EOL beendet werden
* Aufruf   : PRINT <Kanal>,<Label>
* Beispiel : PRINT 0,TEXT1
*
PRINT	MACR0 KANAL,LABEL
	KANNUM KANAL
	LDA #CPTXT
	SIA ICCOM,X
	LDA #LABEL
	STA ICBAL,X
	LDA #LABEL/256
	STA ICBAH,X
	LDA #127	max. Laenge
	SRA ICBLL,X
	LDA #0
	STA ICBLH,X
	JSR CIOV
	MEND

*
* Name 	   : PRINTS
* Zweck	   : direkte Ausgabe eines
* 	     Strings auf den Bildschirm
* Aufruf   : PRINT <String>
* Beispiel : PRINTS "HALLO"
*
PRINTS	MACRO STRING
	JMP PR2@
PRI1@	ASC STRING
	DFB EOL
PR2@	PRINT 0,PRI1 	obiges Makro!
	MEND
*
* Name	   : INPUT
* Zweck    : String einlesen
* Aufruf   : INPUT <Kanal>,<Label>
* Beispiel : INPUT 0,TEXT1
*
INPUT	MACRO KANAL,LABEL
	KANNUM KANAL
	LDA #CGTXT
	STA ICCOM,X
	LDA #LABEL
	STA ICBAL,X
	LDA #LABEL/256
	STA ICBAN,X
	LDA #127	max. Laenge
	STA ICBLL,X
	LDA #0
	STA ICBLH,X
	JSR CIOV
	MEND
*
* Nane     : BGET
* Zweck    : Einlesen eines Datenblockes
* 	     der Laenge L ab Adresse A
* Aufruf   : BGET <Num>,<L>,<A>
* Belepiel : BGET 1,$B000,$100
*
BGET	MACRO KANAL,LAENGE,BUFFER
	KANNUM KANAL
	LDA #CGBIN
	STA ICCOM,X
	LDA #LAENGE
	STA ICBLL,X
	LDA #LAENBE/256
	STA ICBLN,X
	LDA #BUFFER
	STA ICBAL,X
	LDA #BUFFER/256
	STA ICBAN,X
	JSR CIOV
	MEND

* Name    : BPUT
* Zweck	  : Speichern eines Datenblockes
* 	    der Laenge L ab Adresse A
* Aufruf  : BPUT <Num>,<L>,<A>
* Beispiel: BPUT l,$B000,$100
*
BPUT	MACRO KANAL,LAENGE,BUFFER
	KANNUM KANAL
	LDA #CPBIN
	STA ICCOM,X
	LDA #LAENGE
	STA ICBLL,X
	LDA #LAENGE/256
	STA ICBLH,X
	LDA #BUFFER
	STA ICBAL,X
	LDA #BUFFER/255
	STA ICBAH,X
	JSR CIOV
	MEND

**********************************
* Demo-Programm I/0-Bibliothek
* zeigt inhaltsverzeichnis des
* Laufwerks 1 an.
**********************************

	ORB $A800
	PRINTS "Inhaltsverzeichnis Laufwerk 1:"
	OPEN 1,6,0,"D1:*.*"

NEXT	INPUT 1,BUFFER		Dir-Zeile einlesen
	BMI ENDE		End of File?
	PRINT 0,BUFFER		und ausdrucken
	JMP NEXT		naechste Zeile

ENDE	CLOSE 1			Fertig!
	RTS

BUFFER ORG *+20			Platz freihalten

**********************************
* START DES DEMOS:
* Mit <CTRL>-Y assemblieren,
* Monitor mit <CTRL>-P aktivieren
* und mit 'G'oto A800 starten.
**********************************

Anhang A ATMAS-II Memory-Map
============================

0000  007F:	BetrlebssystemZeropaqe
0080  0085:	*** frei fr Benutzer ***
0086  00DF:	Editur/Monitor Zeropage
00E0  00FD:	AssemblerZeropage, aber benutztbar
		(wird von ATHASll gelscht)
00FE  047F:	Stack, Vektoren, IOCBs ...
0480  05FF:	*** frei fr Benutzer ***
0600  06FF:	*** frei (PAGE 6) ***
0700  <LOMEM>:	DOS, <LOMEM> DOSII:=$1F00
			     DOSXL:=$2700
<LO>  27FF: 	*** frei fr Benutzer ***
2800  4AFF: 	ATMAS-II
4800  4BFF: 	Zeilenbuffer
4C00 - 5FFF: 	Symboltabelle
6000  63FF: 	Kopierregister
6400  A7FF: 	Textbuffer
A800 - <MEMTOP>:*** frei fr Benutzer ***
<Me>  BFFF:	Display-List, Screen-RAM

Fr Objektcode stehen Ihnen mehrere Bereiche zur Ver-
fgung:

A) $600 bis $6FF: die berhmte Page 6, besonders ge-
eignet, wenn Sie USR-Programme fr BASIC schreiben
wollen.

B) $1F00 bis $27FF: dieser Bereich geht von der DOS-
Obergrenze (die in <LOMEM>, $2E7-$2E8 zu finden ist)
bis zum Beginn des ATMAS-II Programmes. Das die DOS-
Ubergrenze von DOS zu DOS verschieden ist, mssen Sie
hier etwas vorsichtig sein, wenn Sie das Standard
DOS-II verwenden, dann beginnt dieser Bereich bei
$1F00

C) $A800 bis $BC3F: Standard-Bereich fr Objekt-Code,
reicht bis zum Anfang des Bildschirmspeichers (bzw.
der Display-List).

Zustzlich besteht die Mglichkeit, den Speicherplatz
der Symboltabelle ($4C00$5FFF) nach dem Assemblieren
als Platz fr Felder, Zeichenstze oder als Player-
Missile-Bereich zu ntzen. Die Symboltabelle wird
schlielich nach der Assemblierung nicht mehr be-
ntigt.

Anhang B: Fehlermeldungen
=========================

1. AssemblerFehlermeldungen:
-----------------------------

SYNTAX ERROR:	Formatfehler, z.B. wenn Zeilennummer
		verwendet, oder Label beginnt mit Ziffer,
		Zeile besteht nur aus Tabualtor oder Space

NAME UNKNOWN: 	Fehler im Befehlsfeld: z.B. SRA statt STA

UNDEFINED EXPRESSION: Fehler im Operantenfeld. Tritt bei
		fehlerhaften arith. Ausdrcken und nicht
		definierten Labels auf.

ADDRESSING ERROR: Adressierunqsart pat nicht zum
		Befehl, z.B STA #$6FF

IMPOSSIBLE BRANCH: Verzweigungsbefehle (BNE, BCS...)
		reichen nur +127 bzw. -128 Bytes weit
		JMP verwenden!

DIVISION BY ZERO: Divison durch Null, z.B. LDA #100/0

NUMBER-ERROR:	Fehler in der Zahlendarstellung,
		z.B. LDA #%30

WRONG DELIMITER: Trennzeichen bei ASC-Befehl falsch oder
		unterschiedlich. <SHIFT>-2 verwenden!

NO ASCII: 	ASCII-Zeichen nach Zeichen-Konstante
		fehlt, z.B. LDA #'<RETURN>

LINE TO LONG: 	eine Zeile darf nicht lnger als 127
		Zeichen sein.

MACRO ERROR:	Fehler in der Makro-Definition bzw. im
		Makro-Aufruf (Parameter)

ORG ERROR:	Fehler in der ORG-Direktive (z.B. ORG fehlt)

TOO MANY LABELS: Symboltabelle ist voll

OPCODE DIFFERENT: Pass 3 erkennt anderen Opcode als
		Pass 2, z.B. wenn sich das Programm durch
		zweiten, fehlerhaften ORG-Befehl selbst
		berschreibt.

2. Editor-Fehlermeldungen:
--------------------------

RW : Fehler bei Disk-Ein/Ausgabe
CO : Kommandozeile zu lang
E? : Fehler in Kommandozeile
H? : fehlerhaftes Hex-Byte
I? : Textbuffer ist voll (T:00000)
L? : Gertefehler bei Listingausgabe
S? : String nicht gefunden (Suchfunktion)
T? : falscher Tabulator-Wert (nur 1-9)
C? : Kopier-Register ist voll (C:0OOO)
#? : Wiederholungsfaktor ist falsch (nur 2-255),

OK : Es liegt kein Fehler vor, C-Reg. geschlossen
CR : Kopier-Register ist offen

3. HonitorFehlermeldungen:
---------------------------

ADR ERROR: fehlerhafte Adresse beim Laden oder
	   Speichern eines Programmes. Tritt der
	   Fehler bei LDAD-Befehl auf, so ist das
	   gewnschte File nicht im Binrformat (z.B.
	   ein TextFile).

FEHLERCODE: <80-FF>: Betriebssytemfehler, laut DOS-
	    Handbuch. Fehlernummern sind hexadezimal.

ATMAS-II REFERENZKARTE
======================

EDITOR-BEFEHLE im Textmodus
---------------------------
<CTRL>-E : Cursor an den Tgxtanfang
<CTRL>-D : Cursor an_das Textende
<CTRL>-R : Kopier-Register ffnen
<CTRL>-F : Kopier-Register schliessen
<CTRL>-J : Kopiernegister in Text einsetzen
<CTRL>-K : Kopiernegister lschen
<CTRL>-V : Umschalten 1-Zeilen und 2-Zeilenmodus
<CTRL>-T : Umschaltung Control-Zeichendarstellung
<CTRL>-G : Wiederholung der Kommandozeile
<CTRL>-Y : Aufruf des ATMAS-II Makroassemblers
<CTRL>-P : Aufruf des Maschinensprache-Monitors

EDITOR-BEFEHLE der Kommandozeile
--------------------------------
B 	 : Cursor eine Position zurck
F 	 : Cursor eine Position vorwrts
D 	 : Zeichen links vom Cursor lschen
T 	 : Von Cursorposition bis Zeilenende lschen
H<Hexbyt>: beliebigen ASCIICode in den TEXT einfgen
S<String>: Sucht nach Zeichenkette (String)
I<String>: Zeichenkette (String) in Text einsetzen
J 	 : wiederholt Kommandozeile
K 	 : Lscht Textbuffer
U 	 : User-Befehl, startet Haschinenpgm ab $A800
@<n> 	 : Setzt Tabulatorweite auf <n> Zeichen
M 	 : Rckkehr zum DOS
E 	 : Lscht Kopier-Register

G	 : Kopier-Register in Text einfgen
N<D:FN>  : Text ab Cursorposition unter <FN> speichern
R<D:FN>	 : Text ab Cursorposition von File <FN> lesen
L<0,1,2> : Listing des Quelltextes ausgeben (1:=Drucker)

ASSEMBLER-DIREKTIVEN:
---------------------
ORG	 : Anfangsadresse Qbjektcodeufestlegen
EQU	 : Konstanten definieren
EPZ	 : Zeropagekonstante definieren, nicht obligatorisch!
DFB	 : Byte-Werte in Objektcode einfgen
DFW	 : Wort-Werte in Objektcode einfgen
ASC	 : Texte in ASCII und Bildschirmcode ablegen
OUT	 : Kontrolle des Ausgabelistings
MACRO	 : Einleitung der  Makrodefinition
MEND	 : Abschlu der Makrodefinition

MONITOR-BEFEHLE:
----------------
M	 : Memory-Dump-Befehl
D	 : Disassemblieren
C	 : Change-Memory, Speicher editieren
F	 : Fill memory, Speicherblock mit wert fllen
B	 : Blocktransfer
G	 : Goto, Maschinenprogramm starten
S	 : Binary-Save, Maschinenprogramm speichern
L	 : Binary-Load, Maschinenprogramm laden
E	 : Rckkehr zum Editor
I	 : Inhaltsverzeichnis Laufwerk 1 anzeigen
