13.12.2014, 21:54
Hört sich nach einen "Codewar" an.
Ok, um die Abstürze zu vermeiden musst du ein paar Register retten.
[ab3]GetReg a0, &Liste() ; Basisadresse um Variabeln bearbeiten zu können
GetReg a1, &Liste()\array[0] ; Basisadresse für die ML-Routine
MOVE.l a4, -(a7)
MOVE.l a5, -(a7)
MOVE.l a6, -(a7)
MOVE.l d7, -(a7)
JSR (a1)
MOVE.l d7, (a7)+
MOVE.l a6, (a7)+
MOVE.l a5, (a7)+
MOVE.l a4, (a7)+[/ab3]
d7 ist nicht unbedingt notwendig, kommt drauf an was für code noch drumherum existiert.
a4 musst du nur retten wenn du in einer Function bist (Basis für lokale Variablen)
a5 musst du IMMER retten (Basis für globale Variablen/Resourcen)
a6 ist der Cache für library Aufrufe. Hängt auch vom drumliegenden Code ab.
Trotzdem wäre eine Library doch irgendwie sauberer.
Mit der "libary.include" geht das recht fix. Und du kannst auch Assembler verwenden, wenn es schnell sein muss.
Ok, um die Abstürze zu vermeiden musst du ein paar Register retten.
[ab3]GetReg a0, &Liste() ; Basisadresse um Variabeln bearbeiten zu können
GetReg a1, &Liste()\array[0] ; Basisadresse für die ML-Routine
MOVE.l a4, -(a7)
MOVE.l a5, -(a7)
MOVE.l a6, -(a7)
MOVE.l d7, -(a7)
JSR (a1)
MOVE.l d7, (a7)+
MOVE.l a6, (a7)+
MOVE.l a5, (a7)+
MOVE.l a4, (a7)+[/ab3]
d7 ist nicht unbedingt notwendig, kommt drauf an was für code noch drumherum existiert.
a4 musst du nur retten wenn du in einer Function bist (Basis für lokale Variablen)
a5 musst du IMMER retten (Basis für globale Variablen/Resourcen)
a6 ist der Cache für library Aufrufe. Hängt auch vom drumliegenden Code ab.
Trotzdem wäre eine Library doch irgendwie sauberer.
Mit der "libary.include" geht das recht fix. Und du kannst auch Assembler verwenden, wenn es schnell sein muss.