VX-1 クローンデータ保存/書き込み実験
--自作インターフェースとN88-BASIC(86)を使って--

はじめに

 高性能マイクロプロセッサを内蔵した昨今のアマチュア無線用FMハンディトランシーバは、驚くほど多彩な機能をもっている。

 メモリ機能もそのひとつで、運用周波数のみならず、レピータ運用のための周波数シフト、トーンスケルチの有無などを含めて、数百もの状態を記憶させることが出来るものもある。144MHz帯で、FM系で使用できる周波数幅は1MHz強、20KHzステップならば、50チャネルと少ししかない(JRALバンドプラン)から、数百ものメモリは過剰機能とも言えるが(実際には、公式には存在しない"受信改造"を施した際に役立つ...)、とにかく、潤沢なメモリを活用しない手はない。

 他方、この潤沢なメモリへの情報の書き込み操作は、思いのほか難儀である。セットの小型化に伴って、ボタンやつまみは極限まで小さくなっているから、数百チャネルのメモリに情報を書き込もうとすると、考えるだけで憂うつになる位の手間と時間がかかる。

 ところで、このようなハンディトランシーバのメモリ機能は、どのようにして実現されているのであろうか。

 セット内部には、数〜数十Kbyteの不揮発性RAMがあって、メモリの詳細情報は、ここに保存されている。この情報は、セットの電源を切っても消去されない。メモリ呼び出し操作が行われると、マイクロプロセッサはこの不揮発性RAMから情報を読み出し、それに従って、PLLやトーンスケルチ機能を司るチップに指令を送るわけだ。
 だとすれば、この不揮発性RAMに記憶された情報をそっくり読み出し、他の無線機の不揮発性RAMにコピーすれば、結果的に無線機のメモリの内容を複写できることになる。

 実は、現在販売されているトランシーバには、このような機能が備わっている。


fig 1 トランシーバ→トランシーバのデータコピー

 たとえば、私が愛用するバーテックススタンダード社のトランシーバでは、『クローン機能』と呼ばれており、2台のトランシーバを専用ケーブルで結んで簡単な操作をすると、一方の無線機のメモリ内容がそっくりそのまま他にコピーできる。(fig 1)

 けれども、アマチュア無線家個人のレベルでは、この機能を使う機会はまずないと思われる。なぜなら、通常、アマチュア個人が、同じセットを2台以上所有することはないからである。

 そこで、fig 1の一方のトランシーバをパソコンに置き換えてみる。(fig 2)


fig 2 トランシーバ→パソコンのデータコピー

 もちろん、こうすることで、『パソコンがトランシーバに変身する』ってなことはあり得ないが、トランシーバから送りだされた不揮発性RAMの内容をファイルとして保存できるから、何らかの事情でトランシーバのメモリ内容が破壊されたとしても、すぐに復元することができるはずである。

 あるいは、あらかじめ複数の不揮発性RAM内容のファイルを準備しておくことにより、『自宅のシャックで使うときのメモリ』、『仲間と移動運用するときのメモリ』、『クルマでドライブに行くときのメモリ』etcというように、メモリ内容を時と場合に応じて最適のものに即座に書き換えることもできる。

 今回、このような機能を実現するための実験を行ったので、報告したい。

 なお、実験の対象としたのは、バーテックススタンダード社製のデュアルバンドFMハンディトランシーバ VX-1である。
 VX-1を選んだのは、私が所有している無線機で唯一クローン機能がついている無線機であること、それに、VX-1の輸出版製品であるVX-1Rについて、既に同じ試みがインターネット上で報告されているからである。(とどのつまり、私のやったことは単なる二番煎じにしか過ぎないけれど、まあ、少なくとも日本語の報告はないようなので、英語の苦手なアマチュア諸氏の参考にはなるであろう...)


fig 3 VX-1(クローン動作中)

インターフェースの製作

 さて、前述したような機能を実現するためには、トランシーバとパソコンを電気的に接続する方法を考えなければならない。

 VX-1のマニュアル等によれば、クローン時に用いるケーブルは、単なる2本の電線のようである。まず、間違いなく調歩同期方式のシリアル伝送を行っているはずであるが、その信号レベルは不明だ。しかしながら、外国の報告によれば、VX-1Rの場合は、TTLレベルのようなので、RS-232-CとTTLのレベル変換を行うインターフェース(以下、I/F)を製作することにした。

 外国での実験では、RS-232-CのTXDがマーク時に-15Vになり、また、制御信号線にはソフトウエアによって+15Vを発生させることができることを利用して、外部電源不要とした巧妙な回路が提案されている。

 しかし、かような方法では、大事なパソコンのRS-232-Cポートを壊す懸念が払拭できないこと、また、将来的にフルデュプレクス方式でのデータ交換ができないことを考慮して、MAXIM社のMAX232を利用した平凡な回路に落ち着いた。回路図をfig 4に、実際に製作したI/Fの外観をfig 5に示す。回路定数は、手持ち部品の都合で決定したものであり、これが最適値であるという保証は何もない。しかし、少なくとも、今のところ不都合なく動作している。
 なお、筆者は、このI/Fが貴方のパソコンとVX-1に何の障害も与えないことを保証するものではないので、追試される方は覚悟を決めてから実験に取り掛かっていただきたい。


fig 4a バーテックススタンダード社製トランシーバ用 RS-232-C / TTL インターフェース回路図

fig 4b 基板上の主要パーツリスト
部品 形式・定数  備 考
IC1 MAX232 RS-232-C - TTL レベルコンバータ (Maxim Integrated Products)
IC2 74LS04 Hex INVERTER (Texas Instruments)
IC3 7805 +5V 1A 電源IC (Matsushita等各社, 放熱器取付がbetter)
Q1 2SC2120 小信号NPNならだいたいOK (Toshiba)
Q2 2SC2120  (同上)
LED11〜LED15 (汎用LED) モニタ用(LED14・LED15は将来の予備)
R1 10KΩ(1/4W)  
R2 10KΩ(1/4W)  
R3 47KΩ(1/4W)  
R4 47KΩ(1/4W)  
R5 100KΩ(1/4W)  
R6 10KΩ(1/4W)  
R11〜R15 1KΩ(1/4W) LEDの電流制限用
C1 2.2μF(50V) 電解コンデンサ(極性注意!)
C2 2.2μF(50V)  (同上)
C3 2.2μF(50V)  (同上)
C4 2.2μF(50V)  (同上)
C5 0.01μF 積層セラミック
C6 47μF(25V) 電解コンデンサ
C7 0.1μF(50V) タンタルコンデンサ
C8 0.1μF(50V)  (同上)
C9 2.2μF(50V) 電解コンデンサ

 実際に追試(製作)される方のために一言申し添えると、まず、D-sub 9pinコネクタ部分で、RS(7pin)とCS(8pin)が短絡されていることに注意して欲しい。基板上の回路はフルデュプレクス対応だが、VX-1のDATA線は1本しかないので、コネクタ上で入力/出力を結線している。VX-1との接続用には2.5φのステレオプラグを使用した。破線のごとく、同一のプラグを2本並列に接続しておくと、将来の実験(?)に役立つ。
 MAX232は、+5VからRS-232-Cの規格を満たす正負電源を生成するが、そのためのコンデンサが必要である。C1及びC2は、極性に十分注意してハンダづけしたほうが良い。(一般常識とは逆の接続になる!)
 私は電源として13.8Vの定電圧電源を使用したが、電源回路の7805は予想以上に熱くなった。7805には適当な放熱器を取り付けたほうが良いかも知れない。(半導体のピン配置その他詳細は、リンク先のサイトでデータシートが公開されている。)


fig 5 インターフェースの外観

インターフェースの単独試験

 I/Fが完成したら、まずは、誤配線がないか、よ〜く確認する。自作I/Fが壊れるだけなら精々数千円の損害で済むが、高価なパソコンや虎の子のVX-1を破壊すると、それこそタダでは済まない。

 誤配線がなければ、まずはI/FとパソコンのCOMポート(RS-232-C)を接続し、ターミナルソフトを起動する。通信速度、通信方式は何でも良い。ローカルエコーバックは『しない』に設定しておく。私が製作したI/Fは、基板上では無線機への入出力が独立しており、無線機接続ケーブル側で両者を短絡している。そこで、無線機接続ケーブルを接続(無線機は接続しない)した状態でキーボードを叩き、画面に文字が出たら(=エコーバックがあったら)、I/Fはとりあえず正常に動作している。できれば、通信速度を変えても大丈夫なことを確認する。I/FのLEDは、データの送受信時に点滅する設計であったが、現実には通信速度が速く、網膜の残像現象のせいで、やや暗くなる程度の変化しか観察されない。

通信方式の推定

 実は、ネット上で検索した情報によると、VX-1Rがクローン動作時に授受する情報の量は、約5Kbyte弱であることが判明している。しかしながら、クルーンケーブルを流れる情報がどのような形式になっているかは、明確には示されていない。

 そこで、実際にVX-1から送出されるデータを解析し、その通信方式を推定することにした。

 まず、VX-1におけるクローン機能について、マニュアルから抜粋した操作方法を示す。

VX-1クローン機能の操作方法

1) 送り側・受け側双方のVX-1のスイッチを切る。
2) 2台のVX-1のMIC/EARジャックをオプションのクローンケーブルCT-27で接続する。
3) 送り側・受け側双方のVX-1について、[F]を押しながら電源を入れる。
4) 双方のVX-1のLCDに"CLONE"と表示される。
5) 受け側の[UP]を押す。LCDには、"C-IN"と表示される。
6) 送り側の[DWN]を押す。LCDには、"C-OUT"と表示され、データの転送が始まる。
7) 転送が完了すると、送り側のLCD表示は"CLONE"になり、受け側は通常の表示に戻る。
8) CT-27を抜去してから、双方の電源を断とする。

※実際には、7)の時点で、送り側の[DWN]を押下することにより、何度でもデータの送出が可能である。

 今回の実験のためだけにCT-27を購入するのはもったいない。けれども、VX-1のMIC/EARジャックは、fig 7に示すような特殊な4極構造である。そこで、VX-7用のマイクアダプタ(CT-91)を流用することにした。この場合、CT-91のマイクジャックから、DATAラインが取り出せる。(fig 4aに示した回路図は、CT-91を介してVX-1に接続する前提で描かれている。)


fig 6 VX-1 MIC/EARジャックの接続(3.5φ 4極)

 ところで、クローン操作時に授受される情報は、不揮発性RAMの内容そのものであるから、実際にクローンケーブルを流れる情報の形式は、ASCIIデータではなく、バイナリーデータである可能性が強い。ところが、通常のパソコン通信では、RS-232-Cポートを通じて授受されるのは、原則としてASCIIデータであり、1FH(末尾の"H"は16進表記であることを示す。以下同じ。)以下のコードは、各種制御に用いられる。

 この点は、一般のターミナルソフトを用いて実験する際に問題となるが、幸い、私が愛用するJterm3.0(アートマン21社製のMacintosh用パソコン通信ソフト)には、『ラインモニタ』という機能があり、通信ポートを通過する情報を16進形式で表示させることができる。世間で言うパソコン、つまり、WIndowsの世界でかような機能を持つターミナルソフトが存在するか否かは、私はWindowsユーザーではないからからわからない。

 ともあれ、今度はVX-1をCT-91を介してI/Fに接続する。パソコンとI/Fの間の接続も行い、ターミナルソフトを立ち上げる。そして、VX-1に対して、上記送り側の操作を行って、いかなるデータが送出されるのか、観察するのである。CT-91を使ったVX-1とI/F、パソコンの接続図をfig 7に示す。

 回路図を見ればすぐにわかることだが、VX-1とI/Fのデータのやりとりは、1組のDATA線だけである。従って、パソコンからVX-1に送信したデータは、ハードウエア的にパソコンにエコーバックされる点に留意されたい。


fig 7 VX-1, I/F, パソコンの接続

 私はオシロスコープのような高級な測定器は持っていないので、ターミナルソフトの通信条件をいろいろ変えて試行を繰り返すしかない。その結果、VX-1がクローン動作時に授受する情報は、調歩同期式:8bitパリティ:なしストップビット:1bitXON/XOFF制御:なし (フロー制御そのものが存在しない)、通信速度:9600bpsであることが判明した。

データ保存プログラム

 クローン動作時の通信方式のあらましが判明したので、今度は、VX-1から送出される情報をパソコン上のファイルとして保存するためのプログラムを作成することにした。

 かようなイタズラ的実験を行う場合、20年ほどまえに一世を風靡したBASICインタプリタは非常に有用である。インタプリタであるから、プログラムを書き終えれば即座に試用することができる。最初から思い通りに動作することはまずないが、そのへんはアマチュア的にCut and Tryを繰り返せば良い。

 BASICインタプリタの定番と言えば、MS-DOS版のN88-BASIC(86)であろう。自腹を切って買った人は少ないと思うが、大学の研究室から、こっそりコピーしたものを未だに持っている人は多いと思われる。(日電さん、ごめんなさい!)
 ふだんは非常用の(?)WIndows98マシンとして使用している私のPC-9821Xa12にも、MS-DOS版のN88-BASIC(86)がひっそりと眠っている。ただし、ちゃんとお金を払って買ったソフトであるから、誰にもケチをつけられる筋合いはない。まあ、そんなことはどうでも良いが、とにかく久しぶりにMS-DOSを立ち上げ、N88-BASICを起動して一気に書き上げた(実際には、何度か修正した)VX-1用データ保存プログラムが、SAVEVX1.BASである。

 素人が思いつきで書き上げたものであるから、細かいことは言わずに眺めていただきたい。実験用プログラムであるから、エラー処理などは著しくいい加減である。なお、N88 BASIC自身では、RS-232-Cコミュニケーションファイルの通信速度を設定することはできないので、予めMS-DOSのSPEEDコマンドもしくはSWITCHコマンドで、9600bpsに設定しておく必要がある。

 SAVEVX1.BASを使用したVX-1からのクローンデータ保存手順は、以下のとおりである。

SAVEVX1.BASを使用したVX-1からのクローンデータ保存手順

1) VX-1及びI/Fの電源断を確認する。
2) VX-1とI/F及びパソコンを接続し、I/Fの電源を入れる。
3) N88-BASIC(86)を起動し、プログラムをLOADする。
4) [F]を押しながらVX-1の電源を入れる。
5) VX-1のLCDに"CLONE"と表示される。
6) パソコンで"RUN"[CR]とキー入力し、VX1SAVE.BASを起動する。出力ファイル名の入力を求められるので、適当な名前を指定する。
7) VX-1の[DWN]を押す。LCDには、"C-OUT"と表示され、データの転送が始まる。
8) パソコン画面には、データ先頭からのオフセットアドレスとデータが表示される。
9) VX-1のLCDが"CLONE"表示に戻り、しばらくするとパソコン画面のスクロールが止まる。
10) パソコンの[STOP]キーを押す。

 VX1SAVE.BASで得られたファイルには、その時点のVX-1のメモリの内容はもちろん、セットモード等で設定した各種情報が保存されている。ファイル自体はテキストファイルなので、エディタ等で中身を閲覧することができる。ファイル内容の一例を示す。

0000 : 07
0001 : 07
0002 : 03
0003 : 00
0004 : 80
0005 : 00
0006 : 00
0007 : 5B
0008 : 01
0009 : 00
000A : 80
000B : 00
000C : 00
000D : 00
000E : 00
000F : 10
0010 : 00
0011 : 00
0012 : 50

(中略)

12C8 : 00
12C9 : 00
12CA : 00
12CB : 00
12CC : 00
12CD : 00
12CE : 00
12CF : 00
12D0 : 00
12D1 : 85

青字の部分は、ファイル先頭からのオフセット、赤字部分がデータそのものである(いずれも16進表示)。

 クローン操作時に、送り側から送出されるデータは、全部で4,818byte(4,096×1 + 256×2 + 16×13(D) + 1 + 1)であることがわかる。

データ書き込みプログラム

 VX1SAVE.BASで得られたファイルをもとに、今度はVX-1にデータを書き込むプログラムがLOADVX1.BASである。
 下記の手順でVX-1を完全に初期化してからデータを書き込むと、クローンデータの読み出し/書き込みが行われたことを確かめることができる。

VX-1の完全初期化(オールリセット)の手順

1) VX-1及の電源を切る。
2) [M/V]と[AR]を押しながら電源を入れる。
3) VX-1のLCDに"INI? F"と表示される。
4) [F]を押す。
5) VX-1のLCDに"INITAL"と表示され、完全初期化完了。

LOADVX1.BASを使用したVX-1へのクローンデータ書き込み手順

1) VX-1及びI/Fの電源断を確認する。
2) VX-1とI/F及びパソコンを接続し、I/Fの電源を入れる。
3) N88-BASIC(86)を起動し、プログラムをLOADする。(*1)
4) [F]を押しながらVX-1の電源を入れる。
5) VX-1のLCDに"CLONE"と表示される。
6) パソコンで"RUN"[CR]とキー入力し、VX1SAVE.BASを起動する。
7) 出力ファイル名の入力を求められるので、適当な名前を指定する。
8) 入力ファイル名の入力を求められるので、VX1SAVE.BASで保存したファイルを指定する。このファイルの内容が、VX-1に書き込まれる。ただし、[CR]はまだ押さない。
9) VX-1の[UP]を押す。LCDには、"C-IN"と表示され、データの書き込み準備ができたことがわかる。
10) パソコンの[CR]を押す。
11) I/FのLEDがやや薄暗くなり、データの転送が始まったことがわかる。
12) VX-1のLCDが通常表示に戻る。
13) 書き込み動作中のデータのやりとりがまとめて画面に表示される。同じ内容は、先に指定した出力ファイルに保存されている。
14) パソコンの[STOP]キーを押す。

 VX-1を操作して、SAVEVX1.BASでデータを保存したときと同じ状態になっていることを確認するとよい。なお、LOADVX1.BASの出力ファイルは、VX-1への書き込み動作中にDATAラインを流れる情報のログである。

考察とまとめ

 今回、自作I/FとN88-BASIC(86)で作成したプログラムを使って、VX-1のメモリ内容を保存/書き込みする実験を試みた。

 VX-1のクローン動作時のデータ交換プロトコルは、

1) [DWN]キーを押すと、送り側のVX-1から、4,818byteのバイナリデータが、調歩同期式(8bit・パリティなし・ストップビット1bit・ソフトウエアフロー制御なし)・9600bpsで送信される。

2) 受け側のVX-1は、[UP]キーが押されると待ち受け状態になり、データを正常受信すると、21Hを送出してクローン動作を終了する。

 という比較的単純なものである。

 I/Fを介してVX-1とパソコンを接続し、N88-BASIC(86)で書かれたプログラムを使って、VX-1から送出されるデータをパソコンにファイルとして保存したり、あるいは、このようにして保存されたデータをVX-1に書き込むことができた。使用したマシンは、Pentium120MHzを搭載したPC-9821Xa12であるが、少なくとも処理能力の不足は感じることはなかった。

 原則的に2台の同種の無線機を結線して行うクローン動作は、無線機を1台しか持たないアマチュア無線家個人のレベルでは、あまり有用な機能とは言えない。しかし、パソコンを用いることによって、メモリに書き込んだ情報をディスク等に保存することが可能になるので、たとえば、VX-1をリセットした際にメモリ内容を復元することが容易にできるようになる。

 今回の実験では、クローン動作で授受されるデータ内容の解析は行わなかった。
 このデータには、当然のことながらVX-1のメモリ内容等の情報が含まれている。データ内容を解析したうえで、パソコンに保存したデータを改変し、再びVX-1に書き込む方法を使うことにより、パソコン上でVX-1のメモリ内容を編集できる可能性がある。
 海外のアマチュア無線家(DL4CU)により、VX-1の輸出向けバージョンであるVX-1Rについては、既にこのような試みが発表されている。けれども、VX-1については、少なくともネット上での発表は存在しないようである。

 今後は、パソコン上でデータ内容の解析を行うとともに、メモリ編集を行うソフトの試作を進めたいと考えている。

参考リンク

 今回の実験にあたっては、本文中でリンクしたもののほかに、下記のサイトの情報を参考にした。

プログラムについて

 今回の実験で使ったプログラムは、こちらを参照のこと。

注意

 ここに記載された情報は、私が独自に収集したものです。内容の正確性については保証しません。特に、この実験については、ハードウエアの製作を伴うものであり、パソコンや無線機に不可逆的な損傷を与える可能性を否定するものではありません。
 以上の点をご理解のうえ、あなたの自己責任でご利用ください。

戻る


Copyright by Heian Software Engineering (C)H.S.E. 2002 Allrights reserved.
2002年9月22日 制作 2002年9月22日 修正