Changing the processor flags
As seen in the previous chapter, the SNES supports 9 processor flags. There are ways to affect these processor flags, which are explained in this chapter.
SEP
Opcode | Full name | Explanation |
SEP | Set processor flags | Sets specified processor flags to 1 |
SEP sets the selected processor flag bits to 1.
SEP is used as following:
The uppercased letters are the activated processor flags. This code sets the negative flag.
REP
Opcode | Full name | Explanation |
REP | Reset processor flags | Sets specified processor flags to 0 |
REP resets the selected processor flag bits to 0.
REP is used as following:
In the beginning, the decimal mode was enabled, and the negative flag was set, but after REP #$08
, the decimal mode flag got disabled and the negative flag is still set.
XCE and the emulation mode
Because the emulation mode bit is "hidden" above the carry flag, there's a dedicated opcode which exchanges the carry flag with the emulation mode flag.
Opcode | Full name | Explanation |
XCE | Exchange carry and emulation | Swaps the values of carry flag and emulation mode flag |
You can access the emulation mode by using SEC
then XCE
, and leave it using CLC
then XCE
. By default, SNES starts up in emulation mode. This is why you often see the opcodes CLC
and XCE
among the very first opcodes in disassemblies.
Other opcodes
There are other opcodes which immediately affect a single processor flag.
Opcode | Full name | Explanation |
SEI | Set interrupt disable flag | Sets the interrupt disable flag, setting it to 1, thus disabling IRQ |
CLI | Clear interrupt disable flag | Clears the interrupt disable flag, setting it to 0, thus enabling IRQ |
SED | Set decimal flag | Sets the decimal mode flag, setting it to 1, changing the SNES into decimal mode |
CLD | Clear decimal flag | Clears the decimal flag, setting it to 0, changing the SNES into hexadecimal mode |
SEC | Set carry flag | Sets the carry flag, setting itt o 1 |
CLC | Clear carry flag | Clears the carry flag, setting it to 0 |
CLV | Clear overflow flag | Clears the overflow flag, setting it to 0 |
Last updated