ADC ( ADd with Carry )
| Operation | Tflagが0の時 | A ← A + dst + Carry |
| Tflagが1の時 | ($zz:X) ← ($zz:X) + dst + Carry |
加算命令です。6280(6502)にはCarryが付かない加算命令はありません。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ADC #$nn | Immediate | $69, $nn | 2 | 2 | 6502 |
| ADC $zz | ZeroPage | $65, $zz | 2 | 4 | 6502 |
| ADC $zz,X | ZeroPage with X | $75, $zz | 2 | 4 | 6502 |
| ADC $aabb | Absolute | $6D, $bb, $aa | 3 | 5 | 6502 |
| ADC $aabb,X | Absolute with X | $7D, $bb, $aa | 3 | 5 | 6502 |
| ADC $aabb,Y | Absolute with Y | $79, $bb, $aa | 3 | 5 | 6502 |
| ADC ($zz) | Indirect ZeroPage | $72, $zz | 2 | 7 | 65C02 |
| ADC ($zz,X) | Indirect with pre-indexed X | $61, $zz | 2 | 7 | 6502 |
| ADC ($zz),Y | Indirect with post-indexed Y | $71, $zz | 2 | 7 | 6502 |
| 特記事項:Tflagが1の時、実行サイクルは+3される |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | Dflagが1であれば0固定。Dflagが0であれば、演算結果が2の補数としての範囲を超えたら1、そうじゃなければ0 |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果の8bit分が0なら1、そうじゃなければ0 |
| C | 演算結果、桁あふれが起きた場合は1、そうじゃなければ0 |
AND ( logical AND )
| Operation | Tflagが0の時 | A ← A and dst |
| Tflagが1の時 | ($zz:X) ← ($zz:X) and dst |
論理積命令です。各ビットごと、どちらも1の時に1、そのほかは0となります。
各ビットの結果| 入力1 | 入力2 | 出力 |
|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| AND #$nn | Immediate | $29, $nn | 2 | 2 | 6502 |
| AND $zz | ZeroPage | $25, $zz | 2 | 4 | 6502 |
| AND $zz,X | ZeroPage with X | $35, $zz | 2 | 4 | 6502 |
| AND $aabb | Absolute | $2D, $bb, $aa | 3 | 5 | 6502 |
| AND $aabb,X | Absolute with X | $3D, $bb, $aa | 3 | 5 | 6502 |
| AND $aabb,Y | Absolute with Y | $39, $bb, $aa | 3 | 5 | 6502 |
| AND ($zz) | Indirect ZeroPage | $32, $zz | 2 | 7 | 65C02 |
| AND ($zz,X) | Indirect with pre-indexed X | $21, $zz | 2 | 7 | 6502 |
| AND ($zz),Y | Indirect with post-indexed Y | $31, $zz | 2 | 7 | 6502 |
| 特記事項:Tflagが1の時、実行サイクルは+3される |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | --- |
ASL ( Arithmetic Shift Left )
| Operation | Carry, dst ← dst << 1 |
算術左シフト命令です。1bit分、左へシフトします。結果的に、値を2倍するのと同じです。0bit目には0が入ります。演算前の7bit目はCarryフラグに入ります。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ASL A | Immediate | $0a | 1 | 2 | 6502 |
| ASL $zz | ZeroPage | $06, $zz | 2 | 6 | 6502 |
| ASL $zz,X | ZeroPage with X | $16, $zz | 2 | 6 | 6502 |
| ASL $aabb | Absolute | $0E, $bb, $aa | 3 | 7 | 6502 |
| ASL $aabb,X | Absolute with X | $1E, $bb, $aa | 3 | 7 | 6502 |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | 演算前のbit7が入る |
BBRn ( Branch on Bit Reset n )
| Operation | PC ← ($zz).bit(n) == 0 ? PC+3+rr(-128≦rr≦+127) : PC+3 |
指定されたZeroPageの中身のビットが0の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BBR0, $zz, $rr | ZeroPage, Relative | $0F, $zz, $rr | 3 | 6 | 65C02 |
| BBR1, $zz, $rr | ZeroPage, Relative | $1F, $zz, $rr | 3 | 6 | 65C02 |
| BBR2, $zz, $rr | ZeroPage, Relative | $2F, $zz, $rr | 3 | 6 | 65C02 |
| BBR3, $zz, $rr | ZeroPage, Relative | $3F, $zz, $rr | 3 | 6 | 65C02 |
| BBR4, $zz, $rr | ZeroPage, Relative | $4F, $zz, $rr | 3 | 6 | 65C02 |
| BBR5, $zz, $rr | ZeroPage, Relative | $5F, $zz, $rr | 3 | 6 | 65C02 |
| BBR6, $zz, $rr | ZeroPage, Relative | $6F, $zz, $rr | 3 | 6 | 65C02 |
| BBR7, $zz, $rr | ZeroPage, Relative | $7F, $zz, $rr | 3 | 6 | 65C02 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BBSn ( Branch on Bit Set n )
| Operation | PC ← ($zz).bit(n) == 1 ? PC+3+rr(-128≦rr≦+127) : PC+3 |
指定されたZeroPageの中身のビットが1の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BBS0, $zz, $rr | ZeroPage, Relative | $8F, $zz, $rr | 3 | 6 | 65C02 |
| BBS1, $zz, $rr | ZeroPage, Relative | $9F, $zz, $rr | 3 | 6 | 65C02 |
| BBS2, $zz, $rr | ZeroPage, Relative | $AF, $zz, $rr | 3 | 6 | 65C02 |
| BBS3, $zz, $rr | ZeroPage, Relative | $BF, $zz, $rr | 3 | 6 | 65C02 |
| BBS4, $zz, $rr | ZeroPage, Relative | $CF, $zz, $rr | 3 | 6 | 65C02 |
| BBS5, $zz, $rr | ZeroPage, Relative | $DF, $zz, $rr | 3 | 6 | 65C02 |
| BBS6, $zz, $rr | ZeroPage, Relative | $EF, $zz, $rr | 3 | 6 | 65C02 |
| BBS7, $zz, $rr | ZeroPage, Relative | $FF, $zz, $rr | 3 | 6 | 65C02 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BCC ( Branch on Carry Clear )
| Operation | PC ← Carry == 0 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Carryフラグが0の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BCC $rr | Relative | $90, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BCS ( Branch on Carry Set )
| Operation | PC ← Carry == 1 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Carryフラグが1の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BCS $rr | Relative | $B0, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BEQ ( Branch on EQual )
| Operation | PC ← Zero == 1 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Zeroフラグが1の場合に相対分岐します。比較命令で値が同じである場合はZeroフラグが1になります(内部動作は被比較値と比較対象値を引き算していると考えられるためこういう動作になります)。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BEQ $rr | Relative | $F0, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BIT ( BIt Test )
| Operation | N ← dst.bit7, V ← dst.bit6, Z ← A and dst == 0 |
Aレジスタとdstの値の論理積を取り、結果0になるならZeroフラグをセットします。Aレジスタの内容は変化しません。dst の bit7 が Negative フラグに、dst の bit6 oVerflow フラグにそれぞれ反映されます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BIT #$nn | Immediate | $89, $nn | 2 | 2 | 65C02 |
| BIT $zz | ZeroPage | $24, $zz | 2 | 4 | 6502 |
| BIT $zz,X | ZeroPage with X | $34, $zz | 2 | 4 | 65C02 |
| BIT $aabb | Absolute | $2c, $bb, $aa | 3 | 5 | 6502 |
| BIT $aabb,X | Absolute with X | $3c, $bb, $aa | 3 | 5 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | dst.bit6 |
| T | 0 |
| D | --- |
| I | --- |
| Z | A and dst == 0 ? 1 : 0 |
| C | --- |
BMI ( Branch on Minus )
| Operation | PC ← Negative == 1 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Negativeフラグが1の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BMI $rr | Relative | $30, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BNE ( Branch on Not Equal )
| Operation | PC ← Zero == 0 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Zeroフラグが0の場合に相対分岐します。比較命令で値が違う場合はZeroフラグが0になります(内部動作は被比較値と比較対象値を引き算していると考えられるためこういう動作になります)。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BNE $rr | Relative | $D0, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BPL ( Branch on Plus )
| Operation | PC ← Negative == 0 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Negativeフラグが0の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BPL $rr | Relative | $10, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BRA ( BRAnch )
| Operation | PC ← PC+2+rr(-128≦rr≦+127) |
無条件に相対ジャンプします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BRA $rr | Relative | $80, $rr | 2 | 4 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BRK ( BReaK interrupt )
| Operation | (Stack) ← PC+1, Stack+=2, (Stack) ← P, Stack+=1, PC ← VECTOR($FFF6) |
IRQ2に登録されているアドレスを割り込みと同じ動作でコールします。スタックにはステータスレジスタの内容も積まれますが、bit4が1になっています。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BRK | Implied | $00 | 1 | 8 | 6502 |
| 特記事項:動作は割り込みと同じなので、BRK命令呼び出しから戻る時はRTI命令を使います。 |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | 0 |
| I | 1 |
| Z | --- |
| C | --- |
| 特記事項:bit4 に相当する"B"フラグが1になります。 |
BSR ( Branch to SubRoutine )
| Operation | (Stack-1,+0) ← PC+1, Stack-=2, PC ← PC+2+rr(-128≦rr≦+127) |
相対番地指定なサブルーチンコール命令です。戻ってくるときはJSR命令と同じくRTS命令です。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BSR | Relative | $44, $rr | 2 | 8 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
|
BVC ( Branch on oVerflow Clear )
| Operation | PC ← oVerflow == 0 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Overflowフラグが0の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BVC $rr | Relative | $50, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
BVS ( Branch on oVerflow Set )
| Operation | PC ← oVerflow == 1 ? PC+2+rr(-128≦rr≦+127) : PC+2 |
Overflowフラグが1の場合に相対分岐します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| BVS $rr | Relative | $70, $rr | 2 | 2 | 6502 |
| 特記事項:分岐が発生する場合、実行サイクルは+2される |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CLA ( CLear A reg )
Aレジスタに0を入れます。LDA #$00と違い1byteで済みますし、フラグが動きません。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLA | Implied | $62 | 1 | 2 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CLC ( CLear Carry flag )
Carryフラグを0にします。加減算の前でよく登場すると思います。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLC | Implied | $18 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | 0 |
CLD ( CLear Decimal flag )
Decimalフラグを0にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLD | Implied | $D8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | 0 |
| I | --- |
| Z | --- |
| C | --- |
CLI ( CLear Interrupt flag )
Interruptフラグを0にして、CPUがNMI以外の割り込みを受け付けられるようにします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLI | Implied | $58 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | 0 |
| Z | --- |
| C | --- |
CLV ( CLear oVerflow flag )
oVerflowフラグを0にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLV | Implied | $B8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | 0 |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CLX ( CLear X reg )
Xレジスタを0にします。LDX #$00と違い1byteで済みますし、フラグが動きません。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLX | Implied | $82 | 1 | 2 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CLY ( CLear Y reg )
Yレジスタを0にします。LDY #$00と違い1byteで済みますし、フラグが動きません。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CLY | Implied | $C2 | 1 | 2 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CMP ( CoMPare )
Aレジスタとdstの内容を比較して結果をフラグレジスタに反映させます。フラグの動きは Carryが0の時のSBC命令と基本的には同じで、oVerflowフラグは動かず、結果が残りません(=Aレジスタの内容は変更されません)。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CMP #$nn | Immediate | $C9, $nn | 2 | 2 | 6502 |
| CMP $zz | ZeroPage | $C5, $zz | 2 | 4 | 6502 |
| CMP $zz,X | ZeroPage with X | $D5, $zz | 2 | 4 | 6502 |
| CMP $aabb | Absolute | $CD, $bb, $aa | 3 | 5 | 6502 |
| CMP $aabb,X | Absolute with X | $DD, $bb, $aa | 3 | 5 | 6502 |
| CMP $aabb,Y | Absolute with Y | $D9, $bb, $aa | 3 | 5 | 6502 |
| CMP ($zz) | Indirect ZeroPage | $D2, $zz | 2 | 7 | 65C02 |
| CMP ($zz,X) | Indirect with pre-indexed X | $C1, $zz | 2 | 7 | 6502 |
| CMP ($zz),Y | Indirect with post-indexed Y | $D1, $zz | 2 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | A≧dstなら 1、A<dstなら 0 |
CPX ( ComPare X with dst )
Xレジスタとdstの内容を比較して結果をフラグレジスタに反映させます。CMP命令のソースがXレジスタになった命令です。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CPX #$nn | Immediate | $E0, $nn | 2 | 2 | 6502 |
| CPX $zz | ZeroPage | $E4, $zz | 2 | 4 | 6502 |
| CPX $aabb | Absolute | $EC, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | X≧dstなら 1、X<dstなら 0 |
CPY ( ComPare Y with dst )
Yレジスタとdstの内容を比較して結果をフラグレジスタに反映させます。CMP命令のソースがYレジスタになった命令です。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CPY #$nn | Immediate | $C0, $nn | 2 | 2 | 6502 |
| CPY $zz | ZeroPage | $C4, $zz | 2 | 4 | 6502 |
| CPY $aabb | Absolute | $CC, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | Y≧dstなら 1、Y<dstなら 0 |
CSH ( Change Speed to High )
| Operation | CPUクロックを投入クロックの1/3へ変更 |
CPUの動作クロックを変更し、CPUに供給されているクロックを3分周したクロックで動作するようにします。特殊なI/Oとかを操作するケースを除き、通常はCPUのリセット後にこの命令を使って高速な動作へ切り替えます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CSH | Implied | $D4 | 1 | 3 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
CSL ( Change Speed to Low )
| Operation | CPUクロックを投入クロックの1/12へ変更 |
CPUの動作クロックを変更し、CPUに供給されているクロックを12分周したクロックで動作するようにします。特殊なI/O(確か天の声とか)とかを操作するケース等で本命令を用いて動作クロックを落とす必要があります。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| CSL | Implied | $54 | 1 | 3 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
DEC ( DECrement dst )
dst の内容を1引いて dst に格納します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| DEC A | Accmulator | $3A | 1 | 2 | 65C02 |
| DEC $zz | ZeroPage | $C6, $zz | 2 | 6 | 6502 |
| DEC $zz,X | ZeroPage with X | $D6, $zz | 2 | 6 | 6502 |
| DEC $aabb | Absolute | $CE, $bb, $aa | 3 | 7 | 6502 |
| DEC $aabb,X | Absolute with X | $DE, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
DEX ( DEcrement X )
X レジスタの内容を1引きます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| DEX | Implied | $CA | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
DEY ( DEcrement Y )
Y レジスタの内容を1引きます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| DEY | Implied | $88 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
EOR ( Exclusive OR )
| Operation | Tflagが0の時 | A ← A xor dst |
| Tflagが1の時 | ($zz:X) ← ($zz:X) xor dst |
排他的論理和命令です。各ビットごと、同じであれば0、違えば1となります。ですので、同じ値で排他的論理和を取ると0になります。
各ビットの結果| 入力1 | 入力2 | 出力 |
|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| EOR #$nn | Immediate | $49, $nn | 2 | 2 | 6502 |
| EOR $zz | ZeroPage | $45, $zz | 2 | 4 | 6502 |
| EOR $zz,X | ZeroPage with X | $55, $zz | 2 | 4 | 6502 |
| EOR $aabb | Absolute | $4D, $bb, $aa | 3 | 5 | 6502 |
| EOR $aabb,X | Absolute with X | $5D, $bb, $aa | 3 | 5 | 6502 |
| EOR $aabb,Y | Absolute with Y | $59, $bb, $aa | 3 | 5 | 6502 |
| EOR ($zz) | Indirect ZeroPage | $52, $zz | 2 | 7 | 65C02 |
| EOR ($zz,X) | Indirect with pre-indexed X | $41, $zz | 2 | 7 | 6502 |
| EOR ($zz),Y | Indirect with post-indexed Y | $51, $zz | 2 | 7 | 6502 |
| 特記事項:Tflagが1の時、実行サイクルは+3される |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | --- |
INC ( INCrement dst )
dst の内容を1足して dst に格納します。65C02で無事Aレジスタがdstになりました。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| INC A | Implied | $1A | 1 | 2 | 65C02 |
| INC $zz | ZeroPage | $E6, $zz | 2 | 6 | 6502 |
| INC $zz,X | ZeroPage with X | $F6, $zz | 2 | 6 | 6502 |
| INC $aabb | Absolute | $EE, $bb, $aa | 3 | 7 | 6502 |
| INC $aabb,X | Absolute with X | $FE, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
INX ( INcrement X )
X レジスタの内容を1足します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| INX | Implied | $E8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
INY ( INcrement Y )
Y レジスタの内容を1足します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| INY | Implied | $C8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | --- |
JMP ( JuMP )
無条件に実行アドレスを指定されたアドレスへ変更します。65C02で増えた JMP ($aabb,X) は珠玉のジャンプテーブル命令です(自動でXを*2してくれるとよかったのに)。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| JMP $aabb | Absolute | $4C, $bb, $aa | 3 | 4 | 6502 |
| JMP ($aabb) | Indirect | $6C, $bb, $aa | 3 | 7 | 6502 |
| JMP ($aabb,X) | Indexed Indirect | $7C, $bb, $aa | 3 | 7 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
JSR ( Jump to SubRoutine )
| Operation | (Stack-1,+0) ← PC+2, Stack ← Stack - 2, PC ← dst |
戻り番地-1(要注意:本命令のアドレス+"2"です。3ではありません。)をスタックに積んで指定したアドレスへジャンプします。ちなみに、割り込み発生時に積まれる戻りアドレスは-1されませんので、挙動が異なります。間違っても JSR で呼び出した先から戻る時、PHP/RTI で戻れると思わない方がよいです。…わざわざやる人もいないか。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| JSR $aabb | Absolute | $20, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
LDA ( Load to A )
dst を A レジスタに入れます。NegativeフラグとZeroフラグが動きますのでお気をつけください。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| LDA #$nn | Immediate | $A9, $nn | 2 | 2 | 6502 |
| LDA $zz | ZeroPage | $A5, $zz | 2 | 4 | 6502 |
| LDA $zz,X | ZeroPage with X | $B5, $zz | 2 | 4 | 6502 |
| LDA $aabb | Absolute | $AD, $bb, $aa | 3 | 5 | 6502 |
| LDA $aabb,X | Absolute with X | $BD, $bb, $aa | 3 | 5 | 6502 |
| LDA $aabb,Y | Absolute with Y | $B9, $bb, $aa | 3 | 5 | 6502 |
| LDA ($zz) | Indirect ZeroPage | $B2, $zz | 2 | 7 | 65C02 |
| LDA ($zz,X) | Indirect with pre-indexed X | $A1, $zz | 2 | 7 | 6502 |
| LDA ($zz),Y | Indirect with post-indexed Y | $B1, $zz | 2 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dstのbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、そうじゃなければ0 |
| C | --- |
LDX ( Load to X )
dst を X レジスタに入れます。NegativeフラグとZeroフラグが動きますのでお気をつけください。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| LDX #$nn | Immediate | $A2, $nn | 2 | 2 | 6502 |
| LDX $zz | ZeroPage | $A6, $zz | 2 | 4 | 6502 |
| LDX $zz,Y | ZeroPage with Y | $B6, $zz | 2 | 4 | 6502 |
| LDX $aabb | Absolute | $AE, $bb, $aa | 3 | 5 | 6502 |
| LDX $aabb,Y | Absolute with Y | $BE, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dstのbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、そうじゃなければ0 |
| C | --- |
LDY ( Load to Y )
dst を Y レジスタに入れます。NegativeフラグとZeroフラグが動きますのでお気をつけください。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| LDY #$nn | Immediate | $A0, $nn | 2 | 2 | 6502 |
| LDY $zz | ZeroPage | $A4, $zz | 2 | 4 | 6502 |
| LDY $zz,X | ZeroPage with X | $B4, $zz | 2 | 4 | 6502 |
| LDY $aabb | Absolute | $AC, $bb, $aa | 3 | 5 | 6502 |
| LDY $aabb,X | Absolute with X | $BC, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dstのbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、そうじゃなければ0 |
| C | --- |
LSR ( Logical Shift to Right )
dst を 右へ1bit シフト(ex. bit7 → bit6)します。演算後のbit7には0が入ります。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| LSR A | Accumulator | $4A | 1 | 2 | 6502 |
| LSR $zz | ZeroPage | $46, $zz | 2 | 6 | 6502 |
| LSR $zz,X | ZeroPage with X | $56, $zz | 2 | 6 | 6502 |
| LSR $aabb | Absolute | $4E, $bb, $aa | 3 | 7 | 6502 |
| LSR $aabb,X | Absolute with X | $5E, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 0 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、そうじゃなければ0 |
| C | 0 |
NOP ( No OPeration )
何もしません。…と言いたいところですが、実際にはTflagを0にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| NOP | Implied | $EA | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
ORA ( OR A )
| Operation | Tflagが0の時 | A ← A or dst |
| Tflagが1の時 | ($zz:X) ← ($zz:X) or dst |
論理和命令です。各ビットごと、どちらも0の時に0、そのほかは1となります。
各ビットの結果| 入力1 | 入力2 | 出力 |
|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ORA #$nn | Immediate | $09, $nn | 2 | 2 | 6502 |
| ORA $zz | ZeroPage | $05, $zz | 2 | 4 | 6502 |
| ORA $zz,X | ZeroPage with X | $15, $zz | 2 | 4 | 6502 |
| ORA $aabb | Absolute | $0D, $bb, $aa | 3 | 5 | 6502 |
| ORA $aabb,X | Absolute with X | $1D, $bb, $aa | 3 | 5 | 6502 |
| ORA $aabb,Y | Absolute with Y | $19, $bb, $aa | 3 | 5 | 6502 |
| ORA ($zz) | Indirect ZeroPage | $12, $zz | 2 | 7 | 65C02 |
| ORA ($zz,X) | Indirect with pre-indexed X | $01, $zz | 2 | 7 | 6502 |
| ORA ($zz),Y | Indirect with post-indexed Y | $11, $zz | 2 | 7 | 6502 |
| 特記事項:Tflagが1の時、実行サイクルは+3される |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果全て0なら1、そうじゃなければ0 |
| C | --- |
PHA ( PusH A )
| Operation | (Stack) ← A, Stack ← Stack - 1 |
A レジスタの中身をスタックに積み上げます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PHA | Implied | $48 | 1 | 3 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PHP ( PusH P )
| Operation | (Stack) ← P, Stack ← Stack - 1 |
P レジスタ(フラグレジスタ/ステータスレジスタ)の中身をスタックに積み上げます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PHP | Implied | $08 | 1 | 3 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PHX ( PusH X )
| Operation | (Stack) ← X, Stack ← Stack - 1 |
X レジスタの中身をスタックに積み上げます。6502にはない命令ですのでご注意を。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PHX | Implied | $DA | 1 | 3 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PHY ( PusH Y )
| Operation | (Stack) ← Y, Stack ← Stack - 1 |
Y レジスタの中身をスタックに積み上げます。6502にはない命令ですのでご注意を。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PHY | Implied | $5A | 1 | 3 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PLA ( PulL A )
| Operation | Stack ← Stack + 1, A ← (Stack) |
スタックから A レジスタの中身を引き上げます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PLA | Implied | $68 | 1 | 4 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PLP ( PulL P )
| Operation | Stack ← Stack + 1, P ← (Stack) |
スタックから P レジスタ(フラグレジスタ/ステータスレジスタ)の中身を引き上げます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PLP | Implied | $28 | 1 | 4 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dst |
| V | dst |
| T | dst |
| D | dst |
| I | dst |
| Z | dst |
| C | dst |
PLX ( PulL X )
| Operation | Stack ← Stack + 1, X ← (Stack) |
スタックから X レジスタの中身を引き上げます。6502にはない命令ですのでご注意を。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PLX | Implied | $FA | 1 | 4 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
PLY ( PulL Y )
| Operation | Stack ← Stack + 1, Y ← (Stack) |
スタックから Y レジスタの中身を引き上げます。6502にはない命令ですのでご注意を。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| PLY | Implied | $7A | 1 | 4 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
RMBn ( Reset Memory Bit n )
| Operation | ($zz).bit(n) ← 0 |
指定されたZeroPageの中身のビットを0にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| RMB0 $zz | ZeroPage | $07, $zz | 2 | 7 | 65C02 |
| RMB1 $zz | ZeroPage | $17, $zz | 2 | 7 | 65C02 |
| RMB2 $zz | ZeroPage | $27, $zz | 2 | 7 | 65C02 |
| RMB3 $zz | ZeroPage | $37, $zz | 2 | 7 | 65C02 |
| RMB4 $zz | ZeroPage | $47, $zz | 2 | 7 | 65C02 |
| RMB5 $zz | ZeroPage | $57, $zz | 2 | 7 | 65C02 |
| RMB6 $zz | ZeroPage | $67, $zz | 2 | 7 | 65C02 |
| RMB7 $zz | ZeroPage | $77, $zz | 2 | 7 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
ROL ( ROtate to Left )
| Operation | Carry ← dst.bit7, dst ← dst << 1, dst.bit0 ← Carry |
dst を Carryフラグを含めて左へ1bit シフトします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ROL A | Accumulator | $2A | 1 | 2 | 6502 |
| ROL $zz | ZeroPage | $26, $zz | 2 | 6 | 6502 |
| ROL $zz,X | ZeroPage with X | $36, $zz | 2 | 6 | 6502 |
| ROL $aabb | Absolute | $2E, $bb, $aa | 3 | 7 | 6502 |
| ROL $aabb,X | Absolute with X | $3E, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | dst.bit7 |
ROR ( ROtate to Right )
| Operation | Carry ← dst.bit0, dst ← dst >> 1, dst.bit7 ← Carry |
dst を Carryフラグを含めて右へ1bit シフトします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ROR A | Accumulator | $6A | 1 | 2 | 6502 |
| ROR $zz | ZeroPage | $66, $zz | 2 | 6 | 6502 |
| ROR $zz,X | ZeroPage with X | $76, $zz | 2 | 6 | 6502 |
| ROR $aabb | Absolute | $6E, $bb, $aa | 3 | 7 | 6502 |
| ROR $aabb,X | Absolute with X | $7E, $bb, $aa | 3 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果が0なら1、そうじゃなければ0 |
| C | dst.bit0 |
RTI ( ReTurn from Interrupt )
| Operation | Stack ← Stack + 1, P ← (Stack), Stack ← Stack + 2, PC ← (Stack-1,+0) |
割り込み処理から通常処理へと復帰します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| RTI | Implied | $40 | 1 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | Stackから |
| V | Stackから |
| T | Stackから |
| D | Stackから |
| I | Stackから |
| Z | Stackから |
| C | Stackから |
RTS ( ReTurn from Subroutine )
| Operation | Stack ← Stack + 2, PC ← (Stack-1,+0)+1 |
JSR命令やBSR命令で呼び出されたサブルーチンから復帰します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| RTS | Implied | $60 | 1 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
SAX ( Swap A and X )
AレジスタとXレジスタの内容を交換します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SAX | Implied | $22 | 1 | 3 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
SAY ( Swap A and Y )
AレジスタとYレジスタの内容を交換します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SAY | Implied | $42 | 1 | 3 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
SBC ( SuBtract with Carry )
| Operation | Tflagが0の時 | A ← A - dst - Carry |
| Tflagが1の時 | ($zz:X) ← ($zz:X) - dst - Carry |
減算命令です。6280(6502)にはCarryが付かない減算命令はありません。Carryフラグの動きに注意してください。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SBC #$nn | Immediate | $E9, $nn | 2 | 2 | 6502 |
| SBC $zz | ZeroPage | $E5, $zz | 2 | 4 | 6502 |
| SBC $zz,X | ZeroPage with X | $F5, $zz | 2 | 4 | 6502 |
| SBC $aabb | Absolute | $ED, $bb, $aa | 3 | 5 | 6502 |
| SBC $aabb,X | Absolute with X | $FD, $bb, $aa | 3 | 5 | 6502 |
| SBC $aabb,Y | Absolute with Y | $F9, $bb, $aa | 3 | 5 | 6502 |
| SBC ($zz) | Indirect ZeroPage | $F2, $zz | 2 | 7 | 65C02 |
| SBC ($zz,X) | Indirect with pre-indexed X | $E1, $zz | 2 | 7 | 6502 |
| SBC ($zz),Y | Indirect with post-indexed Y | $F1, $zz | 2 | 7 | 6502 |
| 特記事項:Tflagが1の時、実行サイクルは+3される |
Flags
| フラグ名 | 変化 |
| N | 演算結果のbit7 |
| V | Dflagが1であれば0固定。Dflagが0であれば、演算結果が2の補数としての範囲を超えたら1、そうじゃなければ0 |
| T | 0 |
| D | --- |
| I | --- |
| Z | 演算結果の8bit分が0なら1、そうじゃなければ0 |
| C | 演算前の状態が、src≧(dst+Carry)であれば1、src<(dst+Carry)であれば0 |
SEC ( SEt Carry )
Carryフラグを1にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SEC | Implied | $38 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | 1 |
SED ( SEt Decimal )
Decimalフラグを1にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SED | Implied | $F8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | 1 |
| I | --- |
| Z | --- |
| C | --- |
SEI ( SEt Intruupt )
Interrptフラグを1にして、この次の命令フェッチからNMI以外の割り込みを禁止します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SEI | Implied | $78 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | 0 |
| Z | --- |
| C | --- |
SET ( SEt Tflag )
T flagを1にします。実質的には、この命令はプレフィックス命令的な動作となります(大半の命令でT=0にしているため)。この命令の直後で動作が変化する命令は、ADC命令、AND命令、EOR命令、ORA命令、SBC命令の5つです。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SET | Implied | $F4 | 1 | 2 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 1 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
SMBn ( Set Memory Bit n )
| Operation | ($zz).bit(n) ← 1 |
指定されたZeroPageの中身のビットを1にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SMB0 $zz | ZeroPage | $87, $zz | 2 | 7 | 65C02 |
| SMB1 $zz | ZeroPage | $97, $zz | 2 | 7 | 65C02 |
| SMB2 $zz | ZeroPage | $A7, $zz | 2 | 7 | 65C02 |
| SMB3 $zz | ZeroPage | $B7, $zz | 2 | 7 | 65C02 |
| SMB4 $zz | ZeroPage | $C7, $zz | 2 | 7 | 65C02 |
| SMB5 $zz | ZeroPage | $D7, $zz | 2 | 7 | 65C02 |
| SMB6 $zz | ZeroPage | $E7, $zz | 2 | 7 | 65C02 |
| SMB7 $zz | ZeroPage | $F7, $zz | 2 | 7 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
ST0 ( STore vdp no.0 )
VDP(HuC6270)のアドレスレジスタ(=物理アドレスの$1FE000)に値をセットします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ST0 #$nn | Immediate | $03, $nn | 2 | 5 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
ST1 ( STore vdp no.1 )
VDP(HuC6270)のデータレジスタ下位8bit(=物理アドレスの$1FE002)に値をセットします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ST1 #$nn | Immediate | $13, $nn | 2 | 5 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
ST2 ( STore vdp no.2 )
VDP(HuC6270)のデータレジスタ上位8bit(=物理アドレスの$1FE003)に値をセットします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| ST2 #$nn | Immediate | $23, $nn | 2 | 5 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
STA ( STore to A )
Aレジスタの内容をdstへ入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| STA $zz | ZeroPage | $85, $zz | 2 | 4 | 6502 |
| STA $zz,X | ZeroPage with X | $95, $zz | 2 | 4 | 6502 |
| STA $aabb | Absolute | $8D, $bb, $aa | 3 | 5 | 6502 |
| STA $aabb,X | Absolute with X | $9D, $bb, $aa | 3 | 5 | 6502 |
| STA $aabb,Y | Absolute with Y | $99, $bb, $aa | 3 | 5 | 6502 |
| STA ($zz) | Indirect ZeroPage | $92, $zz | 2 | 7 | 65C02 |
| STA ($zz,X) | Indirect with pre-indexed X | $81, $zz | 2 | 7 | 6502 |
| STA ($zz),Y | Indirect with post-indexed Y | $91, $zz | 2 | 7 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
STX ( STore to X )
Xレジスタの内容をdstへ入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| STX $zz | ZeroPage | $86, $zz | 2 | 4 | 6502 |
| STX $zz,Y | ZeroPage with Y | $96, $zz | 2 | 4 | 6502 |
| STX $aabb | Absolute | $8E, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
STY ( STore to Y )
Yレジスタの内容をdstへ入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| STY $zz | ZeroPage | $84, $zz | 2 | 4 | 6502 |
| STY $zz,X | ZeroPage with X | $94, $zz | 2 | 4 | 6502 |
| STY $aabb | Absolute | $8C, $bb, $aa | 3 | 5 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
STZ ( STore Zero )
0をdstへ入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| STZ $zz | ZeroPage | $64, $zz | 2 | 4 | 65C02 |
| STZ $zz,X | ZeroPage with X | $74, $zz | 2 | 4 | 65C02 |
| STZ $aabb | Absolute | $9C, $bb, $aa | 3 | 5 | 65C02 |
| STZ $aabb,X | Absolute with X | $9E, $bb, $aa | 3 | 5 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
SXY ( Swap X and Y )
XレジスタとYレジスタの内容を交換します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| SXY | Implied | $02 | 1 | 3 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TAI ( Transfer Alternate Increment )
| Operation | alt←0; do { v←($ssSS+alt); ($ddDD)←v; $llLL←$llLL-1; $ddDD←$ddDD+1; alt←alt^1; } while($llLL != 0);
|
ブロック転送命令です。ソース側がLow/Highの順に、ディスティネーション側が +1 しながら指定された$llLLバイト長分転送します。VDP(HuC6270)およびVCE(HuC6260)からの転送を想定したものです。また、メモリ内をある一定値で埋めるというケースでも大活躍です。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TAI $ssSS, $ddDD, $llLL | Block Transfer | $F3, $SS, $ss, $DD, $dd, $LL, $ll | 7 | 17 + 6*$llLL | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TAM ( Transfer Accmulator to Mprs )
| Operation | _b←0; do { if (#$nn & (1<<_b) != 0) MPR[_b]←A; _b←_b+1; } while(_b!=8);
|
MPRレジスタにAレジスタの内容を送ります。指定された値の各ビットに対応するレジスタに値がセットされます。
| ビット | 対応レジスタ |
|---|
| bit0 | MPR0 |
| bit1 | MPR1 |
| bit2 | MPR2 |
| bit3 | MPR3 |
| bit4 | MPR4 |
| bit5 | MPR5 |
| bit6 | MPR6 |
| bit7 | MPR7 |
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TAM #$nn | Immediate | $53, $nn | 2 | 5 | 6280 |
| 特記事項:$nnが0であっても5cycle消費します。 |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TAX ( Transfer Accmulator to X )
Aレジスタの内容をXレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TAX | Implied | $AA | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | Aレジスタのbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | Aレジスタが0なら1、それ以外なら0 |
| C | --- |
TAY ( Transfer Accmulator to Y )
Aレジスタの内容をYレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TAY | Implied | $A8 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | Aレジスタのbit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | Aレジスタが0なら1、それ以外なら0 |
| C | --- |
TDD ( Transfer Decrement Decrement )
| Operation | do { v←($ssSS); ($ddDD)←v; $llLL←$llLL-1; $ssSS←$ssSS-1; $ddDD←$ddDD-1; } while($llLL != 0);
|
ブロック転送命令です。ソース側、ディスティネーション側ともに -1 しながら指定された$llLLバイト長分転送します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TDD $ssSS, $ddDD, $llLL | Block Transfer | $C3, $SS, $ss, $DD, $dd, $LL, $ll | 7 | 17 + 6*$llLL | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TIA ( Transfer Increment Alternate Increment )
| Operation | alt←0; do { v←($ssSS); ($ddDD+alt)←v; $llLL←$llLL-1; $ssSS←$ssSS+1; alt←alt^1; } while($llLL != 0);
|
ブロック転送命令です。ソース側が +1 しながら、ディスティネーション側がLow/Highの順に、指定された$llLLバイト長分転送します。VDP(HuC6270)およびVCE(HuC6260)への転送を想定したものです。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TIA $ssSS, $ddDD, $llLL | Block Transfer | $E3, $SS, $ss, $DD, $dd, $LL, $ll | 7 | 17 + 6*$llLL | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TII ( Transfer Increment Increment )
| Operation | do { v←($ssSS); ($ddDD)←v; $llLL←$llLL-1; $ssSS←$ssSS+1; $ddDD←$ddDD+1; } while($llLL != 0);
|
ブロック転送命令です。ソース側、ディスティネーション側ともに +1 しながら指定された$llLLバイト長分転送します。TDDを使うかTIIを使うかは、転送領域の重なり方で決めます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TII $ssSS, $ddDD, $llLL | Block Transfer | $73, $SS, $ss, $DD, $dd, $LL, $ll | 7 | 17 + 6*$llLL | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TIN ( Transfer Increment None )
| Operation | do { v←($ssSS); ($ddDD)←v; $llLL←$llLL-1; $ssSS←$ssSS+1; } while($llLL != 0);
|
ブロック転送命令です。ソース側は+1しながら、ディスティネーション側は変化せず指定された$llLLバイト長分転送します。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TIN $ssSS, $ddDD, $llLL | Block Transfer | $D3, $SS, $ss, $DD, $dd, $LL, $ll | 7 | 17 + 6*$llLL | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TMA ( Transfer Mprs to Accmulator )
| Operation | _b←0; do { if (#$nn & (1<<_b) != 0) A←MPR[_b]; _b←_b+1; } while(_b!=8);
|
AレジスタにMPRレジスタの内容を送ります。指定された値の各ビットに対応するレジスタに値がセットされます。複数のビットが1である場合は動作は未定義になるそうです。
| ビット | 対応レジスタ |
|---|
| bit0 | MPR0 |
| bit1 | MPR1 |
| bit2 | MPR2 |
| bit3 | MPR3 |
| bit4 | MPR4 |
| bit5 | MPR5 |
| bit6 | MPR6 |
| bit7 | MPR7 |
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TMA #$nn | Immediate | $43, $nn | 2 | 4 | 6280 |
| 特記事項:$nnが0であっても4cycle消費します。 |
Flags
| フラグ名 | 変化 |
| N | --- |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | --- |
| C | --- |
TRB ( Test and Reset Bit )
| Operation | dst←dst and not(A) |
Aレジスタの反転値とdstをandしてdstに保存します。要するに、Aレジスタの立っているビットに対応するdstのビットを0にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TRB $zz | ZeroPage | $14, $zz | 2 | 6 | 65C02 |
| TRB $aabb | Absolute | $1C, $bb, $aa | 3 | 7 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | dst.bit6 |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TSB ( Test and Set Bit )
Aレジスタとdstをorしてdstに保存します。要するに、Aレジスタの立っているビットに対応するdstのビットを1にします。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TSB $zz | ZeroPage | $04, $zz | 2 | 6 | 65C02 |
| TSB $aabb | Absolute | $0C, $bb, $aa | 3 | 7 | 65C02 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | dst.bit6 |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TST ( Test )
| Operation | Negative, oVerflow←$nn and dst |
$nn と dst の論理積をとり、結果のbit7がNegativeフラグへ、bit6がoVerflowフラグにセットされます。演算結果は保存されません。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TST #$nn, $zz | Immediate, ZeroPage | $83, $nn, $zz | 3 | 7 | 6280 |
| TST #$nn, $zz, X | Immediate, ZeroPage with X | $A3, $nn, $zz | 3 | 7 | 6280 |
| TST #$nn, $aabb | Immediate, Absolute | $93, $nn, $bb, $aa | 4 | 8 | 6280 |
| TST #$nn, $aabb, X | Immediate, Absolute with X | $B3, $nn, $bb, $aa | 4 | 8 | 6280 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | dst.bit6 |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TSX ( Transfer Stack to X )
スタックレジスタの内容をXレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TSX | Implied | $BA | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TXA ( Transfer X to A )
Xレジスタの内容をAレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TXA | Implied | $8A | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TXS ( Transfer X to Stack )
Xレジスタの内容をスタックレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TXS | Implied | $9A | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |
TYA ( Transfer Y to A )
Yレジスタの内容をAレジスタに入れます。
命令一覧
| Syntax | AddressingMode | Opcode | byte length | cycles | どのCPUから? |
| TYA | Implied | $98 | 1 | 2 | 6502 |
|
Flags
| フラグ名 | 変化 |
| N | dst.bit7 |
| V | --- |
| T | 0 |
| D | --- |
| I | --- |
| Z | dstが0なら1、それ以外なら0 |
| C | --- |