bin jetzt endgültig auf Turbo Macro Pro +REU umgestiegen. Da besagter Assembler Makros und bedinget Assemblierung beherrscht, versuche ich mich gerade an zwei Makros um relokatiblen Code zu erstellen, genauer Substitute für JMP und JSR:
jmmp .macro
- jmmp .macro
- sta a+1
- stx x+1
- tsx
- lda #>ß1-1
- sta $100,x
- dex
- lda #<ß1-1
- sta $100,x
- dex
- txs
- a lda #0
- x ldx #0
- c rts
- .endm
- jssr .macro
- sta a+1
- stx x+1
- tsx
- lda #>c
- sta $100,x
- dex
- lda #<c
- sta $100,x
- dex
- lda #>ß1
- sta $100,x
- dex
- lda #<ß1
- sta $100,x
- dex
- txs
- a lda #0
- x ldx #0
- rts
- .endm
- *=1000
- ;beispiel fuer die Anwendung
- #jmmp here
- here #jssr there
- rts
- there inc $d020
- rts
ß1 ist der übergebene Parameter, also jeweils die Zieladresse des Sprungs/ Aufrufs.
Meine erste Frage lautet: geht das noch einfacher, geschickter, besser...?!
Und das zweite was mir unter den Fingern brennt, wäre jetzt natürlich die jumps, die mit branches zu substitionieren wären (also innerhalb -128 oder +127 Bytes Offset) über eine bedingte Assembleirung innerhalb des Macros mit Verzweigungen zu realisieren.
Etwa so:
Aber wie muss die Bedingung lauten, mit .ifne/.ifpl kann wird ja scheinbar auf das Vorzeichen des 16-bit-Ausdrucks geprüft, also $7fff (plus) --> $8000 (minus)
...
Wie kann man prüfen ob der Abstand zw. Programmzähler und Zieladresse mit einem Byte im Zweierkomplement ausdrückbar ist?
irgendjemand eine Idee?