Based off this one
Click on any of following links to go straight to the information for that instruction.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A,Z,C,N = A+M+C
This instruction adds the contents of a memory location to the accumulator together with the carry bit. If overflow occurs the carry bit is set, this enables multiple byte addition to be performed.
Affected Processor Status after use:
C | Carry Flag | Set if overflow in bit 7 |
Z | Zero Flag | Set if A = 0 |
V | Overflow Flag | Set if sign bit is incorrect |
N | Negative Flag | Set if bit 7 set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
See also: SBC
A,Z,N = A&M
A logical AND is performed, bit by bit, on the accumulator contents using the contents of a byte of memory.
Affected Processor Status after use:
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
A,Z,C,N = M*2 or M,Z,C,N = M*2
This operation shifts all the bits of the accumulator or memory contents one bit left. Bit 0 is set to 0 and bit 7 is placed in the carry flag. The effect of this operation is to multiply the memory contents by 2 (ignoring 2's complement considerations), setting the carry if the result will not fit in 8 bits.
Affected Processor Status after use:
C | Carry Flag | Set to contents of old bit 7 |
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Accumulator |
|
|
2 |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
If the carry flag is clear then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BCS
If the carry flag is set then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BCC
If the zero flag is set then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BNE
A & M, N = M7, V = M6
This instructions is used to test if one or more bits are set in a target memory location. The mask pattern in A is ANDed with the value in memory to set or clear the zero flag, but the result is not kept. Bits 7 and 6 of the value from memory are copied into the N and V flags.
Affected Processor Status after use:
Z | Zero Flag | Set if the result if the AND is zero |
V | Overflow Flag | Set to bit 6 of the memory value |
N | Negative Flag | Set to bit 7 of the memory value |
Addressing Mode |
|
|
Cycles |
Zero Page |
|
|
3 |
Absolute |
|
|
4 |
If the negative flag is set then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BPL
If the zero flag is clear then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BEQ
If the negative flag is clear then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BMI
The BRK instruction forces the generation of an interrupt request. The program counter and processor status are pushed on the stack then the IRQ interrupt vector at $FFFE/F is loaded into the PC and the break flag in the status set to one.
B | Break Command | Set to 1 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
7 |
The interpretation of a BRK depends on the operating system. On the BBC Microcomputer it is used by language ROMs to signal run time errors but it could be used for other purposes (e.g. calling operating system functions, etc.).
If the overflow flag is clear then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BVS
If the overflow flag is set then add the relative displacement to the program counter to cause a branch to a new location.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Relative |
|
|
2 (+1 if branch succeeds +2 if to a new page) |
See also: BVC
C = 0
Set the carry flag to zero.
C | Carry Flag | Set to 0 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: SEC
D = 0
Sets the decimal mode flag to zero.
D | Decimal Mode Flag | Set to 0 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
NB:
The state of the decimal flag is uncertain when the CPU is powered
up and it is not reset when an interrupt is generated. In both
cases you should include an explicit CLD to ensure that the flag
is cleared before performing addition or subtraction.
See also: SED
I = 0
Clears the interrupt disable flag allowing normal interrupt requests to be serviced.
I | Interrupt Disable | Set to 0 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: SEI
V = 0
Clears the overflow flag.
V | Overflow Flag | Set to 0 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
Z,C,N = A-M
This instruction compares the contents of the accumulator with another memory held value and sets the zero and carry flags as appropriate.
Affected Processor Status after use:
C | Carry Flag | Set if A >= M |
Z | Zero Flag | Set if A = M |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
Z,C,N = X-M
This instruction compares the contents of the X register with another memory held value and sets the zero and carry flags as appropriate.
Affected Processor Status after use:
C | Carry Flag | Set if X >= M |
Z | Zero Flag | Set if X = M |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Absolute |
|
|
4 |
Z,C,N = Y-M
This instruction compares the contents of the Y register with another memory held value and sets the zero and carry flags as appropriate.
Affected Processor Status after use:
C | Carry Flag | Set if Y >= M |
Z | Zero Flag | Set if Y = M |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Absolute |
|
|
4 |
M,Z,N = M-1
Subtracts one from the value held at a specified memory location setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if result is zero |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
X,Z,N = X-1
Subtracts one from the X register setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if X is zero |
N | Negative Flag | Set if bit 7 of X is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
Y,Z,N = Y-1
Subtracts one from the Y register setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if Y is zero |
N | Negative Flag | Set if bit 7 of Y is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
A,Z,N = A^M
An exclusive OR is performed, bit by bit, on the accumulator contents using the contents of a byte of memory.
Affected Processor Status after use:
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
M,Z,N = M+1
Adds one to the value held at a specified memory location setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if result is zero |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
X,Z,N = X+1
Adds one to the X register setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if X is zero |
N | Negative Flag | Set if bit 7 of X is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
Y,Z,N = Y+1
Adds one to the Y register setting the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if Y is zero |
N | Negative Flag | Set if bit 7 of Y is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
Sets the program counter to the address specified by the operand.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Absolute |
|
|
3 |
Indirect |
|
|
5 |
NB:
An original 6502 has does not correctly fetch the target address
if the indirect vector falls on a page boundary (e.g. $xxFF where
xx is any value from $00 to $FF). In this case fetches the LSB
from $xxFF as expected but takes the MSB from $xx00. This is fixed
in some later chips like the 65SC02 so for compatibility always
ensure the indirect vector is not at the end of the page.
The JSR instruction pushes the address (minus one) of the return point on to the stack and then sets the program counter to the target memory address.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Absolute |
|
|
6 |
See also: RTS
A,Z,N = M
Loads a byte of memory into the accumulator setting the zero and negative flags as appropriate.
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of A is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
X,Z,N = M
Loads a byte of memory into the X register setting the zero and negative flags as appropriate.
Z | Zero Flag | Set if X = 0 |
N | Negative Flag | Set if bit 7 of X is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,Y |
|
|
4 |
Absolute |
|
|
4 |
Absolute,Y |
|
|
4 (+1 if page crossed) |
Y,Z,N = M
Loads a byte of memory into the Y register setting the zero and negative flags as appropriate.
Z | Zero Flag | Set if Y = 0 |
N | Negative Flag | Set if bit 7 of Y is set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
A,C,Z,N = A/2 or M,C,Z,N = M/2
Each of the bits in A or M is shift one place to the right. The bit that was in bit 0 is shifted into the carry flag. Bit 7 is set to zero.
Affected Processor Status after use:
C | Carry Flag | Set to contents of old bit 0 |
Z | Zero Flag | Set if result = 0 |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Accumulator |
|
|
2 |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
The NOP instruction causes no changes to the processor other than the normal incrementing of the program counter to the next instruction.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
A,Z,N = A|M
An inclusive OR is performed, bit by bit, on the accumulator contents using the contents of a byte of memory.
Affected Processor Status after use:
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
3 |
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
Pushes a copy of the accumulator on to the stack.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Implied |
|
|
3 |
See also: PLA
Pushes a copy of the status flags on to the stack.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Implied |
|
|
3 |
See also: PLP
Pulls an 8 bit value from the stack and into the accumulator. The zero and negative flags are set as appropriate.
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of A is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
4 |
See also: PHA
Pulls an 8 bit value from the stack and into the processor flags. The flags will take on new states as determined by the value pulled.
Affected Processor Status after use:
C | Carry Flag | Set from stack |
Z | Zero Flag | Set from stack |
I | Interrupt Disable | Set from stack |
D | Decimal Mode Flag | Set from stack |
B | Break Command | Set from stack |
V | Overflow Flag | Set from stack |
N | Negative Flag | Set from stack |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
4 |
See also: PHP
Move each of the bits in either A or M one place to the left. Bit 0 is filled with the current value of the carry flag whilst the old bit 7 becomes the new carry flag value.
Affected Processor Status after use:
C | Carry Flag | Set to contents of old bit 7 |
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Accumulator |
|
|
2 |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
Move each of the bits in either A or M one place to the right. Bit 7 is filled with the current value of the carry flag whilst the old bit 0 becomes the new carry flag value.
Affected Processor Status after use:
C | Carry Flag | Set to contents of old bit 0 |
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of the result is set |
Addressing Mode |
|
|
Cycles |
Accumulator |
|
|
2 |
Zero Page |
|
|
5 |
Zero Page,X |
|
|
6 |
Absolute |
|
|
6 |
Absolute,X |
|
|
7 |
The RTI instruction is used at the end of an interrupt processing routine. It pulls the processor flags from the stack followed by the program counter.
Affected Processor Status after use:
C | Carry Flag | Set from stack |
Z | Zero Flag | Set from stack |
I | Interrupt Disable | Set from stack |
D | Decimal Mode Flag | Set from stack |
B | Break Command | Set from stack |
V | Overflow Flag | Set from stack |
N | Negative Flag | Set from stack |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
6 |
The RTS instruction is used at the end of a subroutine to return to the calling routine. It pulls the program counter (minus one) from the stack.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Implied |
|
|
6 |
See also: JSR
A,Z,C,N = A-M-(1-C)
This instruction subtracts the contents of a memory location to the accumulator together with the not of the carry bit. If overflow occurs the carry bit is clear, this enables multiple byte subtraction to be performed.
Affected Processor Status after use:
C | Carry Flag | Clear if overflow in bit 7 |
Z | Zero Flag | Set if A = 0 |
V | Overflow Flag | Set if sign bit is incorrect |
N | Negative Flag | Set if bit 7 set |
Addressing Mode |
|
|
Cycles |
Immediate |
|
|
2 |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
4 (+1 if page crossed) |
Absolute,Y |
|
|
4 (+1 if page crossed) |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
5 (+1 if page crossed) |
See also: ADC
C = 1
Set the carry flag to one.
C | Carry Flag | Set to 1 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: CLC
D = 1
Set the decimal mode flag to one.
D | Decimal Mode Flag | Set to 1 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: CLD
I = 1
Set the interrupt disable flag to one.
I | Interrupt Disable | Set to 1 |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: CLI
M = A
Stores the contents of the accumulator into memory.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
Absolute,X |
|
|
5 |
Absolute,Y |
|
|
5 |
(Indirect,X) |
|
|
6 |
(Indirect),Y |
|
|
6 |
M = X
Stores the contents of the X register into memory.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Zero Page |
|
|
3 |
Zero Page,Y |
|
|
4 |
Absolute |
|
|
4 |
M = Y
Stores the contents of the Y register into memory.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Zero Page |
|
|
3 |
Zero Page,X |
|
|
4 |
Absolute |
|
|
4 |
X = A
Copies the current contents of the accumulator into the X register and sets the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if X = 0 |
N | Negative Flag | Set if bit 7 of X is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TXA
Y = A
Copies the current contents of the accumulator into the Y register and sets the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if Y = 0 |
N | Negative Flag | Set if bit 7 of Y is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TYA
X = S
Copies the current contents of the stack register into the X register and sets the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if X = 0 |
N | Negative Flag | Set if bit 7 of X is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TXS
A = X
Copies the current contents of the X register into the accumulator and sets the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of A is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TAX
S = X
Copies the current contents of the X register into the stack register.
Affected Processor Status after use:
NoneAddressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TSX
A = Y
Copies the current contents of the Y register into the accumulator and sets the zero and negative flags as appropriate.
Affected Processor Status after use:
Z | Zero Flag | Set if A = 0 |
N | Negative Flag | Set if bit 7 of A is set |
Addressing Mode |
|
|
Cycles |
Implied |
|
|
2 |
See also: TAY