loop
....
mov b, #spv-1
add b, befehl
jmpret a, b
rt jmp loop
spv jmp be1
jmp be2
...
be1 .....
ret 'nach rt
be2 .....
ret 'nach rt
long a 0
long b 0
Das zeigt welches problem ich hab.
Ich könnte ja auch die variable a sichern und beim eintritt in bel1/2 neu setzen um so einen gemeinsamen rückkehrpunkt zu bekommen.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
sieht aus wie volltreffer werd's heute abend Testen.
Danke.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
ich müsste die RET's durch statische jmp ersetzen und diese würden bei einen jumpret von einer anderen Routine zerstört werden(ist im obrigen beispiel nicht enthalten sorry ).
Der Rücksprung müsste dann schon immer ein einfaches RET sein auch bei den vielen Rücksprüngen nach dem Sprungverteiler.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550 hat geschrieben:ich müsste die RET's durch statische jmp ersetzen und diese würden bei einen jumpret von einer anderen Routine zerstört werden ...
Versteh ich jetzt nicht. Das Beispiel (im Link) kommt mit normalen (single-use) ret insn aus. Macht also nichts wenn sie von anderen Routinen aufgerufen werden. Der einzige Knackpunkt vielleicht: Du benoetigst beide Adressen (label, label_ret) um die eigentliche jmpret insn zu fuettern. Selbst wenn Du auf index commands bestehst gibt's da 'ne Loesung, Problem ist dann aber die Einsprungtabelle (Speicherplatz).
Wenn ich Deine Code-Fragmente richtig interpretiere, hast Du also einen Befehls-Index (0..N) und willst die Funktion aber mit 'nem call aufrufen. Ist das so weit OK?
das würde bei index max = 64 --> 128 long's bedeuten.
Oder ich müsste die Runtime auf 32 kürzen (darauf wird es warscheinlich hinauslaufen).
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
Hi, kuroneko
Wenn ich dein Beispiel richtig verstehe brauche ich den Spinncode zur Laufzeit.
Leider ist nach dem start kein Spinn mehr aktiv.
Ich habe ich zu dieser Lösung entschieden.
' ---------------------------------------------------------------------
TLOOP wrlong line, areg 'neuen Linezeiger schreiben
' ---------------------------------------------------------------------
...
mov SPRV, sprvm
add SPRV, code
shr code, #$6 wz 'untere 6 bit löschen
sub code, #$0 wz 'Test ob richtiger 64 Token-block
if_nz jmp #RTLOOP 'wenn nicht dann rücksprung
SPRV jmp #SPRV0 '5C 7C 00 (1B+code)
SPRV0 jmp #J00
...
J00 ' STOP
' Statusregister auf 1 setzen um IDE zu zeigen das ein STOP-Befehl empfangen wurde
' Zeilenregister zeigt auf nächste Zeile
movs JM00_ret, #TLOOP
JM00 wrlong h00000001, stat
JM00_ret ret
J00 ist einsprung vom Sprungverteiler
JM00 ist einsprung von externer routine über einen Call #JM00
Selbst wenn ich die runtime auf 64 befehle lasse kostet das mich gerade 64 longs und ich hätte immer noch 91 frei
Danke kuroneko die Informationen waren sehr hifreich.
Gruß PIC18F2550
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
drone265/278 Barbarus hic ergo sum, quia non intellegor ulli. Ein Barbar bin ich hier, da ich von keinem verstanden werde. ʎɐqǝ ıǝq ɹnʇɐʇsɐʇ ǝuıǝ ɹǝpǝıʍ ǝıu ǝɟnɐʞ ɥɔı ´uuɐɯ ɥo
PIC18F2550 hat geschrieben:Wenn ich dein Beispiel richtig verstehe brauche ich den Spinncode zur Laufzeit.
Wenn Du damit das Beispiel aus meinem letzten Posting meinst dann hast Du etwas missverstanden. Der dort gelistete SPIN code ist nur fuer Demonstrationszwecke. Und was die Form der command loop angeht, auch nur ein Beispiel um den Befehl in code zu speichern.