JMP信号の微分回路はシミュレーションからざっくりC=220pF、R=1kΩとし
だいたい150~200nS幅の正パルスを得られるようにしました
この回路をブレッドボード上で実現してみたのですが、結果が思わしくなくジャンプ先のアドレスが正しくありません。パルス幅が狭すぎるためか、プリセットが行われずカウンタがインクリメントしてしまったりかといって少し延ばしてやると再び発振状態になってしまいます。
このプログラムカウンタはそもそもプリセットもクロック同期する74HC161を使うべきでした。
といっても後の祭り・・・
ここではハードでの対応はあきらめてソフトでなんとかしてみます。
要はJMPコードが発行されたとき、その飛び先にあるコードのオペランドが自身の絶対アドレスを指していればとりあえずフェッチミスは防げるはずです。
コードを書くとこのような具合:
飛び先(LOOPラベル)にNOPコードを置き、そのオペランドにそのコードが置かれるアドレスをセット。
アセンブラ風の表記でいえばロケーションカウンタをつかって「NOP $」となります。
NOPに実効アドレスが付いているのも変ですが。