Beiträge von rayden im Thema „Indirekte Adressierung“

    Partielles kopieren ist erst der übernächste Schritt, weil das verkompliziert das Vorgehen ein wenig, da Du ja wissen musst, an welche Stelle wieviel bytes neu sollen ;)

    Mal eben runtergeklimpert, ungestet. Es ist Freitag Abend und ein Glas Wein ist anwesend, somit keine Garantie - allerdings hoffe ich, das indirekte-indexierte Adressierung einigermassen verständlich rüber kommt...

    Der Kram setzt voraus, dass alle PETSCII-Screens hintereinander liegen (Screen 1 ab framePetscii0000, Screen 2 ab framePetscii0000 + $0400, Screen 3 ab framePetscii0000 + $0400 * 2, etc.) und selbiges für Color-Ram, welches ab frameColor0000 liegt.
    Vielleicht habe ich da auch noch nen Klopper drin, ich weiss es nicht.

    Der nächste frame wäre dann ein inc frameCounter und anschliessender Aufruf von drawFrameInit.
    Vielleicht habe ich da auch noch nen Klopper dirn, ich weiss es nicht, weil ungetestet.

    Nachtrag:
    Je nachdem auf welcher Raster-Position man die Routine aufruft, sieht man sehr wahrscheinlich, wenn das Schreiben der Daten für den neuen frame stattfindet. Eine Lösung wäre hierfür mit double-buffering (zwei Screens) zu arbeiten. So kann der eine Screen aktualisiert werden, während der andere angezeigt wird. Wenn die Aktualisierung erfolgt ist, wird auf den fertigen Screen umgeschaltet. Glas ist leer...

    Das sieht schon ziemlich, nunja, wirr aus ;) dieses 25*40+whatever.

    Fassen wir mal kurz zusammen:
    Screen-RAM zeigt (ohne $D011 Tricks) von dem ausgewählten Screen $0000-$03E7 an.
    Also im Falle vom Basic-Startbildschirm $0400-$07E7.
    Selbiges gilt für das Color-RAM. Da dieses ab $D800 liegt, ist es der Bereich $D800-$DBE7.

    Da es aber weitaus einfacher ist, mit 4 pages, also $0400 zu rechnen, kann man doch 4 pages "stumpf" ins Screen-RAM und 4 pages in Color-RAM schreiben.

    Somit könnte man mit einem frameCounter arbeiten, welcher immer den offset für den nächsten frame berechnet.

    Und dann alle Adressen, also Start/Quelle der Framedaten, Ziel Screen-Ram und Ziel Color-RAM auf die Zeropage legen, sodass du diese entsprechend inkrementierst.
    Also indirekte-indexierte Adressierung nutzen anstelle von selbst-modifizierendem code (geht natürlcih auch).