MPSロゴ MPRS-225RでRaspberry PIとシリアル接続 トップページに戻る
MPRS-225RでPC-9800からRS-232Cを介してRaspberry PIを操作する方法を備忘録的に書いておきます

シリアル接続自体は容易なのですが、再起動するたびに通信速度が9600bpsに戻ってしまうため、起動したらsttyコマンドで
そのPCが出せる最大通信速度まで上げてやる必要があり面倒です
(別に9600bpsでも大きな差支えはないのですが、速さは力!ともいいますしね)

まず前提として
・Raspberry PIにローカルまたはワイヤレスでネットワークが繋がっている
・Raspberry PIへのOSインストールが終わり、起動できる状態
・CLIモードでの起動及び、SSH接続が有効になっている
・機種はPC-9800シリーズでMS-DOS使用
・LinuxやMS-DOSの操作知識がある程度ついていること
で、話しを進めていきます

・Raspberry PIへのSSH接続での設定
1:文字コードの追加
最初の設定で言語関係を一切いじっていない場合は、文字コードがイギリスになっていると思います
SSHコンソール画面で
pi@raspberrypi ~ $echo $LANG
en_GB.UTF-8 ←これがイギリス言語の設定

このイギリス言語の設定を削除して、日本語言語の設定をします

pi@raspberrypi ~ $sudo raspi-config
最初のSSH有効化やGUI→CLI化したときの最初に入力するコマンドですね
raspi-config1
おなじみ、最初にこの画面が出てきます。設定されている文字コードと
SSHクライアントの文字コードが一致していない為、あちこち文字化けしています

この中から
4 Localisation Options → I1 Change Locale の順に進んでいきます
raspi-config2
こんな言語選択画面が出てきますので、↓キーをひたすら押し続け、[*]がついている項目を探します

出てきたら「en_GB.UTF-8 UTF-8」のチェックボックスをスペースキーを1回押して消します
そしてさらに下にスクロールを繰り返します

その中に
「ja_JP.EUC-JP EUC-JP 」
「ja_JP.UTF-8 UTF-8 」
という項目を見つけたらja_JP.EUC-JP EUC-JPのみチェックをつけて有効にします
チェックしたら、TABキーを1回押してOKに移動し、Enterキーを押して確定します

raspi-config3
そうしたらこの画面が出てきますので、↓で赤い枠組みを移動し「ja_JP.EUC-JP」に合わせ
前と同じくTABキーでOKに移動、Enterで確定します

最初の画面に戻ってきますので、TABキーを2回押してFinishに移動し、Enterキーを押して終了させてください
そして、言語変更を有効にするためにRaspberry PIの再起動をします

pi@raspberrypi ~ $sudo reboot
<<<ここでSSHクライアントの接続が終了します>>>>

SSHクライアントの文字コード設定を「EUC(-JP)」に設定します。SSHクライアントはたくさん種類があるので
現在使っているクライアントに応じて設定を変更してください(PuTTYとTeratermが2大巨頭かな?)

そして、新たにログインして
pi@raspberrypi ~ $echo $LANG
ja_JP.EUC-JP

と表示されていればOKです

【小話】
現在のLinux系OSの標準文字コードはUTF-8です。では何故古い文字コードであるEUCを使うか、理由は単純

「古いターミナルソフトはUTF-8をサポートしていない」

からです。UTF-8の母体であるUnicodeは25年くらい前に制定された標準規格ですが、Linuxの前身UNIXは
すでに50年以上の歴史を持ちます、過去の標準規格に未来の標準規格をサポートせよというのは無理な話です

ただ、幸いにも過去の規格に対して下位互換性が保たれているため、未来の規格から過去の規格に歩み寄り
「決まりごと」を合わせてあげれば、30年前の機械と21世紀の技術を繋げることができます

これが「文字コード」と「シリアル(RS-232C)接続」ですね



実践編です。RaSCSI for SC-98を使っている人は、そろそろ組み立てて98に内蔵しちゃっていいですよー
(ネットワークはまだ維持しておいてください)

本記事は「MPRS-225RでRaspberry PIをPC-98からシリアル接続して操作する」をテーマにやっていますが
ハード自体は標準的なRS-232C(D-Sub 25pin)接続なので、ターミナルソフトさえ用意できれば98だろうが
X68だろうがTOWNSだろうがWindowsだろうが機種依存しません(PC/ATはコネクタ形状がね)

さて、MPRS-225RをRaspberry PIのUSBポートに繋ぎます、どこに繋いでもいいです
RaSCSI98

まだまだSSHにお世話になります、SSHプログラムを立ち上げログインします

MPRS-225Rがハード的に認識されているか確認します。このアダプタ、microUSB接続部が少し窮屈で、頭が大きい
microUSBケーブル(付属のやつとか)はキッチリ奥まで差し込まないと認識しないことがあるので設定が終わってネットワークから
切り離してRS-232Cから接続を試みても繋がらず、どこに原因があるのか分からなくなるので、ローカル接続に移行しても
SSH接続のコネクションは必ず残しておいてください

pi@raspberrypi:~ $lsusb
とコマンドを打ち込みます

そうすると、現在Raspberry PIに接続されているUSB機器一覧が表示されますので
Bus 001 Device 00x: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
(Device 00xのxは任意の数字)という文字列が確認できれば、正常に接続され、認識されています
MPRS-CUI

もうひとつ
pi@raspberrypi:~ $ls /dev/tty*
同じくttyUSB0という名前が確認できていればOKです

Raspberry PIには標準でGPIOによるシリアル接続の機能が用意されていますが、これを使うとどうしても「Raspberry PI専用」と
なってしまい汎用性がなくなってしまう(MPRS-225RはRaspberry PIに繋ぐだけのものではないですから)ので
汎用的なUSB-シリアル変換という形をとっています

さて、脱線しましたが本道に戻します。Raspberry PIをPC-98のRS-232Cポートから接続できるように紐付けします
紐付け後も引き続きSSHによる接続は可能ですので、緊急時はそちらからの接続を行います

pi@raspberrypi:~ $sudo systemctl enable serial-getty@ttyUSB0.service
sudo~から先をコピーしてSSHクライアントにペーストしちゃってください

その後、再起動をします
pi@raspberrypi:~ $sudo reboot

これでUSB-RS232Cアダプタを通して、PC-98からRaspberry PIへ接続する手はずが整いました
ここでネットワークから切り離しても大丈夫ですが、一応念のため全ての設定が終わるまでは残しておいてください



前回でRaspberry PI側の「基本的な」設定は終わりました。今度はPC-98側の設定になります

当然ですがPC-98側はMS-DOSがブートできることと、容量は少なくてもいいのでハードディスクが必要です

PC-98のMS-DOSに対応したターミナルソフトを用意します。htermが多機能ですがシンプルで使いやすいと思います

hterm(Vector)
https://www.vector.co.jp/soft/dos/net/se000910.html

これを何とかしてPC-98へ持っていきます。1.2MBのフロッピーに収まるサイズですので、3.5インチ機なら
USBフロッピー経由が良いでしょう。5インチ機の場合は増設ドライブ入れてないとちょっと大変ですが

LZH圧縮なので、コピー先にLHAがない場合は一緒にコピーしてください

htermはPC-98のほかIBM-PC・AX・J3100用の各種プログラムが収められたインストーラー付きパッケージで
展開すると1.7MBくらいになります、フロッピーには収まりきりません

BIN2600.LZHを展開します。アーカイブにはルートディレクトリが無いので先にディレクトリを作ります
アーカイブ名そのままのBIN2600にしておきましょう

DOSが扱える人に今更LHAの使い方を教えるのもどうかとは思いますが、一応
LHA X BIN2600.LZH ¥BIN2600¥

次にhterm(PC-98版)の受け入れディレクトリを作ります。インストーラはディレクトリを自動で作ってくれないので
先に作ります。これも単純にHTERMとしておきましょう

BIN2600ディレクトリに移り、次のようにタイプします→INSTALL.BAT ¥HTERM

あとはインストーラーの指示に従って、1:PC-9801→1:Japanese とすれば、98用パッケージがHTERMディレクトリに展開されます

HTERMディレクトリには
・HTERM.DB
・HTERM.EXE
・HTERM.PIF
・A14K14.HFT
・HEKY.EXE
・HKEYSET.EXE
のファイルが展開されます。98用パッケージだけだと500KBくらいなので、フロッピーにシステムを転送してあげれば
ポーダブルターミナルとしての運用も可能です

あとはHTERM.EXEとタイプしてプログラムを立ち上げ、リターンキーを1回押して

Raspbian GNU/Linux 9 raspberrypi ttyUSB0
raspberrypi login:

というプロンプトが出れば接続成功です、おめでとう!

htermプログラムからMS-DOSに戻るには「STOP」キーを1回押します。この際にraspberry pi側はそのまま
待機状態になるので、DOSに戻ったからといって自動的にログアウトされるとかそういうことはありません

最後に、htermの「最低限」の設定をします
1:「COPY」キーを押してください
2:色々ごちゃごちゃ出てきますが、その中から「General」を選択します
3:またごちゃごちゃ出てきますので「New JIS」の項目を選び、何回かリターンキーを叩き「EUC」になるようにします
4:終わったら、ESCキーを1回押して前の項目に戻り「Save Set-Up」を選び、2回ほどリターンキーを押し設定を反映させます
5:あとは隣の「Exit Set-up」かESCキーを押してメイン画面に戻ります。これで漢字コードの設定(EUC-JP)が反映され
Raspberry pi側で日本語が表示できるようになります

「導入編」はこれで終わりですが「応用編」がもう1回続きます。こちらは特に読まなくても差し支えはありませんので
興味のある方のみ読み進めてください


シリアル接続応用編
ここから先は特に設定しなくても問題ないけど、設定するとちょっとだけシアワセになれるかもしれない設定です

・RS-232Cの速度変更
PC-9801シリーズの「公式」RS-232C転送速度は9600bpsです
これは、初代MATE/FELLOW以前のPC-9801には、俗に言う「5MHz系」と「8MHz系」という分類が存在し
クロック分周比の関係で5MHz系は38,400bpsまでいけるのに、8MHz系は9,600bpsで打ち止めだったことに由来します
(5MHz系/8MHz系については多くは語りませんが、まぁCPUクロックが16MHzの機種が対象だと思ってください)

だから、よほどCPUがトロいマシン以外の5MHz系は転送速度的には38,400bpsまでいけるのです。なのにMPRS-225Rと
PC-98x1間は9600bpsで接続されています。ちょっと文字送り的にのんびりしている以外実害は無いですが、
より速い速度で繋げれるなら繋ぎたいのが本分(だと思う)

ということで、シリアル速度の変更方法です
1:htermを立ち上げます
2:raspberry piにログインします
3:以下のコマンドを入力します
stty -F /dev/ttyUSB0 38400
これでraspberry pi側は速度が38,400bpsに設定されました

しかし、そうするとhterm(PC-98x1)側が9,600bpsのままで、速度がミスマッチになり接続できなくなるので
hterm側の速度も38400bpsに変更します(ちなみに38,400bpsが上限です)

[COPY]→[Communication]→[Baud Rate = 9600]を[Baud Rate = 38400]へ変更(リターンキーを何回か叩く)
→ESCキーで画面に戻る→リターンキーを1回押す

これでlsコマンドとかでファイルを表示してみて、キャラクタ落ちとか引っ掛かりが無ければ38,400bpsで通信できています
その速度はなんと4倍!

通信できなくなったとか、キャラクタ落ちが発生する場合は転送速度が追いついていませんので、1個下の19,200bpsとか
デフォルトの9,600bpsに落として試してみてください

現在の速度を確認するには
stty -a < /dev/ttyUSB0 | grep speedと打ち込み
「speed xxxxx baud」と出ているところが現在の速度です

・通信速度の固定
raspberry pi・hterm共々、プログラムを終了したり、電源を落としたり、リセットしたりすると速度が元の9,600bpsに戻ります
毎回ログインごとに速度設定をするのは面倒なので速度を固定しましょう

※先に安定して通信できる速度を確認しておく作業が必要です

・hterm側
[COPY]→[Communication]→[Baud Rate = 9600]を[Baud Rate = 38400]へ
変更(ここまでは一緒)→[Save Set-Up](設定の保存)

hterm側は簡単です。ただし起動時にraspberry pi側の速度と合わない場合は接続できなくなるので
その時は9,600bpsに一時的に戻してください

・Raspberry PI側
これが厄介で、Raspbian(Jessie)とRaspbian(Stretch)で内部仕様が大きく変わったため、同じRaspberry PIでも
サイトによって紹介が食い違ってしまい混乱の元になっています
(そもそもRaspberry PIにシリアル接続でログインする人があまりいないという事情)

現在主流の「Raspbian(Stretch)」で説明します

ついでといっちゃなんですが、速度固定と同時にシリアル接続ログイン時はオートログインにしてしまいましょう

/etc/systemd/system/getty.target.wantsディレクトリに
serial-getty@ttyUSB0.serviceというファイルがあります

これをroot権限でエディタで開き[Service]という所に、以下の1行を書き込みます
[Service]
ExecStart=-/sbin/agetty --autologin pi --noclear %I 38400 linux
※すでにExecStartがある場合は、コメントアウトするか書き換えてください

これで再起動してあげれば、シリアル接続時オートログイン+通信速度38400bpsで接続されます
(htermも一度DOSに降りて再接続してください)

速度設定ミスった!設定記述を間違えてシリアル接続できなくなった!
そういう場合は、従来どおりネットワーク接続してSSHから修正してください

SSH接続でもシリアル接続でも、最終目的(Raspberry PIを操作する)は変わりが無いので、どちらの接続方法を選ぶかは自由です
ただ、私はいちいち別のパソコンでSSHプログラムを立ち上げて接続するより、実機で完結するほうが色々と便利なので
主にシリアル接続、時にSSHを使い分けています