[Tiptoi] Vergleich auf < (kleiner als) bzw. >= geht im play modus aber nicht auf dem Stift

Andreas Binzenhöfer binzi at binzi.de
Sa Mai 2 09:35:50 CEST 2015


Ich habe jetzt eine Lösung gebaut, die ohne Jump-Befehl und ohne Registerüberlauf auskommt. Der Vollständigkeit halber hänge ich sie jetzt auch noch an den Diskussionsfaden an. Vielleicht kann ja jemand die Idee gebrauchen.

Idee:
Ich zähle bei der Codeeingabe einfach die codestelle mit und prüfe bei jeder Berührung einer Zahl, ob diese Zahl an der richtigen Stelle im Code ist. Falls ja, zähle ich die Anzahl der richtigen eins hoch. Beim Testen schaue ich dann einfach noch, ob der Code die richtige Länge hat und ob die Anzahl der richtigen Zahlen passt. Falls nein Code Falsch und Reset, ansonsten kann man tun, was auch immer man tun möchte, wenn der Code richtig ist.

Der richtige Code im Beispiel ist wieder 135246

So sieht das yaml-file aus:

final:
  - $codestelle==0? $codestelle:=1 $richtig:=0 P(StartFinal)
  - $codestelle!=7? $codestelle:=1 $richtig:=0 P(CodeFalsch)
  - $richtig!=6? $codestelle:=1 $richtig:=0 P(CodeFalsch)
  - P(FinalKoordinaten)

  f0:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle+=1 P(f0)
  f1:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==1? $richtig+=1 $codestelle+=1 P(f1) 
  - $codestelle+=1 P(f1)
  f2:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==4? $richtig+=1 $codestelle+=1 P(f2) 
  - $codestelle+=1 P(f2)
  f3:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==2? $richtig+=1 $codestelle+=1 P(f3) 
  - $codestelle+=1 P(f3)
  f4:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==5? $richtig+=1 $codestelle+=1 P(f4) 
  - $codestelle+=1 P(f4)
  f5:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==3? $richtig+=1 $codestelle+=1 P(f5) 
  - $codestelle+=1 P(f5)
  f6:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle==6? $richtig+=1 $codestelle+=1 P(f6) 
  - $codestelle+=1 P(f6)
  f7:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle+=1 P(f7)
  f8:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle+=1 P(f8)
  f9:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle+=1 P(f9)

-----Ursprüngliche Nachricht-----
Von: tiptoi [mailto:tiptoi-bounces at lists.nomeata.de] Im Auftrag von Andreas Binzenhöfer
Gesendet: Samstag, 2. Mai 2015 09:02
An: 'Die Mailingliste für Tiptoi-Bastler'
Betreff: Re: [Tiptoi] Vergleich auf < (kleiner als) bzw. >= geht im play modus aber nicht auf dem Stift

Jetzt wird es spannend: Der Vergleich mit <7 geht auch mit einem niedrigen fünfstelligen Code nicht.

Folgendes geht mit play, aber nicht auf dem Stift (Selbst bei sehr langsamer Eingabe von 13524 kommt auch CodeFalsch):

  final:
  - $codestelle==0? $code:=0 $codestelle:=1 $station:=7 P(StartFinal)
  - $code!=13524? $code:=0 $codestelle:=1 $station:=7 P(CodeFalsch)
  - $code==13524? $station:=7 P(FinalKoordinaten)

  f0:
  - $codestelle==0? P(f0) P(erstfinalstarten)
  - $codestelle>=7? P(f0)
  - $codestelle==1? P(f0)
  - $code*=10 $codestelle+=1 P(f0)
  f1:
  - $zahl:=1 P(f1) J(finaleingabe)
  f2:
  - $zahl:=2 P(f2) J(finaleingabe)
  f3:
  - $zahl:=3 P(f3) J(finaleingabe)
  f4:
  - $zahl:=4 P(f4) J(finaleingabe)
  f5:
  - $zahl:=5 P(f5) J(finaleingabe)
  f6:
  - $zahl:=6 P(f6) J(finaleingabe)
  f7:
  - $zahl:=7 P(f7) J(finaleingabe)
  f8:
  - $zahl:=8 P(f8) J(finaleingabe)
  f9:
  - $zahl:=9 P(f9) J(finaleingabe)
  finaleingabe:
  - $codestelle==0? P(erstfinalstarten)
  - $codestelle<7? $codestelle+=1 $code*=10 $code+=$zahl

-----Ursprüngliche Nachricht-----
Von: tiptoi [mailto:tiptoi-bounces at lists.nomeata.de] Im Auftrag von Tobias Bäumer
Gesendet: Samstag, 2. Mai 2015 08:27
An: Die Mailingliste für Tiptoi-Bastler
Betreff: Re: [Tiptoi] Vergleich auf < (kleiner als) bzw. >= geht im play modus aber nicht auf dem Stift

Ah, ok. Dadurch macht das tttool also quasi schon beim Erzeugen der GME ein "mod 65536" auf die Werte und auf dem Stift kommen daher nur gültige Werte an.
Jetzt wäre m.E. trotzdem noch interessant, ob das Script für einen 5stelligen Code funktioniert.
Idee: Vielleicht ist der Register-Überlauf im Stift doch nicht so sauber gelöst, sondern verändert die im Speicher davor oder dahinter liegende Variable.
Mit dem zusätzlichen Play-Command liegt dann im Speicher vielleicht was anderes an der betroffenen Stelle.
Generell sollten wir wohl vermeiden, die Register überlaufen zu lassen.
Ich hoffe, das war jetzt nicht zu konfus... ;-)

> Am 02.05.2015 um 01:26 schrieb Joachim Breitner <mail at joachim-breitner.de>:
> 
> Hi,
> 
> da verschiebt sich nichts, alle Zahlen werden vom tttool als 16bit-Zahlen in die GME-Datei rausgeschrieben. Höherwertige bits gehen einfach verloren.
> 
> Gruß, Joachim
> 
> Am 1. Mai 2015 22:31:31 MESZ, schrieb "Tobias Bäumer" <to_b at gmx.de>:
>> Ich bin ehrlich gesagt überrascht, dass es überhaupt klappt...
>> Hast du mal getestet, ob es auf dem Stift funktioniert, wenn du mit 
>> einem 5stelligen Code (<=65535) arbeitest?
>> Hintergrund: Du sprengst mit Zahlen über 65535 ja nicht nur die 
>> Register, sondern auch das uns bekannte Format der Script-Zeilen.
>> Schau dir mal die erzeugte GME-Datei an: Entspricht die noch dem 
>> Schema
>> "t1 aaaa cccc t2 bbbb" für alle Bedingungen?
>> 135246 ist in Hex fünfstellig, lässt sich also nicht als bbbb 
>> darstellen.
>> Ich könnte mir vorstellen, dass sich da in der GME-Datei einiges 
>> verschiebt. Das zusätzliche Play-Command rückt es dann vielleicht 
>> versehentlich wieder gerade.
>> 
>>> Am 01.05.2015 um 14:48 schrieb Andreas Binzenhöfer <binzi at binzi.de>:
>>> 
>>> Danke Tobias. Du hattest Recht.
>>> 
>>> Der Test ging jetzt schneller als erwartet.
>>> 
>>> Mein Register läuft natürlich über und jeder Wert, der mod 65536 den
>> gleichen Wert liefert wie 135246 mod 65536  funktioniert.
>>> 
>>> $code==135246?
>>> Ist z.B. äquivalent zu
>>> $code==69710?
>>> 
>>> Was natürlich immer noch nicht erklärt, warum in meinem Beispiel 
>>> dann
>> der Vergleich für ein völlig anderes Register mit <7 nur dann 
>> funktioniert, wenn am Ende der Zeile noch ein Sound-File abgespielt 
>> wird.
>>> 
>>> Von: tiptoi [mailto:tiptoi-bounces at lists.nomeata.de] Im Auftrag von
>> Tobias Bäumer
>>> Gesendet: Freitag, 1. Mai 2015 14:05
>>> An: Die Mailingliste für Tiptoi-Bastler
>>> Betreff: Re: [Tiptoi] Vergleich auf < (kleiner als) bzw. >= geht im
>> play modus aber nicht auf dem Stift
>>> 
>>> Kannst du die Register dann mal gegen den angenommenen Höchstwert
>> (65535) vergleichen, bzw. gegen "DEINWERT mod 65535"?
>>> Wenn z.B. 65536 im Register als 1 ankommt, wären Probleme beim
>> Vergleich ja durchaus zu erwarten.
>>> Hängt alt davon ab, wie der Stift einen Überlauf handhabt.
>>> 
>>> 
>>> Am 01.05.2015 um 13:30 schrieb Andreas Binzenhöfer <binzi at binzi.de>:
>>> 
>>> Ich habe es jetzt noch mal mehrfach mit unterschiedlichen Codes >
>> 2^16 getestet. Es geht zuverlässig auf dem Stift. Theoretisch sollte 
>> das ja dann eigentlich nicht funktionieren.
>>> 
>>> Ich mache folgendes:
>>> -          Schreibe eine sechsstellige Zahl in ein Register
>>> -          Prüfe, ob das Register exakt dieser sechsstelligen Zahl
>> entspricht
>>> -          Nur dann gebe ich einen speziellen Sound aus
>>> 
>>> Das funktioniert bestens.
>>> (Mit der Einschränkung, dass er die Anweisungen bei  < 7 und >=7, 
>>> wie
>> ich oben beschrieben habe, nach einem Jump-Befehl nur dann ausführt, 
>> wenn nach der Anweisung noch ein Audio-File abgespielt wird. Da ich 
>> das zweite Audio-File nicht wollte, mache ich jetzt einfach die 
>> Anweisungen bei <7 und >=7 einfach ohne Jump-Befehl direkt beim 
>> oid-code. Das geht auch mit sechstelligen Zahlen zuverlässig und
>> problemlos)
>>> 
>>> Von: tiptoi [mailto:tiptoi-bounces at lists.nomeata.de] Im Auftrag von
>> Tobias Bäumer
>>> Gesendet: Freitag, 1. Mai 2015 12:33
>>> An: Die Mailingliste für Tiptoi-Bastler
>>> Betreff: Re: [Tiptoi] Vergleich auf < (kleiner als) bzw. >= geht im
>> play modus aber nicht auf dem Stift
>>> 
>>> Ich zitiere mich mal selbst...
>>> 
>>> Anfang der weitergeleiteten E‑Mail:
>>> 
>>> 
>>> 
>>> Von: Tobias Bäumer <to_b at gmx.de>
>>> Datum: 13. Januar 2015 21:39:09 MEZ
>>> An: Die Mailingliste für Tiptoi-Bastler <tiptoi at lists.nomeata.de>
>>> Betreff: Re: [Tiptoi] komische zeile
>>> 
>>> 
>>> 
>>> [...]
>>> Die Register sind übrigens wirklich uint_16. Zieht man von 0 noch 1
>> ab, kommt 65535 raus.
>>> 
>>>> Am 01.05.2015 um 11:30 schrieb Ulrich Sibiller
>>> <ulrich.sibiller at gmail.com>:
>>> 
>>> 2015-05-01 10:24 GMT+02:00 andi <aaaaandi at gmail.com>:
>>> 
>>> 
>>> Hi,
>>> Kann das Problem daran liegen, dass Du mit Werten groesser als 2^16 
>>> rechnest. Der Tiptoi rechnet aber nur mit uint16.
>>> 
>>> Das war auch meine erste Idee. Aber bist du dir sicher mit dem
>> _u_int?
>>> Soweit ich weiß, haben wir mal 16bit angenommen, aber nicht
>> überprüft.
>>> Und ob das ganze signed oder unsigned ist hat IIRC auch noch keiner 
>>> überprüft.
>>> 
>>> Freiwillige vor!
>>> 
>>> Uli
>>> 
>>> --
>>> tiptoi mailing list
>>> tiptoi at lists.nomeata.de
>>> https://lists.nomeata.de/mailman/listinfo/tiptoi
>>> --
>>> tiptoi mailing list
>>> tiptoi at lists.nomeata.de
>>> https://lists.nomeata.de/mailman/listinfo/tiptoi
>>> --
>>> tiptoi mailing list
>>> tiptoi at lists.nomeata.de
>>> https://lists.nomeata.de/mailman/listinfo/tiptoi
>> 
>> 
>> ---------------------------------------------------------------------
>> ---
> 

--
tiptoi mailing list
tiptoi at lists.nomeata.de
https://lists.nomeata.de/mailman/listinfo/tiptoi


--
tiptoi mailing list
tiptoi at lists.nomeata.de
https://lists.nomeata.de/mailman/listinfo/tiptoi





Mehr Informationen über die Mailingliste tiptoi