Wäre ja nett, wenn du uns noch mitteilen könntest, was daran denn falsch läuft.
Na ja. Das einzige offensichtliche Problem ist, dass du die SPEED-Daten wahrscheinlich von ganz woanders liest. Du musst dem Programm noch mitteilen, aus welcher Bank es die Daten überhaupt lesen soll (sprich das "high Byte" der Adresse, also zum Beispiel das $12 in $123456). Momentan sagst du nur "lade aus $3456" (angenommen, die SPEEDDOWN- bzw. SPEEDUP-Tabelle liegt da), aber die Bank muss sich das Programm selbst ermitteln. Dann nimmt es das Data Bank Register, und das kann werweißwas sein. Gängige Praxis ist es, das DBR auf denselben Wert zu setzen wie das Program Bank Register (die Bank, in der der Code gerade läuft). Das macht man mit PHK : PLB, und das wirst du auch in jedem Sprite so finden.
Codedcb "MAIN"
PHB ; Data Bank sichern
PHK ; \ Program Bank = Data Bank
PLB ;/
JSR [...]
PLB ; Data Bank wiederherstellen
RTL
Und dabei merke ich gerade, dass du immer noch TRASM benutzt. Yikes.
Gibt's einen Grund, warum du Sprites nicht für xkas/Asar schreibst?
Außerdem fällt mir auf, dass deine Tabellen zu klein sind. Ich nehme an, du möchtest auch mal mehr als drei Münzen haben? Deine Tabellen decken nur die Fälle 0, 1, 2 und 3 ab. Wenn du für jede Münze unterschiedliche Geschwindigkeiten haben willst, könntest du entweder alle 100 Bytes ausschreiben, oder eine Funktion finden, die von der Anzahl der Münzen auf die Geschwindigkeit schließen lässt. Wenn du die Gechwindigkeitsänderung nur in Schritten von, sagen wir mal, 32, Münzen haben willst, kannst du folgendes tun:
CodeLDA $0DBF
LSR
LSR
LSR
LSR
LSR
TAY
Das teilt deine Münzen durch zweiunddreißig (=fünf Mal durch zwei), bevor sie ins Y-Register geladen werden. (Man kann auch LSR #5 schreiben, aber das wird zu demselben Code "assembelt" [?] und ist in ausgeschriebener Form vielleicht besser zu verstehen.)
Ein paar Optimierungs-Tipps:
Das erste RTS kannst du weghauen.
Das Ganze ebenfalls.
BEQ-BRA-Konstrukte wie dieses hier kann man umformen. BNE Up : Down: (oder BEQ Down : Up:) tut dasselbe.
Kurz gesagt, den Knopfdruck-Teil würde ich so schreiben:
CodeLDA $15 ; \
AND #$80 ; | Prüfe, ob der Spieler eine Sprungtaste drückt
BEQ Down
Up: ; \
LDA SPEEDUP,y ; | Setze den Y-Speed abhängig von den Münzen
STA $AA,x ; |
BRA End ; /
Down: ; \
LDA SPEEDDOWN,y ; | Setze den Y-Speed abhängig von den Münzen
STA $AA,x ; |
\
End:
(Mann, bin ich schlecht im Formulieren heute.
)