Beiträge von faddie im Thema „Speicherbereiche in Schleifen kopieren“

    Es funzt ja tatsächlich mal was ^^

    Hab das Bacon-Layout umgesetzt und ich kann tatsächlich auf die Werte zugreifen und sie anzeigen. :Peace
    Die einzige Kröte, die es zu schlucken gilt: ich muss für jeden Wert immer mit vielen ASLs den Offset für den aktuellen Wert des Spielers berechnen. Ob das wohl noch eleganter ginge? :gruebel
    So sieht es derzeit aus: bisher wird der Name und das Vermögen des aktuellen Spielers angezeigt. Eigentlich bin ich soweit auch ganz zufrieden, aber Luft nach oben ist ja immer.

    Allerdings verstehe ich das Kopierproblem nicht.

    jepp wuerde das auch wie Hoogo machen, immerhin weist du ja das du 128 bytes laden/speichern moechtest dann is das
    hin und her kopieren ja eher einfach zu bewerkstelligen.


    Mein Problem ist, dass ich sowas noch nie gemacht habe. Klar, einen 128 Byte Block kopieren sollte ich hinbekommen. Hab schon bei Codebase64 ein Beispiel gefunden.

    Was mir aber unklar ist:
    bisher habe ich bei den Spielernamen einfach 32 Bytes kopiert und dafür dank euch das hier gemacht
    txa
    5x asl
    tay
    jsr print_text_offset

    Jetzt wollte ich eigentlich alle Werte einzeln kopieren und dafür eine Tabelle nutzen, weil die Attribute alle unterschiedlich lang sind.

    Bloß wie ich das anstelle, und ob das überhaupt geht - das ist der Kern meiner Unwissenheit :)

    Deshalb finde ich Lösung von Bitte melde dich an, um diesen Link zu sehen. eigentlich ganz einfach. Nur der Lerneffekt ist 'übersichtlich' ;)

    Huhu,
    ich hab schon wieder was, wobei ich gar nicht weiß, ob das überhaupt geht.

    Ich habe einen Speicherbereich, wo ich für alle Mitspieler die Attribute ablege. Aktuell dachte ich an 128 Byte pro Spieler, wobei ich aktuell 76 Byte auch wirklich benutze.
    Das Spiel ist rundenbasiert und ich wollte für jede Runde die Werte aus obigen Speicherbereich in einen temp. Bereich kopieren. Also ungefähr sowas:

    curentPlayerMoney:
    .dword $0000,$0000 // Vermögen 4 Byte
    currentPlayerDebtFlag:
    .byte 00 // Schulden in bit 7 1 Byte
    currentPlayerEstate: // Anteile der Gegend 1 Byte
    .byte 00
    // Besitz 14 Byte
    currentPlayerSlotmachine:
    .word $0000
    etc...


    Und dann habe ich noch player1 mit 128 byte Platzhalter, player2, player3 usw.

    Jetzt dachte ich mir das so: Ich lade pro Runde die Spielernummer ins X-Register und dann rufe ich eine Kopierroutine auf, die dann alles in den temp Bereich kopiert. Am Ende der Runde wird dann alles zurückgeschrieben.
    Aber... geht das auch?

    Ich dachte irgendwie an Tabellen, ungefähr so:

    // Adressen der Spielerarrays zum Durchzählen in der Schleife
    playerAddressTbl:
    .word player1, player2, player3, player4, player5, player6, player7, player8

    // Attribut-Offsets der einzelnen Werte
    playerAttrTbl:
    .byte 4,1,1,14,10,10,1,1,1,1,32


    Und jetzt kommt der Part, wo ich dann gar nicht mehr durchsteige :drunk:
    Der Algoritmus wäre:
    Lade den Größe des Speicherbereichs aus playerAttrTbl ins Y-Register: ldy playerAttrTbl, X
    Schleife über Y
    - Hole die Adresse von PlayerX
    - lade das Byte + Y in den Akku
    - speichere das Byte an die Zieladresse


    Könnte man das so machen? Und wenn ja, kann ich die Bytes 1:1 kopieren oder muss ich die LittleEndian-mäßig vertauschen. Geht das mit den Tabellen überhaupt oder muss ich die ZP benutzen?

    Es wäre schön, wenn jemand Licht in mein ewiges Dunkel bringen könnte :D