現在の処理を中断し、ソフトウェア割込を実行します。
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. デシマルフラグをクリアします
参照