wie komme ich nach einem jsr ohne rts raus ... z.B. mit einem jmp ?
Muss ich einfach den Stapel hochzählen???
jsr / rts
Moderator: Rockford
- Kveldulfur
- Beiträge: 1036
- Registriert: 17.08.2021 02:32
- Has thanked: 474 times
- Been thanked: 437 times
- Kontaktdaten:
Re: jsr / rts
Wenn du den Stack bereinigen willst, einfach 2x PLA ausführen, was die Rücksprungadresse von Stack holt.
Meine Projekte findest Du hier...
- Kveldulfur
- Beiträge: 1036
- Registriert: 17.08.2021 02:32
- Has thanked: 474 times
- Been thanked: 437 times
- Kontaktdaten:
- LarsImNetz
- Beiträge: 216
- Registriert: 24.08.2021 18:27
- Has thanked: 201 times
- Been thanked: 112 times
- Kontaktdaten:
Re: jsr / rts
FYI:
Gibt noch den komplizierteren Weg über das X-Register, falls der Akku erhalten werden soll.
Kostet auch nur 8 Zyklen, aber 2 Bytes mehr. Dafür bleibt der Akku erhalten.
Gibt noch den komplizierteren Weg über das X-Register, falls der Akku erhalten werden soll.
Code: Alles auswählen
tsx
inx
inx
txs
Re: jsr / rts
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
- Dr. Irata
- Beiträge: 1265
- Registriert: 24.08.2021 14:40
- Has thanked: 182 times
- Been thanked: 417 times
- Kontaktdaten:
Re: jsr / rts
... 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...
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...
-
- Beiträge: 190
- Registriert: 17.08.2021 11:03
- Wohnort: Salzburg, Austria
- Has thanked: 20 times
- Been thanked: 96 times
- Kontaktdaten:
Re: jsr / rts
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
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
Wer ist online?
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast