4004マイクロプロセッサ 50周年 ~ SBC4004/Busicom-141PFの詳細

2021/11/15

 本日は、November 15, 1971, Electronic News誌にインテル社が4004マイクロプロセッサの広告を掲載し、この発表した日から50年目"Intel 4004 — 50th Anniversary"に当たります。インテル社のOB会"Intel Alumni Network"が主催して、2021年12月8日に当時の関係者(Federico Faggin, Hal Feeney and Ted Hoff)を交え、50周年のオンラインイベントが開かれる予定だそうです。

4004開発時にはインテル社員ではなかったためか、残念ながら彼らと開発を共にした嶋正利氏の名前は無いようです。


さて、それでは、SBC4004/Busicom-141PFの詳細内容に入っていきたいと思います。

①SBC4004/Busicom-141PFの電卓操作

②SBC4004/Busicom-141PFのデバッガ・モニタの操作

③SBC4004/Busicom-141PFの回路図、部品表(BOM)と基板画像

④4004コアを含むFPGA内部回路図


細かな部分もありますので、必要に応じ見ていただければと思います。

次回は、オレンジピコショップで頒布予定の専用基板を使った製作方法について、専用基板が手元に届いた時点で説明していきたいと思います。


①SBC4004/Busicom-141PFの電卓操作


電卓として、単体でSBC4004/Busicom-141PFを動作させるには、プリンタと5V ACアダプターを接続し、電源と入れた後、「GO」コマンドキーを押すだけで、電卓プログラムが起動します。


それでは、例題として、「12.34 - 34.56 + 56.789 + 56.789 + 0.123」を求めてみましょう。まず、小数点位置と丸め方法の設定が必要です。

左の写真のように、小数点の位置を3桁目とし、丸め設定を四捨五入にします。



当時の電卓は、会計業務用としてのニーズが主であったため、小数点と丸め設定が必要とされていたのではないでしょうか。

次に、「C 12.34 + 34.56 - 56.789 + + .123 + =」とキー入力すると、結果として「91.481」が得られます。数値を入れた後にそれに対する演算キーを指定する形式で、業務用に向いていたのかもしれません。「+」が連続する部分は、同じ数値の場合、省略できる機能のようです。いずれにしても、レトロ感があります。



左は、プリント結果です。






その他は、電卓操作説明を参照してください。


②SBC4004/Busicom-141PFのデバッガ・モニタの操作


デバッガ・モニタの操作には、電卓キーボードとLED表示だけでも操作できますが、Pro MicroのUSB経由で、PC上のターミナルソフトTeraterm等に接続すると操作性が良いと思います。SBC4004/Busicom-141PFの電源投入後、速やかにターミナルソフトを接続状態にすると、下記のようなLED表示とターミナルソフト画面になります。(この場合は4004コアで動作しています。)












LEDの表示形式は、表示内容によって、下記のフォーマットになります。

 ★RAM内容表示

D.xxx.xxxxxxxxxxx : ROM内アドレス.ROMデータ(6バイト)

 ★ROM内容表示

P.xxx.xxxxxxxxxxx :  RAM内アドレス.RAMデータ(12文字)

 ★実行STOP時

P.xxx.xxxx.x.xx.xx.xxx : PC.命令.次命令.CL.SRC.データバス(X2, X3).ブレークポイントアドレス

 ★アセンブル時

P.xxx.xxxx.xxxxxxxx : ROM内アドレス. アセンブル結果命令. ROMデータ(8バイト)

 ★REG表示

A.x.C.x.xxxxxxxxxxxx : ACC.CY.REG(0)-REG(11)

 ★REG継続表示

xxxxxxxxxxxxxxxx :    REG(0)-REG(15)


さて、それでは、デバッガ・モニタのコマンドを使ってみましょう。ターミナルソフトから「U0 28↵」と入力すると下記のように電卓プログラムの一部が逆アセンブルできます。














次はすべての命令をアセンブルしてみましょう。

「A600↵ NOP↵ JNT 600H↵ JC 600H↵ JZ 600H↵ JT 600H↵ JNC 600H↵ JNZ 600H↵ JCN 15 600H↵ FIM 0P 55H↵ SRC 0P↵ FIN 1P↵ JIN 1P↵ JUN *-5↵ JMS 123H↵ INC 0↵ ISZ 0 *+7↵ ADD 0↵ SUB 0↵ LD 0↵ XCH 0↵ BBL 0↵ LDM 0↵ WRM↵ WMP↵ WRR↵ WPM↵ WR0↵ WR1↵ WR2↵ WR3↵ SBM↵ RDM↵ RDR↵ ADM↵ RD0↵ RD1↵ RD2↵ RD3↵ CLB↵ CLC↵ IAC↵ CMC↵ CMA↵ RAL↵ RAR↵ TCC↵ DAC↵ TCS↵ STC↵ DAA↵ KBP↵ DCL↵ ↵」と入力すとすべての命令がアセンブルできます。


「U600↵」と入力すると逆アセンブル結果が表示できます。













下記は、1+2を計算する例題のアセンブル・逆アセンブルした画面です。











その例題プログラムをステップ実行して、レジスタの内容を調べてみます。











その他の機能は、デバッガ・モニタコマンド一覧を参照してください。


③SBC4004/Busicom-141PFの回路図、部品表(BOM)と基板画像


SBC4004/Busicom-141PFの回路図です。

SBC4004/Busicom-141PFの部品表(BOM)(2021/12/02 Updated)です。


下記は、SBC4004/Busicom-141PF基板の表面画像です。














④4004コアを含むFPGA内部回路図


下記は、4004コアのブロックダイアグラムです。FPGAに特化した構成をしています。











見てもわかりにくいと思いますが、どんな雰囲気か感じてもらうため掲載してみました。

4004コアを含むFPGA内部回路図です。


(再クロール更新:2022/12/22)

4004マイクロプロセッサ 50周年 ~ SBC4004/Busicom-141PFの概要

2021/11/14

 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電卓操作の紹介をしたいと思います。

(再クロール更新:2022/12/22)