Moin,
ich stehe mal wieder auf dem Schlauch
Ich möchte eigentlich nur 1-4 Spielern ermöglichen, ihre Namen einzugeben und das dann entsprechend im Speicher abzulegen.
Momentan scheitere ich daran, den Namen überhaupt abzulegen. Ich habe 32 Bytes für einen Namen vorgesehen und der Speicherbereich beginnt bei 0e08. Bei 4 Spielern wären das also die Bereiche:
0e08 + 0*32
0e08 + 1*32
0e08 + 2*32
0e08 + 3*32
Aber ich habe keine Ahnung, wie ich die Zieladresse richtig berechne, bzw. an LDA übergabe.
Namen eingeben funzt, den Offset berechnen und im Y-Register ablegen (zB.2*32) geht auch. Das LDA nach dem !end Label geht aber nicht, sondern wird einen Syntax Error. Mittlerweile macht sich große Verwirrung breit
Wie könnte man das richtig machen?
Code
- //===============================================================================
- // Syntax: KickAssembler 5
- // Wer spielt mit
- //===============================================================================
- ldx #00 // X-Register mit Spieleranzahl beladen
- enterNames: // Spielernamen eingeben
- mov16 #strEnterName : TextPtr // "Namen eingeben" anzeigen
- jsr Print_text
- stx ZeroPageTemp // X-Wert sichern, weil GetInput ihn überschreibt
- txa
- clc // Dazu 0x30h addieren, wegen PetSCI und Ziffer
- adc #$31 // und außerdem noch +1 weil von 0 gezählt
- jsr BSOUT
- lda #'?' // Fragezeichen am Satzende
- jsr BSOUT
- lda #' ' // Leerzeichen hintendran
- jsr BSOUT
- ldy #playerNameLength // 32 Zeichen darf der Name haben
- ldx #<filter_alphanumeric // Diese Zeichen sind erlaubt
- lda #>filter_alphanumeric
- jsr Get_filtered_input
- ldx ZeroPageTemp // Aktuelle Spielerzahl für Offset-Schleife
- mov #00 : ZeroPageLow2 // Offset-Wert auf Null setzen
- !loop:
- cpx #00 // Bei Spieler 0 keinen Offset draufschlagen
- beq !end+
- lda ZeroPageLow2 // Offset-Var laden
- clc // Spielernamenlänge aufschlagen
- adc #playerNameLength
- sta ZeroPageLow2 // Neuen Offset speichern
- dex // X verringern
- bne !loop- // Schleife fertig
- !end:
- ldy ZeroPageLow2
- lda #<playerNames, y // FALSCH ! Zieladresse für den Spielernamen
- sta TextPtr // an TextPtr schreiben
- lda #>playerNames, y
- sta TextPtr+1
- jsr Move_input_to_TextPtr // Namen an die neue Speicherstelle schreiben
- ldx ZeroPageTemp // X-Wert aus Temp holen
- inx // Spielerzähler erhöhen
- cpx playerCount // Mit Anzahl vergleichen
- bne enterNames // weiter Spielername