RTI
Mnemonic: | RTI |
Opcode: | $40 |
Anzahl der Bytes: | 1 |
Befehlsgruppe: | Sprungbefehl |
Adressierung: | implizit |
Beeinflusste Flags im Statusregister: | |
Carry-Flag | |
Negative-Flag | |
Overflow-Flag | |
Zero-Flag | |
Interrupt-Flag | |
Break-Flag | |
Decimal-Flag | |
Taktzyklen: | 6 |
Der Assembler-Befehl RTI beendet die Abarbeitung einer Interrupt-Service-Routine (ausgelöst von einem IRQ, NMI oder dem BRK-Befehl) und kehrt wieder ins Hauptprogramm zurück.
Der Programmierer muss darauf achten, dass alle Bytes, die in der Interrupt-Service-Routine auf den Stapel geschoben wurden, wieder entfernt werden müssen, bevor der Rücksprung mit RTI erfolgt.
Bei der Rückkehr ins Hauptprogramm löscht RTI im Allgemeinen das Interrupt-Flag, weil das Statusregister vom Stapel zurückgeholt wird (vergleiche dazu PLP). Allerdings bleibt das Interrupt-Flag gesetzt, wenn
- eine IRQ-Routine, während sie zwar mit gesetztem Interrupt-Flag weitere IRQs unterbindet, dennoch von einem nicht maskierbaren Interrupt (NMI) unterbrochen wurde
oder - dort ein BRK zur Ausführung gelangte
und von dort dann zur IRQ-Routine zurückgekehrt wird.
Die genauen Schritte, die bei RTI ablaufen, sind wie folgt:
- Byte vom Stapel holen (St)
- St in Statusregister schreiben
- Byte vom Stapel holen (Lo)
- Byte vom Stapel holen (Hi)
- Springe zur Adresse Hi*256 + Lo
Im Gegensatz zu RTS wird auf dem Stapel die exakte Rücksprungadresse erwartet und der Prozessorstatus vom Stapel geholt.
Funktionsprinzip
Bedeutung der Buchstaben im Befehl
RTI | ReTurn from Interrupt |
Rückkehr vom Interrupt |
Beispiel
; Dieses Programm stellt eine Interrupt-Service-Routine dar, die die Rahmenfarbe ändert. ; Die Register Akku, X und Y werden am Beginn gesichert und am Ende wieder herstellt, ; obwohl dies für die hier dargestellte Aufgabe nicht notwendig und nur exemplarisch ; zeigt, wie der CPU-Status vollständig unbeeinflusst bleibt, falls in der ISR ; auch beliebig andere Register gebraucht werden. *=$c000 ; Startadresse der Interrupt-Service-Routine isr pha ; Akku am Stapel sichern. txa pha ; X-Register am Stapel sichern. tya pha ; Y-Register am Stapel sichern. inc $d020 ; Erhöht den Inhalt von $d020 (Rahmenfarbe) um eins. pla tay ; Y-Register wiederherstellen pla tax ; X-Register wiederherstellen pla ; Akku wiederherstellen rti ; Status wiederherstellen und ; Rücksprung zur Unterbrechungsstelle
Speicherauszug:
.c000 48 pha .c001 8a txa .c002 48 pha .c003 98 tya .c004 48 pha .c005 ee 20 d0 inc $d020 .c008 68 pla .c009 a8 tay .c00a 68 pla .c00b aa tax .c00c 68 pla .c00d 40 rts