Freescale MC68HC908QT/QY 丸文デモボードのページ


《 番外編 》 オリジナル4ビット CPU をエミュレートする実験 7/31/2004

オリジナル4ビットALUをROMテーブルの形で作成しました。それを使ってオリジナル4ビットCPUを作っている最中です。最終的には74HCシリーズとROMを組み合わせて実際に動くCPUを作りますが、その前に本当に自分で考えたアーキテクチャが使い物になるかどうか、パソコンでCPUエミュレータを作って動かしてみました。実験は成功で、パソコンで動くCPUエミュレータの上で、ジャンケン判定プログラム(オリジナルCPUのためのマシン語コード)が正常に動作しました!

パソコン用に作成したCPUエミュレータは、C言語で書いています。そこで、C言語の高い移植性を生かしてワンチップマイコン MC68HC908QT4 に移植してみました。CodeWarrior はやっぱり優秀です。エミュレータ部分は1行も修正せずにそのままコンパイルできました。先ほどと同じジャンケン判定プログラム(オリジナルCPUのためのマシン語コード)と、オリジナル4ビットALUのROMテーブルをエミュレータプログラムと一緒に MC68HC908QT4 に書き込んで動かしてみると・・・、動いた!!! 最初は点灯消灯条件が少し変でしたが、すぐにデバッグできて正常に動作するようになりました。(パソコン用からマイコン用に移植した際、唯一変更が必要だった入出力ポートの受け渡し部分で失敗していました。) QT4はユーザモニタを使っていますから変数が見えることとステップ実行やブレーク機能が使えるためデバッグが簡単でした。

説明し忘れていました。ハードウェアは 丸文デモボード活用法 14th のページで用意した物をそのまま使いました。

エミュレータ部分はまだ変更する可能性もありますし発表できる段階ではないのですが、ジャンケン判定プログラム(オリジナルCPUのためのマシン語コード)を公開します。パソコンで動くCPUエミュレータでもワンチップマイコンで動くCPUエミュレータでも、そのまま読み込ませて動かすことができます。

そのうち実機が完成したら、もちろんテストプログラムとして走らせてみることになるでしょう。

  userprog3

中身を見ると、縦3段に組まれています。左の段がマシン語コードの実体です。これじゃ何がなんだか分からないので、真ん中の段に適当なニモニックを与えてアセンブラ風に説明を書きました。今回のオリジナル4ビットCPUは本当は全ての命令が1命令1バイトなんですけど、それでは読み書きしづらいのでマクロ機能を持ったアセンブラを想定して、少し読みやすくなるように書いてみました。それでも全体的に何をしているのか判りづらいです。そこで、右側の段にはさらに人間に近いレベルに書き直した説明を入れています。いわゆる構造化アセンブラのような書き方になっています。ここまでくると、14th で示したC言語のジャンケン判定と比較ができますね。同じことをやっているのが解ると思います。データ入力処理は反転のところが少し変更になっています。データ出力処理は、ちょっと変えています。

まだ中間報告の段階です。実機ができたら詳細なレポートを載せる予定です。


● その後、実機を作りました 12/5/2006

オリジナル 4bit CPU の製作については、こちらの過去ログに記録があります。

 http://www.cts-net.ne.jp/~kawano-r/
  → 過去ログあり
   → ORIGINAL CPU

また、フォーラムの ”電子工作” に関連スレッドがあります。(ソート順を 過去100日分 から 全て に変えてみてください。)

 http://micon.arrow.jp/modules/newbb/viewtopic.php?topic_id=301&forum=5

結局、ROM を使った ALU でも良いのですが 74HC181 ALU が使える設計にしました。どちらで作ってもソフト的には同じになります。必然的にシフト命令は廃止しました。この写真の CPUボードでは 74HC181 ALU を使っています。

 

 ↑この写真ではデバッガ・ボードを間にはさんでいますが、無くてもOKです。CPUボードとメインボード(Computer)だけでも動きます。写真では、キッチンタイマーのアプリが動いています。(30秒から3分30秒まで、30秒刻みでセットできます。)

データ幅やメモリ空間を拡張する回路も一昨年の時点で設計が済んでいます。(エミュレータでうまく機能することも確認しています。)

実機ももちろん拡張しますが、それは来年 HC08関係の執筆が一段落してからのお楽しみということで!