textfiles/programming/opcode65816

375 lines
20 KiB
Plaintext

===============================================================================
WD65C816 Opcode Reference 02/20/93
by Eric D. Shepherd
===============================================================================
Cycle Time Adjustments
16A: Add 1 if using 16-bit memory and accumulator
16B: Add 2 if using 16-bit memory and accumulator
B: Add 1 if conditional branch is taken
C: Add 1 if index crosses bank boundary
D: Add 1 if status register's Decimal bit is set
I: Add 1 if using 16-bit index registers
M: Add 7 for each byte copied
N: Add 1 if in native mode
P: Add 1 if branch crosses page boundary in emulation mode
Z: Add 1 if DP is not on a page boundary
Instruction Hex Cycle Time Status Reg. Notes
===============================================================================
ADC #imm 69 2 [16A,D] nv----zc Add memory to A with
carry.
ADC abs 6D 4 [16A,D]
ADC longabs 6F 5 [16A,D]
ADC dp 65 3 [16A,Z,D]
ADC (dp) 72 5 [16A,Z,D]
ADC [dp] 67 6 [16A,Z,D]
ADC abs,X 7D 4 [16A,C,D]
ADC abslong,X 7F 5 [16A,D]
ADC abs,Y 79 4 [16A,C,D]
ADC dp,X 75 4 [16A,Z,D]
ADC (dp,X) 61 6 [16A,Z,D]
ADC (dp),Y 71 5 [16A,Z,C,D]
ADC [dp],Y 77 6 [16A,Z,D]
ADC ofs,S 63 4 [16A,D]
ADC (ofs,S),Y 73 7 [16A,D]
-------------------------------------------------------------------------------
AND #imm 29 2 [16A] n-----z- And A with memory.
AND abs 2D 4 [16A]
AND abslong 2F 5 [16A]
AND dp 25 3 [16A,Z]
AND (dp) 32 5 [16A,Z]
AND [dp] 27 6 [16A,Z]
AND abs,X 3D 4 [16A,C]
AND abslong,X 3F 5 [16A]
AND abs,Y 39 4 [16A,C]
AND dp,X 35 4 [16A,Z]
AND (dp,X) 21 6 [16A,Z]
AND (dp),Y 31 5 [16A,Z,C]
AND [dp],Y 37 6 [16A,Z]
AND ofs,S 23 4 [16A]
AND (ofs,S),Y 33 7 [16A]
-------------------------------------------------------------------------------
ASL 0A 2 n-----zc Shift left memory or A.
ASL abs 0E 6 [16B]
ASL dp 06 5 [16B,Z]
ASL abs,X 1E 7 [16B]
ASL dp,X 16 6 [16B,Z]
-------------------------------------------------------------------------------
BCC relbyte 90 2 [B,P] -------- Branch if carry clear.
BCS relbyte B0 2 [B,P] -------- Branch if carry set.
BEQ relbyte F0 2 [B,P] -------- Branch if equal (z=0).
-------------------------------------------------------------------------------
BIT #imm 89 2 [16A] ------z- Test memory with bits
from A.
BIT abs 2C 4 [16A] nv----z-
BIT dp 24 3 [16A,Z]
BIT abs,X 3C 4 [16A,C]
BIT dp,X 34 4 [16A,Z]
-------------------------------------------------------------------------------
BMI relbyte 30 2 [B,P] -------- Branch if minus (n=1).
BNE relbyte D0 2 [B,P] -------- Branch if not equal.
BPL relbyte 10 2 [B,P] -------- Branch if positive.
BRA relbyte 80 2 [P] -------- Branch always.
-------------------------------------------------------------------------------
BRK byte 00 7 [N] ----01-- Software break
BRK 00 ---101-- (sets b in emulation
mode).
-------------------------------------------------------------------------------
BRL relword 82 4 -------- Branch always long.
BVC relbyte 50 2 [B,P] -------- Branch if overflow
clear.
BVS relbyte 70 2 [B,P] -------- Branch if overflow set.
-------------------------------------------------------------------------------
CLC 18 2 -------0 Clear carry bit.
CLD D8 2 ----0--- Clear decimal bit.
CLI 58 2 -----0-- Clear interrupt disable
bit.
CLV B8 2 -0------ Clear overflow bit.
-------------------------------------------------------------------------------
CMP #imm C9 2 [16A] n-----zc Compare A with memory.
CMP abs CD 4 [16A]
CMP abslong CF 5 [16A]
CMP dp C5 3 [16A,Z]
CMP (dp) D2 5 [16A,Z]
CMP [dp] C7 6 [16A,Z]
CMP abs,X DD 4 [16A,C]
CMP abslong,X DF 5 [16A]
CMP abs,Y D9 4 [16A,C]
CMP dp,X D5 4 [16A,Z]
CMP (dp,X) C1 6 [16A,Z]
CMP (dp),Y D1 5 [16A,Z,C]
CMP [dp],Y D7 6 [16A,Z]
CMP ofs,S C3 4 [16A]
CMP (ofs,S),Y D3 7 [16A]
-------------------------------------------------------------------------------
COP byte 02 7 [N] ----01-- Coprocessor enable.
-------------------------------------------------------------------------------
CPX #imm E0 2 [I] n-----zc Compare X with memory.
CPX abs EC 4 [I]
CPX dp E4 3 [I,Z]
-------------------------------------------------------------------------------
CPY #imm C0 2 [I] n-----zc Compare Y with memory.
CPY abs CC 4 [I]
CPY dp C4 3 [I,Z]
-------------------------------------------------------------------------------
DEC 3A 2 n------c Decrement A or memory.
DEC abs CE 6 [16B]
DEC dp C6 5 [16B,Z]
DEC abs,X DE 7 [16B]
DEC dp,X D6 6 [16B,Z]
-------------------------------------------------------------------------------
DEX CA 2 n------c Decrement X register.
DEY 88 2 n------c Decrement Y register.
-------------------------------------------------------------------------------
EOR #imm 49 2 [16A] n------c Exclusive-OR A with
memory.
EOR abs 4D 4 [16A]
EOR abslong 4F 5 [16A]
EOR dp 45 3 [16A,Z]
EOR (dp) 52 6 [16A,Z]
EOR [dp] 47 6 [16A,Z]
EOR abs,X 5D 4 [16A,C]
EOR abslong,X 5F 5 [16A]
EOR abs,Y 59 4 [16A,C]
EOR dp,X 55 4 [16A,Z]
EOR (dp,X) 41 5 [16A,Z]
EOR (dp),Y 51 6 [16A,Z,C]
EOR [dp],Y 57 4 [16A,Z]
EOR ofs,S 43 4 [16A]
EOR (ofs,S),Y 53 7 [16A]
-------------------------------------------------------------------------------
INC 1A 2 n------c Increment A or memory.
INC abs EE 6 [16B]
INC dp E6 5 [16B,Z]
INC abs,X FE 7 [16B]
INC dp,X F6 6 [16B,Z]
-------------------------------------------------------------------------------
INX E8 2 n------c Increment X register.
INY C8 2 n------c Increment Y register.
-------------------------------------------------------------------------------
JMP abs 4C 3 -------- Jump.
JMP (abs) 6C 5
JMP (abs,X) 7C 6
-------------------------------------------------------------------------------
JML abslong 5C 4 -------- Jump long.
JML [dp] DC 6
-------------------------------------------------------------------------------
JSL abslong 22 8 -------- Jump to subroutine
long.
-------------------------------------------------------------------------------
JSR abs 20 6 -------- Jump to subroutine.
JSR (addr,X) FC 8
-------------------------------------------------------------------------------
LDA #imm A9 2 [16A] n-----z- Load accumulator with
memory.
LDA abs AD 4 [16A]
LDA abslong AF 5 [16A]
LDA dp A5 3 [16A,Z]
LDA (dp) B2 5 [16A,Z]
LDA [dp] A7 6 [16A,Z]
LDA abs,X BD 4 [16A,C]
LDA abslong,X BF 5 [16A]
LDA abs,Y B9 4 [16A,C]
LDA dp,X B5 4 [16A,Z]
LDA (dp,X) A1 6 [16A,Z]
LDA (dp),Y B1 5 [16A,Z,C]
LDA [dp],Y B7 6 [16A,Z]
LDA ofs,S A3 4 [16A]
LDA (ofs,S),Y B3 7 [16A]
-------------------------------------------------------------------------------
LDX #imm A2 2 [I] n-----z- Load X register with
memory.
LDX abs AE 4 [I]
LDX dp A6 3 [I,Z]
LDX abs,Y BE 4 [I,C]
LDX dp,Y B6 4 [I,Z]
-------------------------------------------------------------------------------
LDY #imm A0 2 [I] n-----z- Load Y register with
memory.
LDY abs AC 4 [I]
LDY dp A4 3 [I]
LDY abs,X BC 4 [I,C]
LDY dp,X B4 4 [I,Z]
-------------------------------------------------------------------------------
LSR 4A 2 n-----zc Logical shift A or
memory right.
LSR abs 4E 6 [16A]
LSR dp 46 5 [16A,Z]
LSR abs,X 5E 7 [16A]
LSR dp,X 56 6 [16A,Z]
-------------------------------------------------------------------------------
MVN byte,byte 54 [M] -------- Move memory negative
(srcbank, destbank).
MVP byte,byte 44 [M] -------- Move memory positive
(srcbank, destbank).
* X = source address
Y = target address
A = length -1
-------------------------------------------------------------------------------
NOP EA 2 -------- No operation.
-------------------------------------------------------------------------------
ORA #imm 09 2 [16A] n-----z- Or A with memory.
ORA abs 0D 4 [16A]
ORA abslong 0F 5 [16A]
ORA dp 05 3 [16A,Z]
ORA (dp) 12 5 [16A,Z]
ORA [dp] 07 6 [16A,Z]
ORA abs,X 1D 4 [16A,C]
ORA abslong,X 1F 5 [16A]
ORA abs,Y 19 4 [16A,C]
ORA dp,X 15 4 [16A,Z]
ORA (dp,X) 01 6 [16A,Z]
ORA (dp),Y 11 5 [16A,Z,C]
ORA [dp],Y 17 6 [16A,Z]
ORA ofs,S 03 4 [16A]
ORA (ofs,S),Y 13 7 [16A]
-------------------------------------------------------------------------------
PEA abs F4 5 -------- Push effective absolute
address.
PEI (dp) D4 6 [Z] -------- Push effective indirect
address.
PER relword 62 6 -------- Push effective relative
address.
PHA 48 3 [16A] -------- Push accumulator.
PHB 8B 3 -------- Push data bank
register.
PHD 0B 4 -------- Push direct page
register.
PHK 4B 3 -------- Push program bank
register.
PHP 08 3 -------- Push processor status
register.
PHX DA 3 [I] -------- Push X register.
PHY 5A 3 [I] -------- Push Y register.
-------------------------------------------------------------------------------
PLA 68 4 [16A] n-----z- Pull accumulator.
PLB AB 4 n-----z- Pull data bank
register.
PLD 2B 5 n-----z- Pull direct page
register.
PLP 28 4 nvmxdizc Pull processor status
register.
PLX FA 4 [I] n-----z- Pull X register.
PLY 7A 4 [I] n-----z- Pull Y register.
-------------------------------------------------------------------------------
REP #imm C2 3 ???????? Reset processor status
register bits.
-------------------------------------------------------------------------------
ROL 2A 2 n-----zc Rotate A or memory
right.
ROL abs 2E 6 [16A]
ROL dp 26 5 [16A,Z]
ROL abs,X 3E 7 [16A]
ROL dp,X 36 6 [16A,Z]
-------------------------------------------------------------------------------
RTI 40 6 [N] ???????? Return from interrupt.
RTI 40 6 ??11???? (emulation mode).
RTL 6B 6 -------- Return from subroutine
long.
RTS 60 6 -------- Return from subroutine.
-------------------------------------------------------------------------------
SBC #imm E9 2 [16A,D] nv----zc Subtract memory from
A with borrow.
SBC abs ED 4 [16A,D]
SBC abslong EF 5 [16A,D]
SBC dp E5 3 [16A,Z,D]
SBC (dp) F2 5 [16A,Z,D]
SBC [dp] E7 6 [16A,Z,D]
SBC abs,X FD 4 [16A,C,D]
SBC abslong,X FF 5 [16A,D]
SBC abs,Y F9 4 [16A,C,D]
SBC dp,X F5 4 [16A,Z,D]
SBC (dp,X) E1 6 [16A,Z,D]
SBC (dp),Y F1 5 [16A,Z,C,D]
SBC [dp],Y F7 6 [16A,Z,D]
SBC ofs,S E3 4 [16A,D]
SBC (ofs,S),Y F3 7 [16A,D]
-------------------------------------------------------------------------------
SEC 38 2 -------1 Set carry bit.
SED F8 2 ----1--- Set decimal bit.
SEI 78 2 -----1-- Set interrupt disable
bit.
SEP #imm E2 3 ???????? Set processor status
register bits.
-------------------------------------------------------------------------------
STA abs 8D 4 [16A] -------- Store A to memory.
STA abslong 8F 5 [16A]
STA dp 85 3 [16A,Z]
STA (dp) 92 5 [16A,Z]
STA [dp] 87 6 [16A,Z]
STA abs,X 9D 5 [16A]
STA abslong,X 9F 5 [16A]
STA abs,Y 99 5 [16A]
STA dp,X 95 4 [16A,Z]
STA (dp,X) 81 6 [16A,Z]
STA (dp),y 91 6 [16A,Z]
STA [dp],y 97 6 [16A,Z]
STA ofs,S 83 4 [16A]
STA (ofs,S),Y 93 7 [16A]
-------------------------------------------------------------------------------
STP DB 3 -------- Stop the processor.
-------------------------------------------------------------------------------
STX abs 8E 4 [I] -------- Store X register to
memory.
STX dp 86 3 [I,Z]
STX dp,Y 96 4 [I,Z]
-------------------------------------------------------------------------------
STY abs 8C 4 [I] -------- Store Y register to
memory.
STY dp 84 3 [I,Z]
STY dp,X 94 4 [I,Z]
-------------------------------------------------------------------------------
STZ abs 9C 4 [16A] -------- Store zero to memory.
STZ dp 64 3 [16A,Z]
STZ abs,X 9E 5 [16A]
STZ dp,X 74 4 [16A,Z]
-------------------------------------------------------------------------------
TAX AA 2 n-----z- Transfer A to X
register.
TAY A8 2 n-----z- Transfer A to Y
register.
TCD 5B 2 n-----z- Transfer 16-bit A to
direct page register.
TCS 1B 2 -------- Transfer A to stack
pointer.
TDC 7B 2 n-----z- Transfer direct page
register to A.
-------------------------------------------------------------------------------
TRB addr 1C 6 [16B] ------z- Test and reset bits
against A.
TRB dp 14 5 [16B,Z]
-------------------------------------------------------------------------------
TSB addr 0C 6 [16B] ------z- Test and set bits
against A.
TSB dp 04 5 [16B,Z]
-------------------------------------------------------------------------------
TSC 3B 2 n-----z- Transfer stack pointer
to A.
TSX BA 2 n-----z- Transfer stack pointer
to X register.
TXA 8A 2 n-----z- Transfer X register to
A.
TXS 9A 2 -------- Transfer X register to
stack pointer.
TXY 9B 2 n-----z- Transfer X register to
Y register.
TYA 98 2 n-----z- Transfer Y register to
A.
TYX BB 2 n-----z- Transfer Y register to
X register.
-------------------------------------------------------------------------------
WAI CB 3 -------- Wait for interrupt.
WDM 42 ? -------- Reserved (currently
NOP).
-------------------------------------------------------------------------------
XBA EB 3 n-----z- Exchange the B and A
accumulators.
XCE FB 2 --??---- Exchange carry and
emulation bits.
* Append this file to the end of your Shell:SysHelp file.
* If you find an error, email me at:
* Internet: uerics@mcl.mcl.ucsb.edu
* AOL: Sheppy