CPU status flag behavior: Difference between revisions

From NESdev Wiki
Jump to navigationJump to search
(Complete rewrite to make it clearer)
m (link NMI and IRQ)
Line 10: Line 10:
||  |+--- I: Interrupt priority level
||  |+--- I: Interrupt priority level
||  |    (0: /IRQ and /NMI get through; 1: only /NMI gets through)
||  |    (0: /IRQ and /NMI get through; 1: only /NMI gets through)
||  +---- D: ADC and SBC use binary-coded decimal arithmetic
||  +---- D: 1 to make ADC and SBC use binary-coded decimal arithmetic
||        (ignored on second-source 6502 like that in the NES)
||        (ignored on second-source 6502 like that in the NES)
|+-------- V: 1 if last ADC or SBC resulted in signed overflow, or
|+-------- V: 1 if last ADC or SBC resulted in signed overflow, or
Line 29: Line 29:
| BRK || 11 || I is set to 1
| BRK || 11 || I is set to 1
|-
|-
| /IRQ || 10 || I is set to 1
| /[[IRQ]] || 10 || I is set to 1
|-
|-
| /NMI || 10 || I is set to 1
| /[[NMI]] || 10 || I is set to 1
|}
|}
Two instructions (PLP and RTI) pull a byte from the stack and set flags, but they ignore bits 5 and 4.
Two instructions (PLP and RTI) pull a byte from the stack and set flags, but they ignore bits 5 and 4.

Revision as of 17:10, 14 July 2010

The flags register, also called processor status or just P, is one of the six architectural registers on the 6502 family CPU.

There are six bits in P:

7654 3210
||   ||||
||   |||+- C: 1 if last addition or shift resulted in a carry, or if
||   |||   last subtraction resulted in 
||   ||+-- Z: 1 if last operation resulted in a 0 value
||   |+--- I: Interrupt priority level
||   |     (0: /IRQ and /NMI get through; 1: only /NMI gets through)
||   +---- D: 1 to make ADC and SBC use binary-coded decimal arithmetic
||         (ignored on second-source 6502 like that in the NES)
|+-------- V: 1 if last ADC or SBC resulted in signed overflow, or
|          D6 from last BIT read as 0
+--------- N: Set to bit 7 of the last operation

The B flag

There is no "B flag". Bits 5 and 4 of flags do not exist.

Two signals and two instructions can push flags to the stack. When they do so, they fill the unused bits with the following:

Instruction Bits 5 and 4 Side effects after pushing
PHP 11 None
BRK 11 I is set to 1
/IRQ 10 I is set to 1
/NMI 10 I is set to 1

Two instructions (PLP and RTI) pull a byte from the stack and set flags, but they ignore bits 5 and 4.