Benutzer-Werkzeuge

Webseiten-Werkzeuge


skripte

src-Datei

Für ein einfaches MP3 sieht ein Skripteintrag folgendermaßen aus:

Precode=15313
TYPE=1
[Note]
Ein optionaler
mehrzeiliger Kommentar
[Content]
c:\users\m\abc.mp3

Die TingID ist in diesem Fall 15313.

Ein richtiger Skrtipteintrag hat die folgende Form:

Precode=16134
TYPE=0
[Note]
Kran
[Content]
cmp v71, 1
je falsch
cmp v72, 1
je falsch
cmp v73, 1
je falsch
cmp v70, 1
je richtig
jmp aussage

:falsch
playoid 15306
jmp end

:aussage
playoid 15298
jmp end

:richtig
playoid 15299
clearver
jmp end

:end
end

Precode entspricht der TingID. Der TYPE ist 0. Unter [Note] steht der Code. Innerhalb des Quellcodes gelten Zeilen die mit // beginnen als Kommentar.

Binärcode in der ouf-Datei

Der Binärcode wird zusätzlich zum Befehl end immer nochmals mit 0x00 angeschlossen. [Register] und [Value] sind jeweils 16 Bit Werte. Für jemanden mit Grundkenntissen in Assembler sollten die nachfolgenden Infos genügen um eigene Skripte zu erstellen.

Kommando-Referenz

Assembler Beschreibung Binärcode
end Programmende 0x0000
clearver Löscht alle Variablen (???) 0x0100
set [Register] [Value] Setzt ein Register auf einen Wert 0x0201
set [Register] [Register] Kopiert ein Register in ein anderes 0x0202
cmp [Register] [Value] Vergleich zw. einem Register und einem Wert 0x0301
cmp [Register] [Register] Vergleich zw. zwei Registern 0x0302
and [Register] [Value] Binäres-Und eines Registers mit einem Wert 0x0401
and [Register] [Register] Binäres-Und eines Registers mit einem anderen Register 0x0402
or [Register] [Value] Binäres-Oder eines Registers mit einem Wert 0x0501
or [Register] [Register] Binäres-Oder eines Registers mit einem anderen Register 0x0502
not [Register] 0x0000 Binäre-Verneinung eines Registers (Der zweite Parameter scheint nicht genutzt zu weden) 0x0602
jmp [Label] Sprung 0x0800
je [Label] bedingter Sprung bei Gleichheit 0x0900
jne [Label] bedingter Sprung bei Ungleichheit 0x0a00
jg [Label] bedingter Sprung wenn größer 0x0b00
jge [Label] bedingter Sprung wenn größer oder gleich 0x0c00
jb [Label] bedingter Sprung wenn kleiner 0x0d00
jbe [Label] bedingter Sprung wenn kleiner oder gleich 0x0e00
add [Register] [Value] Addiert einen Wert zu einem Register 0x0f01
add [Register] [Register] Addiert ein Register zu einem anderen 0x0f02
sub [Register] [Value] Subtrahiert einen Wert von einem Register 0x1001
sub [Register] [Register] Subtrahiert ein Register von einem anderen Register 0x1002
playoid [Value] Spielt eine OID, gegeben als Wert, ab (siehe Abschnitt playoid & callid) 0x1601
playoid [Register] Spielt eine OID, gegeben als Register, ab (siehe Abschnitt playoid & callid) 0x1602
pause [Value] Pausiert für x Zehntelsekunden 0x1701
pause [Register] Pausiert für x Zehntelsekunden 0x1702
call [Value] siehe: Abschnitt call & return -
callid [Value] siehe: Abschnitt playoid & callid (kein offiziell unterstützter Befehl) 0x1501
return siehe: Abschnitt call & return 0x1400

Kommando-Referenz (inoffizielle Befehle)

Assembler Beschreibung
mul [Register] [Value] arg1 = arg1 * arg2
mul [Register] [Register] arg1 = arg1 * arg2
div [Register] [Value] arg1 = arg1 / arg2
div [Register] [Register] arg1 = arg1 / arg2
mod [Register] [Value] arg1 = arg1 mod arg2
mod [Register] [Register] arg1 = arg1 mod arg2
divmod [Register] [Register] help = arg1
arg1 = arg1 / arg2
arg2 = help mod arg2
min [Register] [Value] arg1 = min( arg1, arg2)
min [Register] [Register] arg1 = min( arg1, arg2)
max [Register] [Value] arg1 = max( arg1, arg2)
max [Register] [Register] arg1 = max( arg1, arg2)
exp2 [Register] arg1 = 2 ^ arg1
rnd [Register] [Register] arg1 = „Zufallszahl zwischen 0 (incl.) und arg2 (incl.)“
rnd [Register] [Value] arg1 = „Zufallszahl zwischen 0 (incl.) und arg2 (incl.)“
volume [Register] setzt die Stiftlautstärke (1-20)
volume [Value] setzt die Stiftlautstärke (1-20)
lastid [Register] arg1 = „letzte angewählte Ting-OID“
lang [Register] arg1 = „Sprachcode“
setbit [Register] [Register] setzt das arg2-te Bit im Register arg1 auf 1
setbit [Register] [Value] setzt das arg2-te Bit im Register arg1 auf 1
unsetbit [Register] [Register] setzt das arg2-te Bit im Register arg1 auf 0
unsetbit [Register] [Value] setzt das arg2-te Bit im Register arg1 auf 0
getbit [Register] [Register] [Register] arg1 = 1 wenn das arg3-te Bit von arg2 auf 1 gesetzt ist, ansonsten 0
getbit [Register] [Value] [Register] arg1 = 1 wenn das arg3-te Bit von arg2 auf 1 gesetzt ist, ansonsten 0
getbit [Register] [Register] [Value] arg1 = 1 wenn das arg3-te Bit von arg2 auf 1 gesetzt ist, ansonsten 0
getbit [Register] [Value] [Value] arg1 = 1 wenn das arg3-te Bit von arg2 auf 1 gesetzt ist, ansonsten 0
lock siehe Abschnitt „lock & unlock“
unlock siehe Abschnitt „lock & unlock“

Als inoffizielle Erweiterung ist es möglich im Skript-Code anstatt Dezimalzahlen auch Hexadiezimalzahlen zu verwenden. Hierzu muss 0x als Präfix der Zahl vorangestellt werden.

Register

Die Register sind jeweils 16 bit unsigned Werte. Es gibt keinen Überlauf, d.h. es gilt: 0xffff + 1 = 0.

V0 bis V91 Speicherregister (read + write)
V92 lock & unlock (siehe Abschnitt „lock & unlock“)
V93 Sprachcode (siehe Dateisystem für eine Liste der Codes) (read)
V94 Volume (2-20) (write)
V95 Lezter mit dem Stift angewählter Code (read)
V96 ?
V97 Interrupt
V98 ein zufälliger Wert von 0 bis 32767 (0x7FFF) (read)
V99 ?
V100 - ? ?

playoid & callid

Wenn playoid auf ein MP3 zeigt, wird das MP3 abgespielt und das Skript danach fortgesetzt. Wenn es auf ein weiteres Skript zeigt, wird scheinbar erst einmal das Skript fortgesetzt ohne, dass das zweite Skript aufgerufen wird. Wenn das ursprüngliche Skript abgearbeitet ist, wird das zweite Skript aufgerufen. Diese Art der Verwendung habe ich nirgends bei offiziellen Büchern gefunden, d.h. es könnten unerwünschte Effekte auftreten.

callid habe ich in keinem offiziellen Buch gefunden. Somit ist der Name dieses Befehls auch willkürlich von mir gewählt. Es entspricht aber scheinbar einer Auswahl der Ting-ID mit dem Stift. Wenn man hier eine MID angibt, kann man auch das aktuelle Buch wechseln.

call & return

In einer Unterroutine wird der Befehl return als 0x1400 kodiert. In der aufrufenden Routine wird der Befehl call durch den Code der Unterroutine ersetzt! Der Befehl return wird durch einen jmp Befehl ersetzt, der auf das Ende der eingebetteten Unterroutine zeigt. Durch dieses untypische Vorgehen ist z.B. keine Rekursion möglich.

lock & unlock (das Register V92)

Mit dem Register V92 kann der „Ting-Smart (neu)“ in einen Modus versetzt werden, der verhindert, dass wenn gerade ein Track abspielt kein neuer angewählt werden kann. Das funktioniert nicht mit dem „Ting-Smart“. Hier wird das Register ignoriert. Um den Modus anzuschalten nutzt man set V92,1 (oder lock), um ihn auszuschalten set V92,0 (oder unlock). Der Lock bleibt auch nach dem Befehl end aktiv. (Vielen Dank an Markus)

Melden Sie sich an, um einen Kommentar zu erstellen.
skripte.txt · Zuletzt geändert: 11.08.2021 10:15 (Externe Bearbeitung)