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