2020-01-02 22:11 — asano
カテゴリー:
MN1613のステップ実行(その1)以降、少し進展がありました。
一つ目はアドレスバスとMEMR, MEMWをLED表示する基板を用意したこと、これで1本ずつテスタで電圧を測る必要がなくなりました。
本当はIOR, IOW, FSYCなども見たいところなのですが、EMILY Boardのリボンケーブルを利用する形にしたので諦めました。アドレスの上位4ビットは未使用ピンに割り当てたのですが、あまり今回だけの信号を割り当てるのは避けたかったのです。数も少ないことですしテスタ対応すればすむことです。
データバスはコネクタまでは準備したのですがLEDは未実装です。ステップ動作中でもメモリの内容はEMILY Board側から自由に参照・変更できるのでとりあえず無くても何とかなりそうだからです。
二つ目は勝手に走ってしまう問題の解決です。ハンダ付けの怪しいところを修正して回ったところ解決しました。
1本ずつ確認しながらではなかったのでどの信号が原因だったのかは確定しませんでしたが、DTAKが疑わしいと考えています。MN1613のこのピンはもともとプルダウンしていて、止めるときにこれを"H"にする回路を追加したのですが、断線すると"L"になって止まらなくなります。
ということで準備ができたのでリセット状態からのバスの動作を見ていきます。
条件はHLT, IRQ0, IRQ1, IRQ2, STRTは"H"固定(プルアップ)、CSRQ/RUNもプルアップしています。この状態でRSTを"H"→"L"にして実行します。その後、EMILY BoardのPB5を"H"→"L"→"H"して(前回の回路図参照)ステップを進めます。
- A(アドレス)=X'0000', IOR, FSYC="L"
なぜかいきなりIORです。資料が少なくてなんともいえないのですが、MN1610と同様であればコンソール機能が発動しているのかもしれません。このときデータバスは誰もドライブしていないはず且つプルアップ・プルダウンもされていないのでアドレスラッチしたときのX'0000'が読み込まれたと思います。 - A=X'0002', MEMR, FSYC="L"
これもなぜX'0002'を読んでいるのか不明です。メモリのX'D707'が読み込まれたはずです。 - A=X'0003', MEMR, FSYC="L"
これもなぜX'0003'を読んでいるのか不明です。メモリのX'D707'が読み込まれたはずです。 - A=X'D707', MEMR, FSYC="H", ここでCSRQ/RUNが"L"に変わりました。
X'D707'は上のX'0002', X'0003'のメモリ内容です。X'0002', X'0003'はレベル1割り込みのSTR
,IC
の退避領域なのでLPSW 1
命令が実行された可能性があります。なぜ実行されるのかは不明ですが。もしそうならSTR
にもX'D707'が格納されているはずです。
FSYCが"H"なのでこれは命令フェッチです。X'D707'のメモリ内容はX'A09C'、これはST R0,X'9C'(X0)
命令でR0
の内容をX0+X'9C'番地に書き込む命令です。 - A=X'D708', MEMR, FSYC="H"
続いて次の命令のフェッチ、書き込みが無いのはパイプラインのせいなのでしょうか?
X'D708'のメモリ内容はX'02D2'、これは未定義命令です。 - A=X'D707', MEMR, FSYC="H"
再びX'D707'からの命令フェッチ、よくわかりません。 - A=X'D708', MEMR, FSYC="H"
再びX'D708'からの命令フェッチ、よくわかりません。 - A=X'0000', MEMW
X'0000'番地への書き込み、メモリ内容はX'D707"→X'8707'となりました。これはレベル0割り込みのSTR
の保存と思われます。上でSTR
にはX'D707'が入っているはずと書きましたが、STR
には未使用で"0"固定のビットがあるのでX'8707'になります。 - A=X'0001', MEMW
X'0001'番地への書き込み、メモリ内容はX'D707"→X'D707'となりました。これはレベル0割り込みのIC
の保存と思われます。
レベル0割り込みは未定義命令の実行でも発生するらしいのでX'D708'からの命令フェッチが引き金になったのかもしれません。なぜ書き込まれたのがX'D708'やX'D709'ではなくX'D707'なのかは謎です。 - A=X'0100', MEMR, FSYC="L"
レベル0割り込みのベクタ(STR
)の読み込みと思われます。メモリ内容はX'0000'です。 - A=X'0101', MEMR, FSYC="L"
レベル0割り込みのベクタ(IC
)の読み込みと思われます。メモリ内容はX'010A'です。 - A=X'010A', MEMR, FSYC="H"
上で読んだIC
から実行する最初の命令フェッチです。
何か長くなってしまいました。
まだ不明な点が多いのでもう一度資料を読み直してみようと思っています。あとはメモリの内容をいろいろ変えながら試してみるのも有効かもしれません。
コメントを追加