We've just updated MediaWiki and its underlying software. If anything doesn't look or work quite right, please mention it to us. --RanAS
BRK (SPC700): Difference between revisions
From SnesLab
(categories) |
(seems to ignore interrupt enable flag) |
||
(21 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{| class="wikitable" style="float:right;clear:right;width:40%" | |||
{| class="wikitable" style="float:right;clear:right;width: | |||
!colspan="8"|Basic Info | !colspan="8"|Basic Info | ||
|+ | |+ | ||
Line 9: | Line 7: | ||
|'''Speed''' | |'''Speed''' | ||
|+ | |+ | ||
| | |[[Stack Addressing|Stack]] / Interrupt | ||
|0F | |0F | ||
|1 byte | |1 byte | ||
Line 18: | Line 16: | ||
!colspan="8"|Flags Affected | !colspan="8"|Flags Affected | ||
|+ | |+ | ||
|N | |[[Negative Flag|N]] | ||
|V | |[[Overflow Flag|V]] | ||
|P | |[[Direct Page Flag|P]] | ||
|B | |[[Break Flag|B]] | ||
|H | |[[Half-Carry Flag|H]] | ||
|I | |[[Interrupt Enable Flag|I]] | ||
|Z | |[[Zero Flag|Z]] | ||
|C | |[[Carry Flag|C]] | ||
|+ | |+ | ||
|. | |. | ||
Line 36: | Line 34: | ||
|. | |. | ||
|} | |} | ||
'''BRK''' is an [[SPC700]] instruction that triggers a software interrupt. The [[program counter]] and flags are pushed to the [[stack]]. The program counter then jumps to the address stored at $FFDE. | |||
==== Syntax ==== | |||
<pre> | |||
BRK | |||
</pre> | |||
BRK very well could be the only interrupt source on the S-SMP. It is the only instruction to unconditionally set the [[break flag]]. | |||
According to [[fullsnes]], [[EI]] and [[DI]] have no effect other than toggling the [[interrupt enable flag]], so the SPC700's BRK seems to be non-maskable like the 65c816's [[BRK]]. | |||
To return from the [[interrupt handler]], use [[RETI]]. | |||
=== See Also === | |||
* [[BRK]] (65c816) | |||
* [[SLEEP]] | |||
* [[STOP]] | |||
=== References === | === References === | ||
* [https://archive.org/details/SNESDevManual/book1/page/n234 Appendix C-9 of Book I] of the official Super Nintendo development manual | * Table C-16 in [https://archive.org/details/SNESDevManual/book1/page/n234 Appendix C-9 of Book I] of the official Super Nintendo development manual | ||
* [https://github.com/gilligan/snesdev/blob/master/docs/spc700.txt#L368 anomie's SPC700 doc] | |||
[[Category:ASM]] | [[Category:ASM]] | ||
[[Category:Audio]] | [[Category:Audio]] | ||
[[Category:Subroutine Call Return Commands]] | |||
[[Category:One-byte Instructions]] |
Latest revision as of 00:31, 14 August 2024
Basic Info | |||||||
---|---|---|---|---|---|---|---|
Addressing Mode | Opcode | Length | Speed | ||||
Stack / Interrupt | 0F | 1 byte | 8 cycles |
Flags Affected | |||||||
---|---|---|---|---|---|---|---|
N | V | P | B | H | I | Z | C |
. | . | . | 1 | . | 0 | . | . |
BRK is an SPC700 instruction that triggers a software interrupt. The program counter and flags are pushed to the stack. The program counter then jumps to the address stored at $FFDE.
Syntax
BRK
BRK very well could be the only interrupt source on the S-SMP. It is the only instruction to unconditionally set the break flag.
According to fullsnes, EI and DI have no effect other than toggling the interrupt enable flag, so the SPC700's BRK seems to be non-maskable like the 65c816's BRK.
To return from the interrupt handler, use RETI.
See Also
References
- Table C-16 in Appendix C-9 of Book I of the official Super Nintendo development manual
- anomie's SPC700 doc