SNES Development
SPC700 Reference

This document is designed to be an easier to read version of Anomie’s SPC700 Doc, but much work is still needed as it is a work in progress.

Flags stored in PSW Register

MnemonicDescription
NNegative
VOverflow
PDirect page
BBreak
HHalf Carry
IInterrupt enabled (unused)
ZZero
CCarry

Instructions

Assembler ExampleOperationHEXFlags SetBytesCycles
ADC (X), (Y)(X) = (X)+(Y)+C99NV–H-ZC15
ADC A, #iA = A+i+C88NV–H-ZC22
ADC A, (X)A = A+(X)+C86NV–H-ZC13
ADC A, d+YA = A+(d+Y)+C97NV–H-ZC26
ADC A, d+XA = A+(d+X)+C87NV–H-ZC26
ADC A, dA = A+(d)+C84NV–H-ZC23
ADC A, d+XA = A+(d+X)+C94NV–H-ZC24
ADC A, !aA = A+(a)+C85NV–H-ZC34
ADC A, !a+XA = A+(a+X)+C95NV–H-ZC35
ADC A, !a+YA = A+(a+Y)+C96NV–H-ZC35
ADC dd, ds(dd) = (dd)+(d)+C89NV–H-ZC36
ADC d, #i(d) = (d)+i+C98NV–H-ZC35
ADDW YA, dYA = YA + (d), H on high byte7ANV–H-ZC25
AND (X), (Y)(X) = (X) & (Y)39N—–Z-15
AND A, #iA = A & i28N—–Z-22
AND A, (X)A = A & (X)26N—–Z-13
AND A, d+YA = A & (d+Y)37N—–Z-26
AND A, d+XA = A & (d+X)27N—–Z-26
AND A, dA = A & (d)24N—–Z-23
AND A, d+XA = A & (d+X)34N—–Z-24
AND A, !aA = A & (a)25N—–Z-34
AND A, !a+XA = A & (a+X)35N—–Z-35
AND A, !a+YA = A & (a+Y)36N—–Z-35
AND dd, ds(dd) = (dd) & (ds)29N—–Z-36
AND d, #i(d) = (d) & i38N—–Z-35
AND1 C, /m-bC = C & ~(m-b)6A——-C34
AND1 C, m-bC = C & (m-b)4A——-C34
ASL ALeft shift A: high->C, 0->low1CN—–ZC12
ASL dLeft shift (d) as above0BN—–ZC24
ASL d+XLeft shift (d+X) as above1BN—–ZC25
ASL !aLeft shift (a) as above0CN—–ZC35
BBC d-0, rPC+=r if d-0 == 013——–35/7
BBC d-1, rPC+=r if d-1 == 033——–35/7
BBC d-2, rPC+=r if d-2 == 053——–35/7
BBC d-3, rPC+=r if d-3 == 073——–35/7
BBC d-4, rPC+=r if d-4 == 093——–35/7
BBC d-5, rPC+=r if d-5 == 0B3——–35/7
BBC d-6, rPC+=r if d-6 == 0D3——–35/7
BBC d-7, rPC+=r if d-7 == 0F3——–35/7
BBS d-0, rPC+=r if d-0 == 103——–35/7
BBS d-1, rPC+=r if d-1 == 123——–35/7
BBS d-2, rPC+=r if d-2 == 143——–35/7
BBS d-3, rPC+=r if d-3 == 163——–35/7
BBS d-4, rPC+=r if d-4 == 183——–35/7
BBS d-5, rPC+=r if d-5 == 1A3——–35/7
BBS d-6, rPC+=r if d-6 == 1C3——–35/7
BBS d-7, rPC+=r if d-7 == 1E3——–35/7
BCC rPC+=r if C == 090——–22/4
BCS rPC+=r if C == 1B0——–22/4
BEQ rPC+=r if Z == 1F0——–22/4
BMI rPC+=r if N == 130——–22/4
BNE rPC+=r if Z == 0D0——–22/4
BPL rPC+=r if N == 010——–22/4
BVC rPC+=r if V == 050——–22/4
BVS rPC+=r if V == 170——–22/4
BRA rPC+=r2F——–24
BRKPush PC and Flags, PC = $FFDE0F—1-0–18
CALL !a(SP–)=PCh, (SP–)=PCl, PC=a3F——–38
CBNE d+X, rCMP A, (d+X) then BNEDE——–36/8
CBNE d, rCMP A, (d) then BNE2E——–35/7
CLR1 d-0d-0 = 012——–24
CLR1 d-1d-1 = 032——–24
CLR1 d-2d-2 = 052——–24
CLR1 d-3d-3 = 072——–24
CLR1 d-4d-4 = 092——–24
CLR1 d-5d-5 = 0B2——–24
CLR1 d-6d-6 = 0D2——–24
CLR1 d-7d-7 = 0F2——–24
CLRCC = 060——-012
CLRPP = 020–0—–12
CLRVV = 0, H = 0E0-0–0—12
CMP (X), (Y)(X) - (Y)79N—–ZC15
CMP A, #iA - i68N—–ZC22
CMP A, (X)A - (X)66N—–ZC13
CMP A, d+YA - (d+Y)77N—–ZC26
CMP A, d+XA - (d+X)67N—–ZC26
CMP A, dA - (d)64N—–ZC23
CMP A, d+XA - (d+X)74N—–ZC24
CMP A, !aA - (a)65N—–ZC34
CMP A, !a+XA - (a+X)75N—–ZC35
CMP A, !a+YA - (a+Y)76N—–ZC35
CMP X, #iX - iC8N—–ZC22
CMP X, dX - (d)3EN—–ZC23
CMP X, !aX - (a)1EN—–ZC34
CMP Y, #iY - iADN—–ZC22
CMP Y, dY - (d)7EN—–ZC23
CMP Y, !aY - (a)5EN—–ZC34
CMP dd, ds(dd) - (ds)69N—–ZC36
CMP d, #i(d) - i78N—–ZC35
CMPW YA, dYA - (d)5AN—–ZC24
DAA Adecimal adjust for additionDFN—–ZC13
DAS Adecimal adjust for subtractionBEN—–ZC13
DBNZ Y, rY– then JNZFE——–24/6
DBNZ d, r(d)– then JNZ6E——–35/7
DEC AA–9CN—–Z-12
DEC XX–1DN—–Z-12
DEC YY–DCN—–Z-12
DEC d(d)–8BN—–Z-24
DEC d+X(d+X)–9BN—–Z-25
DEC !a(a)–8CN—–Z-35
DECW dWord (d)–1AN—–Z-26
DII = 0C0—–0–13
DIV YA, XA=YA/X, Y=mod(YA,X)9ENV–H-Z-112
EII = 1A0—–1–13
EOR (X), (Y)(X) = (X) EOR (Y)59N—–Z-15
EOR A, #iA = A EOR i48N—–Z-22
EOR A, (X)A = A EOR (X)46N—–Z-13
EOR A, d+YA = A EOR (d+Y)57N—–Z-26
EOR A, d+XA = A EOR (d+X)47N—–Z-26
EOR A, dA = A EOR (d)44N—–Z-23
EOR A, d+XA = A EOR (d+X)54N—–Z-24
EOR A, !aA = A EOR (a)45N—–Z-34
EOR A, !a+XA = A EOR (a+X)55N—–Z-35
EOR A, !a+YA = A EOR (a+Y)56N—–Z-35
EOR dd, ds(dd) = (dd) EOR (ds)49N—–Z-36
EOR d, #i(d) = (d) EOR i58N—–Z-35
EOR1 C, m-bC = C EOR (m-b)8A——-C35
INC AA++BCN—–Z-12
INC XX++3DN—–Z-12
INC YY++FCN—–Z-12
INC d(d)++ABN—–Z-24
INC d+X(d+X)++BBN—–Z-25
INC !a(a)++ACN—–Z-35
INCW dWord (d)++3AN—–Z-26
JMP !a+XPC = a+X1F——–36
JMP !aPC = a5F——–33
LSR ARight shift A: 0->high, low->C5CN—–ZC12
LSR dRight shift (d) as above4BN—–ZC24
LSR d+XRight shift (d+X) as above5BN—–ZC25
LSR !aRight shift (a) as above4CN—–ZC35
MOV (X)+, A(X++) = A (no read)AF——–14
MOV (X), A(X) = A (read)C6——–14
MOV d+Y, A(d+Y) = A (read)D7——–27
MOV d+X, A(d+X) = A (read)C7——–27
MOV A, #iA = iE8N—–Z-22
MOV A, (X)A = (X)E6N—–Z-13
MOV A, (X)+A = (X++)BFN—–Z-14
MOV A, d+YA = (d+Y)F7N—–Z-26
MOV A, d+XA = (d+X)E7N—–Z-26
MOV A, XA = X7DN—–Z-12
MOV A, YA = YDDN—–Z-12
MOV A, dA = (d)E4N—–Z-23
MOV A, d+XA = (d+X)F4N—–Z-24
MOV A, !aA = (a)E5N—–Z-34
MOV A, !a+XA = (a+X)F5N—–Z-35
MOV A, !a+YA = (a+Y)F6N—–Z-35
MOV SP, XSP = XBD——–12
MOV X, #iX = iCDN—–Z-22
MOV X, AX = A5DN—–Z-12
MOV X, SPX = SP9DN—–Z-12
MOV X, dX = (d)F8N—–Z-23
MOV X, d+YX = (d+Y)F9N—–Z-24
MOV X, !aX = (a)E9N—–Z-34
MOV Y, #iY = i8DN—–Z-22
MOV Y, AY = AFDN—–Z-12
MOV Y, dY = (d)EBN—–Z-23
MOV Y, d+XY = (d+X)FBN—–Z-24
MOV Y, !aY = (a)ECN—–Z-34
MOV dd, ds(dd) = (ds) (no read)FA——–35
MOV d+X, A(d+X) = A (read)D4——–25
MOV d+X, Y(d+X) = Y (read)DB——–25
MOV d+Y, X(d+Y) = X (read)D9——–25
MOV d, #i(d) = i (read)8F——–35
MOV d, A(d) = A (read)C4——–24
MOV d, X(d) = X (read)D8——–24
MOV d, Y(d) = Y (read)CB——–24
MOV !a+X, A(a+X) = A (read)D5——–36
MOV !a+Y, A(a+Y) = A (read)D6——–36
MOV !a, A(a) = A (read)C5——–35
MOV !a, X(a) = X (read)C9——–35
MOV !a, Y(a) = Y (read)CC——–35
MOV1 C, m-bC = (m-b)AA——-C34
MOV1 m-b, C(m-b) = CCA——–36
MOVW YA, dYA = word (d)BAN—–Z-25
MOVW d, YAword (d) = YA (read low only)DA——–25
MUL YAYA = Y * A, NZ on Y onlyCFN—–Z-19
NOPdo nothing00——–12
NOT1 m-bm-b = ~m-bEA——–35
NOTCC = !CED——-C13
OR (X), (Y)(X) = (X) | (Y)19N—–Z-15
OR A, #iA = A | i08N—–Z-22
OR A, (X)A = A | (X)06N—–Z-13
OR A, d+YA = A | (d+Y)17N—–Z-26
OR A, d+XA = A | (d+X)07N—–Z-26
OR A, dA = A | (d)04N—–Z-23
OR A, d+XA = A | (d+X)14N—–Z-24
OR A, !aA = A | (a)05N—–Z-34
OR A, !a+XA = A | (a+X)15N—–Z-35
OR A, !a+YA = A | (a+Y)16N—–Z-35
OR dd, ds(dd) = (dd) | (ds)09N—–Z-36
OR d, #i(d) = (d) | i18N—–Z-35
OR1 C, /m-bC = C | ~(m-b)2A——-C35
OR1 C, m-bC = C | (m-b)0A——-C35
PCALL uCALL $FF00+u4F——–26
POP AA = (++SP)AE——–14
POP PSWFlags = (++SP)8ENVPBHIZC14
POP XX = (++SP)CE——–14
POP YY = (++SP)EE——–14
PUSH A(SP–) = A2D——–14
PUSH PSW(SP–) = Flags0D——–14
PUSH X(SP–) = X4D——–14
PUSH Y(SP–) = Y6D——–14
RETPop PC6F——–15
RET1Pop Flags, PC7FNVPBHIZC16
ROL ALeft shift A: low=C, C=high3CN—–ZC12
ROL dLeft shift (d) as above2BN—–ZC24
ROL d+XLeft shift (d+X) as above3BN—–ZC25
ROL !aLeft shift (a) as above2CN—–ZC35
ROR ARight shift A: high=C, C=low7CN—–ZC12
ROR dRight shift (d) as above6BN—–ZC24
ROR d+XRight shift (d+X) as above7BN—–ZC25
ROR !aRight shift (a) as above6CN—–ZC35
SBC (X), (Y)(X) = (X)-(Y)-!CB9NV–H-ZC15
SBC A, #iA = A-i-!CA8NV–H-ZC22
SBC A, (X)A = A-(X)-!CA6NV–H-ZC13
SBC A, d+YA = A-(d+Y)-!CB7NV–H-ZC26
SBC A, d+XA = A-(d+X)-!CA7NV–H-ZC26
SBC A, dA = A-(d)-!CA4NV–H-ZC23
SBC A, d+XA = A-(d+X)-!CB4NV–H-ZC24
SBC A, !aA = A-(a)-!CA5NV–H-ZC34
SBC A, !a+XA = A-(a+X)-!CB5NV–H-ZC35
SBC A, !a+YA = A-(a+Y)-!CB6NV–H-ZC35
SBC dd, ds(dd) = (dd)-(ds)-!CA9NV–H-ZC36
SBC d, #i(d) = (d)-i-!CB8NV–H-ZC35
SET1 d-0d-0 = 102——–24
SET1 d-1d-1 = 122——–24
SET1 d-2d-2 = 142——–24
SET1 d-3d-3 = 162——–24
SET1 d-4d-4 = 182——–24
SET1 d-5d-5 = 1A2——–24
SET1 d-6d-6 = 1C2——–24
SET1 d-7d-7 = 1E2——–24
SETCC = 180——-112
SETPP = 140–1—–12
SLEEPHalts the processorEF——–1?
STOPHalts the processorFF——–1?
SUBW YA, dYA = YA - (d), H on high byte9ANV–H-ZC25
TCALL 0CALL $FFDE01——–18
TCALL 1CALL $FFDC11——–18
TCALL 2CALL $FFDA21——–18
TCALL 3CALL $FFD831——–18
TCALL 4CALL $FFD641——–18
TCALL 5CALL $FFD451——–18
TCALL 6CALL $FFD261——–18
TCALL 7CALL $FFD071——–18
TCALL 8CALL $FFCE81——–18
TCALL 9CALL $FFCC91——–18
TCALL 10CALL $FFCAA1——–18
TCALL 11CALL $FFC8B1——–18
TCALL 12CALL $FFC6C1——–18
TCALL 13CALL $FFC4D1——–18
TCALL 14CALL $FFC2E1——–18
TCALL 15CALL $FFC0F1——–18
TCLR1 !a(a) = (a)&~A, ZN as for A-(a)4EN—–Z-36
TSET1 !a(a) = (a)|A, ZN as for A-(a)0EN—–Z-36
XCN AA = (A>>4) | (A<<4)9FN—–Z-15