CPU実験室

誰も見向きもしない古いCPUをいじって動かしてみようというプロジェクトです

コード解析

まずハード的な接続:アドレスバスとデータバスのROM~バッファは導通OKでしたが、バッファ~CPU間はCPUの生足が触れないのでつながってるとこれはもう信じるしかありません。

次はインストラクションコードのバスへのアサインです。

これは前にMC68000開発のときmotorola系のビッグエンディアンで悩んだことがありますがNS32000シリーズの数値表現はIntel系と同じリトルエンディアンのようで生成されたコード「0000DA7F」は低アドレスから「7F」「DA」「00」「00」でいいようです。(基板上にも左からこの順番で差し込む)

 

最後にこれは大丈夫なはずでシロウトが云々するところではない所なんですがアセンブラが出力したコードが何を示しているか調べてみました。

MS32000インストラクションマニュアルによるとJUMPコードのフォーマットは以下のようになっています。

f:id:O3I:20191109121056j:plain

生成されたオペコードは「DA7F」なのでオペランドのアドレッシングモードを示すgenフィールドは「11011」だということになります。

これの意味合いをみると、

f:id:O3I:20191109121553j:plain

で、たしかにプログラムカウンタ相対ジャンプ(リラティブジャンプ)であることがわかります。

 

・・となると次に来るオペランド(disp)の値は本当に「00」で合ってるんだろうか?となります。たとえばZ80CPUでは自身への相対ジャンプ JR $は[18/FE]とアセンブルされ自身のコードサイズを抜いたマイナス値がディスプレースメントとなったはずです。