Panasonic HHC ~ カセットインターフェース

2023/06/21

 RL-P1004Aプリンタには、カセットインターフェース機能があります。

カセットテープレコーダを接続し、録音・再生することで、HHC内のファイルを保存・読込ができます。

ただ現状では、アナログ・カセットレコーダは、動作するものも少なくなりました。何より、操作性が悪く、内容の編集もできない問題があります。


そこで、USB経由でPCに接続し、デジタル保存できるようにしてみました。デジタル保存によって、テキストファイルは、PCで編集後、HHCに戻すことも可能になります。


RL-P1004Aプリンタのアナログ入出力を解析すると、下記のような仕様のようです。
・'SAVE OUT'出力は、5mVpp
・'LOAD IN'入力は、1.0Vpp
・変調方式は、約1,500bpsのFM方式で、'0' -> 1.5KHz信号の半サイクル, '1' -> 3.0KHzの1サイクル



最適なMCUモジュールを選ぶために、要件を整理すると、
・コンパクトなハードウェア
・USB接続できるMCUモジュール
・MCUモジュール内のデータ保存スペース
・アナログ入出力が可能


上記から、RP2040-Zeroモジュールを選定しました。プログラミングにはmicropythonを選択しました。アナログ入力にはADCが使えますが、'SAVE OUT'出力が小さすぎますので、OP-ampを追加して、300倍のゲインを稼ぎました。アナログ出力については、micropythonはインタープリタであり、不定期のガーベージコレクションが発生するため、正確なタイミングのデジタル出力には不向きです。このため、RP2040のPIOASM機能で、正確なFMエンコードが実現しました。アナログ出力は、3.3Vppをトリマ抵抗器で、1.0Vpp程度に調整(ほぼ中点)しています。


下記が、カセットインターフェースの回路図です。



OP-ampは、電源3.3Vで十分なゲインと優れた周波数特性のNJU77701Fを選定しました。パッケージがSOT-23-5と米粒サイズですので、必要に応じ、DIP化変換基板の使用をお勧めします。


下記は、試作用基板にアナログ回路を実装し、RP2040-Zeroと接続した写真です。


次は、小型のプラスッチックケースに入れ、RL-P1004Aに接続した状態です、



実行例として、まず、PC上のThonnyツールを利用して、main.pyを実行し、'r'コマンドを選択します。次に、Panasonic HHCのメインメニューから'PRINTER/CASSETTE'を選択後、'1=SAVE FILE'、'1=ALL FILES'と進み、RL-P1004Aの'SAVE OUT'からアナログ信号を出力させます。しばらく待つと、'data'サブフォルダーにファイルが保存されることを確認できます。PC間の転送は、Thonnyツールが便利です。



ここで、ファイル形式が0x08(テキスト形式)の場合、拡張子'txt'が作成されますので、内容確認・修正できます。新規作成されたテキストファイルをHHCに転送することも可能です。


HHCに転送する場合は、テキストファイルファイル形式の場合は、拡張子'txt'その他の形式では、拡張子'bin'を指定することで、転送ファイルを指定できます。'*.txt'とすれば、ワイルドカード指定も可能です。


これで、HHC上でのプログラミングが容易になります。

micropythonで作成したカセットインターフェースツールを公開します。PIOASMの使い方など参考にしてもらえれば幸いです。また、レトロな他のPCにも応用できるかもしれません。


下記は、PIOASM部分の抜粋です。コメント部が、設計上のクロックタイミングになります。今回は50KHzの比較的遅いクロックで駆動していますが、最高125MHzまで動作させることができますので、独自のアプリケーションに柔軟に対抗させることができます。ただ、最高32命令しか使えない点が制約になります。興味がある方は、RP2040のデータシートを確認ください。

@asm_pio(out_init=PIO.OUT_LOW, autopull=False)

def fm_encoder(): # output stream to RL-P1004A cassette interface

    # outset -  DATA

    # HIGH freq -> 320uS(16 clock) + 320uS(16 clock)

    # LOW  freq -> 640uS(32 clock)

    # 1 clock = 20uS

    label("loop")

    pull(block)                      # clock#4

    set(x, 31)                       # clock#5

    jmp("start_bit")                 # clock#6

    

    label("next_bit")

    nop().delay(3)                   # clock#3

    

    label("start_bit")

    out(y, 1)                        # clock#7

    jmp(not_y,"bit0")                # clock#8


    label("bit1")

    nop().delay(5)                   # clock#9

    in_(pins, 1)                     # clock#15

    mov(pins, invert(isr)).delay(14) # clock#16 <- flip output

    in_(pins, 1)                     # clock#31

    mov(pins, invert(isr))           # clock#32 <- flip output

    jmp("check_loop")                # clock#1

    

    label("bit0")

    nop().delay(21)                  # clock#9

    in_(pins, 1)                     # clock#31

    mov(pins, invert(isr))           # clock#32 <- flip output

    nop()                            # clock#1

    

    label("check_loop")

    jmp(x_dec,"next_bit")            # clock#2

    jmp("loop")



Panasonic HHC ~ 内蔵RAMの8KB拡張

2023/06/20

 Panasonic HHC RL-H1400のRAM容量は、4KBと決して多くはありませんので、別途発売されていた、RL-H1800と同様に8KBに拡張してみることにしました。


そのために、プログラムスロットの隣のIC7のSRAMを取り外し、8KBRAMを搭載したRAM拡張基板を取り付けるようにしました。(SRAMの取り外しには、十分なスキルが必要になります。他の基板で練習した後に行うことをお勧めします。実施には自己責任でお願いします。)

IC7(HM6116LP)のSRAMを取り外しは、ハンダ吸取線でSRAMのスルーホールからハンダを吸取ります。吸い出せたら、まだピンがスルーホールの端にわずかなハンダで接合しているはずですので、ハンダコテの先で、SRAMのピンの先端を熱して左右に動かし、スルーホール中でSRAMのピンが自由に動くようします。

全てのピンがピンセットでSRAMのピンがゆらゆら動くまでに根気よく行います。うまくハンダを吸い出せないない場合は、再度スルーホールにハンダを流し込んで再トライします。部品面側、IC7(HM6116LP)と基板の隙間にマイナスのドライバーを入れ、スルーホールにダメージを与えないように少しづつ弱い力でドライバーをひねると、SRAMのピンに着いたわずかなハンダがはがれて、IC7のSRAMが外れます。

スルーホールにダメージがないことをルーペで確認し、平ばね型のICソケットをハンダ付けします。直接RAM拡張基板をハンダ付けをすることも可能ですが、4KBに戻すことも可能なようにしました。平ばね型のICソケットにしたのは、RAM拡張基板をソケットに刺しても比較的低い高さに保てるからです。


下記のRAM拡張基板回路を見てもらえればわかると思いますが、最低限の改造でRAM容量を8KBにできましたが、RAM拡張基板にIC6(74LS155)の4pin, 5pinに必要なプルアップ抵抗10Kを入れるのを忘れましたので、手作業になりますが、基板上に1/8W小型抵抗を追加してください。


以下は、組立中の専用RAM基板です。














基板のリード部分には、秋月電子通商の「基板用リードフレーム SS2.54-6SN」または、element14の"1544425-2 Lead Frame, Single-In-Line (SIL) Contact"が利用できます。1544425-2の場合には加工が必要ですので、下記図面の各ピン赤線部分を精密ニッパーなどで横一直線になるように切断してください。切断後、曲がったリード部分を真っすぐに伸ばせば、基板のスルーホールにはんだ付けできるようになるはずです。



以下は、IC6の4pin, 5pinから信号を取り出している部分です。

同じようにのこの基板を製作したい方(個人利用のみ、商用利用は禁止)は、
回路図・外形・ガーバーファイルを自己責任にて使用してください。

基板の発注先は、JLCPCBがお勧めです。下記は、切り外し前の基板外観です。





Panasonic HHC ~ 16KBプログラムカプセルの再現

2023/06/19

 eBayで見つけたレトロなコンピュータPanasonic Hand Held Computer(HHC) RL-H1400の修復を行いました。RL-H1400は、1982年に松下電器が米国および、欧州向けに充電電池駆動で、手のひらに乗るコンピュータとして発売しました。当初は、民生用・業務用の両面展開を目指したようでしたが、最も利用された用途は、米国保険業界の営業ツールのようです。様々な顧客条件に合った保険提案を即時、RL-P1004Aプリンタにプリントアウトし、販売増が期待できる営業ツールだったようです。これがeBayに出品されています。


RL-H1400の仕様:
・CPU: MOS Technology 6502(1.024MHz)
・ROM: 16KB
・RAM: 4KB
・Program ROM: 16KB, 8KB or 4KB x 3 Capsules(MaskROM or EPROM)
・Display: 26 Character LCD


RL-H1400は、電池駆動でも当時のパーソナルコンピュータ並みの性能(Apple IIも6502を採用)を発揮できました。これは、①コンパクトかつ、処理性能が高い、ROMベースFORTH言語によるOSの採用、②NMOSデバイスの消費電力を抑えるため、アクセスされたデバイスのみ電源を入れる電源スイッチングにより、低コスト・省電力・高演算性能を実現していました。当時NMOS全盛時代で、CMOSのMPUは、まだ価格・性能上の制約があったようです。


業務用として、Apple II上でSnapForthで業務用のプログラムを開発できるSDKが発売され、保険用営業ツールが幅広く開発されて、プログラムスロットには、最新保険商品のEPROMに書き込まれたプログラムが入れられていたようです。

民生用としては、各種プログラムカプセルも発売されました。プログラム言語として、SnapForth、SnapBasic、MS-BASIC、アプリケーションでは、Scientific Calculator、Portacalc、Teleconputingなどがあったようです。ROMカプセルですので、数は少ないものの、現存しているようです。これらのカプセルは、当時サンフランシスコのFriends Amis社で開発されたようですが、現時点では、Friends Amis社は存続していないようです。

そのため、保険用営業ツールで使用された、モトローラ社のMCM68764というEPROMを書き換えて流用しているようです。ただ、MCM68764は、8KB以下のカプセルにしか使えないません。16KBカプセルの場合は、27128系のEPROMを使い、24ピンに変換した例もあるものの、成功していないようです。


そこで、Panasonic HHCを蘇らせるため、劣化している内蔵NiCd充電電池をNi-MH電池に交換するとともに、16KBカプセルにもチャレンジしてみることにしました。

モトローラ社のMCM68764は、24ピン8K x 8(64Kbits)のEPROMですが、ピン数の制約により16KBカプセルに使える24ピンのEPROMは、現存しません。16KBに拡張するためには27128系のEPROMを使用するしかありませんが、MCM68764と同じように使用できるEPROMを探すことが必要になります。


では、なぜMCM68764が使われてたのでしょうか?その理由を調べるため、プログラムカプセル周辺の回路を下記のように確認してみました。


①CMOSの27128系のEPROMの場合、EPROMの電源スイッチがOFF時に、入力・出力端子に寄生ダイオードがあるため、アドレス・データバスから電流を吸い込んでしまいますので、システムとして動作できません。

②NMOSの27128系のEPROMの場合、MCM68764のように、電源スイッチングしても動作可能な製品と電源スイッチングを行った場合、アドレス・データバスの電圧によって、言わゆるラッチアップ現象(異常電流)が発生するものがあるようです。MCM68764の場合でも電源に0.01uFのコンデンサを取付け、電源の立ち上が遅くしてラッチアップを回避しようとしているようです。

従って、下記の条件を満たすNMOSのEPROMを探すことにしました。

条件1:28ピンDIPパッケージでは、スロットに入らないので、市場で入手可能なPLCCまたは、フラットパッケージのNMOS EPROMを探す

条件2:ラッチアップ現象が起こらないいか、28ピンDIPパッケージ品を入手し、24ピン変換基板を作成して動作確認を行う

NMOSの27128系EPROMを何種類か試してみました。
EXCEL製、XICOR製のNMOS EEPROMは、動作しませんでした。電源が安定するまで動作しない仕様のようです。次に、AMD製のNMOS EPROMを確認しましたが、動作しませんでした。その後、諦めかけていましたがTOSHIBA製のNMOS EPROM、TOSHIBA製TMM24128APを入手し、動作確認したところ、電源スイッチングに耐えることがわかりました。ラッチアップ現象が発生しやすい製品とそうでない製品との差は、各社の製造プロセス差やサブストレートバイアス回路の違いで発生しているのではないかと推察します。

TOSHIBA製TMM24128APにはOTPタイプのフラットパッケージ TMM24256AFがあり、市場に在庫があるようですので、カプセルスロットにちょうど入る専用基板を作成することにしました。TMM24256AFは、容量が32KBですので、16KBカプセル2個分を入れることができるため、'CHS-01B'というSO-typeのスライドスイッチで切替できるようにしました。最初の試作では、EPROMのA14を+5Vと0Vに切替できるようにしましたが、+5Vの時、プログラム実行中にハングアップしてしまいました。この現象は、何が起こっているのかはっきりわかりませんでしたが、対策として、+5Vを分圧して+3Vに落としたところ、問題なく動作しました。結果的には、ラッチアップ現象が発生する条件が発生したと思われます。

下記は、専用基板の使用部品です。
・TMM24256AFにEPROMライターで
 書き込みする。このとき、SOP-28用の
 書き込みアダプター(*)が必要になります。
・カプセルスロットに入るように、
 基板のバリをヤスリで削る
・SMD部品(抵抗・コンデンサは、
 1608mm 0603inchサイズ)を
 はんだ付けする
・TMM24256AFをはんだ付けする
・半田付け状態をルーペで確認する


・0.5mm角ヘッダーの黒いプラスティック
 部分を端に移動する
・0.5mm角のヘッダーはんだ付けする
・カプセル取り出し用の紐を取り付ける


(*)TMM24256AFは、幅11.8mmと広いタイプのフラットパッケージですので、「FP-28-127-07」または「OTS-28-1.27-23」という変換ソケットが必要になります。
今回は、入手難のため、「OTS-28-1.27-04」を分解・削り出して、無理やり幅広くして使用しましたが、非常に大変でした。(お勧めしません)







次の写真は、完成したカプセルです。設計上、TMM2464AF x 2、TMM24128AF、TMM24256AFを使用して、16KBカプセルを実現できます。詳しくは、回路図(後段の公開ZIPファイル中にあります)の注釈部に実装オプションの記載があります。























次は、そのカプセルをプログラムスロットに取付た状態です。



EPROMの書き込み・基板の組立・カプセルの接触状態に問題無ければ、プログラム名がメニュー表示されるはずです。

同じようにのこの基板を製作したい方(個人利用のみ、商用利用は禁止)は、
回路図・外形・ガーバーファイルを自己責任にて使用してください。
基板の発注先は、JLCPCBがお勧めです。下記は、切り外し前の基板外観です。