4004マイクロプロセッサ 50周年 ~ インテルからのクリスマスプレゼント

2021/12/26

 製作手順(1)ブログ掲載時にはQuartus II Web Edition 13.0sp1のリンクは有効でしたが、インテルからのとんだクリスマスプレゼントでQuartus II Web Edition 13.0sp1が配布中止になりました。


"the Internet Archive"で確認すると12/23には切り替えされていました。Release: v16.1以前すべて配布中止になったようです。幸い、Quartus Prime Lite Edition 17.0のProgrammerが使用できることが確認できましたのでダウンロード手順を紹介します。


まず、下記URLを開きます。

https://fpgasoftware.intel.com/17.0/?edition=lite&platform=windows



「追加ソフトウェア」のタブからから"Stand-Alone Software Quartus Prime Programmer and Tools"をダウンロードしてください。(前回と同じようにインテルのユーザ登録が必要です。)


Quartus II Web Edition 13.0sp1の"Additional Software Quartus II Programmer and SignalTap II"と同じようにFPGAへのプログラミングができます。インストールして使用ください。






さて、Pro MicroのスケッチVer.0.92を合わせて公開します。

EM5822用のコンパイルスイッチを有効にしたSBC4004スケッチVer0.92(商用には利用できません)を公開します。


(a)EM5822プリンタ対応でプリンタとの通信量が増えてしまったため、通信中にLED表示が止まってしまうことがわかりましたので、修正しました。

(b)電卓のキーボード・エミュレーション機能に問題があり、「CE」キーで、LED表示がクリアされない点を修正しました。


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

4004マイクロプロセッサ 50周年 ~ SBC4004のサーマルプリンタ追加サポート

2021/12/20

 アマゾンで「GOOJPRT QR204 POS/ESCサーマルプリンタ」の入手ができない状況になっています。eBayでは入手可能なようです。今回、アマゾンで入手できるEM5822とQR701を評価しましたので、接続方法及び対応スケッチを公開します。



左の写真は、左上(EM5822)、右上(QR701)、下(QR204)です。サーマル紙のドアノブの形状によって識別できます。








①EM5822の接続方法

下記は、購入時のコネクタの写真です。


EM5822コネクタの形状は、QR204と同じですが、信号配置が違うため、コネクタピンの入れ替えが必要になります。






まず、精密マイナスドライバで電源コネクタ(2ピン)のピンを外します。ピンのロック部を下に下げながら外します。押したことでロック部が下がってしまった場合は、ピンを外してから押し上げます。






次に信号コネクタ(5ピン)のハウジングのロック部を押し上げながら黒・緑ピンを外します。電源コネクタは、黒と赤を入れ替えます。信号コネクタは、黒と緑ピンを入れ替えます。下記は、入れ替え後の様子です。












②QR701の接続方法


下記の写真のように、基板裏のコネクタ端子に直接はんだ付けします。ケーブルの色に注意してください。



この例では、プリンタを入れ替えてテストできるように中継コネクタを入れていますが、プリンタ付属のケーブルを切断して直接半田付けするのも良いかもしれません。








③Pro Microのスケッチを書き込む

QR204用のスケッチでEM5822を駆動すると、数字は同じように印字しますが、電卓特有の記号が印字できません。また、デバッガ出力をプリンタに印字すると、文字サイズが小さくなりません。EM5822のコマンドは、QR204のそれと仕様が異なるため、Pro Microのスケッチを書き換える必要があります。QR701は、EM5822と同系列のファームウェアを採用しているようですので、同じスケッチが使用できます。


Pro MicroのSBC4004スケッチVer0.91では、EM582とQR204をPrinter.cpp内のマクロ定義の切り替えで、対応することにしました。


(a)SBC4004 EEPROMスケッチの書き込み

QR204とEM5822共用のSBC4004_EEPROMスケッチVer0.91(商用には利用できません)をダウンロードし、展開後、SBC4004_EEPROM.inoをArduino IDEから開きます。


スケッチ->マイコンボードに書き込むで、Pro Microへプログラムを書き込みます。


(b)SBC4004スケッチの書き込み

EM5822用のコンパイルスイッチを有効にしたSBC4004スケッチVer0.91(12/21 Updated バージョン表示修正忘れ対応、商用には利用できません)をダウンロードし、展開後、Arduino IDEからSBC4004.inoを開きます。


スケッチ->マイコンボードに書き込むで、Pro Microへプログラムを書き込みます。


以上で、動作上の問題はありませんが、EM5822および、QR701では、薄めの印字になります。了承をお願いします。これは、プリンタの印字濃度設定がすでに濃い状態になっているため、これ以上の濃くできないようです。高感度な印字紙の使用または、プリンタの電源を別電源で7~9Vにするなど、対策が必要なようです。


(2021/12/21追記)

最近流通しているQR204で、ファームウェアの世代が変わったとの情報がありました。以前アクセスできたGOOJPRTのホームページも見つからないみたいです。


もし、左のような「√」が中国漢字「丂」に化けて表示される場合、EM5822用のスケッチ(EEPROM更新含む)に切り替えて試してみてください。





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

4004マイクロプロセッサ 50周年 ~ Busicom-141PF電卓プログラム

2021/12/13

 Busicom-141PFは、50年前、当時のビジコン社によって開発製造されたプリンタ電卓です。この電卓に内蔵されていた電卓プログラム(ファームウェア)は、インテル4004プロセッサの開発と並行してインテル4004プロセッサと同等なブレッドボードを使って開発されたようです。


全体のプログラムサイズは、基本部分1KB、平方根部分256Bからなります。先頭の256Bのアセンブラ言語(機械語)で記述された低レベルのプログラムで、後半の1KBの大半が、疑似命令と呼ばれる一種のサブルーチン(電卓マクロ命令)の先頭アドレスが並んだテーブルになっています。このようなテーブル記述によるプログラムは、FORTHにも採用されています。メリットは、コンパクトなプロクラムと効率的なプロクラム実行が実現できます。後日、JAVA(バイトコード)にも受け継がれていると思います。


下記は、電卓プログラムの概略フロー図です。




Busicom 141-PFには、エプソン製の17桁印字可能なドラム式インパクトプリンタ「MODEL-102プリンタ」が搭載されています。このプリンタからは、ドラム位置を知らせる約28mS間隔のセクタパルス信号が4004のTEST入力ピンに接続され、全体の処理の基準信号となっています。また、このセクタパルスは、キーボードの検出タイミングにも利用されていますので、電卓全体のタイミングを担う重要な信号になります。


概略フロー図の先頭部分で、プリンタドラムのセクタパルス信号待ちによる同期を行った後、キー入力の検出を行い、キー入力が確認できれば、キー毎の電卓マクロ命令を実行する仕組みになっています。


「MODEL-102プリンタ」は、17桁印字可能なドラム式インパクトプリンタです.プリンタドラムは回転方向に、14等分され、約28mS間隔で各位置タイミングを知らせるセクタパルス信号と回転ドラム先頭の文字タイミングを知らせるインデックスパルス信号が出力されています。各桁には、最大13種類の文字が刻印されていますので、インデックスパルス信号からセクタパルスを数えた位置で印字ハンマをトリガすれば、刻印された印影をインクリボンのインクで紙に転写できる仕組みになっています。


下記は、電卓マクロ命令を逐次実行する部分のプログラム(インタープリタ)です。“JMS 300H”で電卓マクロ命令を読込み、“JMS 100H”でそのマクロ命令の実体(低レベルのプログラム)を実行するしくみになっています。













下記は、“JMS 300H”と“JMS 100H”の内部処理です。“305H番地”から一連の電卓マクロ命令が格納されています。













モニタプログラムには、電卓マクロ命令レベルのトレースができる”J”コマンドを備えていますので、動きが追えます。下記は、「1」「2」を押した場合のトレース結果の画面です。















Busicom-141PFは、電卓プログラムの解析内容は、下記のURLで公開されています。

https://www.4004.com/2009/Busicom-141PF-Calculator_asm_rel-1-0-1.txt

興味ある方は、参照してください。


電卓プログラムを実行中でも、FPGA内RAMは、Dual Port化してありますので、いつでもモニタプログラムから参照可能です。














モニタプログラムは、ターミナルソフトだけでなく電卓キーボードからも操作できます。例えば、ASキーは、アセンブラ機能を提供しています。


「6」「0」「0」、「AS」、「I」「N」「C」「SP」「3」「SP」、「N」「O」「P」「SP」「SP」で600H番地から"INC 3"命令と"NOP"命令をアセンブルできます。


電卓キーによるモニタプログラムの操作は、それほど操作性は高くありませんが、SBC4004単独でも操作が可能になります。興味があれば、他のコマンドキーも試してみてください。


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

4004マイクロプロセッサ 50周年 ~ SBC4004/Busicom-141PFの製作手順(2)

2021/12/06

 Twitterで、すでに組立られた方(達人?)がいらっしゃるようです。遅ればせながら、現物インテル4004をお持ちの方用のオプション回路の組立です。下記は、使用部品の例です。

























(a)ダイオード・コンデンサ・抵抗の取付

D1 - D5の定電流ダイオードは、方向に注意して取付ください。(下記の写真参照)


D1 - D5 SEMITEC E-102 1mA 定電流ダイオード

D16 1N914(互換品)









C12 50V, 4.7u 積層セラミック

C13 16V, 33u タンタル

C6, C15 50V, 0.1u 積層セラミック

R21 - R31 470 - 1/8W 小型

R42 47K - 1/8W 小型


(b)ロジック・電源部品の取付

U1, U5, U3, U4, U7は、ソケットを使用することをお勧めします。74VHC541は、eBayでもDIP品は、入手が難しくなっています。代替品としてマルツからSN74AHC541Nを入手できます。ADuM3221Aは、DIP化して使用されることをお勧めします。


U1, U5 74HCT367 4004双方向レベル変換

U2 16ピン ZIF ソケット(i4004)

U3 74VHC541 4004レベル変換

U4 アナログデバイセズ ADuM3221A(DIP化変換済)

U7 秋月電子通商 AE-LCNV4-MOSFET 双方向レベル変換モジュール(互換品)

U9 Minmax Technology MCWI03-12S15 3W級絶縁型DC-DCコンバータ(15V, 200mA)


AE-LCNV4-MOSFET 双方向レベル変換モジュールは、一度FPGAボードを外す必要があります。非常に硬いので、四方から少しづつ抜いてください。AE-LCNV4-MOSFET用にソケット使用する場合は、高さの関係から一列の丸ピンソケットを推奨します。


AE-LCNV4-MOSFET取付方向は、下記の写真を参照ください。













(c)4004電源電圧確認

5V ACアダプタを接続し、U2の16ピン ZIF ソケットのピンが-10V、ピンが+5V

でることを確認ください。


5V ACアダプタを切った後、ZIF ソケットにインテル4004を「1PIN」に注意して間違えないように挿入してください。(念のため白マークを入れておくと良いかもしれません)部品を間違えずに、半田付けに問題なければ、動作するはずですが、貴重なチップですので、あくまで自己責任で、ご使用ください。














5V ACアダプタを接続し、LED表示が「SbC4004 b_141PF」と表示中に、手早くArduino Pro MicroのUSBをPCに接続し、Teratermなどのターミナルソフトで、通信速度9600bpsで、Arduino Pro Microのシリアルポートに接続すると、4004の検出結果が表示されます。


正しく検出できるはずですが、検出できない場合は、Arduino Pro MicroのUSBをPCから外し、5V ACアダプタを切ってください。










②トラブルシューティング

既に、FPGA内の4004コアで動作確認が済んでいるはずですので、正しい部品を使用し、はんだ付けに問題なければ動作するはずですが、ターミナルソフト画面に"Native 4004 is detected."が表示されない場合、部品に間違いないか、ロジックの品番、抵抗値、定電流ダイオードの品番や極性、はんだ付けに問題ないか再度確認してください。


それでも、4004が検出できない場合は、オシロスコープが必要になると思います。4004にクロックが供給されているか、SYNC信号が4004から出ているかなどを確認する必要があります。クロックが供給されていて、SYNC信号が4004から出ていない場合は、4004が不良の可能性があるかもしれません。


その場合は、諦めてFPGA内蔵の4004コアを利用していただくしかないかもしれません。


③オプション部品(必要に応じ実装)

J11 2x5 ピンヘッダ - External I/O Portを使用する場合

J13 2x8 ピンヘッダ - i4004 Signal Header、FPGAプログラムデバッグ用

TP1, TP2 1 ピンヘッダ - FPGAプログラムデバッグ用

J14 JST B2B-EH-A 秋月電子 DC5V-in(FPGA側から電源供給したい場合)


以上、組立は完了です。うまく動作することを願っています。今度は、√3を計算してみました。
























次回は、電卓プログラムやモニタの説明など、考えています。

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

4004マイクロプロセッサ 50周年 ~ SBC4004/Busicom-141PFの製作手順(1)

2021/12/02

 この製作では、仕様に注意して部品を入手したり、半田付けのコツやFPGA開発ツールのダウンロード・インストール・Altera USB Blasterによる書き込み、Arduino Pro Microのボードマネージャのインストール・書き込みなど、経験が必要な局面がありますので、比較的難易度が高いと思われます。ブログでわかりやすく説明したいとは思いますが、限界がありますので、あくまで自己責任での製作をお願いします。


まずは、部品表(BOM)に従って、必要な部品を集めてください。そのなかで、下記の部品は、注意深く探してください。


(a)FPGAボード(EP2C5T144 Mini Board)___ アマゾン・Yahooショッピング

(b)Aletra USB Blaster ____________________ アマゾン

(c)Arduino Pro Micro 3.3V/8MHz ___________ アマゾン・eBay

Arduino Pro Micro 3.3V/8MHzについては、5V/16MHz品は、使えませんのでご注意ください。また、「KEYESTUDIO 3.3V Pro Micro Atmega32U4」と称して販売されている場合がありますが、実際には在庫が無いようです。少し値段が高めですが、マルツ・千石電商のSparkFun純正品(DEV-12587)も選択肢になります。


(d)0.36" カソードコモン 7seg LED ___________ aitendo・アマゾン

7seg LEDは、Aitendoの在庫減、アマゾンでは、5個単位で少し高めの価格になっています。


(e)74ACT573 ____________________________ 若松通商・マルツ

(f)GOOJPRT QR204 POS/ESCサーマルプリンタ __ アマゾン

最近アマゾンから「GOOJPRT QR204 POS/ESCサーマルプリンタ」の入手が難しい状況になっています。eBayでは、以前より値段が高くなりますが、入手可能なようです。代替品として「58mm 701 マイクロ 紙熱転​​写プリンタ」が使用できる可能性がありますので、動作確認ができた時点で、お知らせしたいと思います。


それでは、多くの方がインテル4004をお持ちでないと思いますので、まず、FPGA内蔵の4004コアを利用する製作手順に入っていきます。


①FPGAボード(Cyclone II EP2C5T144 Mini Board)の準備

(a)不要部品の除去

今回、I/Oポートをフルに使用するため、不要部品の除去が必要になります。

下記の写真のように、R1、R2、R9、R10、R13、C14を除去してください。


(12/3追記)--> 表面実装の部品を取り外したことが無い方は、はんだ吸取り線を抵抗に斜め横から被せ、はんだを付けた半田ごてを吸取り線に当てると、吸取り線といっしょにすぐ取れると思います。
























(b)FPGA開発ツール(プログラマ)の準備

Cyclone IIシリーズの開発には、Quartus II ウェブ・エディション13.0sp1が必要です。Altera社を吸収したインテル社の下記URLからダウンロードできます。

https://fpgasoftware.intel.com/13.0sp1/ (12/26現在、リンクが無効ですので、更新ブログを参照ください。)


FPGAをスクラッチから開発する場合は、一式ファイルのタブを選択して"Quartus II Web Edition Software (Device support included) Quartus-web-13.0.1.232-windows.tar"が必要になりますが、今回は、FPGAに書き込みをするだけで十分ですので、「個別ファイル」のタブを選択して"Additional Software Quartus II Programmer and SignalTap II"をダウンロードします。





ダウンロードボタンを押すと、"Legal Disclaimer"画面に移り、"I Agree"ボタンを押すと、"Developer Zone Sign In"画面が出て、"Developer Zone Sign In"が必要になります。


画面右側の"Register now for Standard access"リンクから"Developer Zone Standard Registration"画面で登録をしてください。







登録が完了したら、再度

https://fpgasoftware.intel.com/13.0sp1/

から、"Additional Software Quartus II Programmer and SignalTap II"のダウンロードアイコンを押してダウンロードしてください。ダウンロードが終わったら、"Quartus II Programmer and SignalTap II"をインストールしてください。


(c)FPGAのプログラミング

FPGAのプログラミングには、前記"Quartus II Programmer"とAltera USB Blasterを使用します。まず、下記の写真のようにAltera USB BlasterをFPGAボードのASポート(外側)に接続します。


FPGAボードの電源コネクタに5VACアダプタを接続します。初期状態では、LEDチカがサンプルで入っているようです。








まず、FPGA書込み用バイナリファイルFPGA書込み用バイナリファイル(商用には利用できません)をダウンロードし、展開しておきます。

Altera USB BlasterをPCに接続し、"Quartus II 13.0sp1 Programmer"を起動後、FPGA書込み用バイナリファイル中のFPGA_i4004.cdfを開きます。


次に、Altera USB Blasterを使えるようにするため、"Hardware Setup"を行います。


ダイアログが表示され、USB Blasterが検出されていれば、正常です。選択するには、USB Blasterをダブルクリックすれば、良いようです。






"Close"で戻ると、正常にFPGAボードが認識されていれば、"Start"ボタンがアクティブになります。次に、"Start"ボタンを押すとプログラミングが開始され、"Verify"で問題なければ、"Successful"となります。








②Pro Microの準備

(a)Arduino IDEの準備

下記のURLからArduino IDEダウンロード(できるだけ最新版を推奨)

https://downloads.arduino.cc/arduino-1.8.16-windows.zip(現時点)

zipファイルを適当なディレクトリに展開後、Arduino IDEを起動して環境設定を行います。


「追加のボードマネージャ」のURLに、下記のSparkfunボードマネージャを入力し、右側のボタンで追加します。

"https://raw.githubusercontent.com/sparkfun/Arduino_Boards/master/IDE_Board_Manager/package_sparkfun_index.json"



次に、設定を変更します。

・ツール->ボード->ボードマネージャで、"SparkFun AVR Boards"をインストールする

・ツール->ライブラリ管理で、"MsTimer2"、"EEPROM"、"Flash"をインストールする

・ツール->ボードで、"SparkFun Pro Micro"を選択する

・ツール->プロセッサで、"ATmeg32U4(3.3V, 8MHz)"を選択する

・ツール->書き込み装置で、"ArduinoISP"を選択する

・ツール->シリアルポートで、有効なポートを選択する


(b)プリンタフォントの書き込み

SBC4004_EEPROMスケッチ(商用には利用できません)をダウンロードし、展開後、SBC4004_EEPROM.inoをArduino IDEから開きます。


Busicom-141PFプリンタのフォントをPro MicroのEEPROMに書き込みます。本来でしたら、プログラム(スケッチ)中に入れておくことが普通ですが、プログラムが盛りだくさんになり32KBに入らなくなったため、苦肉の策で、EEPROMにフォントを配置することになりました。






スケッチ->マイコンボードに書き込むでプログラムを書き込み後、緑LEDが点滅すれば、EEPROM書き込み終了です。1回だけ実行すれば、OKです。


(c)SBC4004モニタの書き込み

SBC4004スケッチ(商用には利用できません)をダウンロードし、展開後、Arduino IDEからSBC4004.inoを開きます。

スケッチ->マイコンボードに書き込むで、Pro Microへプログラムを書き込みます。


Teratermなどのターミナルソフトで、Arduino Pro Microのシリアルポートに通信速度は、9600bpsで接続します。キーボードから「Enter」(改行)を入力すると応答が帰れば、正常に動作しています。






③基板の組立

基本は、背の低い、小さな部品から半田付けを行います。一連の部品を1か所か2か所、仮半田付け(合わせてリードカット)で固定し、最後に、集中的に本半田付けを行うと、効率的で、手早く半田付けができます。下記は、使用した部品です。


(a)コンデンサ・抵抗の取付

C1 16V, 33u タンタル

C2 - C5 C4, C7 - C11, C14 50V, 0.1u 積層セラミック

R1 - R4 1K - 1/8W 小型

R32, R33 1K - 1/8W 小型

R5 - R20 100 - 1/8W 小型


タンタルコンは、極性を間違えないようにしてください。


(b)電源コネクタ・SWの取付

J12 2.1mm type - Jack_DC

SW31 - SW33 6mm タクトSW

SW34 NKKスイッチズ A-18AH ON-OFF-ON トグルSW


(c)レギュレータ・ロジックIC(ソケット使用推奨)

U6 AMS1117CD-3.3(互換品) - TO-252

U10, U11 74ACT573 LED表示ラッチ/セグメントドライバ

U12 東芝 TBD62083APG LED桁ドライバ


(d)設定用ヘッダ・LED表示器の取付

J9 2x8 ピンヘッダ、ショートジャンパ

J10 2x3 ピンヘッダ、ショートジャンパ

D13 3mm赤色LED OSR5JA3Z74A(互換品)

D14 3mm黄緑色LED OSG8HA3Z74A(互換品)

D15 3mm白色LED OSW4YK3Z72A(互換品)

D17 3mm黄色LED OSY5JA3Z74A(互換品)


LEDについては、上がプラス極(リードが長い方)です。


(e)7セグLED表示器の取付

DS1 - DS4 KEM3461ASR 4桁 7セグメントLED 0.36インチ 赤色 カソードコモン(互換品)


(f)プリンタ用コネクタ・電解コンの取付

J7 JST B5B-PH-KL(PRINTER Signals)

J8 JST B2B-XH-A(PRINTER Power)

C5 6.3V, 560u アルミ高分子電解コン


(g)電源電圧確認

ロジックICを外した状態で、5V ACアダプタを接続して、レギュレータの出力側に3.3Vが出力されていることを確認します。


(h)Arduino Pro Micro用ピンソケットJ5, J6 1x12 ピンソケットの取付

Arduino Pro Micro用ピンソケットには、Arduino Pro Micro側のピンヘッダーが差し込まれますが、位置ずれがあると、コネクタの接触不良を起こすことがありますので、次の手順で、はんだ付けをお勧めします。


下記の写真は、ピンヘッダーを仮止めしたものを基板から抜いた状態です。基板にストレスなく戻せる状態だと、コネクタにストレスがかからずに接触不良を回避できます。

























・Arduino Pro Micro付属のピンヘッダーにSBC4004/Busicom-141PF側のピンソケットを差し込み一体化する(2セット)

・基板を部品面を上にして置く

・SBC4004/Busicom-141PF側のJ5,J6に上記のピンソケット側を基板に差し込む

・Arduino Pro Microの部品面を上にしてピンヘッダー側にに差し込む

・Arduino Pro Microのスルーホールのほぼ真ん中にピンヘッダーのピンが位置するように調整する

・ピンヘッダー両端の仮はんだ付をし、位置を確定させる

・全体的に問題なければ、Arduino Pro Micro側のピンヘッダーを手早くはんだ付けする

・基板を半田面を上になるように裏返す

・SBC4004/Busicom-141PF側のピンソケットに浮き無いことを横から確認する

・SBC4004/Busicom-141PF側のピンソケットを手早くはんだ付けする


(i)FPGAボード用ピンソケット(J1 - J4 2x14 ピンソケット)の取付

同様に、FPGAボード用ピンソケットには、FPGAボード側のピンヘッダーが差し込まれますが、位置ずれがあると、コネクタの接触不良を起こすことがありますので、次の手順で、はんだ付けをお勧めします。


・FPGAボード付属のピンヘッダーにSBC4004/Busicom-141PF側のピンソケットを差し込み一体化する(4セット)

・基板を部品面を上にして置く

・SBC4004/Busicom-141PF側のJ1,J2,J3,J4に上記のピンソケット側を基板に差し込む

・FPGAボードの部品面を下にしてピンヘッダー側にに差し込む

・FPGAボードのスルーホールのほぼ真ん中にピンヘッダーのピンが位置するように調整する

・ピンヘッダー両端の仮はんだ付をし、位置を確定させる

・全体的に問題なければ、FPGAボード側のピンヘッダーを手早くはんだ付けする

・基板を半田面を上になるように裏返す

・SBC4004/Busicom-141PF側のピンソケットに浮き無いことを横から確認する

・SBC4004/Busicom-141PF側のピンソケットを手早くはんだ付けする


(j)動作確認

全てのはんだ付けが終わったら、ブリッジや忘れがないことを確認し、ロジックICをソケットに挿入後、5V ACアダプタを接続します。正常なら、LED表示が「SbC4004 b_141PF」と表示されるはずです。約10秒後、インテル4004の検出を行い、検出できないはずですので、FPGA内蔵の4004コアが有効になり、PC=000で停止状態にします。

下記は、その時点の写真です。
























次にTeratermなどのターミナルソフトを、通信速度9600bpsで、Arduino Pro Microのシリアルポートに接続し、キーボードから「Enter」(改行)を入力すると応答が帰れば、コマンド入力ができます。

Dコマンド、Uコマンド、Xコマンドなど、確認できます。


(k)キー入力用タクトSWの取付

下記は、使用したタクトスイッチです。



















SW1- SW30 12mm角型 透明キャップ付き タクトSW



(l)キートップラベルの取付












キートップラベルを印刷し切り離して、透明キートップにマイナスドライバーの先などを使って差し込んでいきます。透明キートップにラベルをキーに一度はめ込むと修正が効かないので注意してください。


④トラブルシューティング

正しい部品を使用し、はんだ付けに問題なければ、動作するはずです。

(a)SBC4004モニタが動作しない:Pro Microの詳細な書込みログを確認ください。

(b)LEDが正しく表示されない:FPGAコネクタ・Pro Microコネクタ・74ACT573など半田付けを確認ください。

(c)PC=000で停止状態の初期表示がされない:FPGAボードの不要部品除去を確認ください。


⑤電卓プログラムの実行

特に問題なければ、「GO」キーで電卓プログラムが実行開始されます。なお、プリンタは、電源投入以前に接続しておいてください。

Teratermなどのターミナルソフトを、通信速度9600bpsで、Arduino Pro Microのシリアルポートに接続すると、電卓プログラムが動作中でも、コマンドを受け付けますので、RAMの内容など確認できます。下記は、√2を計算した結果です。






















お疲れさまでした。次回は、実物のインテル4004を動作させる部分に入っていきます。

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

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)