名前 | サイズ | 説明 |
---|---|---|
A | 8bit | アキュムレータ |
X | 8bit | インデックスX |
Y | 8bit | インデックスY |
S | 8bit | スタックポインタ※1 |
P | 8bit | ステータス |
PC | 16bit | プログラムカウンタ |
※1 | スタック領域 0x0100 - 0x01ff のポインタ |
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---|---|---|---|---|---|---|---|
N | V | 1 | B | D | I | Z | C |
N |
| ||||
V |
| ||||
1 | 1固定 | ||||
B |
| ||||
D |
| ||||
I |
| ||||
Z |
| ||||
C |
|
※1 RP2A03はBCDモードが存在しないため、Dフラグを無視する(セット・クリアは可能)
B | オペランドサイズが8ビット |
# | 8/16/32ビットの即値データ |
#8 | ゼロページアドレス(0x00-0xff) |
#8,X | ゼロページアドレス(0x00-0xff + X) |
#8,Y | ゼロページアドレス(0x00-0xff + Y) |
#16 | 絶対アドレス(0x0000-0xffff) |
#16,X | 絶対アドレス(0x0000-0xffff + X)※1 |
#16,Y | 絶対アドレス(0x0000-0xffff + Y)※1 |
(#8,X) | 間接アドレス(ゼロページ(0x00-0xff + X)の指すアドレス) |
(#8),Y | 間接アドレス(ゼロページ(0x00-0xff)の指すアドレス + Y)※1 |
$ | その命令が置かれている先頭アドレス |
※1 | 命令により、ページ(256バイト)をまたぐアドレスを指定した場合、+1ステート |
- | 変化なし |
* | 命令の実行により変化 |
0 | 0にクリア |
1 | 1をセット |
1ステート | 1クロック |
(+1) | 1ページをまたぐ時に+1ステート |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
LDA | B | LDA # | A ← # | *-----*- | 2 | 2 | |
B | LDA #8 | A ← (#8) | *-----*- | 2 | 3 | ||
B | LDA #8,X | A ← (#8+X) | *-----*- | 2 | 4 | ||
B | LDA #16 | A ← (#16) | *-----*- | 3 | 4 | ||
B | LDA #16,X | A ← (#16+X) | *-----*- | 3 | 4(+1) | ||
B | LDA #16,Y | A ← (#16+Y) | *-----*- | 3 | 4(+1) | ||
B | LDA (#8,X) | A ← ((#8+X)) | *-----*- | 2 | 6 | ||
B | LDA (#8),Y | A ← ((#8)+Y) | *-----*- | 2 | 5(+1) | ||
LDX | B | LDX # | X ← # | *-----*- | 2 | 2 | |
B | LDX #8 | X ← (#8) | *-----*- | 2 | 3 | ||
B | LDX #8,Y | X ← (#8+Y) | *-----*- | 2 | 4 | ||
B | LDX #16 | X ← (#16) | *-----*- | 3 | 4 | ||
B | LDX #16,Y | X ← (#16+Y) | *-----*- | 3 | 4(+1) | ||
LDY | B | LDY # | Y ← # | *-----*- | 2 | 2 | |
B | LDY #8 | Y ← (#8) | *-----*- | 2 | 3 | ||
B | LDY #8,X | Y ← (#8+X) | *-----*- | 2 | 4 | ||
B | LDY #16 | Y ← (#16) | *-----*- | 3 | 4 | ||
B | LDY #16,X | Y ← (#16+X) | *-----*- | 3 | 4(+1) | ||
STA | B | STA #8 | (#8) ← A | -------- | 2 | 3 | |
B | STA #8,X | (#8+X) ← A | -------- | 2 | 4 | ||
B | STA #16 | (#16) ← A | -------- | 3 | 4 | ||
B | STA #16,X | (#16+X) ← A | -------- | 3 | 5 | ||
B | STA #16,Y | (#16+Y) ← A | -------- | 3 | 5 | ||
B | STA (#8,X) | ((#8+X)) ← A | -------- | 2 | 6 | ||
B | STA (#8),Y | ((#8)+Y) ← A | -------- | 2 | 6 | ||
STX | B | STX #8 | (#8) ← X | -------- | 2 | 3 | |
B | STX #8,Y | (#8+Y) ← X | -------- | 2 | 4 | ||
B | STX #16 | (#16) ← X | -------- | 3 | 4 | ||
STY | B | STY #8 | (#8) ← Y | -------- | 2 | 3 | |
B | STY #8,X | (#8+X) ← Y | -------- | 2 | 4 | ||
B | STY #16 | (#16) ← Y | -------- | 3 | 4 | ||
TAX | B | TAX | X ← A | *-----*- | 1 | 2 | |
TXA | B | TXA | A ← X | *-----*- | 1 | 2 | |
TAY | B | TAY | Y ← A | *-----*- | 1 | 2 | |
TYA | B | TYA | A ← Y | *-----*- | 1 | 2 | |
TSX | B | TSX | X ← S | *-----*- | 1 | 2 | |
TXS | B | TXS | S ← X | *-----*- | 1 | 2 | |
PHA | B | PHA | (SP) ← A SP ← SP - 1 | -------- | 1 | 3 | |
PHP | B | PHP | (SP) ← P SP ← SP - 1 | -------- | 1 | 3 | |
PLA | B | PLA | SP ← SP + 1 A ← (SP) | *-----*- | 1 | 4 | |
PLP | B | PLP | SP ← SP + 1 P ← (SP) | ******** | 1 | 4 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
ADC | B | ADC # | A ← A + # + C | **----** | 2 | 2 | |
B | ADC #8 | A ← A + (#8) + C | **----** | 2 | 3 | ||
B | ADC #8,X | A ← A + (#8+X) + C | **----** | 2 | 4 | ||
B | ADC #16 | A ← A + (#16) + C | **----** | 3 | 4 | ||
B | ADC #16,X | A ← A + (#16+X) + C | **----** | 3 | 4(+1) | ||
B | ADC #16,Y | A ← A + (#16+Y) + C | **----** | 3 | 4(+1) | ||
B | ADC (#8,X) | A ← A + ((#8+X)) + C | **----** | 2 | 6 | ||
B | ADC (#8),Y | A ← A + ((#8)+Y) + C | **----** | 2 | 5(+1) | ||
SBC | B | SBC # | A ← A - # - (1-C) | **----** | 2 | 2 | |
B | SBC #8 | A ← A - (#8) - (1-C) | **----** | 2 | 3 | ||
B | SBC #8,X | A ← A - (#8+X) - (1-C) | **----** | 2 | 4 | ||
B | SBC #16 | A ← A - (#16) - (1-C) | **----** | 3 | 4 | ||
B | SBC #16,X | A ← A - (#16+X) - (1-C) | **----** | 3 | 4(+1) | ||
B | SBC #16,Y | A ← A - (#16+Y) - (1-C) | **----** | 3 | 4(+1) | ||
B | SBC (#8,X) | A ← A - ((#8+X)) - (1-C) | **----** | 2 | 6 | ||
B | SBC (#8),Y | A ← A - ((#8)+Y) - (1-C) | **----** | 2 | 5(+1) | ||
CMP | B | CMP # | A - # | *-----** | 2 | 2 | |
B | CMP #8 | A - (#8) | *-----** | 2 | 3 | ||
B | CMP #8,X | A - (#8+X) | *-----** | 2 | 4 | ||
B | CMP #16 | A - (#16) | *-----** | 3 | 4 | ||
B | CMP #16,X | A - (#16+X) | *-----** | 3 | 4(+1) | ||
B | CMP #16,Y | A - (#16+Y) | *-----** | 3 | 4(+1) | ||
B | CMP (#8,X) | A - ((#8+X)) | *-----** | 2 | 6 | ||
B | CMP (#8),Y | A - ((#8)+Y) | *-----** | 2 | 5(+1) | ||
CPX | B | CPX # | X - # | *-----** | 2 | 2 | |
B | CPX #8 | X - (#8) | *-----** | 2 | 3 | ||
B | CPX #16 | X - (#16) | *-----** | 3 | 4 | ||
CPY | B | CPY # | Y - # | *-----** | 2 | 2 | |
B | CPY #8 | Y - (#8) | *-----** | 2 | 3 | ||
B | CPY #16 | Y - (#16) | *-----** | 3 | 4 | ||
INC | B | INC #8 | (#8) ← (#8) + 1 | *-----*- | 2 | 5 | |
B | INC #8,X | (#8+X) ← (#8+X) + 1 | *-----*- | 2 | 6 | ||
B | INC #16 | (#16) ← (#16) + 1 | *-----*- | 3 | 6 | ||
B | INC #16,X | (#16+X) ← (#16+X) + 1 | *-----*- | 3 | 7 | ||
INX | B | INX | X ← X + 1 | *-----*- | 1 | 2 | |
INY | B | INY | Y ← Y + 1 | *-----*- | 1 | 2 | |
DEC | B | DEC #8 | (#8) ← (#8) - 1 | *-----*- | 2 | 5 | |
B | DEC #8,X | (#8+X) ← (#8+X) - 1 | *-----*- | 2 | 6 | ||
B | DEC #16 | (#16) ← (#16) -+ 1 | *-----*- | 3 | 6 | ||
B | DEC #16,X | (#16+X) ← (#16+X) - 1 | *-----*- | 3 | 7 | ||
DEX | B | DEX | X ← X - 1 | *-----*- | 1 | 2 | |
DEY | B | DEY | Y ← Y - 1 | *-----*- | 1 | 2 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
AND | B | AND # | A ← A and # | *-----*- | 2 | 2 | |
B | AND #8 | A ← A and (#8) | *-----*- | 2 | 3 | ||
B | AND #8,X | A ← A and (#8+X) | *-----*- | 2 | 4 | ||
B | AND #16 | A ← A and (#16) | *-----*- | 3 | 4 | ||
B | AND #16,X | A ← A and (#16+X) | *-----*- | 3 | 4(+1) | ||
B | AND #16,Y | A ← A and (#16+Y) | *-----*- | 3 | 4(+1) | ||
B | AND (#8,X) | A ← A and ((#8+X)) | *-----*- | 2 | 6 | ||
B | AND (#8),Y | A ← A and ((#8)+Y) | *-----*- | 2 | 5(+1) | ||
ORA | B | ORA # | A ← A or # | *-----*- | 2 | 2 | |
B | ORA #8 | A ← A or (#8) | *-----*- | 2 | 3 | ||
B | ORA #8,X | A ← A or (#8+X) | *-----*- | 2 | 4 | ||
B | ORA #16 | A ← A or (#16) | *-----*- | 3 | 4 | ||
B | ORA #16,X | A ← A or (#16+X) | *-----*- | 3 | 4(+1) | ||
B | ORA #16,Y | A ← A or (#16+Y) | *-----*- | 3 | 4(+1) | ||
B | ORA (#8,X) | A ← A or ((#8+X)) | *-----*- | 2 | 6 | ||
B | ORA (#8),Y | A ← A or ((#8)+Y) | *-----*- | 2 | 5(+1) | ||
EOR | B | EOR # | A ← A or # | *-----*- | 2 | 2 | |
B | EOR #8 | A ← A xor (#8) | *-----*- | 2 | 3 | ||
B | EOR #8,X | A ← A xor (#8+X) | *-----*- | 2 | 4 | ||
B | EOR #16 | A ← A xor (#16) | *-----*- | 3 | 4 | ||
B | EOR #16,X | A ← A xor (#16+X) | *-----*- | 3 | 4(+1) | ||
B | EOR #16,Y | A ← A xor (#16+Y) | *-----*- | 3 | 4(+1) | ||
B | EOR (#8,X) | A ← A xor ((#8+X)) | *-----*- | 2 | 6 | ||
B | EOR (#8),Y | A ← A xor ((#8)+Y) | *-----*- | 2 | 5(+1) | ||
AAX | B | AAX #8 | (#8) ← X and A | *-----*- | 2 | 3 | |
B | AAX #8,Y | (#8,Y) ← X and A | *-----*- | 2 | 4 | ||
B | AAX #16 | (#16) ← X and A | *-----*- | 3 | 4 | ||
B | AAX (#8,X) | ((#8+X)) ← X and A | *-----*- | 2 | 6 | ||
SXA | B | SXA #16,Y | (#16,X) ← Y and [#16,X/256+1] | -------- | 3 | 5 | |
SYA | B | SYA #16,X | (#16,Y) ← X and [#16,Y/256+1] | -------- | 3 | 5 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
JMP | - | JMP #16 | PC ← #16 | -------- | 3 | 3 | |
- | JMP (#16) | PC ← (#16) | -------- | 3 | 5 | ||
BEQ | - | BEQ $+2+d | if Z=1 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BNE | - | BNE $+2+d | if Z=0 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BCS | - | BCS $+2+d | if C=1 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BCC | - | BCC $+2+d | if C=0 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BMI | - | BMI $+2+d | if M=1 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BPL | - | BPL $+2+d | if M=0 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BVS | - | BVS $+2+d | if V=1 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
BVC | - | BVC $+2+d | if V=0 then PC ← $+2+d | -------- | 2 | 3(+1) [True] 2 [False] | |
JSR | - | JSR #16 | PUSH $+2 PC ← #16 | -------- | 3 | 6 | |
RTS | - | RTS | PC ← POP + 1 | -------- | 1 | 6 | |
RTI | - | RTI | PSR ← POP PC ← POP | ******** | 1 | 6 | |
BRK | - | BRK | PUSH $+1 PUSH PSR PSR ← PSR or B PC ← (0xfffe) | ---1---- | 1 | 7 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
ASL | B | ASL A | *-----** | 1 | 2 | ||
B | ASL #8 | *-----** | 2 | 5 | |||
B | ASL #8,X | *-----** | 2 | 6 | |||
B | ASL #16 | *-----** | 3 | 6 | |||
B | ASL #16,X | *-----** | 3 | 7 | |||
LSR | B | LSR A | *-----** | 1 | 2 | ||
B | LSR #8 | *-----** | 2 | 5 | |||
B | LSR #8,X | *-----** | 2 | 6 | |||
B | LSR #16 | *-----** | 3 | 6 | |||
B | LSR #16,X | *-----** | 3 | 7 | |||
ROL | B | ROL A | *-----** | 1 | 2 | ||
B | ROL #8 | *-----** | 2 | 5 | |||
B | ROL #8,X | *-----** | 2 | 6 | |||
B | ROL #16 | *-----** | 3 | 6 | |||
B | ROL #16,X | *-----** | 3 | 7 | |||
ROR | B | ROR A | *-----** | 1 | 2 | ||
B | ROR #8 | *-----** | 2 | 5 | |||
B | ROR #8,X | *-----** | 2 | 6 | |||
B | ROR #16 | *-----** | 3 | 6 | |||
B | ROR #16,X | *-----** | 3 | 7 | |||
RLA | B | RLA #8 | *-----** | 2 | 5 | ||
B | RLA #8,X | *-----** | 2 | 6 | |||
B | RLA #16 | *-----** | 3 | 6 | |||
B | RLA #16,X | *-----** | 3 | 7 | |||
B | RLA #16,Y | *-----** | 3 | 7 | |||
B | RLA (#8,X) | *-----** | 2 | 8 | |||
B | RLA (#8),Y | *-----** | 2 | 8 | |||
SLO | B | SLO #8 | **----** | 2 | 5 | ||
B | SLO #8,X | **----** | 2 | 6 | |||
B | SLO #16 | **----** | 3 | 6 | |||
B | SLO #16,X | **----** | 3 | 7 | |||
B | SLO #16,Y | **----** | 3 | 7 | |||
B | SLO (#8,X) | **----** | 2 | 8 | |||
B | SLO (#8),Y | **----** | 2 | 8 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
BIT | B | BIT #8 | if [A and (#8)]=0 then Z ← 1 else Z ← 0 | **----*- | 2 | 3 | |
B | BIT #16 | if [A and (#16)]=0 then Z ← 1 else Z ← 0 | **----*- | 3 | 4 | ||
SEC | - | SEC | C ← 1 | -------1 | 1 | 2 | |
CLC | - | CLC | C ← 0 | -------0 | 1 | 2 | |
SEI | - | SEI | I ← 1 | -----1-- | 1 | 2 | |
CLI | - | CLI | I ← 0 | -----0-- | 1 | 2 | |
SED | - | SED | D ← 1 | ----1--- | 1 | 2 | |
CLD | - | CLD | D ← 0 | ----0--- | 1 | 2 | |
SEV | - | SEV | V ← 1 | -1------ | 1 | 2 | |
CLV | - | CLV | V ← 0 | -0------ | 1 | 2 |
命令群 | サイズ | ニーモニック | 機能 | NVRBDIZC | 命令長 | ステート | 補足 |
NOP | - | NOP | 何もしない | -------- | 1 | 2 | |
DOP | - | DOP # | 何もしない | -------- | 2 | 2 | |
- | DOP #8 | -------- | 2 | 3 | |||
- | DOP #8,X | -------- | 2 | 4 | |||
TOP | - | TOP #16 | 何もしない | -------- | 3 | 4 | |
- | TOP #16,X | -------- | 3 | 4(+1) | |||
KIL | B | KILL | -------- | 1 | - | ||
AAC | B | AAC # | *-----** | 2 | 2 | ||
ARR | B | ARR # | **----** | 2 | 2 | ||
ASR | B | ASR # | *-----** | 2 | 2 | ||
ATX | B | ATX # | *-----*- | 2 | 2 | ||
AXA | B | AXA #16,Y | -------- | 3 | 5 | ||
B | AXA (#8),Y | -------- | 2 | 6 | |||
AXS | B | AXS # | *-----** | 2 | 2 | ||
LAR | B | LAR #16,Y | *-----*- | 3 | 4 | ||
XAA | B | XAA # | -------- | 2 | 2 | ||
XAS | B | XAS #16,Y | -------- | 3 | 5 | ||
DCP | B | DCP #8 | -------* | 2 | 5 | ||
B | DCP #8,X | -------* | 2 | 6 | |||
B | DCP #16 | -------* | 3 | 6 | |||
B | DCP #16,X | -------* | 3 | 7 | |||
B | DCP #16,Y | -------* | 3 | 7 | |||
B | DCP (#8,X) | -------* | 2 | 8 | |||
B | DCP (#8),Y | -------* | 2 | 8 | |||
ISC | B | ISC #8 | **----** | 2 | 5 | ||
B | ISC #8,X | **----** | 2 | 6 | |||
B | ISC #16 | **----** | 3 | 6 | |||
B | ISC #16,X | (#16,X) ← (#16,X) + 1 A ← A - (#16,X) - (1-C) | **----** | 3 | 7 | ||
B | ISC #16,Y | **----** | 3 | 7 | |||
B | ISC (#8,X) | **----** | 2 | 8 | |||
B | ISC (#8),Y | **----** | 2 | 8 | |||
LAX | B | LAX #8 | A ← X ← (#8) | *-----*- | 2 | 3 | |
B | LAX #8,Y | A ← X ← (#8+Y) | *-----*- | 2 | 4 | ||
B | LAX #16 | A ← X ← (#16) | *-----*- | 3 | 4 | ||
B | LAX #16,Y | A ← X ← (#16+Y)< | *-----*- | 3 | 4 (+1) | ||
B | LAX (#8,X) | A ← X ← ((#8+X)) | *-----*- | 2 | 6 | ||
B | LAX (#8),Y | A ← X ← ((#8)+Y) | *-----*- | 2 | 5 (+1) | ||
RRA | B | RRA #8 | **----** | 2 | 5 | ||
B | RRA #8,X | **----** | 2 | 6 | |||
B | RRA #16 | **----** | 3 | 6 | |||
B | RRA #16,X | **----** | 3 | 7 | |||
B | RRA #16,Y | **----** | 3 | 7 | |||
B | RRA (#8,X) | **----** | 2 | 8 | |||
B | RRA (#8),Y | **----** | 2 | 8 | |||
SRE | B | SRE #8 | *-----** | 2 | 5 | ||
B | SRE #8,X | *-----** | 2 | 6 | |||
B | SRE #16 | *-----** | 3 | 6 | |||
B | SRE #16,X | *-----** | 3 | 7 | |||
B | SRE #16,Y | *-----** | 3 | 7 | |||
B | SRE (#8,X) | *-----** | 2 | 8 | |||
B | SRE (#8),Y | *-----** | 2 | 8 |
実装済み |
未実装 |
未定義命令 |
未定義命令・未定義 |
H/L | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F |
0 | BRK | ORA (#8,X) |
KIL | SLO (#8,X) |
DOP #8 |
ORA #8 |
ASL #8 |
SLO #8 |
PHP | ORA # |
ASL A |
AAC # |
TOP #16 |
ORA #16 |
ASL #16 |
SLO #16 |
1 | BPL $+2+d |
ORA (#8),Y |
KIL | SLO (#8),Y |
DOP #8,X |
ORA #8,X |
ASL #8,X |
SLO #8,X |
CLC | ORA #16,Y |
NOP | SLO #16,Y |
TOP #16,X |
ORA #16,X |
ASL #16,X |
SLO #16,X |
2 | JSR #16 |
AND (#8,X) |
KIL | RLA (#8,X) |
BIT #8 |
AND #8 |
ROL #8 |
RLA #8 |
PLP | AND # |
ROL A |
AAC # |
BIT #16 |
AND #16 |
ROL #16 |
RLA #16 |
3 | BMI $+2+d |
AND (#8),Y |
KIL | RLA (#8),Y |
DOP #8,X |
AND #8,X |
ROL #8,X |
RLA #8,X |
SEC | AND #16,Y |
NOP | RLA #16,Y |
TOP #16,X |
AND #16,X |
ROL #16,X |
RLA #16,X |
4 | RTI | EOR (#8,X) |
KIL | SRE (#8,X) |
DCP #8 |
EOR #8 |
LSR #8 |
SRE #8 |
PHA | EOR # |
LSR A |
ASR # |
JMP #16 |
EOR #16 |
LSR #16 |
SRE #16 |
5 | BVC $+2+d |
EOR (#8),Y |
KIL | SRE (#8),Y |
DOP #8,X |
EOR #8,X |
LSR #8,X |
SRE #8,X |
CLI | EOR #16,Y |
NOP | SRE #16,Y |
TOP #16,X |
EOR #16,X |
LSR #16,X |
SRE #16,X |
6 | RTS | ADC (#8,X) |
KIL | RRA (#8,X) |
DOP #8 |
ADC #8 |
ROR #8 |
RRA #8 |
PLA | ADC # |
ROR A |
ARR # |
JMP (#16) |
ADC #16 |
ROR #16 |
RRA #16 |
7 | BVS $+2+d |
ADC (#8),Y |
KIL | RRA (#8),Y |
DOP #8,X |
ADC #8,X |
ROR #8,X |
RRA #8,X |
SEI | ADC #16,Y |
NOP | RRA #16,Y |
TOP #16,X |
ADC #16,X |
ROR #16,X |
RRA #16,X |
8 | DOP # |
STA (#8,X) |
DOP # |
AAX (#8,X) |
STY #8 |
STA #8 |
STX #8 |
AAX #8 |
DEY | DOP # |
TXA | XAA # |
STY #16 |
STA #16 |
STX #16 |
AAX #16 |
9 | BCC $+2+d |
STA (#8),Y |
KIL | AXA (#8),Y |
STY #8,X |
STA #8,X |
STX #8,Y |
AAX #8,Y |
TYA | STA #16,Y |
TXS | XAS #16,Y |
SYA #16,X |
STA #16,X |
SXA #16,X |
AXA #16,Y |
A | LDY # |
LDA (#8,X) |
LDX # |
LAX (#8,X) |
LDY #8 |
LDA #8 |
LDX #8 |
LAX #8 |
TAY | LDA # |
TAX | ATX # |
LDY #16 |
LDA #16 |
LDX #16 |
LAX #16 |
B | BCS $+2+d |
LDA (#8),Y |
KIL | LAX (#8),Y |
LDY #8,X |
LDA #8,X |
LDX #8,Y |
LAX #8,Y |
CLV | LDA #16,Y |
TSX | LAR #16,Y |
LDY #16,X |
LDA #16,X |
LDX #16,Y |
LAX #16,Y |
C | CPY # |
CMP (#8,X) |
DOP # |
DCP (#8,X) |
CPY #8 |
CMP #8 |
DEC # |
DCP #8 |
INY | CMP # |
DEX | AXS # |
CPY #16 |
CMP #16 |
DEC #16 |
DCP #16 |
D | BNE $+2+d |
CMP (#8),Y |
KIL | DCP (#8),Y |
DOP #8,X |
CMP #8,X |
DEC #8,X |
DCP #8,X |
CLD | CMP #16,Y |
NOP | DCP #16,Y |
TOP #16,X |
CMP #16,X |
DEC #16,X |
DCP #16,X |
E | CPX # |
SBC (#8,X) |
DOP # |
ISC (#8,X) |
CPX #8 |
SBC #8 |
INC #8 |
ISC #8 |
INX | SBC # |
NOP | SBC # |
CPX #16 |
SBC #16 |
INC #16 |
ISC #16 |
F | BEQ $+2+d |
SBC (#8),Y |
KIL | ISC (#8),Y |
DOP #8,X |
SBC #8,X |
INC #8,X |
ISC #8,X |
SED | SBC #16,Y |
NOP | ISC #16,Y |
TOP #16,X |
SBC #16,X |
INC #16,X |
ISC #16,X |
HVC-001モジュールに、NESASMと互換性(一部疑似命令が未対応)のあるアセンブラを内蔵しています。
ソースファイル(ASM)を読み込むことで、デバッガからソースレベルのデバッグが可能になります。
以下の機能をサポートします。
ゼロページアドレス | < |
絶対アドレス | |
間接アドレス |
疑似命令 | 引数 | 説明 |
---|---|---|
.EQU | =と同じ | |
.INESPRG | バンク数 | プログラムROMのバンク数 |
.INESCHR | バンク数 | キャラクターROMのバンク数 |
.INESMIR | フラグ | ミラーフラグ |
.INESMAP | 番号 | マッパー番号 |
.INESF6 | ファイルヘッダーの6バイト目を指定 | |
.FILE | .nesファイルを出力する | |
.NOFILE | .nesファイルを出力しない | |
.BANK | バンク番号,[バンク跨ぎフラグ] | 開始バンク番号 |
.ORG | アドレス | 開始アドレス |
.ALIGN | 2-256 | アラインメントを揃える |
.MACRO | マクロ定義 | |
.ENDM | マクロ定義終了 | |
.FUNC | 関数内容 | |
.FAIL | ||
.ZP | ゼロページセクション | |
.BSS | BSSセクション | |
.CODE | コードセクション | |
.DATA | データセクション | |
.DB | 定義データの配列 | 1バイトデータを定義 |
.DW | 定義データの配列 | 2バイトデータを定義 |
.BYTE | .DBと同じ | |
.WORD | .DWと同じ | |
.DS | 確保数 | 指定バイト数の領域を確保 |
.RSSET | 値 | |
.RS | 確保数 | |
.INCBIN | "ファイル名" | バイナリファイルをインクルード |
.INCLUDE | "ファイル名" | 別ソースファイルをインクルード |
.INCBMP | "ファイル名", [8/16] | ビットマップファイルをCHRへ変換して読み込む。 引数を指定しない、または8を指定した時は8x8、引数に16を指定した時は8x16 |
.IF | 条件式 | |
.IFDEF | シンボル名 | |
.IFNDEF | シンボル名 | |
.ELSE | ||
.ELIF | 条件式 | |
.ENDIF |
※1 | 赤字の疑似命令は、NESASMには存在しない |
シンボル名 | 説明 |
---|---|
__VDMOD_VER__ | バージョン |
ARG_NONE | |
ARG_REG | |
ARG_IMMEDIATE | |
ARG_ABSOLUTE | |
ARG_INDIRECT | |
ARG_STRING | |
ARG_LABEL |
関数名 | 引数 | 説明 |
---|---|---|
HIGH() | 値 | 値の上位8ビットを取得 |
LOW() | 値 | 値の下位8ビットを取得 |
BANK() | シンボル | 指定シンボルのあるバンク番号を取得 |
PAGE() | シンボル | 指定シンボルのあるページ番号を取得 |
DEFINED() | シンボル | シンボルが定義されている時は1、未定義時は0を返す |
名前 | 説明 |
---|---|
@@ | ファイル内でのみ有効なローカルラベル |
@B | 1つ前のローカルラベル |
@F | 1つ先のローカルラベル |
$ | 命令のあるアドレス |
JMP @F ; 下にある @@ 行へジャンプ : @@: LDA #0 : JMP @B ; 上にある @@ 行へジャンプ : JMP $ ; この命令を繰り返し
疑似命令 | 補足 |
---|---|
.LIST | |
.NOLIST | |
.MLIST | |
.NOMLIST | |
.DEFCHR | |
.INCCHR | .INCBMPをサポートしたのでサポートしない |
.ZP/.BSSセクションで定義したラベル名の後に、':'を付けていないものが対象となります。
.ZP ; ゼロページ A .DS 1 B .DS 2 C: .DS 1 ; ラベルの後に':'が付いているので表示されない .BSS ; RAM D .DS 1 E: .DS 1 ; ラベルの後に':'が付いているので表示されない F .DS 1
.IFDEF __VDMOD_VER__ ; NESASM からアセンブルした時は無視するよう、IF/ENDIFで囲む .INESF6 %00000010 ; バックアップ有効 .ENDIF
vdmgrを起動した後、メニューから「設定」‐「詳細設定...」を選択して、詳細設定ダイアログを起動する。
詳細設定ダイアログのシステムに「HVC-001」、左側リストの「デバッガ」を選択した後、デバッガ起動をチェックする。
「OK」ボタンを押下しデバッガを起動する。
メニューの「設定」‐「ウィンドウ」‐「1 HVC-001」を選択しチェックを入れ、ウィンドウを表示する。
メニューの「設定」‐「表示」‐「開発用」を選択しチェックを入れ、走査線やテレビに表示されない領域の表示を行う。
テキストエディタで作成したソースファイルをvdmgrへドラッグアンドドロップ、またはメニューの「開く」からソースファイルを選択することでアセンブルを行います。
一度上記操作を行えば(たとえエラーが発生したとしても)、以降Ctrl+R、またはメニューの「再読み込み」を選択することで再読み込みが行えます。
通常は、初めの一度のみドラッグアンドドロップし、それ以降Ctrl+Rで再読み込みを行うことで開発を行います。
動作確認は、Downloadにある20210705_vrc7reg.zip、20141009_asmtest.zip、20170503_darius.zip(画像データの使用許可の返事を頂けていないので自分で取得する必要がありますが)で確認できます。
20210705_vrc7reg.zipは、圧縮ファイルを展開後、main.asmをドラッグアンドドロップ。
20141009_asmtest.zipは、圧縮ファイルを展開後、kybtest.asm、またはaputest.asmをドラッグアンドドロップ。
手持ちの古いチューナーからVGA出力ができたため、旧ファミコンで動作させた画面を録画しました。
20170503_darius.zipをアセンブル後、生成された.nesファイルをMMC5のROMへ書きこんだものが以下になります
(手持ちの安物USB HDMIキャプチャで60fps可能と書いている人を見かけたので60fpsで録画してみましたがカクつきます)