PokuG stdio.h

ポクジィと読みます

Codexから実機PC-98の状態を確認する ― PC98Bridge構築手順

ここ数年、AIに文章を書かせたり、プログラムを作ってもらったりすることが身近になりました。
最近では、AIが単に質問へ答えるだけでなく、外部のツールや機器と接続し、情報を取得したり処理したりする使い方も増えています。
そこでふと思いました。

「実機のPC-98もAIにつないだら、AIからPC-98自身の状態を確認できるのでは?」

PC-98本体でAIを動かすのは現実的ではありませんが、Windows 11側でAIを動かし、RS-232Cを通じてPC-98と通信すれば、PC-98を現代のAI環境につなぐことはできるはず…

この記事では、実機PC-98とWindows 11をRS-232Cで接続し、CodexからPC-98のDOSバージョン、メモリ、日時、ドライブ容量、CONFIG.SYSなどを確認できるようにします。

全体構成

今回使用するアプリは PC98Bridge というツール一式です。

PC98Bridgeは、Windows 11と実機PC-98をRS-232Cで接続し、Windows側からPC-98の情報を取得するための仕組みです。

PC-98側ではAGENT.EXEを起動して、Windows側から送られてくる問い合わせを待ち受けます。Windows側ではpc98_serial.pyがシリアル通信を担当し、mcp_server.pyを通してCodexからPC-98へ問い合わせできるようにします。

通信の流れは次のようになります。

┌─────────────────────────┐
│ [Windows 11]            │
│                         │
│ ChatGPT Desktop         │
│       ↓                 │
│ Codex                   │
│       ↓ MCP             │
│ mcp_server.py           │
│       ↓                 │
│ pc98_serial.py          │
│       ↓ pyserial        │
│ COM3                    │
└─────────┬───────────────┘
          │ RS-232C
          │ 9600bps / 8N1
          ▼
┌─────────────────────────┐
│ [PC-98]                 │
│                         │
│ RSDRV.SYS               │
│ AUX                     │
│       ↓                 │
│ AGENT.EXE               │
└─────────────────────────┘

CodexからPC-98の状態を確認すると、問い合わせはMCP(AIと外部ツールを接続する仕組み)経由でmcp_server.pyへ渡され、pc98_serial.pyからRS-232Cを通してPC-98側のAGENT.EXEへ送られます。

AGENT.EXEはDOSや実機の情報を取得してWindows側へ返し、その結果が最終的にCodexへ表示されます。

なお、AIそのものがPC-98上で動作しているわけではありません。
AIはWindows 11側で動作し、PC-98は実機情報を取得して返す役割を担当します。

PC98Bridgeでできること

以下のPC-98の情報を取得できます。

  • PC-98との通信確認
  • DOSバージョン
  • 日時
  • ドライブ容量
  • 環境変数
  • コンベンショナルメモリ
  • UMB
  • XMSメモリ
  • デバイスドライバ
  • CONFIG.SYS / AUTOEXEC.BAT
  • 任意ファイル取得
  • ディレクトリ一覧

現時点では、安全のためPC-98側への書き込み機能は実装していません。
なお、Windows側には、取得したファイルをWindows上へ保存する機能があります。

各機能の詳細やCLI(コマンドライン操作)/MCPでの対応については、記事下部の「使用できる機能一覧」を確認してください。

実際の動作

実際にCodexからPC-98へアクセスしている様子です。

動画では、

  • CONFIG.SYSの取得
  • UMBの空きブロック確認
  • 取得した情報をもとにCONFIG.SYSの改善案を提案

まで行っています。


www.youtube.com

必要なもの

1. PC-98本体

以下を使用します。
なお、今回はCドライブのMS-DOS6.2のみを使用します。

項目
機器 PC-9821Ra43
OS Aドライブ:Windows98
Bドライブ:データ領域
Cドライブ:MS-DOS6.2

2. USB to Serial 変換ケーブル

Windows 11 のUSBから9pinのSerial ケーブルへの変換ケーブルです。

3. RS-232C 9pin to 25pin 変換ケーブル(リバース)

9pinのSerial ケーブルから25pinへ変換するためのケーブルです。
PC-98対応と書かれたものを選びました。

4. Windows 11 PC

Windows 11 Pro(25H2)を使用しています。
Windows 11 Homeでの動作は未確認です。

以上が必要なものになります。


それでは以下より構築手順になります。

PC98Bridgeのダウンロード

1. ファイルのダウンロード

今回必要なアプリ(PC98Bridge)を以下からダウンロードします。

https://github.com/yarufu/PC98Bridge/releases/tag/V0.1

このページでは、PC-98側で使用するAGENT.EXEとWindows側のスクリプト一式をまとめたPC98Bridge.zipを配布しています。

ソースコード一式は、GitHubのrepositoryから確認できます。

https://github.com/yarufu/PC98Bridge

今回は構築を簡単にするため、ReleaseにあるPC98Bridge.zipを使用します。

赤枠で囲まれている"PC98Bridge.zip"をダウンロードします。

2. ファイルの展開

C:\PC98Bridge以下にファイルを展開します。

展開すると、主に以下のファイルが入っています。

PC98Bridge/
├── README.md                  # 使い方や概要
├── LICENSE                    # MIT License
├── pc98/
│   └── AGENT.EXE              # PC-98実機で起動するプログラム
└── windows/
    ├── mcp_server.py          # CodexからMCP経由で接続するサーバー
    ├── pc98_serial.py         # PC-98とのシリアル通信処理
    ├── pc98ctl.py             # Windows CLIから操作するツール
    └── requirements.txt       # 必要なPythonモジュール一覧

今回の構築で主に使用するのは、PC-98側のpc98\AGENT.EXEと、Windows側のwindowsフォルダ内のファイルです。
AGENT.EXEは後ほどPC-98実機へコピーして使用します。

Windows 11側の準備

1. USBドライバのインストール

USB to Serial 変換ケーブルのドライバをWindows11にインストールし認識させます。

2. COMポート番号の確認

デバイスマネージャーを開き、「ポート(COMとLPT)」を展開します。

USB Serial Portなどの項目を確認し、表示されているCOM番号を控えておきます。

今回は、COM3として認識されました。

3. Python 3の導入

以下よりPython 3をダウンロードします。

https://www.python.org/downloads/windows/

今回はPython 3.13.15の64bit版をダウンロードしました。

なお、インストール方法はここを参照してください。
※Pillowのインストールは必要ありません

4. 必要なPythonモジュールのインストール

Windowsパワーシェルを管理者で起動し、以下コマンドを実行します。
環境によっては通常権限だとPythonモジュールのインストールに失敗する場合があるため、本記事では管理者権限で実行しています。

cd C:\PC98Bridge
py -3 -m pip install -r windows\requirements.txt

PC-98側の準備

1. PC-98へAGENT.EXEをコピー

先ほど展開したC:\PC98Bridge\pc98\AGENT.EXEを、フロッピーディスクなり、ネットワーク経由なりでPC-98へコピーします。

今回はCドライブのルートにコピーしています。

2. PC-98側でRSDRV.SYS・9600bps設定

まず、CONFIG.SYSRSDRV.SYS(MS-DOSでシリアルポートを使用できるようにするデバイスドライバ)が登録されているか確認します。

すでに以下のような記述がある場合は、追加する必要はありません。

DEVICEHIGH=C:\DOS\RSDRV.SYS

登録されていない場合は、環境に合わせて以下のように追加します。

DEVICE=C:\DOS\RSDRV.SYS

※ RSDRV.SYSのパスはDOSのインストール先によって異なります
※ DEVICE=またはDEVICEHIGH=ですでにRSDRV.SYSが登録されている場合、二重に登録しないでください

次に、AUTOEXEC.BATにRS-232Cの通信条件を "9600bps / 8N1 / フロー制御なし" として設定します。 AUTOEXEC.BATに以下を記載します。

SPEED RS232C-0 9600 BITS-8 PARITY-NONE STOP-1 NONE

3. AGENT.EXEの起動

CONFIG.SYSとAUTOEXEC.BATの設定を反映させるために、PC-98を再起動します。

その後、AGENT.EXEを起動します。

Windows CLI(コマンドライン操作)から通信確認

いきなりCodexから接続してもよいのですが、うまく動かなかった場合に「PC-98との通信が悪いのか」「MCPの設定が悪いのか」が分かりにくくなります。
そのため、まずはWindows CLIから直接PC-98へ問い合わせて、通信部分だけを先に確認します。

1. Windows CLIからコマンドを実行する

Windows 11からPC-98との通信を確認するため、以下のコマンドを実行します。
※1つ目は通信確認、2つ目はDOSバージョン、3つ目はコンベンショナルメモリを取得するコマンドです。

cd C:\PC98Bridge
py -3 windows\pc98ctl.py ping --port COM3 --baudrate 9600
py -3 windows\pc98ctl.py dos-version --port COM3 --baudrate 9600
py -3 windows\pc98ctl.py conventional-memory --port COM3 --baudrate 9600

3つのコマンドすべてでエラーが出ず、PC-98から取得した結果が表示されれば、WindowsとPC-98間の通信は成功です。

コマンドの詳細や、その他に使用できるコマンドについては、記事下部の「使用できる機能一覧」の「CLI(コマンドライン操作)」列を参照してください。

ChatGPT / Codexから接続する

1. ChatGPTのデスクトップ版のインストールとサインイン

以下URLよりChatGPTのデスクトップ版をダウンロードしインストールしてください。

本記事ではChatGPT Classicではなく、Codexを利用できるChatGPTデスクトップアプリを使用します。

https://chatgpt.com/download/

インストール後、ChatGPTアカウントでサインインしてください。

2. 設定画面を開く

ChatGPTアプリを起動させ、画面左下の「名前」→「設定」を選択します。

3. MCPサーバー追加画面

画面左の「プラグイン」→画面右上「追加」→「MCPサーバーを追加」を選択します。

4. MCPサーバーの追加

以下を記載します。

名前:
pc98-bridge

タイプ:
STDIO

起動用コマンド:
C:\Users\pokug\AppData\Local\Programs\Python\Launcher\py.exe
※C:\Users\pokug\の「pokug」の部分は自分がWindows11にログインしているユーザー名を記載してください

引数:
-3
-X
utf8
-u
C:\PC98Bridge\windows\mcp_server.py

環境変数:
PC98_PORT      COM3
PC98_BAUDRATE  9600
※「COM3」の数字の「3」の部分はデバイスマネージャーで確認したCOMポート番号を記載してください

5. CodexからPC-98の状態を確認する

ChatGPTアプリを再起動し、Codexに以下をお願いします。

PC-98Bridgeのpc98_pingを使って98実機への通信確認して

これで応答があれば成功です。
ちなみに"98実機にpingして"とお願いするとTCP/IPのpingを実施するので、上のお願いをします。

あとは、DOSのバージョンなど聞いてみましょう。

PC-98Bridgeで使用できる命令は記事下部の「使用できる機能一覧」を確認してください。

おわり

今回はRS-232Cを使って、Windows 11側のCodexから実機PC-98の状態を確認できるところまで構築しました。

本当はTCP/IP(ネットワーク経由)でつなぎたかったのですが、PC-98側で使うNEC製のMS-DOS版TCP/IP開発キットが、現在では入手困難でした。
そこで今回は、入手しやすく仕組みも分かりやすいRS-232Cを使うことにしました。

最終的には、テレビドラマ『ナイトライダー』のKITTのように、PC-98へ話しかけると自分の状態を確認して答えたり、必要な情報を表示したりできる端末にしてみたいと思っています。

今回はその第一歩として、「PC-98自身の情報を外部から取得できる」ところまで実装しました。今後は、取得した情報を使った自己診断や、PC-98側からWindows側へ問い合わせる仕組みなども試していく予定です。

使用できる機能一覧

Windows CLIとMCPでは、利用できる機能に一部違いがあります。

CLI(コマンドライン操作) MCP tool 内容
ping pc98_ping AGENTとの疎通確認
dos-version pc98_get_dos_version 動作中のDOSバージョン取得
datetime pc98_get_datetime DOSが保持する現在日時の取得
boot-drive-space pc98_get_boot_drive_space DOS起動ドライブの容量取得
drive-space pc98_get_drive_space 指定ドライブの容量取得
environment pc98_get_environment 環境変数の取得
conventional-memory pc98_get_conventional_memory コンベンショナル空きメモリの取得
conventional-map pc98_get_conventional_map コンベンショナルMCB一覧の取得
umb-memory pc98_get_umb_memory DOS管理UMBの空きメモリ取得
umb-map pc98_get_umb_map DOS管理UMBのMCB一覧取得
device-drivers pc98_get_device_drivers DOSデバイスドライバチェーンの取得
xms-memory pc98_get_xms_memory XMS driverと空きXMSメモリの取得
read-config pc98_read_config CONFIG.SYSの取得
read-autoexec pc98_read_autoexec AUTOEXEC.BATの取得
read-file pc98_read_text_file 指定したテキストファイルの取得
list-dir pc98_list_directory 指定ディレクトリの一覧取得
read-file-chunk 大きなファイルを分割して取得
download-file ファイル全体をWindows側へ保存

※ AGENT.EXEには通常の終了操作はありません。終了する場合はPC-98をリセットするか、電源を切ってください。