Hallo Sascha,

Zitat von
Mythbuster
mal rein aus Neugier: Wie „funktioniert“ diese Zugübernahme vom Gerät zu WB überhaupt? Ich gebe zu, ich habe mir dazu bisher keine Gedanken gemacht ... ich nutze es eigentlich auch nicht, hatte es nur mal getestet.
Ich ging davon aus, dass ein Signal abgegriffen wird, wenn der Computer seinen Zug ausgibt. Dass WB auch den Einblick in den laufenden Rechenvorgang als Zug interpretiert, hätte ich in der Tat nicht erwartet ...

nach einem total anstrengenden Tag gestern (2x100km Autofahrt, Familientreffen und 4-stündiges Minigolf-Turnier) habe ich mich erst jetzt wieder so halbwegs erholt, daß ich hier länger schreiben kann.
Also die Schach-GUI (Winboard/Arena) selbst hat damit gar nichts zu tun, das Schach-Plugin 'liest' die Züge von der emulierten Engine und übergibt diese dann der GUI in üblicher Koordinatenform.
Und diese 'Zugerkennung' im Plugin ist eben manchmal nicht so einfach: bei Geräten mit eigenem Sensor-Schachbrett geht das noch relativ leicht, hier wird ein 'fertiger' Zug einfach vom relativ neuen Sensorboard-Interface übernommen - wie das genau geschieht hab ich mir noch gar nicht angesehen (entweder über die Feld-LEDs oder direkt über irgendwelche I/O-Ports), aber wegen diesem neuen SB-Interface hat Sandro ja das ganze Plugin-System eben umgeschrieben.
Wenn nun aber ein Gerät gar kein eigenes Sensorbrett besitzt (wie z.B. die beiden Mephistos I & II), dann bleibt im Plugin nur die Möglichkeit, die Züge direkt aus der LCD-Anzeige abzulesen, und da liegt eben der Hund begraben:
weil viele dieser Geräte ja kein eindeutiges 'Signal' liefern, daß (bzw. wann) ihr Rechenvorgang beendet ist, arbeitet das Plugin kontinuierlich alle 64 Schachfelder ab und scannt bei jedem Feld, ob dessen Koordinaten momentan gerade in der LCD-Anzeige erscheinen - wenn das der Fall ist, dann wird dieses Feld eben als ein Teil des Zuges interpretiert, und nach 2 solcher 'Treffer' ist dann der Zug abgeschlossen.
Falls ein Gerät aber während der Rechenphase auch schon den jeweils untersuchten (oder momentan besten) Zug anzeigt, dann hält eben das Plugin auch eine solche Anzeige schon für einen 'fertigen' Zug, und übermittelt diesen an Winboard - was natürlich schief geht, wenn sich das Schachprogramm in weiterer Folge dann doch noch für einen anderen Zug entscheidet.
Wie Du siehst ist dieses Problem nicht so einfach zu lösen, weil es 'die ultimative Lösung' für alle Geräte einfach nicht gibt, und für jedes einzelne eine eigene Lösung zu finden, wäre bei so vielen Modellen ziemlich aufwendig.
Manche Geräte piesen ja, wenn die Berechnung fertig ist, aber ich glaube nicht, daß irgendein Plugin dieses Tonsignal 'anzapft' (hab sowas jedenfalls bisher noch in keinem Plugin entdeckt). Bei anderen Modellen leuchtet ein bestimmtes Segment in der LCD-Anzeige auf, wenn der Rechenvorgang abgeschlossen ist (z.B. bei den Boris-Geräten), was dann als endgültiger Zug interpretiert werden kann - leider flackert dieses Segment (z.B. beim Boris Diplomat) aber auch während der Rechenphase manchmal auf, sodaß hier wieder ein zusätzlicher Trick nötig ist (in diesem Fall hab ich mit dem Debugger ein Byte im RAM gefunden, das während des Rechnens seinen Wert ändert, aber das muß man auch erst mal entdecken und außerdem gibt's sowas nicht bei jedem Gerät).
Und wenn gar keine der oben genannten Möglichkeiten funktioniert, dann ist es noch schwieriger: der Mensch erkennt ja relativ einfach, wenn der Computer fertiggerechnet hat (Zug blinkt eben nicht mehr!), aber im Plugin müßte man das eben extra berücksichtigen, d.h. das Plugin müßte testen, ob ein gerade angezeigter Zug für längere Zeit (z.B. 1 oder 2 sec) permanent angezeigt wird (und bleibt!), und das ist nicht so einfach, weil die Blinkzeiten und Blinkraten bei den Geräten unterschiedlich sind. Außerdem würde das eine Verlängerung der Reaktionszeiten bei jedem einzelnen Zug um eben diese 1-2 sec bedeuten, was man ja auch nicht unbedingt haben möchte.
Kurz zusammengefasst (mit einem berühmten Zitat eines früheren österreichischen Politikers): "Es ist alles sehr kompliziert!"
Grüße,
Franz