Beiträge von awsm im Thema „Indirekte Adressierung“

    Hier der Code mit allen Änderungen (finde das immer gut, den Stand auch wieder zu posten für andere)

    Selfmod geht eigentlich gar nicht. Irgendwann wills du so eine Routinen mal in ein ROM packen und stehst du ziemlich dumm da.
    Ausserdem gehören Daten und Code aus fundamental-religiösen Gründen immer getrennt.

    Interessante Sichtweise mit dem ROM... wird bei mir niemals passieren, aber daran hatte ich noch nie gedacht, stimmt!
    Wenn ich kein selfmod mache, dann brauche ich noch mehr freie Adresse in der Zeropage, um auch die Position im Screen und Color RAM zu speichern, oder siehst Du einen anderen Weg?

    Vielen Dank Euch für die tolle Hilfe, obwohl alle Beteiligten schon leicht einem im Tee hatten :D
    Bitte melde dich an, um diesen Link zu sehen. Dein Hinweis, die Adresse in der ZP zu inkrementieren, hat nochmal viel zum Verständnis beigetragen, danke!

    Hier der Code, der nun CHAR RAM und COL RAM anzeigt:

    Ein Problem habe ich aber noch, das habt Ihr sicher gesehen: die vierte Schleife sollte eigentlich nicht bis 255 durchlaufen, sondern kürzer sein, weil alle Daten eingelesen wurden. Da hab ich noch Probleme, das effizient zu lösen, ohne nochmal Extraloops anzufügen. Wie mache ich das besser?

    Danke rayden für Deine Hilfe.

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

    Der Aufbau ist logisch aber ich verstehe was Du meinst


    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.

    Korrekt


    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.


    Ja, das könnte ich machen, ich möchte aber u.a. so Sachen machen wie PETSCII auf PETSCII kopieren, auch partiell. Es geht also nicht nur um's umschalten. Ausserdem möchte ich mehr als nur 4 Screens durchschalten.

    Unabhängig vom Deinem sinnvollen Vorschlag möchte ich das Thema indirekte Adressierung anhand dieses Codebeispieles gerne ein für alle mal verstehen. Das blockiert mich jedes mal...

    Kaum hat man mal zwei Jahre keinen Code angefasst fängt man wieder bei Null an.... ;)

    Ich verzweifle gerade an Folgendem: ich habe eine kleine Routine zum anzeigen von PETSCII. Diese hat die Adresse, wo die PETSCII Daten liegen "hart verdrahtet" -> frame0000.

    Funktioniert auch alles. Ich möchte die Routine aber flexibel halten und unterschiedliche Screens übergeben.
    Also dachte ich irgend sowas wie dieser Aufruf:

    Code
    lda #< frame0000
        sta $80
        lda #> frame0000
        sta $81
        jsr petscii_init


    Und dann im Code die Adresse aus der ZP holen

    Code
    lda ($80)+0*$100,x
        sta $0400+0*$100,x
        lda ($80+1)+25*40+0*$100,x
        sta $d800+0*$100,x

    Aber das ist alles totaler Blödsinn und ich mische Äpfel mit Birnen.
    Kurzum: wie muss meine Routine aussehen, damit ich sie für mehrere Screens nutzen kann?
    Ist Selfmod-Code die Lösung?

    Ich danke Euch.