Vimage Special

Was ist RTA?

RTA heißt Reduced Transliteration Assembler und ist eine Programmiersprache.

RTA gibt es als selbständiges Programm. Eigentlich habe ich RTA aber für Vimage geschrieben, die RT-Maschine ist das Herz der Projection engines, der Radio engine und der Color engine. Dank RT kann Vimage beliebige Kartennetzentwürfe, Grauwert- sowie Farbraumtransformationen ausführen. Grundprinzip ist, der Name sagt es: So viel wie nötig, so wenig wie möglich.

Vorbild ist Don E. Knuths hypothetische Assemblersprache MMIXAL. RTA ist aber viel einfacher. Mit einem aus nur 96 Befehlen bestehenden Befehlssatz lassen sich beliebige mathematische Formeln implementieren.

RTA ist auch ein Denkmal für die vielen Tausend Assemblerprogrammierer die es vor 50 Jahren einmal gegeben hat und die damals die Technologie zum Laufen gebracht haben, die heute unsere Computer sind. Assembler gilt inzwischen als weitgehend ausgestorben. Wie die Dampflokomitive. Das Grundprinzip steuert freilich nach wie vor all unsere Eisenbahnzüge und Computer. RTA ist der Dampflokführerstand von Vimage. Was bei einer IV K der Kessel ist, ist in Assembler der Befehlssatz.


 

Der Befehlssatz

Der Befehlssatz von RT umfasst 57 numerische Befehle, 12 Sprungbefehle, 11 E/A-Befehle, 3 Indirektbefehle, 6 Systembefehle und 6 Pseudobefehle. Insgesamt sind das 96 Befehle.

Numerische Befehle

mov     b a       ; b ← a      (Transportbefehl)
clr     a         ; a ← 0      (Löschbefehl)
inc     a         ; a ← a+1    (Inkrement)
dec     a         ; a ← a-1    (Dekrement)
add     a b       ; a ← a+b
sub     a b       ; a ← a-b
mul     a b       ; a ← a*b
div     a b       ; a ← a/b
power   a b       ; a ← a hoch b
root    a b       ; a ← b-te Wurzel
exp     a         ; a ← e hoch a
exp10   a         ; a ← 10 hoch a
exp2    a         ; a ← 2 hoch a
expx    a b       ; a ← b hoch a
log     a         ; a ← natürlicher Logarithmus aus a (Basis e)
log10   a         ; a ← dekadischer Logarithmus aus a (Basis 10)
log2    a         ; a ← dyadischer Logarithmus aus a (Basis 2)
logx    a b       ; a ← beliebiger Logarithmus aus a (Basis b)
sin     a         ; a ← sin(a)
cos     a         ; a ← cos(a)
tan     a         ; a ← tan(a)
cot     a         ; a ← cot(a)
sec     a         ; a ← sec(a)   = 1/cos(a)
csc     a         ; a ← cosec(a) = 1/sin(a)
asin    a b       ; a ← arcsin(a)
acos    a b       ; a ← arccos(a)
atan    a b       ; a ← arctan(a)
acot    a b       ; a ← arccot(a)
asec    a b       ; a ← arcsec(a)
acsc    a b       ; a ← arccosec(a)
sinh    a         ; a ← sinus hyperbolicus (a)
cosh    a         ; a ← cosinus hyperbolicus (a)
tanh    a         ; a ← tangens hyperbolicus (a)
coth    a         ; a ← cotangens hyperbolicus (a)
sech    a         ; a ← secans hyperbolicus (a)
csch    a         ; a ← cosecans hyperbolicus (a)
asinh   a         ; a ← area sinus hyperbolicus (a)
acosh   a         ; a ← area cosinus hyperbolicus (a)
atanh   a         ; a ← area tangens hyperbolicus (a)
acoth   a         ; a ← area cotangens hyperbolicus (a)
asech   a         ; a ← area secans hyperbolicus (a)
acsch   a         ; a ← area cosecans hyperbolicus (a)
bin     a         ; a ← 1, sofern a≠0, sonst 0 (Log. Identität)
not     a         ; a ← 1, sofern a=0, sonst 0 (Log. Negation)
and     a b       ; a ← 1, sofern a≠0 und b≠0, sonst 0
or      a b       ; a ← 1, sofern a≠0 oder b≠0, sonst 0
neg     a         ; Vorzeichen von a umkehren (Negation)
abs     a         ; Absolutbetrag von a bilden
sgn     a         ; Vorzeichen von a (+1, 0 oder -1)
round   a         ; a runden
ceil    a         ; a aufrunden
floor   a         ; a abrunden
fix     a         ; Vorkommastellen von a (a zur 0 hin runden)
frac    a         ; Nachkommastellen von a
clip    a b c     ; a ← a, wenn a<b dann a ← b, wenn a>c, dann a ← c
cmod    a b c     ; a mit Modulofunktion (Sägezahn) in b ... c clippen
random  a         ; a ← Zufallszahl zwischen 0 und 1
Die Sprungbefehle
cmpgt   a b m     ; wenn a > b Sprung nach m („compare greather than“)
cmpge   a b m     ; wenn a ≥ b Sprung nach m („compare greather equal“)
cmplt   a b m     ; wenn a < b Sprung nach m („compare less than“)
cmple   a b m     ; wenn a ≤ b Sprung nach m („compare less equal“)
cmpeq   a b m     ; wenn a = b Sprung nach m („compare equal“)
cmpne   a b m     ; wenn a ≠ b Sprung nach m („compare not equal“)
tstgt   a m       ; wenn a > 0 Sprung nach m („test greather than“)
tstge   a m       ; wenn a ≥ 0 Sprung nach m („test greather equal“)
tstlt   a m       ; wenn a < 0 Sprung nach m („test less than“)
tstle   a m       ; wenn a ≤ 0 Sprung nach m („test less equal“)
tsteq   a m       ; wenn a = 0 Sprung nach m („test equal“)
tstne   a m       ; wenn a ≠ 0 Sprung nach m („test not equal“)
jump    m         ; Unbedingter Sprung nach m
Die Ein-/Ausgabebefehle
input   a s       ; fordert a mit Text s im Dialog an (mit Pause)
output  a s       ; zeigt a mit Text s im Dialog an (mit Pause)
pause   s         ; Programmpause mit Dialogtext s (mit Pause)
proof   a s       ; Testausgabe von a mit Mitteilung s (ohne Pause)
info    s         ; Mitteilung s (ohne Pause)
cls               ; Löschen des Ausgabetextes
printn  a b c     ; Ausgabe der Zahl a mit b Vor- und c Nachkommastellen
prints  s         ; Ausgabe der Zeichenkette s in den Ausgabetext
save    s         ; Speichern des Ausgabetextes in Textdatei s.txt
read    a b       ; b+1 Symbole aus Datei a.dat lesen und ab Symbol a in Symboltabelle ablegen.
write   a b       ; Ab Symbol a fortlaufend b+1 Symbole aus Symboltabelle in Datei a.dat schreiben.
Die Indirektbefehle (oder Pointerbefehle)
adrof   p a       ; Adresse von a nach p schaffen. p wird Pointer auf a
get     a p q     ; Das Symbol mit der Adresse (p+q) nach a schaffen
put     p q a     ; a auf das Symbol mit der Adresse (p+q) schaffen
Die Systembefehle
init              ; Erste Zeile eines Programmes (wird automatisch erzeugt)
nop               ; Nullbefehl. Dieser Befehl macht nichts
mode    a         ; a=0: 'Ohne Halt', 1: 'Fehlerhalt', 2: 'Schrittweise'
halt              ; Hält das Programm an
err     a m       ; a ← Fehlercode (0=Kein Fehler). Bei Fehlern Sprung nach m.
exit              ; Programmbeendigung
Die Pseudobefehle

Pseudobefehle erzeugen keinen Code, der aus der Maschine läuft, sondern werden nur vom Assembler in der Assemblerzeit abgearbeitet.

_name   s         ; Dem Programm den Namen s geben
_var    a         ; Variable a deklarieren
_dim    a i       ; Feld a mit den Feldelementen a, a(0) ... a(i) deklarieren
_lab    m         ; Marke m definieren *)
_config i         ; Virtuelle Maschine mit Parameter i konfigurieren
_end              ; Programmende

*) ) Für den markendefinierenden Befehl _lab xyz gibt es auch die Kurzschreibweise xyz:“.

 

Die Operanden bedeuten:

a, b, c ... Zahlen oder Variablen (Rechenwerte)
p, q    ... Zahlen oder Variablen (Adressen)
i       ... ausschließlich Zahlen, Variablen gelten als Null
m       ... Marken
s       ... Zeichenketten


 

RTA-Dokumentation

Kompakte Sprachbeschreibung

RT-Assembler: Sprachbeschreibung (PDF, deutsch, 8 Seiten)
RT Assembler: Language description (Text, english)

Das ausführliche RTA-Handbuch

Kapitel 1 - Das Programm (PDF, deutsch, 6 Seiten)
Kapitel 2 - Die Befehle (PDF, deutsch, 16 Seiten)
Kapitel 3 - Kontrollstrukturen (PDF, deutsch, 6 Seiten)
Kapitel 4 - Pointer und Felder (PDF, deutsch, 5 Seiten)
Kapitel 5 - Programmierbeispiele (PDF, deutsch, 3 Seiten)
Kapitel 6 - Anhang(PDF, deutsch, 7 Seiten)

Referenzkarte

RTAL: Befehlsliste (PDF, deutsch)
RTAL: Instruction list (PDF, english)

Technical Documantation

RTAL Instruction Set Definition
RTAL Language Definition (Backus-Naur-Form).


 

Eine RTA-Programmierumgebung

RTA läuft auf einer synthetischen Maschine in 2 Umgebungen. Zum einen enthält Vimage einen integrierten RT-Debugger unter der Menüfunktion Extras/RT-Debugger. Weil RTA aber auch unabhängig von Vimage arbeiten kann, gibt es einen „RT-Assembler“ auch als selbständige Anwendung.

Zum Installieren rta.zip herunterladen, die 3 darin enthaltenen Dateien rta.cab, setup.lst und rta.cab auspacken und die setup.exe abarbeiten:

Download rta.zip (Etwa 2,7 MByte)


 

RTA-Beispielprogramme

Mit Hello World!

... lernt jede Programmiersprache das Laufen ...

Hello World!

Mathematische Beispielprogramme

Demo Mittelwertberechnung
Fakultäten berechnen
Primzahlen zusammentragen
Primzahlen mit dem Sieb des Eratoathenes sieben
Kubische Gleichung mit Cardanischer Formel lösen
Die Kreiszahl π mit der Reihenentwicklung von Plouffe berechnen
Die Eulersche Zahle e mit einer Reihenentwicklung berechnen
Sinusfunktion mit einer Reihenentwicklung berechnen

Codebeispieleprogramme

Feldzugriff
Subroutinenaufruf
Berechneter Sprung
Cardanische Formel als Unterprogrammcode (Nur zum Codekopieren - nicht allein lauffähig)


 

RTA-Tutorials und Specials ...

Mit dem Tutorial Die RTA-Entwicklungsumgebung kennenlernen kann man etwas ersten „Vimage/RTA-Stallgeruch“ aufnehmen. Anhand eines ersten Beispieles „Endlosschleife“ wird gezeigt, wie der vimageinterne RT-Debuggger bedient wird und wie man ein RTA-Programm abarbeitet.

Im Tutorial RTA-Einstieg werden 4 kleine Beispielprogramme für die Radio engine von Vimage programmiert.

Die Specialseite Wie RTA funktioniert gestattet einen Blick hinter die Kulissen des RT-Assemblers.

Die Specialseite Wie RTA Kartennetzentwürfe rechnet erläutert ausführlich, wie man vorgeht, um einen Kartennetzentwurf in RTA zu implementieren.

Eine Auswahl von RTA-Programmen für Kartennetzentwürfe gibt es auf der Download-Seite


 

Letzte Anmerkung: Heißt es nun RT oder RTA? — RT ist die Abkürzung von „Reduced Transliteration“ und der Name der Programmiersprache, etwa wie „C“. RTA heißt Reduced Transliteration Assembler, etwa wie „CC“ (C-Compiler).

24.02.2024

Zum Seitenanfang