Benutzung
---------

Alle Werte, die bearbeitet werden, liegen auf dem Datenstack.
Der Stackpointer ist immer im X-Register. Wenn das X-Register
fuer etwas anderes benutzt werden, muss der Wert gespeichert
und spaeter wieder geladen werden:

   stx stp
   ...
   ldx stp

Die Berechnungen auf dem Stack erfolgen in umgekehrter polnischer
Notation (UPN).

Ein Hauptprogramm sieht in ACME-Assembler beispielsweise wie
folgt aus:

   !to "...", cbm
   *=$c000

   jmp start

   !source "stack.a"

 start
   +initstp
   ...
   rts


Die Beispiele befinden sich in einem separatem Text.


Makros/Funktionen
-----------------

Beschreibung des Stacks: links von "--" steht der Inhalt vor dem
Aufruf, rechts davon der Inhalt nach dem Aufruf. "w" steht fuer
"word" und bezeichnet einen 16-Bit-Wert.

Name    | Beschreibung         | Makro | jsr | Stack
--------+----------------------+-------+-----+-------------------
initstp | Initialisierung      |   x   |     |
--------+----------------------+-------+-----+-------------------
push    | Wert ablegen         |   x   |     | ( -- w )
pop     | Wert holen           |   x   |     | ( w -- )
drop    | Wert entfernen       |   x   |     | ( w -- )
dup     | Wert duplizieren     |       |  x  | ( w -- w w )
swap    | Werte vertauschen    |       |  x  | ( w1 w2 -- w2 w1 )
--------+----------------------+-------+-----+-------------------
lit     | Wert ablegen         |   x   |     | ( -- w )
true    | True ablegen         |   x   |     | ( -- 1 )
false   | False ablegen        |   x   |     | ( -- 0 )
lod     | Variable laden       |   x   |     | ( -- w )
sto     | Variable speichern   |   x   |     | ( w -- )
jpc     | Bedingter Sprung     |   x   |     | ( 0|1 -- )
add     | a + b                |       |  x  | ( w w -- w )
sub     | a - b                |       |  x  | ( w w -- w )
mul     | a * b                |       |  x  | ( w w -- w )
divmod  | a div b, a mod b     |       |  x  | ( w w -- w w )
div     | a div b              |       |  x  | ( w w -- w )
mod     | a mod b              |       |  x  | ( w w -- w )
incr    | a ++                 |       |  x  | ( w -- w )
eql     | a = b                |       |  x  | ( w w -- 0|1 )
neq     | a <> b               |       |  x  | ( w w -- 0|1 )
lss     | a < b                |       |  x  | ( w w -- 0|1 )
leq     | a <= b (fehlt noch)  |       |     |
gtr     | a > b  (fehlt noch)  |       |     |
geq     | a >= b               |       |  x  | ( w w -- 0|1 )
outdec  | Wert ausgeben        |       |  x  | ( w -- )
outchr  | Zeichen ausgeben     |       |  x  | ( w -- )
--------+----------------------+-------+-----+-------------------
litv    | Name Basicvar ablegen|       |  x  | ( -- v )
lodint  | Basicvar laden       |   x   |     | ( v -- w )
stoint  | Basicvar speichern   |   x   |     | ( w v -- )


Funktionen hexout und inv (xor mit $ffff) siehe rec.a