CPU実験室

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

bin2hexコレクション

いままでいろいろなボードコンピュータ用に作ってきたモニタを見てみると、もちろんCPUアーキテクチャの違いはもちろんですが、その時のスキル、そのCPUへの理解度で様々な書き方をしていました。メモリダンプ表示にはかかせず、共通に含まれていているBIN→HEX変換処理をどうやっていたか観察してみました。

 

まずZ80です。引数が10以上なら7を足して48を足す、9以下なら48だけ足すというようにRETの出口を1つにする工夫をしていて、教科書的な書き方です

f:id:O3I:20200124224039j:plain

 

8085はZ80とバイナリレベルでコードコンパチで処理も同じですが相対ジャンプが使えないので少しコードサイズが大きくなっています

f:id:O3I:20200124224516j:plain

 

NECのマイクロコントローラuPD7810です。条件分岐がない代わりに演算結果による条件スキップ命令があるので、それを使ってシンプルに書けます。全CPUで最短のソースは3行、6バイトです

f:id:O3I:20200124232611j:plain

 

次はモトローラMC6809MC68000。おなじ68系の流れでニーモニックも似かよっています。コーディングもそれそれ参照したわけではないと思いますが、全く同じ処理をしていました。

f:id:O3I:20200124233102j:plain

f:id:O3I:20200124233113j:plain

 

ちょっと変わったところで固定小数点DSPのTMS32010です。マクロで記述してあったものが展開されたものを抜き出してきました。汎用的に使えるレジスタがアキュームレータ1本しかなく、全てメモリ上に置かれた値との演算になるのでかなり回りくどい書き方になっています

f:id:O3I:20200124233737j:plain

 

一方、世代が進んだ32ビット浮動小数DSPのTMS320C30ではレジスタ数も、アドレッシングモードも増え、汎用CPUっぽいソースコードになっています。ですが1命令32ビット固定長なので簡単な処理なのにコードがやたら重厚。且つなんか「四角い」・・

f:id:O3I:20200124233755j:plain