選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

13KB

6510 / 6502 Complete Opcode Reference

Source: The Machine Language Book for the C64; The Advanced Machine Language Book for the C64

Flags: Negative · oVerflow · Break · Decimal · Interrupt · Zero · Carry Column order: Opcode | Hex | Bytes | Cycles | Flags affected


Addressing Mode Key

Symbol Mode Example
imm Immediate LDA #$0A
zp Zero Page LDA $10
zp,X Zero Page,X LDA $10,X
zp,Y Zero Page,Y LDA $10,Y
abs Absolute LDA $1234
abs,X Absolute,X LDA $1234,X
abs,Y Absolute,Y LDA $1234,Y
ind Indirect JMP ($1234)
(zp,X) Indexed Indirect LDA ($10,X)
(zp),Y Indirect Indexed LDA ($10),Y
rel Relative (branch) BNE label
impl Implied CLC
A Accumulator LSR A

+1 cycle if page boundary crossed; +2 cycles for branch taken + page cross.


Load / Store

LDA — Load Accumulator N Z

Mode Hex Bytes Cycles
imm $A9 2 2
zp $A5 2 3
zp,X $B5 2 4
abs $AD 3 4
abs,X $BD 3 4+1
abs,Y $B9 3 4+1
(zp,X) $A1 2 6
(zp),Y $B1 2 5+1

LDX — Load X Register N Z

Mode Hex Bytes Cycles
imm $A2 2 2
zp $A6 2 3
zp,Y $B6 2 4
abs $AE 3 4
abs,Y $BE 3 4+1

LDY — Load Y Register N Z

Mode Hex Bytes Cycles
imm $A0 2 2
zp $A4 2 3
zp,X $B4 2 4
abs $AC 3 4
abs,X $BC 3 4+1

STA — Store Accumulator (no flags)

Mode Hex Bytes Cycles
zp $85 2 3
zp,X $95 2 4
abs $8D 3 4
abs,X $9D 3 5
abs,Y $99 3 5
(zp,X) $81 2 6
(zp),Y $91 2 6

STX — Store X (no flags)

Mode Hex Bytes Cycles
zp $86 2 3
zp,Y $96 2 4
abs $8E 3 4

STY — Store Y (no flags)

Mode Hex Bytes Cycles
zp $84 2 3
zp,X $94 2 4
abs $8C 3 4

Register Transfers N Z

Mnemonic Hex Bytes Cycles Operation
TAX $AA 1 2 A → X
TAY $A8 1 2 A → Y
TXA $8A 1 2 X → A
TYA $98 1 2 Y → A
TSX $BA 1 2 SP → X (N Z)
TXS $9A 1 2 X → SP (none)

Stack Operations

Mnemonic Hex Bytes Cycles Flags Operation
PHA $48 1 3 Push A to stack
PLA $68 1 4 N Z Pull A from stack
PHP $08 1 3 Push SR to stack
PLP $28 1 4 all Pull SR from stack

Arithmetic

ADC — Add with Carry N V Z C

Mode Hex Bytes Cycles
imm $69 2 2
zp $65 2 3
zp,X $75 2 4
abs $6D 3 4
abs,X $7D 3 4+1
abs,Y $79 3 4+1
(zp,X) $61 2 6
(zp),Y $71 2 5+1

SBC — Subtract with Borrow N V Z C

Mode Hex Bytes Cycles
imm $E9 2 2
zp $E5 2 3
zp,X $F5 2 4
abs $ED 3 4
abs,X $FD 3 4+1
abs,Y $F9 3 4+1
(zp,X) $E1 2 6
(zp),Y $F1 2 5+1

Increment / Decrement

Mnemonic Hex Mode Bytes Cycles Flags
INC $E6 zp 2 5 N Z
INC $F6 zp,X 2 6 N Z
INC $EE abs 3 6 N Z
INC $FE abs,X 3 7 N Z
DEC $C6 zp 2 5 N Z
DEC $D6 zp,X 2 6 N Z
DEC $CE abs 3 6 N Z
DEC $DE abs,X 3 7 N Z
INX $E8 impl 1 2 N Z
INY $C8 impl 1 2 N Z
DEX $CA impl 1 2 N Z
DEY $88 impl 1 2 N Z

Logical Operations N Z

AND

Mode Hex Bytes Cycles
imm $29 2 2
zp $25 2 3
zp,X $35 2 4
abs $2D 3 4
abs,X $3D 3 4+1
abs,Y $39 3 4+1
(zp,X) $21 2 6
(zp),Y $31 2 5+1

ORA

Mode Hex Bytes Cycles
imm $09 2 2
zp $05 2 3
zp,X $15 2 4
abs $0D 3 4
abs,X $1D 3 4+1
abs,Y $19 3 4+1
(zp,X) $01 2 6
(zp),Y $11 2 5+1

EOR

Mode Hex Bytes Cycles
imm $49 2 2
zp $45 2 3
zp,X $55 2 4
abs $4D 3 4
abs,X $5D 3 4+1
abs,Y $59 3 4+1
(zp,X) $41 2 6
(zp),Y $51 2 5+1

Shift & Rotate N Z C

Mnemonic Hex Mode Bytes Cycles Operation
ASL $0A A 1 2 Left shift, 0→bit0
ASL $06 zp 2 5
ASL $16 zp,X 2 6
ASL $0E abs 3 6
ASL $1E abs,X 3 7
LSR $4A A 1 2 Right shift, 0→bit7
LSR $46 zp 2 5
LSR $56 zp,X 2 6
LSR $4E abs 3 6
LSR $5E abs,X 3 7
ROL $2A A 1 2 Left rotate thru C
ROL $26 zp 2 5
ROL $36 zp,X 2 6
ROL $2E abs 3 6
ROL $3E abs,X 3 7
ROR $6A A 1 2 Right rotate thru C
ROR $66 zp 2 5
ROR $76 zp,X 2 6
ROR $6E abs 3 6
ROR $7E abs,X 3 7

Compare N Z C

CMP — Compare Accumulator

Mode Hex Bytes Cycles
imm $C9 2 2
zp $C5 2 3
zp,X $D5 2 4
abs $CD 3 4
abs,X $DD 3 4+1
abs,Y $D9 3 4+1
(zp,X) $C1 2 6
(zp),Y $D1 2 5+1

CPX — Compare X N Z C

Mode Hex Bytes Cycles
imm $E0 2 2
zp $E4 2 3
abs $EC 3 4

CPY — Compare Y N Z C

Mode Hex Bytes Cycles
imm $C0 2 2
zp $C4 2 3
abs $CC 3 4

BIT — Bit Test N V Z

Mode Hex Bytes Cycles Notes
zp $24 2 3 N←bit7, V←bit6, Z←A AND mem
abs $2C 3 4

Branch Instructions (2 bytes, rel offset, +1 cycle taken, +2 if page cross)

Mnemonic Hex Condition
BCC $90 C = 0 (no carry)
BCS $B0 C = 1 (carry set)
BEQ $F0 Z = 1 (equal/zero)
BNE $D0 Z = 0 (not equal)
BMI $30 N = 1 (minus)
BPL $10 N = 0 (plus)
BVC $50 V = 0 (no overflow)
BVS $70 V = 1 (overflow)

Branch offset range: -128 to +127 bytes from instruction after branch.


Jump & Subroutine

Mnemonic Hex Mode Bytes Cycles Notes
JMP $4C abs 3 3 Unconditional jump
JMP $6C ind 3 5 Indirect; 6502 page bug!
JSR $20 abs 3 6 Push PC-1, jump
RTS $60 impl 1 6 Pull PC+1, return
RTI $40 impl 1 6 Pull SR then PC (for IRQ/NMI)
BRK $00 impl 1 7 Software IRQ; pushes PC+2 + SR

6502 JMP indirect bug: JMP ($10FF) fetches low byte from $10FF, high byte from $1000 (not $1100). Never use indirect JMP across page boundary.


Flag Instructions

Mnemonic Hex Bytes Cycles Effect
CLC $18 1 2 Clear carry
SEC $38 1 2 Set carry
CLD $D8 1 2 Clear decimal
SED $F8 1 2 Set decimal
CLI $58 1 2 Clear IRQ disable
SEI $78 1 2 Set IRQ disable
CLV $B8 1 2 Clear overflow

No-Operation

Mnemonic Hex Bytes Cycles Notes
NOP $EA 1 2 Do nothing; timing

Common Idioms & Patterns

16-bit Add

    CLC
    LDA low1
    ADC low2
    STA result_lo
    LDA high1
    ADC high2
    STA result_hi

16-bit Subtract

    SEC
    LDA low1
    SBC low2
    STA result_lo
    LDA high1
    SBC high2
    STA result_hi

Multiply by 2 (16-bit)

    ASL low_byte
    ROL high_byte

Test specific bit (bit 3)

    LDA value
    AND #%00001000
    BEQ bit_was_clear

Set specific bit

    LDA value
    ORA #%00001000
    STA value

Clear specific bit

    LDA value
    AND #%11110111
    STA value

Toggle bit

    LDA value
    EOR #%00001000
    STA value

Efficient loop (downward)

    LDX #100
loop:
    ; ... body ...
    DEX
    BNE loop

Indirect indexed store (table write)

    LDA #<table    ; store table address
    STA ptr
    LDA #>table
    STA ptr+1
    LDY #offset
    LDA value
    STA (ptr),Y

Cycle Counting Notes

  • 1 cycle = ~1.02 µs (PAL) or ~0.98 µs (NTSC)
  • 1 scan line = 63 cycles (NTSC) / 63 cycles (PAL, slightly different)
  • 1 frame = 262 lines NTSC / 312 lines PAL
  • VIC-II steals cycles during sprite DMA and bad lines — account for this in cycle-critical raster code
  • Bad lines occur when (raster & 7) = (YSCROLL & 7) — VIC takes 40 extra cycles

Powered by TurnKey Linux.