Beiträge von Mike im Thema „Pixel über Array statt Poke setzen“

    ZeroZero: richtig, das BASIC V2 auf dem C64 hat keine DEF TYPE Anweisung.

    Tale-X: sobald Integervariablen beteiligt sind, ist immer auch eine Int <-> Float Wandlung beteiligt. In Verbindung mit den BOOLEschen Operatoren AND, OR und NOT wird man aber gleich doppelt gestraft: während die normale Ausdrucksauswertung in Float arbeitet, arbeiten die BOOLEschen Operatoren tatsächlich intern mit Int - sie können aber nicht wissen, daß (bzw. ob) die Ausdrücke (links und) rechts von ihnen "reines" Int sind und werten sie darum zunächst als Float aus!

    Das heißt z.B. bei 'R% = S% AND T%' werden S% und T% zunächst nach Float und direkt wieder nach Int gewandelt, das Ergebnis von Int nach Float und bei der Zuweisung wieder nach Int. :drunk:

    Aus diesem Grund hab' ich das BI() Feld auch als Float belassen.

    Integer-Variablen machen wirklich nur bei großen Feldern zur Platzersparnis Sinn.

    Zitat von Tale-X

    Außerdem hatte sich bei mir irgendwie festgesetzt, dass die Implementierung des Poke-Befehls ineffizient sein soll (hab' ich aber nie überprüft).


    Nun ja, das ist eigentlich nicht verwunderlich: POKE muß nun mal einen numerischen Ausdruck auswerten, der dann im Bereich 0..65535 liegen muß, auf ein Komma testen, und dann einen zweiten numerischen Ausdruck auswerten, der dann auf den Bereich 0..255 überprüft wird. Und das alles bloß, um anschließend ein einziges popliges Byte irgendwo im Speicher zu ändern.

    Früher hat man in diesem Zusammenhang gern von 'Mächtigkeit' der jeweiligen Befehle gesprochen. Soll heißen, wie viel an nachvollziehbarer Aktion geschieht, wenn der Befehl verwendet wird. So gesehen, dürfte POKE tatsächlich einer der am wenigsten mächtigen Befehle sein. Umgekehrt ist z.B. in einer Grafik-Erweiterung der Linienzieh-Befehl extrem mächtig.

    Anderes Beispiel: wenn man ein aus mehreren Zeichen im Textbildschirm bestehendes Objekt mit POKE bewegen soll, wird das schnell recht langsam. Setzt man an Stelle dessen einmal den PRINT-Befehl ein, kann man da durchaus eine (positive!) Überraschung erleben.

    Auf die Weise hab' ich beispielsweise mal die Bergkette in einem Port von Moon Patrol auf dem VC-20 bewegt. :)

    ...

    Deine zwei Beispiele oben sind übrigens nicht gut vergleichbar. Das Auswerten der 255 ist gegenüber der -1 echt "teuer". Setz' mal in beiden Fällen den Dezimalpunkt für 0 ein und vergleich dann nochmal: ich komm dann auf 243 und 366 (oder jeweils auch mehr, je nachdem wie lange man auf der RETURN-Taste hängenbleibt, übrigens... 8\|) und da im zweiten Fall auch doppelt soviele Befehle und Ausdrücke ausgewertet werden müssen, steht POKE auf einmal gar nicht mehr so schlecht da.