CPU実験室

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

Lチカプログラム

プログラム空間0x3f40にあるパラレルLEDのポートにインクリメントデータを出力するプログラムを書いてみました。16ビット長の汎用データレジスタAY0をカウンタとして使い、その下位8ビットをPXレジスタにコピー。ダミーのデータレジスタAX0を連結した24ビットデータをプログラム空間に書き込みます。

f:id:O3I:20210619124003j:plain

算術演算処理をおこなうALUの構造がまだよく理解できていないので冗長なコードになっているかもしれません。フィードバックレジスタAFを使えばもっと簡潔になるはずです。

 

プログラムコードはたしかに高級言語っぽいです。これはユーザーズマニュアルにも、「多くの他のアセンブラとは異なり、代数表記を使用して効率的で非常に読みやすい」と謳っています。

f:id:O3I:20210619124016j:plain

ただし、コードは読み易くてもそれをマシンコード化するためにアセンブラが大きな働きをしていることになります。いまのところアセンブラがまだありません。命令は全てシングルワード、命令幅が24ビット固定なのでMC14500のようにexcelで簡易アセンブラができないか考えてみました

なのですが

・その代数的表記をインストラクション+引数の命令フォーマットに翻訳しなければならない

・命令によってビットフィールドの割り付けが全く異なる

・条件分岐+演算命令、転送命令+演算命令といった複合命令がありインストラクションとコードが一対一対応しない

ということがありかなり無理そうです。

 

すこしでもハンドアセンブルをアシストできないかと次のようにやってみました。

①命令フォーマットの種類に合わせてこのようなテンプレートを用意します。(type1からtype31まである)

f:id:O3I:20210619130131j:plain

アセンブラコードの1行ごとにそのコードに適用できるインストラクションを手動で探し、テンプレートを手動で貼り付けます

f:id:O3I:20210619124107j:plain

アセンブラコードのオペランド・引数に合わせテンプレートのビットフィールドに0/1のデータを手動で書き込みます

④24ビットのビットフィールドからあら不思議3バイトのHEXコードが生成されます(ここだけ自動)

ということで右端の列にマシンコードが出来上がりました。