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)