BRK 命令 (Software Break)
現在の処理を中断し、ソフトウェア割込を実行します。

BRKオーバーロード
オペコード 構文 アドレッシングモード バイト数 命令サイクル
00
BRK #Imm.
Stack/ Interrupt
2
7
1

1. エミュレーションモード時は1サイクル追加

フラグ変化
----dI---

d: ソフトウェア割込開始時に強制的にクリアされる
I: ソフトウェア割込開始時に強制的にセットされる

解説
BRK命令は、現在実行中の処理を中断し、ソフトウェア割込を実行します。
ソフトウェア割込開始処理の内容はネイティブモードとエミュレーションモードで異なります。
BRK命令のオペランドには、8ビットの定数を指定することでシグネチャとすることができます。これは実際の処理では使用されませんが、デバッガ上でのトレースに役立ちます。

・ネイティブモード
ネイティブモードではソフトウェア割込は割込禁止フラグの影響を受けません。
1. プログラムバンクレジスタをスタックにプッシュします。
2. プログラムカウンタを2インクリメントし、スタックにプッシュします。
3. ステータスレジスタをスタックにプッシュします。
4. 割込禁止フラグをセットし、デシマルモードフラグをクリアします。
5. プログラムバンクレジスタをゼロクリアし、プログラムカウンタをBreakベクタ($FFE6)より取得し、割込処理を実行します。

・エミュレーションモード時
エミュレーションモードでは6502のBRKと同じように動作します。したがって次の処理が実行されます
1. プログラムカウンタを2インクリメントし、スタックにプッシュします。
2. ステータスレジスタをスタックにプッシュします。
3. ブレークモードフラグをセットし、SEIを実行してIRQ割込を禁止します
4. プログラムバンクレジスタをゼロクリアし、プログラムカウンタをIRQ/BRKベクタ($FFFE)より取得し、割込処理を実行します。
5. デシマルフラグをクリアします
参照