A accumulator OPC A operand is AC (implied single byte instruction)
abs absolute OPC $LLHH operand is address $HHLL *
abs,X absolute, X-indexed OPC $LLHH,X operand is address; effective address is address incremented by X with carry **
abs,Y absolute, Y-indexed OPC $LLHH,Y operand is address; effective address is address incremented by Y with carry **
# immediate OPC #$BB operand is byte BB
impl implied OPC operand implied
ind indirect OPC ($LLHH) operand is address; effective address is contents of word at address: C.w($HHLL)
X,ind X-indexed, indirect OPC ($LL,X) operand is zeropage address; effective address is word in (LL + X, LL + X + 1), inc. without carry: C.w($00LL + X)
ind,Y indirect, Y-indexed OPC ($LL),Y operand is zeropage address; effective address is word in (LL, LL + 1) incremented by Y with carry: C.w($00LL) + Y
rel relative OPC $BB branch target is PC + signed offset BB ***
zpg zeropage OPC $LL operand is zeropage address (hi-byte is zero, address = $00LL)
zpg,X zeropage, X-indexed OPC $LL,X operand is zeropage address; effective address is address incremented by X without carry **
zpg,Y zeropage, Y-indexed OPC $LL,Y operand is zeropage address; effective address is address incremented by Y without carry **
* 16-bit address words are little endian, lo(w)-byte first, followed by the hi(gh)-byte. An assembler will use a human readable, big-endian notation as in $HHLL.
** The available 16-bit address space is conceived as consisting of pages of 256 bytes each, with
address hi-bytes represententing the page index. An increment with carry may affect the hi-byte
and may thus result in a crossing of page boundaries, adding an extra cycle to the execution.
Increments without carry do not affect the hi-byte of an address and no page transitions do occur.
Generally, increments of 16-bit addresses include a carry, increments of zeropage addresses don't.
Notably this is not related in any way to the state of the carry bit of the accumulator.
*** Branch offsets are signed 8-bit values, -128 ... +127, negative offsets in two's complement.
Page transitions may occur and add an extra cycle to the exucution.
Registers
PC program counter (16 bit)
AC accumulator (8 bit)
X X register (8 bit)
Y Y register (8 bit)
SR status register NV-BDIZC (8 bit)
SP stack pointer (8 bit)
SR Flags NV-BDIZC
bit 7 to bit 0
N .... Negative
V .... Overflow
- .... ignored
B .... Break
D .... Decimal (use BCD for arithmetics)
I .... Interrupt (IRQ disable)
Z .... Zero
C .... Carry
Processor Stack
LIFO, top down, 8 bit range 0x0100 - 0x01FF
Bytes, Words, Addressing
8 bit bytes, 16 bit words in lobyte-hibyte representation (Little-Endian).
16 bit address range, operands follow instruction codes.
Signed values are two's complement, sign in bit 7 (most significant bit).
%11111111 = $FF = -1
%10000000 = $80 = -128
%01111111 = $7F = +127
Standard 6502 opcodes
K65 compiler supports following 6502 instructions. TBD value means that instruction support is planned, but currently not implemented.
ADC AND ASL
BCC BCS BEQ
BIT BMI BNE
BPL BRK BVC
BVS CLC CLD
CLI CLV CMP
CPX CPY DEC
DEX DEY EOR
INC INX INY
JMP JSR LDA
LDX LDY LSR
NOP ORA PHA
PHP PLA PLP
ROL ROR RTI
RTS SBC SEC
SED SEI STA
STX STY TAX
TAY TSX TXA
TXS TYA
ADC add with carry
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a+imm |
a+mem |
a+mem,x |
a+mem,y |
a+(mem,x) |
a+(mem),y |
|
ADC Add Memory to Accumulator with Carry
A + M + C -> A, C N Z C I D V
+ + + - - +
addressing assembler opc bytes cyles
--------------------------------------------
immidiate ADC #oper 69 2 2
zeropage ADC oper 65 2 3
zeropage,X ADC oper,X 75 2 4
absolute ADC oper 6D 3 4
absolute,X ADC oper,X 7D 3 4*
absolute,Y ADC oper,Y 79 3 4*
(indirect,X) ADC (oper,X) 61 2 6
(indirect),Y ADC (oper),Y 71 2 5*
AND and (with accumulator)
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a&imm |
a&mem |
a&mem,x |
a&mem,y |
a&(mem,x) |
a&(mem),y |
|
AND AND Memory with Accumulator
A AND M -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate AND #oper 29 2 2
zeropage AND oper 25 2 3
zeropage,X AND oper,X 35 2 4
absolute AND oper 2D 3 4
absolute,X AND oper,X 3D 3 4*
absolute,Y AND oper,Y 39 3 4*
(indirect,X) AND (oper,X) 21 2 6
(indirect),Y AND (oper),Y 31 2 5*
ASL arithmetic shift left
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
a<< |
|
|
mem<< |
mem,x<< |
|
|
|
|
ASL Shift Left One Bit (Memory or Accumulator)
C <- [76543210] <- 0 N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
accumulator ASL A 0A 1 2
zeropage ASL oper 06 2 5
zeropage,X ASL oper,X 16 2 6
absolute ASL oper 0E 3 6
absolute,X ASL oper,X 1E 3 7
BCC branch on carry clear
>={ ... }
< goto label
{ ... } <
c+?{ ... }
c-? goto label
{ ... } c-?
BCC Branch on Carry Clear
branch on C = 0 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BCC oper 90 2 2**
BCS branch on carry set
<{ ... }
>= goto label
{ ... } >=
c-?{ ... }
c+? goto label
{ ... } c+?
BCS Branch on Carry Set
branch on C = 1 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BCS oper B0 2 2**
BEQ branch on equal (zero set)
!={ ... }
== goto label
{ ... } ==
z-?{ ... }
z+? goto label
{ ... } z+?
BEQ Branch on Result Zero
branch on Z = 1 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BEQ oper F0 2 2**
BIT bit test
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
a&?mem |
|
|
|
|
|
BIT Test Bits in Memory with Accumulator
bits 7 and 6 of operand are transfered to bit 7 and 6 of SR (N,V);
the zeroflag is set to the result of operand AND accumulator.
A AND M, M7 -> N, M6 -> V N Z C I D V
M7 + - - - M6
addressing assembler opc bytes cyles
--------------------------------------------
zeropage BIT oper 24 2 3
absolute BIT oper 2C 3 4
BMI branch on minus (negative set)
>=0{ ... }
<0 goto label
{ ... } <0
n-?{ ... }
n+? goto label
{ ... } n+?
BMI Branch on Result Minus
branch on N = 1 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BMI oper 30 2 2**
BNE branch on not equal (zero clear)
=={ ... }
!= goto label
{ ... } !=
z+?{ ... }
z-? goto label
{ ... } z-?
BNE Branch on Result not Zero
branch on Z = 0 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BNE oper D0 2 2**
BPL branch on plus (negative clear)
<0{ ... }
>=0 goto label
{ ... } >=0
n+?{ ... }
n-? goto label
{ ... } n-?
BPL Branch on Result Plus
branch on N = 0 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BPL oper 10 2 2**
BRK interrupt
/* TBD */
BRK Force Break
interrupt, N Z C I D V
push PC+2, push SR - - - 1 - -
addressing assembler opc bytes cyles
--------------------------------------------
implied BRK 00 1 7
BVC branch on overflow clear
<<={ ... }
>>= goto label
{ ... } >>=
v+{ ... }
v- goto label
{ ... } v-
BVC Branch on Overflow Clear
branch on V = 0 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BVC oper 50 2 2**
BVS branch on overflow set
>>={ ... }
<<= goto label
{ ... } <<=
v-{ ... }
v+ goto label
{ ... } v+
BVS Branch on Overflow Set
branch on V = 1 N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
relative BVC oper 70 2 2**
CLC clear carry
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
c- |
|
|
|
|
|
|
|
CLC Clear Carry Flag
0 -> C N Z C I D V
- - 0 - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied CLC 18 1 2
CLD clear decimal
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
d- |
|
|
|
|
|
|
|
CLD Clear Decimal Mode
0 -> D N Z C I D V
- - - - 0 -
addressing assembler opc bytes cyles
--------------------------------------------
implied CLD D8 1 2
CLI clear interrupt disable
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
i- |
|
|
|
|
|
|
|
CLI Clear Interrupt Disable Bit
0 -> I N Z C I D V
- - - 0 - -
addressing assembler opc bytes cyles
--------------------------------------------
implied CLI 58 1 2
CLV clear overflow
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
o- |
|
|
|
|
|
|
|
CLV Clear Overflow Flag
0 -> V N Z C I D V
- - - - - 0
addressing assembler opc bytes cyles
--------------------------------------------
implied CLV B8 1 2
CMP compare (with accumulator)
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a?imm |
a?mem |
a?mem,x |
a?mem,y |
a?(mem,x) |
a?(mem),y |
|
CMP Compare Memory with Accumulator
A - M N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate CMP #oper C9 2 2
zeropage CMP oper C5 2 3
zeropage,X CMP oper,X D5 2 4
absolute CMP oper CD 3 4
absolute,X CMP oper,X DD 3 4*
absolute,Y CMP oper,Y D9 3 4*
(indirect,X) CMP (oper,X) C1 2 6
(indirect),Y CMP (oper),Y D1 2 5*
CPX compare with X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
x?imm |
x?mem |
|
|
|
|
|
CPX Compare Memory and Index X
X - M N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate CPX #oper E0 2 2
zeropage CPX oper E4 2 3
absolute CPX oper EC 3 4
CPY compare with Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
y?imm |
y?mem |
|
|
|
|
|
CPY Compare Memory and Index Y
Y - M N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate CPY #oper C0 2 2
zeropage CPY oper C4 2 3
absolute CPY oper CC 3 4
DEC decrement
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
mem-- |
mem,x-- |
|
|
|
|
DEC Decrement Memory by One
M - 1 -> M N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
zeropage DEC oper C6 2 5
zeropage,X DEC oper,X D6 2 6
absolute DEC oper CE 3 6
absolute,X DEC oper,X DE 3 7
DEX decrement X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
x-- |
|
|
|
|
|
|
|
DEX Decrement Index X by One
X - 1 -> X N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied DEC CA 1 2
DEY decrement Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
y-- |
|
|
|
|
|
|
|
DEY Decrement Index Y by One
Y - 1 -> Y N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied DEC 88 1 2
EOR exclusive or (with accumulator)
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a^imm |
a^mem |
a^mem,x |
a^mem,y |
a^(mem,x) |
a^(mem),y |
|
EOR Exclusive-OR Memory with Accumulator
A EOR M -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate EOR #oper 49 2 2
zeropage EOR oper 45 2 3
zeropage,X EOR oper,X 55 2 4
absolute EOR oper 4D 3 4
absolute,X EOR oper,X 5D 3 4*
absolute,Y EOR oper,Y 59 3 4*
(indirect,X) EOR (oper,X) 41 2 6
(indirect),Y EOR (oper),Y 51 2 5*
INC increment
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
mem++ |
mem,x++ |
|
|
|
|
INC Increment Memory by One
M + 1 -> M N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
zeropage INC oper E6 2 5
zeropage,X INC oper,X F6 2 6
absolute INC oper EE 3 6
absolute,X INC oper,X FE 3 7
INX increment X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
x++ |
|
|
|
|
|
|
|
INX Increment Index X by One
X + 1 -> X N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied INX E8 1 2
INY increment Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
y++ |
|
|
|
|
|
|
|
INY Increment Index Y by One
Y + 1 -> Y N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied INY C8 1 2
JMP jump
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
goto mem |
|
|
|
|
goto (mem) |
JMP Jump to New Location
(PC+1) -> PCL N Z C I D V
(PC+2) -> PCH - - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
absolute JMP oper 4C 3 3
indirect JMP (oper) 6C 3 5
JSR jump subroutine
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
call mem |
|
|
|
|
|
JSR Jump to New Location Saving Return Address
push (PC+2), N Z C I D V
(PC+1) -> PCL - - - - - -
(PC+2) -> PCH
addressing assembler opc bytes cyles
--------------------------------------------
absolute JSR oper 20 3 6
LDA load accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a=imm |
a=mem |
a=mem,x |
a=mem,y |
a=(mem,x) |
a=(mem),y |
|
LDA Load Accumulator with Memory
M -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate LDA #oper A9 2 2
zeropage LDA oper A5 2 3
zeropage,X LDA oper,X B5 2 4
absolute LDA oper AD 3 4
absolute,X LDA oper,X BD 3 4*
absolute,Y LDA oper,Y B9 3 4*
(indirect,X) LDA (oper,X) A1 2 6
(indirect),Y LDA (oper),Y B1 2 5*
LDX load X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
x=imm |
x=mem |
|
x=mem,y |
|
|
|
LDX Load Index X with Memory
M -> X N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate LDX #oper A2 2 2
zeropage LDX oper A6 2 3
zeropage,Y LDX oper,Y B6 2 4
absolute LDX oper AE 3 4
absolute,Y LDX oper,Y BE 3 4*
LDY load Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
y=imm |
y=mem |
y=mem,x |
|
|
|
|
LDY Load Index Y with Memory
M -> Y N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate LDY #oper A0 2 2
zeropage LDY oper A4 2 3
zeropage,X LDY oper,X B4 2 4
absolute LDY oper AC 3 4
absolute,X LDY oper,X BC 3 4*
LSR logical shift right
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
a>> |
|
|
mem>> |
mem,x>> |
|
|
|
|
LSR Shift One Bit Right (Memory or Accumulator)
0 -> [76543210] -> C N Z C I D V
0 + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
accumulator LSR A 4A 1 2
zeropage LSR oper 46 2 5
zeropage,X LSR oper,X 56 2 6
absolute LSR oper 4E 3 6
absolute,X LSR oper,X 5E 3 7
NOP no operation
* for single NOP
*<number> to wait <number> of cycles.
Even values generate the number of NOP instructions equal to number / 2. Odd values generate (number - 1) / 2 + one illegal instruction NOP #0 3 cycles long.
NOP No Operation
--- N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied NOP EA 1 2
ORA or with accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a|imm |
a|mem |
a|mem,x |
a|mem,y |
a|(mem,x) |
a|(mem),y |
|
ORA OR Memory with Accumulator
A OR M -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
immidiate ORA #oper 09 2 2
zeropage ORA oper 05 2 3
zeropage,X ORA oper,X 15 2 4
absolute ORA oper 0D 3 4
absolute,X ORA oper,X 1D 3 4*
absolute,Y ORA oper,Y 19 3 4*
(indirect,X) ORA (oper,X) 01 2 6
(indirect),Y ORA (oper),Y 11 2 5*
PHA push accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
a!! |
|
|
|
|
|
|
|
PHA Push Accumulator on Stack
push A N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied PHA 48 1 3
PHP push processor status (SR)
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
flag!! |
|
|
|
|
|
|
|
PHP Push Processor Status on Stack
push SR N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied PHP 08 1 3
PLA pull accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
a?? |
|
|
|
|
|
|
|
PLA Pull Accumulator from Stack
pull A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied PLA 68 1 4
PLP pull processor status (SR)
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
flag?? |
|
|
|
|
|
|
|
PLP Pull Processor Status from Stack
pull SR N Z C I D V
from stack
addressing assembler opc bytes cyles
--------------------------------------------
implied PLP 28 1 4
ROL rotate left
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
a<<< |
|
mem<<< |
mem,x<<< |
|
|
|
|
|
ROL Rotate One Bit Left (Memory or Accumulator)
C <- [76543210] <- C N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
accumulator ROL A 2A 1 2
zeropage ROL oper 26 2 5
zeropage,X ROL oper,X 36 2 6
absolute ROL oper 2E 3 6
absolute,X ROL oper,X 3E 3 7
ROR rotate right
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
a>>> |
|
mem>>> |
mem,x>>> |
|
|
|
|
|
ROR Rotate One Bit Right (Memory or Accumulator)
C -> [76543210] -> C N Z C I D V
+ + + - - -
addressing assembler opc bytes cyles
--------------------------------------------
accumulator ROR A 6A 1 2
zeropage ROR oper 66 2 5
zeropage,X ROR oper,X 76 2 6
absolute ROR oper 6E 3 6
absolute,X ROR oper,X 7E 3 7
RTI return from interrupt
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
return_i |
|
|
|
|
|
|
|
RTI Return from Interrupt
pull SR, pull PC N Z C I D V
from stack
addressing assembler opc bytes cyles
--------------------------------------------
implied RTI 40 1 6
RTS return from subroutine
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
return |
|
|
|
|
|
|
|
RTS Return from Subroutine
pull PC, PC+1 -> PC N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied RTS 60 1 6
SBC subtract with carry
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
a-imm |
a-mem |
a-mem,x |
a-mem,y |
a-(mem,x) |
a-(mem),y |
|
SBC Subtract Memory from Accumulator with Borrow
A - M - C -> A N Z C I D V
+ + + - - +
addressing assembler opc bytes cyles
--------------------------------------------
immidiate SBC #oper E9 2 2
zeropage SBC oper E5 2 3
zeropage,X SBC oper,X F5 2 4
absolute SBC oper ED 3 4
absolute,X SBC oper,X FD 3 4*
absolute,Y SBC oper,Y F9 3 4*
(indirect,X) SBC (oper,X) E1 2 6
(indirect),Y SBC (oper),Y F1 2 5*
SEC set carry
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
c+ |
|
|
|
|
|
|
|
SEC Set Carry Flag
1 -> C N Z C I D V
- - 1 - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied SEC 38 1 2
SED set decimal
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
d+ |
|
|
|
|
|
|
|
SED Set Decimal Flag
1 -> D N Z C I D V
- - - - 1 -
addressing assembler opc bytes cyles
--------------------------------------------
implied SED F8 1 2
SEI set interrupt disable
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
i+ |
|
|
|
|
|
|
|
SEI Set Interrupt Disable Status
1 -> I N Z C I D V
- - - 1 - -
addressing assembler opc bytes cyles
--------------------------------------------
implied SEI 78 1 2
STA store accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
mem=a |
mem,x=a |
mem,y=a |
(mem,x)=a |
(mem),y=a |
|
STA Store Accumulator in Memory
A -> M N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
zeropage STA oper 85 2 3
zeropage,X STA oper,X 95 2 4
absolute STA oper 8D 3 4
absolute,X STA oper,X 9D 3 5
absolute,Y STA oper,Y 99 3 5
(indirect,X) STA (oper,X) 81 2 6
(indirect),Y STA (oper),Y 91 2 6
STX store X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
mem=x |
|
|
|
|
|
STX Store Index X in Memory
X -> M N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
zeropage STX oper 86 2 3
zeropage,Y STX oper,Y 96 2 4
absolute STX oper 8E 3 4
STY store Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
|
|
mem=y |
|
|
|
|
|
STY Sore Index Y in Memory
Y -> M N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
zeropage STY oper 84 2 3
zeropage,X STY oper,X 94 2 4
absolute STY oper 8C 3 4
TAX transfer accumulator to X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
x=a |
|
|
|
|
|
|
|
TAX Transfer Accumulator to Index X
A -> X N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TAX AA 1 2
TAY transfer accumulator to Y
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
y=a |
|
|
|
|
|
|
|
TAY Transfer Accumulator to Index Y
A -> Y N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TAY A8 1 2
TSX transfer stack pointer to X
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
x=s |
|
|
|
|
|
|
|
TSX Transfer Stack Pointer to Index X
SP -> X N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TSX BA 1 2
TXA transfer X to accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
a=x |
|
|
|
|
|
|
|
TXA Transfer Index X to Accumulator
X -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TXA 8A 1 2
TXS transfer X to stack pointer
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
s=x |
|
|
|
|
|
|
|
TXS Transfer Index X to Stack Register
X -> SP N Z C I D V
- - - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TXS 9A 1 2
TYA transfer Y to accumulator
| Acc |
Implied |
Imm |
Mem |
Mem,X |
Mem,Y |
(Mem,X) |
(Mem),Y |
(Mem) |
|
a=y |
|
|
|
|
|
|
|
TYA Transfer Index Y to Accumulator
Y -> A N Z C I D V
+ + - - - -
addressing assembler opc bytes cyles
--------------------------------------------
implied TYA 98 1 2
Note
* add 1 to cycles if page boundery is crossed
** add 1 to cycles if branch occurs on same page
add 2 to cycles if branch occurs to different page
Legend to Flags
+ .... modified
- .... not modified
1 .... set
0 .... cleared
M6 .... memory bit 6
M7 .... memory bit 7