2019-11-05 22:45 — asano
カテゴリー:
ハードウェア編に引き続き動作確認をしていきます。
ソケットにデバイスを搭載する前に電源などの確認は済ませてあります。電源逆接などで貴重なデバイスを失うわけにはいきません。
データシートによるとRSTを解除後にSTRTが必要に読めたので、STRTをGNDに接続していました(後にSTRTはプルアップしていても動くことがわかりました)。
クロックは38ピンX2に入れているので、念のためX1を確認してみると同じ12MHzが出ています。
37ピンSYNCには1/4の3MHzが出てくるはずです。当初これが確認できなくて悩みましたが、使用していたカウンタの問題のようでした。周波数カウンタでは入力回路の関係で正しくカウントできないことはよくあることです。
EMILY BoardのTR
コマンドでRSTを解除してやるとLEDが点灯しRUN状態になったことがわかります。この時点ではメモリには何もプログラムを用意していないので暴走しているはずです。
テストプログラムを用意して確認したいところですが、手持ちの資料には実行開始アドレスについて明確には書かれていませんでした。
- LKIT-16組立マニュアルの「7. CPU基本動作チェック」の11のところによると最初にアクセスするのは0x0100番地のようです。
- 「Panafacom MN1610 | 半導体コレクション展示会場」によると「レベル0のNPSW情報は自動スタート時にも参照されます。」とあり、このNPSW情報は0x0100,0x0101番地に置かれています。
これはどちらもMN1610に関する情報ですが、さすがにリセット後の実行開始方法は一緒だろうと試してみることにしました。
0x0100番地には0x0000(STRの初期値)、0x0101番地には0x0080(ICの初期値、プログラムカウンタにあたる)を書いて、0x0080番地には0xCFFF(B *-1)つまり自分へのブランチによる無限ループを置きます。これを実行した状態でアドレスバスを観察すると上位ビットまでが変化していてループになっていないようです。
0x007F番地に0x2000(H、停止命令)を追加して試すと、LEDが消灯して停止しました。相対分岐命令の基準となるアドレスは次の命令になる(自分自身へのときは負になる)プロセッサが多いのですが、MN1610シリーズは違うみたいですね。0xCF00(B *)に変えたら上位アドレスは変化しなくなりました。下位アドレスは変化していますが、プリフェッチ動作が関係しているのかもしれません。
これだけではなんなのでもう少し長いプログラムも試してみます。
0200 0800 MVI R0,0
0201 090A MVI R1,10
0202 5809 Loop: A R0,R1
0203 4141 SI R1,1,Z
0204 CFFE B Loop
0205 8040 ST R0,40
0206 2000 H
1から10までを足して、結果を0x0040に格納するプログラムです。実行するとLEDは一瞬光って消えました。0x0040番地を確認すると0x0037(55)が入っていて正しく実行されたことがわかります。
次はモニタを移植したいところですが、ハンドアセンブルはきついのでアセンブラを何とかしなくてはなりません。
コメント
mn1613 アセンブラ
asl を修正して対応できないかを考え中です。多分時間がかかりそうですが。
#asl は建て増し+元の構造がアレなので直すのがしんどいです。
Re: mn1613 アセンブラ
aslってThe Macroassembler ASですか?
実は現在作業中です。SC/MPとかZ80あたりを参考に見様見真似で、メモリ操作系の命令以外は動き始めています。
コメントを追加