ich habe mal einen code erstellt, der eine absolute sprungadresse enthält.
dieser code kann an x-belibiger stelle im ram gestartet werden.
der jmp $xxxx wird immer an die richtige ram-adresse springen.
das ist natürlich kein echter relativer sprung aber es kommt dem schon nahe.
der aufwand um das zu realisieren ist auch unverhältnismäßig hoch.
Code
; ---- beispiel für einen relativen sprung.
;
; ---- der code kann an beliebigen ram-adresse gestartet
; ---- werden.die rahmenfarbe wird immer auf schwarz gesetzt
;
; ---- bitte action repaly deaktivieren, weil der
; ---- beispielcode sonst nicht funktioniert.
* = $c000
sta $d020 ; ---- rahmenfarbe auf schwarz
rts ; ---- ende
* = $c0d0
; ---- hier wird das program gestartet
lda $15 ; ---- hi-byte, zeigt die startadresse des codes an
ldy #$20 ; ---- da wo das hi-byte des jmp-befehls steht
sta ($14),y ; ---- sprungadresse anpassen hi-byte
lda $14 ; ---- lo-byte,zeigt die startadresse des codes an
sec ; ---- übertrag setzten
sbc #$d0 ; ---- abstand vom jmp $c000 und der zieladresse
pha ; ---- differenz auf stack schieben
bcs ast01 ; ---- ist übertrag gesetzt, weiter ab ast01
lda $15 ; ---- wenn übertrag gelöscht
sec ; ---- dann hi-byte
sbc #$01 ; ---- einen weniger
ldy #$20 ; ---- da wo das hi-byte des jmp befehls steht
sta ($14),y ; ---- sprung anpassen hi-byte
ast01 pla ; ---- differenz vom stack holen
ldy #$1f ; ---- abstand zu sprung anpassen lo-byte
sta ($14),y ; ---- sprung anpassen lo-byte
lda #$00 ; ---- wert für rahmen schwarz
jmp $c000 ; ---- hier steht immer die richtige sprungadresse
Alles anzeigen