jsr / rts

Moderator: Rockford

Antworten
Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

jsr / rts

Beitrag von Dr. Irata »

wie komme ich nach einem jsr ohne rts raus ... z.B. mit einem jmp ?
Muss ich einfach den Stapel hochzählen???

Benutzeravatar
Kveldulfur
Beiträge: 1057
Registriert: 17.08.2021 02:32
Has thanked: 496 times
Been thanked: 453 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Kveldulfur »

Wenn du den Stack bereinigen willst, einfach 2x PLA ausführen, was die Rücksprungadresse von Stack holt.
Meine Projekte findest Du hier...

Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Dr. Irata »

supi... also nach 2x pla ist quasi der jsr "egalisiert" ?!

Benutzeravatar
Kveldulfur
Beiträge: 1057
Registriert: 17.08.2021 02:32
Has thanked: 496 times
Been thanked: 453 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Kveldulfur »

Ja genau.
Meine Projekte findest Du hier...

Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Dr. Irata »

habe es gerade implementiert und läuft... sehr gut! Vielen Dank!

Benutzeravatar
LarsImNetz
Beiträge: 220
Registriert: 24.08.2021 18:27
Has thanked: 202 times
Been thanked: 120 times
Kontaktdaten:

Re: jsr / rts

Beitrag von LarsImNetz »

FYI:
Gibt noch den komplizierteren Weg über das X-Register, falls der Akku erhalten werden soll.

Code: Alles auswählen

 tsx
 inx
 inx
 txs
Kostet auch nur 8 Zyklen, aber 2 Bytes mehr. Dafür bleibt der Akku erhalten.

Benutzeravatar
mega-hz
Beiträge: 1438
Registriert: 03.11.2021 11:23
Has thanked: 431 times
Been thanked: 492 times

Re: jsr / rts

Beitrag von mega-hz »

Dr. Irata hat geschrieben:
20.04.2025 00:53
wie komme ich nach einem jsr ohne rts raus ... z.B. mit einem jmp ?
Muss ich einfach den Stapel hochzählen???
Hmm, das klingt wie:
"Er: ich fahre mal eben Zigaretten holen"... lernt an der Tanke ne Neue kennen und kommt nicht mehr zurück... :-)

Find ich etwas komisch...
zu JSR gehört ein RTS, zu SEI ein CLI, zu PHA ein PLA...
Sonst kann es auch mal unvorgesehene Probleme geben.

Ich würd da eher 2 JSR Routinen schreiben und Zusätnde abfragen.
keine PN's mehr! Bitte per email kontaktieren! atari1450xld©mega-hz.de

Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Dr. Irata »

... das ist so nicht ganz korrekt!
Wenn du um Code zu sparen eine immer wiederkehrende kleine Subroutine machst in der aber eine Bedingung drin ist, diese zu verlassen ohne an den Startpunkt zu kommen, dann muss man zwingend aus der Subroutine ohne rts kommen.
Falls nicht klar oder verständlich kann ich hier gerne für dich ein Beispiel posten...

Benutzeravatar
mega-hz
Beiträge: 1438
Registriert: 03.11.2021 11:23
Has thanked: 431 times
Been thanked: 492 times

Re: jsr / rts

Beitrag von mega-hz »

ja gerne!
keine PN's mehr! Bitte per email kontaktieren! atari1450xld©mega-hz.de

HiassofT
Beiträge: 191
Registriert: 17.08.2021 11:03
Wohnort: Salzburg, Austria
Has thanked: 20 times
Been thanked: 96 times
Kontaktdaten:

Re: jsr / rts

Beitrag von HiassofT »

Wenn Du an mehreren Stellen zurück zur Hauptroutine willst und/oder der Check in verschiedenen Unterroutine-Ebenen stattfindet oder falls eine Unterroutine selber Werte auf dem Stack sichert dann ist es am einfachsten wenn Du in der Hauptroutine den Wert des Stack-Pointers (S Register) in eine Speicheradresse sicherst (TSX, STX STACKP) und dann einfach den Wert wiederherstellst (LDX STACKP, TXS).

So macht es die SIO Routine im OS (und mein Highspeed Code) um mit der Break-Taste den aktuellen SIO Call abbrechen zu können. Break wird da an verschiedenen Stellen gecheckt (beim Senden, beim Enpfangen, beim Warten auf Checksum/ACK Byte etc) und das Ergebnis soll immer das gleiche sein: bei Break wird sofort abgebrochen und Status 128 zurückgeliefert.

Natürlich muss man aufpassen, dass man nach dem Abbrechen den Rechner wieder in einen "sauberen" Zustand versetzt und ggf vorgenommene Änderungen rückgängig macht (zB bei SIO den Pokey wieder in den Standard-Zustand versetzt). Das kann manchmal aber recht einfach sein und so hat man eine simple Möglichkeit ohne haufenweise Checks im Code eine lang dauernde Routine auf User-Wunsch abbrechen zu können.

so long,

Hias

Renében
Beiträge: 8
Registriert: 08.05.2025 05:55
Been thanked: 1 time
Kontaktdaten:

Re: jsr / rts

Beitrag von Renében »

Hallo! Wenn du einen JSR benutzt, wird die Rücksprungadresse auf den Stapel gelegt. Normalerweise benutzt man RTS, um diese Adresse vom Stapel zu holen und zurückzuspringen. Ein JMP funktioniert hier nicht direkt, da es keine Rücksprungadresse verwendet. Wenn du ohne RTS zurück willst, müsstest du den Stackpointer manuell anpassen und die Adresse durch Laden vom Stapel in den PC bringen, aber das ist fehleranfällig. Besser ist es, RTS zu verwenden oder den Ablauf anders zu gestalten.

Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Dr. Irata »

Hey Reneben...
sag mal, bist du eine KI?

Benutzeravatar
RhoSigma
Beiträge: 94
Registriert: 29.04.2024 22:44
Has thanked: 1 time
Been thanked: 15 times
Kontaktdaten:

Re: jsr / rts

Beitrag von RhoSigma »

Renében hat geschrieben:
21.07.2025 08:25
Hallo! Wenn du einen JSR benutzt, wird die Rücksprungadresse auf den Stapel gelegt. Normalerweise benutzt man RTS, um diese Adresse vom Stapel zu holen und zurückzuspringen. Ein JMP funktioniert hier nicht direkt, da es keine Rücksprungadresse verwendet. Wenn du ohne RTS zurück willst, müsstest du den Stackpointer manuell anpassen und die Adresse durch Laden vom Stapel in den PC bringen, aber das ist fehleranfällig. Besser ist es, RTS zu verwenden oder den Ablauf anders zu gestalten.
Nein. Stack-Manipulationen und Sprünge ohne den Return Befehl zu verwenden sind Usus auf allen Architekturen. Weder Exception-Handling, noch Coroutinen, noch Debugger funktionieren ohne solch Low-level Manipulationen. Insofern is das "State of the Art" . Mit derselben Argumentation könntest Du sagen, Programmieren in Basic ist weniger Fehleranfällig als in Assembler. Ja, aber...

Es ging hier auch nicht darum, RTS zu emulieren, sondern um einen "Rücksprung ins Hauptprogramm", (also eine Art von Exception Handling). Statt eine elend lange Kette von Fehlerbedingungen zu checken, geht man halt manuell den Stack hoch. Im Prinzip kann man argumentieren, dass TSX und TXS "genau dafür da sind".

Benutzeravatar
Dr. Irata
Beiträge: 1281
Registriert: 24.08.2021 14:40
Has thanked: 186 times
Been thanked: 432 times
Kontaktdaten:

Re: jsr / rts

Beitrag von Dr. Irata »

Hmmm - also das Thema war ja schon erschöpfend abgehandelt, onsofern verstehe ich jetzt diesen relativ allgemein gehaltenen Beitrag von Rene nicht so ganz... auffällig ist ja auch bei ihm, daß er einen komischen Beitrag pro Tag postet... daher die Frage ;-)

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast