ロード/ストア/レジスタコピー
記載 処理内容 使用例
lda mem/val → A lda #$3f
ldx mem/val → X ldx $003f
ldy mem/val → Y ldy #$0f
sta A → mem sta $2000
stx X → mem stx $2000
sty Y → mem sty $2000
txa X → A txa
tya Y → A tya
tax A → X tax
tay A → Y tay
txs X → S txs
tsx S → X tsx
演算命令
記載 処理内容 使用例
adc A + mem/val + C
→ A
adc #$10
sbc A - mem/val - ~C
→ A
sbc #$10
and A AND mem/val
→ A
and #$01
ora A OR mem/val
→ A
ora #$01
eor A XOR mem/val
→ A
eor $2000
inc A/mem + 1 → A/mem inc label
inx X + 1 → X inx
iny Y + 1 → Y iny
dec A - 1 → A dec
dex X - 1 → X dex
dey Y - 1 → Y dey
比較命令
演算結果によるフラグをセットするだけで、結果は保存しない
記載 処理内容 使用例
cmp A - mem/val cmp $2001
cpx X - mem/val cpx #$01
cpy Y - mem/val cpy #$01
bit A AND mem bit #$01
cmpの結果行われること
a >= mem/val なら C=1 (bcsで分岐できる)
a < mem/val なら C=0(bccで分岐できる)
a == mem/val なら Z=1(beqで分岐できる)
a != mem/val なら Z=0(bneで分岐できる)
ジャンプ/条件分岐/サブルーチンコール/復帰
記載 処理内容 使用例
jmp 指定アドレスへジャンプ jmp label
bcc C = 0のとき
指定アドレスへジャンプ
bcc label
bcs C = 1のとき
指定アドレスへジャンプ
bcs label
beq Z = 1のとき(演算結果=0)
指定アドレスへジャンプ
beq label
bne Z = 0のとき(演算結果!=0)
指定アドレスへジャンプ
bne label
bmi N = 1のとき
指定アドレスへジャンプ
bmi label
bpl N = 0のとき
指定アドレスへジャンプ
bpl label
bvs V = 1のとき
指定アドレスへジャンプ
bvs label
bvc V = 0のとき
指定アドレスへジャンプ
bvc label
jsr 指定アドレスのサブルーチンへ jsr label
rts サブルーチンから復帰 rts
rti 割り込み処理から復帰 rti
シフト/ローテート
記載 処理内容 使用例
asl 左シフト
bit0 = 0
C = bit7
bit[n] = bit[n-1]
asl
lsr 論理右シフト
bit7 = 0
C = bit0
bit[n] = bit[n+1]
lsr
rol 左ローテート
bit0 = C
C = bit7
bit[n] = bit[n-1]
rol
ror 右ローテート
bit7 = C
C = bit0
bit[n] = bit[n+1]
ror
スタック命令
記載 処理内容 使用例
pha Aをスタックへ
プッシュ
pha
php Pをスタックへ
プッシュ
php
pla Aをスタックから
プル
pla
plp Pをスタックから
プル
plp
レジスタ
記号 内容
A アキュムレータ
計算などに使うレジスタ
X,Y インデクスレジスタ
主にメモリアクセス等に使用
S スタックポインタ
スタックのアドレスを保持しておくレジスタ
レジスタは8bitで、スタックエリアは$0100-$01FFの間に取られ、下位8bitが保持されている
P プロセッサステータスレジスタ
計算結果のフラグを保持してるレジスタ
プロセッサステータスレジスタ
bit 記号 内容
7 N ネガティブフラグ
アキュムレータの最上位ビットがセット
6 V オーバーフローフラグ
演算結果が127を超えるか-128より小さくなったときにセット
4 B ブレイクフラグ
BRKによって割り込み処理が起きたときにセット
IRQ割り込みかBRK割り込みかの識別に使用
3 D デシマルモードフラグ
未サポート
2 I インタラプトフラグ
このフラグをセットすると割り込み不許可
1 Z ゼロフラグ
演算結果が0になるとセット
0 C キャリーフラグ
キャリーが発生したときセット
また引き算命令ではボローが起きたときは0、起きなかったときは1
ステータスビットセット/クリア
記載 処理内容 使用例
clc 0 → C clc
cld 0 → D cld
cli 0 → I cli
clv 0 → V clv
sec 1 → C sec
sed 1 → D sed
sei 1 → I sei
その他
記載 処理内容 使用例
brk ソフトウェア割り込み brk
nop 何もしない nop
本体メモリマップ
番地 用途 補足
$0000-$00FF RAM(ゼロページ) 高速アクセス可能
$0100-$01FF スタック領域
$0200-$07FF RAM
$0800-$1FFF 未使用 $0000-$07FFのミラー
$2000-$2007 I/Oレジスタ PPU
$2008-$3FFF 未使用 $2000-2007のミラー
$4000-$401F I/Oポート APU,etc
$4020-$5FFF 拡張ROM用
$6000-$7FFF バックアップRAM用
$8000-$BFFF プログラムROM LOW ROMから転送
$C000-$FFFF プログラムROM HIGH ROMから転送
PPU メモリマップ
番地 用途 補足
$0000-$0FFF パターンテーブル0 ROMから読み込まれたBG
$1000-$1FFF パターンテーブル1 ROMから読み込まれたスプライト
$2000-$23BF ネームテーブル0 画面0のBG配置パターン
$23C0-$23FF 属性テーブル0 画面0のパレット指定
$2400-$27BF ネームテーブル1 画面1のBG配置パターン
$27C0-$27FF 属性テーブル1 画面1のパレット指定
$2800-$2BBF ネームテーブル2 画面2のBG配置パターン
$2BC0-$2BFF 属性テーブル2 画面2のパレット指定
$2C00-$2FBF ネームテーブル3 画面3のBG配置パターン
$2FC0-$2FFF 属性テーブル3 画面3のパレット指定
$3000-$3EFF 未使用 $2000-$2EFFのミラー
$3F00-$3F0F パレットテーブル0 BG用パレット設定
$3F10-$3F1F パレットテーブル1 スプライト用パレット設定
$3F20-$3FFF 未使用 パレットテーブルのミラー
$4000-$FFFF 未使用 $0000-$3FFFのミラー
I/Oレジスタマップ $2000
アドレス R/W 内容
$2000 W PPUコントロールレジスタ1
bit7: VBlank時にNMIを実行(0:実行しない,1:実行する)
bit6: PPUマスター/スレーブセレクト(常に1にする)
bit5: スプライトサイズ(0:8x8,1:8x16)
bit4: BGパターンテーブルアドレス(0:$0000,1:$1000)
bit3: スプライトパターンテーブルアドレス(0:$0000,1:$1000)
bit2: PPUアドレスインクリメント(0:+1,1:+32)
bit1-0: 表示するネームテーブルアドレス番号
$2001 W PPUコントロールレジスタ2
bit7-5: bit0=1のとき背景色/bit0=1のとき色強調
000:なし
001:緑
010:青
100:赤
それ以外の数字は不可
bit4: スプライト表示(0:非表示,1:表示)
bit3: BG表示(0:非表示,1:表示)
bit2: スプライトクリップ(0:画面の左8ドットを表示しない,1:クリップなし)
bit1: BGクリップ(0:画面の左8ドットを表示しない,1:クリップなし)
bit0: ディスプレイタイプ(0:カラー,1:モノクロ)
$2002 R PPUステータスレジスタ
bit7: VBlank発生(1:VBlank中、ただしRead後0クリアされる)
bit6: スプライト#0ヒット(0:ヒットなし,1:ヒット)
bit5: スキャンラインスプライト数(0:8個以下,1:9個以上)
bit4: VRAM書きこみフラグ(0:書き込み成功,1:書き込み失敗)
$2003 W スプライトRAMアドレスレジスタ
$2004を使ってスプライトRAMに書きこむアドレスを指定する。
$2004 W スプライトI/Oレジスタ
$2003で指定したスプライトRAMにデータを書きこむ
$2005 W VRAMアドレスレジスタ1
BGのスクロール値をセットする。
このレジスタは2度書きレジスタでXのスクロール値、Yのスクロール値の順でセットする。
$2002をReadするとセットの順番はリセットされ、X値をセットする番になっている。
$2006 W VRAMアドレスレジスタ2
$2007を使ってVRAMに書きこむアドレスを指定する。
このレジスタは2度書きレジスタで上位8bit、下位8bitの順でセットする。
$2002をReadするとセットの順番はリセットされ、上位8bitをセットする番になっている。
$2007 R/W $2006で指定したアドレスのVRAMデータを読み書きする。
読み書き後$2000のbit2の値により、VRAMアドレスが1または32足される。
I/Oレジスタマップ $4000
アドレス R/W 内容
$4000 R/W 矩形波チャンネル1制御レジスタ1
bit7-6: Dutyサイクル(positive/negative)
00: 2/14
01: 4/12
10: 8/ 8
11:12/ 4
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$4001 R/W 矩形波チャンネル1制御レジスタ2
bit7: スイープ有効(0:無効,1:有効)
bit6-4: スイープレート
bit3: スイープ方向(1:decrease,0:increase)
bit2-0: スイープ右シフト値
$4002 R/W 矩形波チャンネル1周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$4003 R/W 矩形波チャンネル1周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$4004 R/W 矩形波チャンネル2制御レジスタ1
bit7-6: Dutyサイクル(positive/negative)
00: 2/14
01: 4/12
10: 8/ 8
11:12/ 4
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$4005 R/W 矩形波チャンネル2制御レジスタ1
bit7: スイープ有効(0:無効,1:有効)
bit6-4: スイープレート
bit3: スイープ方向(1:decrease,0:increase)
bit2-0: スイープ右シフト値
$4006 R/W 矩形波チャンネル2周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$4007 R/W 矩形波チャンネル2周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$4008 R/W 三角波制御レジスタ1
bit7: リニアカウンタスタート
bit6-0: リニアカウンタ
$4009 未使用
$400A R/W 三角波周波数レジスタ1
チャンネル1で使う周波数の下位8bitをセットする。
$400B R/W 三角波周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 周波数の上位3bit
$400C R/W ノイズ制御レジスタ1
bit7-6: 未使用
bit5: エンベロープDecayループ/長さカウンタ無効(1:ループ/無効)
bit4: エンベロープDecay無効(1:無効,0:有効)
bit3-0: ボリューム/Decayレート
$400D 未使用
$400E R/W ノイズ周波数レジスタ1
bit7: 乱数タイプ選択(0:32Kmode,1:93bitmode)
bit6-4: 未使用
bit3-0: 波長選択
$400F R/W ノイズ周波数レジスタ2
bit7-3: 音の長さ
bit2-0: 未使用
$4010 R/W DMC制御レジスタ1
$4011 R/W DMC制御レジスタ2
$4012 R/W DMCアドレスレジスタ
$4013 R/W DMCデータ長レジスタ
$4014 W スプライトDMAレジスタ
メモリからスプライトRAMへDMA転送を行う
このレジスタに書きこんだ値をNをすると、
Nx$100のアドレスから256バイトをスプライトRAMへ転送する。
$4015 R/W サウンドレジスタ
bit7: DMC(Delta Modulation Channel)のIRQステータス(Readのみ)
bit4: DMC(0:無効,1:有効)
bit3: ノイズチャンネル(0:無効,1:有効)
bit2: 三角波チャンネル(0:無効,1:有効)
bit1: 矩形波チャンネル2(0:無効,1:有効)
bit0: 矩形波チャンネル1(0:無効,1:有効)
$4016 R/W パッドI/O 1
bit4: ガンコントリガー(0:ON,1:OFF)
bit3: ガンコンスプライト検出(0:検出なし,1:検出)
bit0: パッドデータ(0:OFF,1:ON)
$4017 R/W パッドI/O 2
bit4: ガンコントリガー(0:ON,1:OFF)
bit3: ガンコンスプライト検出(0:検出なし,1:検出)
bit0: パッドデータ(0:OFF,1:ON)
パット入力(I/Oレジスタ $4016,$4017)
index ボタン
1 A
2 B
3 SELECT
4 START
5 UP
6 DOWN
7 LEFT
8 RIGHT
9-16 無効(マルチタップ用)
17-24 パット接続判定
パッドの入力判定は1ボタンずつ行う
$4016に1を書きこんだ後0を書きこむとパッド入力がリセットされ、
$4016のbit0を続けてロードすることで入力判定を行う
$4016がコントローラ1,$4017がコントローラー2
例)
; 初期化
lda #$01
sta $4016
lda #$00
sta $4016

; コントローラー1 パッド入力チェック(2コンは$4017)
lda $4016 ; Aボタン判定 レジスタAのbit0が1なら押されている
lda $4016 ; Bボタン判定
...
スプライト指定
byte 内容
1 Y座標
2 タイルインデクス番号
3 bit7:垂直反転(1で反転)
bit6:水平反転(1で反転)
bit5:BGとの優先順位(0:手前、1:奥)
bit4-2:0固定
bit0-1:パレットの上位2bit
4 X座標
$2003でアドレス指定, $2004で書き込み
スプライトの優先順位は0が1番手前で、63が1番奥
ネーム/属性テーブル0
- 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
- 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
2000 23c0
1-0
23c0
3-2
23c1
1-0
23c1
3-2
23c2
1-0
23c2
3-2
23c3
1-0
23c3
3-2
23c4
1-0
23c4
3-2
23c5
1-0
23c5
3-2
23c6
1-0
23c6
3-2
23c7
1-0
23c7
3-2
2020
2040 23c0
5-4
23c0
7-6
23c1
5-4
23c1
7-6
23c2
5-4
23c2
7-6
23c3
5-4
23c3
7-6
23c4
5-4
23c4
7-6
23c5
5-4
23c5
7-6
23c6
5-4
23c6
7-6
23c7
5-4
23c7
7-6
2060
2080 23c8
1-0
23c8
3-2
23c9
1-0
23c9
3-2
23ca
1-0
23ca
3-2
23cb
1-0
23cb
3-2
23cc
1-0
23cc
3-2
23cd
1-0
23cd
3-2
23ce
1-0
23ce
3-2
23cf
1-0
23cf
3-2
20a0
20c0 23c8
5-4
23c8
7-6
23c9
5-4
23c9
7-6
23ca
5-4
23ca
7-6
23cb
5-4
23cb
7-6
23cc
5-4
23cc
7-6
23cd
5-4
23cd
7-6
23ce
5-4
23ce
7-6
23cf
5-4
23cf
7-6
20e0
2100 23d0
1-0
23d0
3-2
23d1
1-0
23d1
3-2
23d2
1-0
23d2
3-2
23d3
1-0
23d3
3-2
23d4
1-0
23d4
3-2
23d5
1-0
23d5
3-2
23d6
1-0
23d6
3-2
23d7
1-0
23d7
3-2
2120
2140 23d0
5-4
23d0
7-6
23d1
5-4
23d1
7-6
23d2
5-4
23d2
7-6
23d3
5-4
23d3
7-6
23d4
5-4
23d4
7-6
23d5
5-4
23d5
7-6
23d6
5-4
23d6
7-6
23d7
5-4
23d7
7-6
2160
2180 23d8
1-0
23d8
3-2
23d9
1-0
23d9
3-2
23da
1-0
23da
3-2
23db
1-0
23db
3-2
23dc
1-0
23dc
3-2
23dd
1-0
23dd
3-2
23de
1-0
23de
3-2
23df
1-0
23df
3-2
21a0
21c0 23d8
5-4
23d8
7-6
23d9
5-4
23d9
7-6
23da
5-4
23da
7-6
23db
5-4
23db
7-6
23dc
5-4
23dc
7-6
23dd
5-4
23dd
7-6
23de
5-4
23de
7-6
23df
5-4
23df
7-6
21e0
2200 23e0
1-0
23e0
3-2
23e1
1-0
23e1
3-2
23e2
1-0
23e2
3-2
23e3
1-0
23e3
3-2
23e4
1-0
23e4
3-2
23e5
1-0
23e5
3-2
23e6
1-0
23e6
3-2
23e7
1-0
23e7
3-2
2220
2240 23e0
5-4
23e0
7-6
23e1
5-4
23e1
7-6
23e2
5-4
23e2
7-6
23e3
5-4
23e3
7-6
23e4
5-4
23e4
7-6
23e5
5-4
23e5
7-6
23e6
5-4
23e6
7-6
23e7
5-4
23e7
7-6
2260
2280 23e8
1-0
23e8
3-2
23e9
1-0
23e9
3-2
23ea
1-0
23ea
3-2
23eb
1-0
23eb
3-2
23ec
1-0
23ec
3-2
23ed
1-0
23ed
3-2
23ee
1-0
23ee
3-2
23ef
1-0
23ef
3-2
22a0
22c0 23e8
5-4
23e8
7-6
23e9
5-4
23e9
7-6
23ea
5-4
23ea
7-6
23eb
5-4
23eb
7-6
23ec
5-4
23ec
7-6
23ed
5-4
23ed
7-6
23ee
5-4
23ee
7-6
23ef
5-4
23ef
7-6
22e0
2300 23f0
1-0
23f0
3-2
23f1
1-0
23f1
3-2
23f2
1-0
23f2
3-2
23f3
1-0
23f3
3-2
23f4
1-0
23f4
3-2
23f5
1-0
23f5
3-2
23f6
1-0
23f6
3-2
23f7
1-0
23f7
3-2
2320
2340 23f0
5-4
23f0
7-6
23f1
5-4
23f1
7-6
23f2
5-4
23f2
7-6
23f3
5-4
23f3
7-6
23f4
5-4
23f4
7-6
23f5
5-4
23f5
7-6
23f6
5-4
23f6
7-6
23f7
5-4
23f7
7-6
2360
2380 23f8
1-0
23f8
3-2
23f9
1-0
23f9
3-2
23fa
1-0
23fa
3-2
23fb
1-0
23fb
3-2
23fc
1-0
23fc
3-2
23fd
1-0
23fd
3-2
23fe
1-0
23fe
3-2
23ff
1-0
23ff
3-2
23a0
ネーム/属性テーブル1
- 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f
- 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f 10 11 12 13 14 15 16 17 18 19 1a 1b 1c 1d 1e 1f
2400 27c0
1-0
27c0
3-2
27c1
1-0
27c1
3-2
27c2
1-0
27c2
3-2
27c3
1-0
27c3
3-2
27c4
1-0
27c4
3-2
27c5
1-0
27c5
3-2
27c6
1-0
27c6
3-2
27c7
1-0
27c7
3-2
2420
2440 27c0
5-4
27c0
7-6
27c1
5-4
27c1
7-6
27c2
5-4
27c2
7-6
27c3
5-4
27c3
7-6
27c4
5-4
27c4
7-6
27c5
5-4
27c5
7-6
27c6
5-4
27c6
7-6
27c7
5-4
27c7
7-6
2460
2480 27c8
1-0
27c8
3-2
27c9
1-0
27c9
3-2
27ca
1-0
27ca
3-2
27cb
1-0
27cb
3-2
27cc
1-0
27cc
3-2
27cd
1-0
27cd
3-2
27ce
1-0
27ce
3-2
27cf
1-0
27cf
3-2
24a0
24c0 27c8
5-4
27c8
7-6
27c9
5-4
27c9
7-6
27ca
5-4
27ca
7-6
27cb
5-4
27cb
7-6
27cc
5-4
27cc
7-6
27cd
5-4
27cd
7-6
27ce
5-4
27ce
7-6
27cf
5-4
27cf
7-6
24e0
2500 27d0
1-0
27d0
3-2
27d1
1-0
27d1
3-2
27d2
1-0
27d2
3-2
27d3
1-0
27d3
3-2
27d4
1-0
27d4
3-2
27d5
1-0
27d5
3-2
27d6
1-0
27d6
3-2
27d7
1-0
27d7
3-2
2520
2540 27d0
5-4
27d0
7-6
27d1
5-4
27d1
7-6
27d2
5-4
27d2
7-6
27d3
5-4
27d3
7-6
27d4
5-4
27d4
7-6
27d5
5-4
27d5
7-6
27d6
5-4
27d6
7-6
27d7
5-4
27d7
7-6
2560
2580 27d8
1-0
27d8
3-2
27d9
1-0
27d9
3-2
27da
1-0
27da
3-2
27db
1-0
27db
3-2
27dc
1-0
27dc
3-2
27dd
1-0
27dd
3-2
27de
1-0
27de
3-2
27df
1-0
27df
3-2
25a0
25c0 27d8
5-4
27d8
7-6
27d9
5-4
27d9
7-6
27da
5-4
27da
7-6
27db
5-4
27db
7-6
27dc
5-4
27dc
7-6
27dd
5-4
27dd
7-6
27de
5-4
27de
7-6
27df
5-4
27df
7-6
25e0
2600 27e0
1-0
27e0
3-2
27e1
1-0
27e1
3-2
27e2
1-0
27e2
3-2
27e3
1-0
27e3
3-2
27e4
1-0
27e4
3-2
27e5
1-0
27e5
3-2
27e6
1-0
27e6
3-2
27e7
1-0
27e7
3-2
2620
2640 27e0
5-4
27e0
7-6
27e1
5-4
27e1
7-6
27e2
5-4
27e2
7-6
27e3
5-4
27e3
7-6
27e4
5-4
27e4
7-6
27e5
5-4
27e5
7-6
27e6
5-4
27e6
7-6
27e7
5-4
27e7
7-6
2660
2680 27e8
1-0
27e8
3-2
27e9
1-0
27e9
3-2
27ea
1-0
27ea
3-2
27eb
1-0
27eb
3-2
27ec
1-0
27ec
3-2
27ed
1-0
27ed
3-2
27ee
1-0
27ee
3-2
27ef
1-0
27ef
3-2
26a0
26c0 27e8
5-4
27e8
7-6
27e9
5-4
27e9
7-6
27ea
5-4
27ea
7-6
27eb
5-4
27eb
7-6
27ec
5-4
27ec
7-6
27ed
5-4
27ed
7-6
27ee
5-4
27ee
7-6
27ef
5-4
27ef
7-6
26e0
2700 270
1-0
27f0
3-2
27f1
1-0
27f1
3-2
27f2
1-0
27f2
3-2
27f3
1-0
27f3
3-2
27f4
1-0
27f4
3-2
27f5
1-0
27f5
3-2
27f6
1-0
27f6
3-2
27f7
1-0
27f7
3-2
2720
2740 27f0
5-4
27f0
7-6
27f1
5-4
27f1
7-6
27f2
5-4
27f2
7-6
27f3
5-4
27f3
7-6
27f4
5-4
27f4
7-6
27f5
5-4
27f5
7-6
27f6
5-4
27f6
7-6
27f7
5-4
27f7
7-6
2760
2780 27f8
1-0
27f8
3-2
27f9
1-0
27f9
3-2
27fa
1-0
27fa
3-2
27fb
1-0
27fb
3-2
27fc
1-0
27fc
3-2
27fd
1-0
27fd
3-2
27fe
1-0
27fe
3-2
27ff
1-0
27ff
3-2
27a0
進数変換
10進数 16進数 2進数
1 $01 %00000001
2 $02 %00000010
3 $03 %00000011
4 $04 %00000100
5 $05 %00000101
6 $06 %00000110
7 $07 %00000111
8 $08 %00001000
9 $09 %00001001
10 $0a %00001010
11 $0b %00001011
12 $0c %00001100
13 $0d %00001101
14 $0e %00001110
15 $0f %00001111
変換ツール
10進
16進
2進
inserted by FC2 system