4004は、最初のマイクロプロセッサとしてシンプル(最小限・低コスト)のマイクロプロセッサでした。その命令体系は、当時のDEC社ミニコンピュータPDP-8の命令体系に影響をうけているのではないかと思います。12bitという限られたプログラム領域、ページ分割されたプログラム領域、同じ命令名などです.4004の内部構成は、PC、ACC、SP、インデックスレジスタ、ALUなど、50年後のマイクロプロセッサに引き継がれています。
PDP-8のシステム価格が当時10,000ドルを超える価格とのことですので、インテル4004単体の価格にはなりますが、30ドル台は当時としても衝撃的と言えます。
このような4004ですが、使い倒すにはどうしてもデバッグ機能が必要になります。当時、2,395ドルと高価な「INTELLEC 4/MOD 4」と呼ばれる開発システムが販売されていたようです。そのデバッグ機能と同等以上のデバッガ・モニタを備えることで、ビルディングアップを重ね、オリジナルの電卓ファームウェアがそのままで動作できるBusicom 141-PF電卓を再現しました。
4004には、割込みもなく、3レベルのスタックしかないので、多重関数呼び出しもできません。そのため、いつでも任意のアドレスにジャンプできるジャンプ命令を差し込める機能をFPGAで実現することで、ステップ実行などのデバッグ制御を実現しました。
このデバッグ機能で、歴史的な4004プロセッサの体験学習にも使えるのではないでしょうか。以下にSBC4004/Busicom-141PFの概要・機能を説明します。
①電気的仕様
・電源:5V ACアダプター
・制御ポート:Arduino用USB、FPGAボード用JTAGポート
・プリンタポート:POS/ESC互換サーマルプリンタ専用コネクタ
・拡張入出力ポート:各4ビット
・プリンタ用電源:5V専用コネクタ
・表示器:16桁7セグメントLED
・キーボード:Busicom 141-PF配列のキーボード
・インディケータ:Busicom 141-PFのステータス表示LED、実行中LED
・設定SW:Busicom 141-PFの小数点位置・丸め設定SW、RUN/STEP切替
②形状
150mm×170mm(専用プリント基板)
③機能
・MPU 4004コア:FPGA上のコア、オプションソケットのMPU 4004実物が検出できない場合に有効化
・周辺チップ機能:4001(ROM)・4002(RAM)・4003(シフトレジスタ)・4289(標準メモリ用インタフェース)各チップ機能
・4,096ワード(バイト)の2ポートROM、1,280文字(ニブル)の2ポートRAM
・デバッグ支援機能:FPGAバスモニタ・命令実行制御とArduinoモニタプログラム
・Busicom 141-PF 周辺機器エミュレーション:電卓キーボード・「EPSON Model-102」プリンタをモニタプログラムでエミュレート
・Busicom 141-PF 電卓プログラム:ROM上に書き込み済み(Busicom社の解散により著作権は消滅)
④ユーザ・インターフェース
電卓キーボードと表示LEDによる操作または、USB経由でターミナルソフトから操作
⑤主な採用部品
★Cyclone II EP2C5T144 Mini Board
Altera社(現在は、Intel社) CycloneIIシリーズのFPGAを採用したボード
Doug Gilliland氏のGitHubで公開されている Cyclone II EP2C5を採用
★Arduino Pro Micro(3.3V版)
SparkFun Pro Micro - 3.3V/8MHz ボード(FPGAと直結するためには、3.3V版が必須)
FPGAとArduinoスケッチが連携し、豊富なデバッグ機能を実現しました。
・ROM・RAM参照・書き込み、レジスタ参照・変更
・I/Oポート読込み・書き込み
・ステップ実行、連続実行、トレース実行、ブレークポイント設定
・アセンブラ・逆アセンブラ
・FPGAレジスタダンプ
★POS/ESC互換サーマルプリンタ GOOJPRT QR204(58mm紙幅)
ユーザ定義のグラフィック文字で、ラインプリンタ「EPSON Model-102」の印刷文字を再現
下記は、SBC4004/Busicom-141PFのブロックダイアグラムです。
下記は、FPGA内部のブロックダイアグラムですが、細かな部分になりますので、読み飛ばしていただいても結構です。
次回は、デバッグ・モニタ機能及び、Busicom 141-PF電卓操作の紹介をしたいと思います。