WAI: Difference between revisions
(added basic info) |
(→External Links: hid archive URL) |
||
(40 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''' | ||
|+ | |+ | ||
| | |[[Implied]] (type 3) | ||
|CB | |CB | ||
|1 byte | |1 byte | ||
Line 16: | Line 14: | ||
{| class="wikitable" style="float:right;clear:right;width:30%" | {| class="wikitable" style="float:right;clear:right;width:30%" | ||
!colspan="9"|Flags | !colspan="9"|Flags Affected | ||
|+ | |+ | ||
|N | |[[Negative Flag|N]] | ||
|V | |[[Overflow Flag|V]] | ||
|M | |[[M Flag|M]] | ||
|X | |[[X Flag|X]] | ||
|D | |[[Decimal Flag|D]] | ||
|I | |[[I Flag|I]] | ||
|Z | |[[Zero Flag|Z]] | ||
|C | |[[Carry Flag|C]] | ||
|+ | |+ | ||
|. | |. | ||
Line 36: | Line 34: | ||
|. | |. | ||
|} | |} | ||
'''WAI''' (WAit for Interrupt) is a 65x instruction that waits until an interrupt is received. The processor consumes less power while waiting. The [[RDY pin]] is pulled low during the third cycle and the bus is freed up. The interrupt is serviced immediately. | |||
If the [[interrupt disable flag]] is set, then the way servicing occurs is for control to simply fall through to the instruction following WAI. This is a very efficient way to service because the ISR is inlined and there is no need to [[RTI]]. | |||
If that flag is clear, control instead jumps through a vector into the [[interrupt handler]]. Use RTI at the end of this ISR to return control to the instruction following WAI. | |||
No flags are affected. | |||
==== Syntax ==== | |||
<pre> | |||
WAI | |||
</pre> | |||
Eyes & Lichty (at the bottom of page 522) claims that WAI was first introduced on the 65802/816, but it is on the 65c02 datasheet. | |||
=== See Also === | |||
* [[IRQ]] | |||
* [[STP]] | |||
* [[NOP]] | |||
* [[SLEEP]] | |||
* [[BE]] | |||
* [[Interrupt Disable Flag]] | |||
* [[SEI]] | |||
* [[CLI]] | |||
=== External Links === | |||
* [[Eyes & Lichty]], [https://archive.org/details/0893037893ProgrammingThe65816/page/522 page 522] on WAI | |||
* [[Labiak]], [https://archive.org/details/Programming_the_65816/page/n213 page 203] on WAI | |||
* snes9x implementation of WAI: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L3313 | |||
* undisbeliever on WAI: https://undisbeliever.net/snesdev/65816-opcodes.html#wai-wait-for-interrupt | |||
* Clark, Bruce. http://www.6502.org/tutorials/65c816opcodes.html#6.9 | |||
[[Category:ASM]] | [[Category:ASM]] | ||
[[Category:65c02 additions]] | |||
[[Category:One-byte Instructions]] | |||
[[Category:Control Instructions]] | |||
[[Category:Implied Instructions]] | |||
[[Category:Three-cycle Instructions]] |
Latest revision as of 02:37, 6 August 2024
Basic Info | |||||||
---|---|---|---|---|---|---|---|
Addressing Mode | Opcode | Length | Speed | ||||
Implied (type 3) | CB | 1 byte | 3 cycles |
Flags Affected | ||||||||
---|---|---|---|---|---|---|---|---|
N | V | M | X | D | I | Z | C | |
. | . | . | . | . | . | . | . |
WAI (WAit for Interrupt) is a 65x instruction that waits until an interrupt is received. The processor consumes less power while waiting. The RDY pin is pulled low during the third cycle and the bus is freed up. The interrupt is serviced immediately.
If the interrupt disable flag is set, then the way servicing occurs is for control to simply fall through to the instruction following WAI. This is a very efficient way to service because the ISR is inlined and there is no need to RTI.
If that flag is clear, control instead jumps through a vector into the interrupt handler. Use RTI at the end of this ISR to return control to the instruction following WAI.
No flags are affected.
Syntax
WAI
Eyes & Lichty (at the bottom of page 522) claims that WAI was first introduced on the 65802/816, but it is on the 65c02 datasheet.
See Also
External Links
- Eyes & Lichty, page 522 on WAI
- Labiak, page 203 on WAI
- snes9x implementation of WAI: https://github.com/snes9xgit/snes9x/blob/master/cpuops.cpp#L3313
- undisbeliever on WAI: https://undisbeliever.net/snesdev/65816-opcodes.html#wai-wait-for-interrupt
- Clark, Bruce. http://www.6502.org/tutorials/65c816opcodes.html#6.9