Msxterm
CUI terminal software for MSX0.
Install / Use
/learn @akio-se/MsxtermREADME
msxterm ver.0.4.0 (2023/10/29)
Release 0.4.0
- MSX0製品版対応 (0.4以前は「MSX0 試作機用」となります)
- 製品版仕様変更に伴う 文字コード変更
- Kanji Basic 対応 (#kanji_off / #kanji_on)
- MSX ASCII コード / ShiftJIS コード 切り替え
- エディタモードに vi モード追加
- エディタ切り替えコマンド追加 (#vi / #emacs)
- シリアルポート確認コマンド追加 (--port)
- 送信受信高速化に伴う #lowsend 廃止
- 製品版仕様変更に伴う BASIC 一時停止機能廃止
msxterm とは
- msxterm とは PC から MSX0 に対して wifi による「TCP/IP接続」、あるいは USBケーブルによる「シリアル接続」をするための専用ターミナルソフトです。 (ただし製品版の仕様変更箇所の調査中のため ver.0.4.0 ではシリアル接続は機能停止しています) CUI で主にプログラム作成に使用する事を想定しています。 BASICでプログラムを組む際に色々便利な機能を内蔵しています。
- MSX0 の文字コードをフルにサポートして文字化けなどの問題が発生しないようにしています。
対応プラットフォーム
- CUI のコマンドラインから起動するようになっており、Windows、mac, Linux に対応します。
- Windows版、Mac版 のバイナリは Release ページからダウンロードしてください。
- Linux の方は各自でビルドしてください。
- 既知の問題としてWindows版の実行ファイルがウィルスと検知される場合があるようです。
- https://github.com/akio-se/msxterm/issues/2
- ツールの構造的にセキュリティーチェックには引っかかりやすい事になります。
- セキュリティーを外してインストールするか、心配であればソースコードからビルドしてください。
バイナリからインストールする場合
- zip を展開してパスの通った場所にコピーしてください。
ソースコードからインストールする場合
-
ビルドの際には rust のインストールが必要です。
-
rust がインストール済みであれば下記の方法でOKです。
> git clone https://github.com/akio-se/msxterm.git
> cd msxterm
> cargo install --path ./
起動方法
- Mac、Linux の場合通常のシェルから実行します。
- Windows の場合コマンドプロンプトあるいは powershell から実行してください。
wifi 接続の場合
引数として MSX0 の「IPアドレス:ポート番号」を指定して接続します。
> msxterm -f history.txt 192.168.100.2:2223
- -f で「ヒストリファイル名」を指定します。
- オプションを省略した場合、history.txt というファイル名になります。
シリアルポート接続の場合(現在機能停止中)
MSX0にUSBケーブルで接続する場合はシリアルデバイスの Path を指定する必要があります。 パスの指定方法は各OSプラットフォーム毎に違います。
パスの例
MAC
> msxterm /dev/tty.usbserial-569C0128081
Win
> msxterm com3
Linux
> msxterm /dev/ttyUSB1
シリアルデバイスは複数存在しうるためプログラム側からはどれが MSX0 に繋がっているか分かりません。 そこでパスを列挙するコマンドを用意しました。
> msxterm -p
これで表示されているUSBデバイスの中から目的のものを見つけてください。
文字の入力
- 通常のプロンプトが出ている状態で文字を入力します。
- Enter を押すと文字列がMSXに送信されます。
- Enter を押すまではカーソルキーやコントロールキーで文字列が編集できます。
- 送信された文字列はヒストリに記録されます。カーソルの上下で過去のヒストリを呼び出せます。
- BASICであればこのヒストリで簡単にプログラムの修正ができます。
プログラムの流し込み
- PC側のファイルをMSX0側にロードする機能があります。
- テキストのコピペにも対応しています。
- 複数行のテキストを貼り付けても一行ずつ分解されて MSX0 側に送られます。
- その際にヒストリにも一行ずつ登録されます。
特に覚えておいてほしいキー
- BASICのプログラムを停止するのは Ctrl-C となります。
- BASICのプログラムの Pause/解除 は Ctrl-D となります。 (製品版仕様変更に伴いこの機能は廃止)
- ターミナル側の画面のクリアは Ctrl-L です。
- MSX側の画面のクリアは CLS 命令を使ってください。
- Ctrl-R で目的の行を探すのが便利だと思います。
キーバインド詳細
デフォルトでは Emacs 相当のバインドになっています。
| key | action | | -------- | ---------------------------- | | Ctrl-A | 行頭に戻る | | Ctrl-B | カーソル左 | | Ctrl-C | Stop | | Ctrl-D | 一文字削除 / Pause | | Ctrl-E | 行末へ移動 | | Ctrl-F | カーソル右 | | Ctrl-G | 検索キャンセル | | Ctrl-H | BackSpace | | Ctrl-I | TAB | | Ctrl-J | 改行 | | Ctrl-K | カーソル位置から行末まで削除 | | Ctrl-L | 表示クリア | | Ctrl-M | 改行 | | Ctrl-N | カーソル下 | | Ctrl-O | | | Ctrl-P | カーソル上 | | Ctrl-Q | | | Ctrl-R | インクリメンタル検索 後方 | | Ctrl-S | インクリメンタル検索 前方 | | Ctrl-T | 文字入れ替え | | Ctrl-U | カーソル位置手前を削除 | | Ctrl-V | | | Ctrl-W | スペースで区切られた単語単位で削除 | | Ctrl-X-U | Undo | | Ctrl-Y | ヤンクバッファからペースト | | Ctrl-Z | サスペンド (Linux) |
vi command mode
vi タイプのキーバインドも使えるようにしました。
| Key | Action | | ------------ | ----------------------------------- | | $, End | 行末までカーソル移動 | | . | 最後のテキスト変更を Redo | | ; | 最後の文字検索コマンドを Redo | | , | 最後の文字検索コマンドを反対方向に Redo | | 0, Home | 行頭までカーソルを移動 | | ^ | 行の最初の非ブランク文字に移動する | | a | カーソルの後に挿入 | | A | 行末に挿入 | | b | 単語またはトークンを 1 つ左に移動 | | B | 空白以外の単語を 1 つ左に移動する | | c<movement> | 移動コマンドのテキストを変更する | | C | テキストを行末まで変更する (c$ と同等) | | d<movement> | 移動コマンドのテキストを削除する | | D, Ctrl-K | 行末まで削除 | | e | 現在の単語の末尾に移動する | | E | 現在の非空白単語の末尾に移動する | | f<char> | 右方向 次の 'char' に移動する | | F<char> | 左方向 直前の'char' に移動する | | h, Ctrl-H | 1 文字左に移動 | | l, Space | 1 文字右に移動 | | Ctrl-L | 表示クリア | | i | カーソルの前に挿入 | | I | 行頭に挿入 | | +, j, Ctrl-N | 履歴内のコマンドを 1 つ進める | | -, k, Ctrl-P | 履歴内のコマンドを 1 つ戻る | | p | ヤンクしたテキストをカーソル位置に挿入 | | P | ヤンクされたテキストをカーソルの前に挿入する | | r | カーソルの下の 1 文字を置き換えます (コマンド モードを終了せずに) | | s | カーソルの下の文字を 1 文字削除し、入力モードに入る | | S | 現在の行を変更する (0c$ に相当) | | t<char> | 右方向次の 'char' まで移動して、そこから 1 文字後方に移動 | | T<char> | 左方向 直前の 'char' まで移動して、そこから 1 文字前に移動 | | u | Undo | | w | 単語またはトークンを 1 つ右に移動する | | W | 空白以外の単語を 1 つ右に移動する | | x | カーソルの下の 1 文字を削除する | | X | カーソルの前の文字を削除する | | y<movement> | 移動をバッファにヤンクする(コピー) |
vi insert mode
| Key | Action | | ----------------- | ------------------------------ | | Ctrl-H, Backspace | カーソルの前の文字を削除する | | Ctrl-I, Tab | 次の補完 | | Esc | コマンドモードに切り替える |
ターミナルコマンド
文字入力の先頭が # から始まる行は MSX0 側には送られずターミナル側のコマンドとして解釈されます。
quit
> #quit
msxterm を終了します。
hex
> #hex 40 6e 3c 0d
- スペースで区切られた2桁の16進数を ASCIIコードとして MSX0 側へ送信します。
- MSX0試作機のASCIIコードはかなり特殊なものとなっていました。
- そのへんの検証用の機能と思ってください。
load
> #load ./hello_world.bas
- PC側にあるテキストファイルのパスを指定します。
- それを読み込んで MSX0 側に送信します。
- 同時にターミナルのヒストリ、プログラムバッファにも登録されます。
- 空白を含むパスを指定する場合はダブルクォートで囲ってください。
> #load "c:\my file name"
clear_history
- ヒストリバッファの履歴を全て消去します。
> #clear_history
何も聞かずに消すので気をつけて実行して下さい。
dump_on
MSX0からの文字出力をダンプモードにします。
> #dump_on
- MSX0側の出力のデバッグ用の機能だと思ってください。
- 各文字のASCIIコードが16進数2桁で表示されます。
dump_off
MSX0からの文字出力をテキストモードへ戻します。
> #dump_off
kanji_on
MSX0側の BASIC は漢字モードがあります。
- 通常モード中は MSX ASCII コード
- 漢字モード中は Shift JIS コード
BASIC側で漢字モードにする場合下記のコマンドになります
CALL KANJI
BASIC側の文字コード変更に合わせてターミナル側も文字コードの切り替えが必要です。
> #kanji_on
これで Shift JIS に切り替わります。
ただしMSX0製品版にはバグがあります。MSX0 既知の問題の項目を参照。
kanji_off
MSX0側の BASIC で漢字モードから MSX ASCIIモードに戻す場合に使います。 まずBASIC側で通常モードに戻す場合下記のコマンドになります
CALL ANK
BASIC側の文字コード変更に合わせてターミナル側も文字コードの切り替えが必要です。
> #kanji_off
これで MSX ASCII に切り替わります。
vi
エディタの挙動を vi モードに切り替えます。
> #vi
emacs
エディタの挙動を emacs モードに切り替えます。
> #emacs
プログラムバッファについて
ターミナル側にはヒストリバッファとは別にプログラムバッファが存在します。 行の先頭から行番号がついた文字列はプログラムとみなしてプログラムバッファに溜めます。ターミナル側にプログラムのバックアップがある状態と思ってください。
list
> #list
ターミナル側のプログラムバッファからlistを表示します。 引数で表示する範囲指定ができます。(MSXの仕様に倣って0~65530まで)
> #list 100-1000
100行目から1000行目まで表示します。
> #list -1000
先頭から 1000 行目まで表示。
> #list 1000-
1000行目から末尾まで
ターミナル側の #list とMSX0側の list で見分けがつくように、暫定対応として行番号に色をつけています。
save
> #save ./save_file.bas
- ターミナル側のプログラムバッファに登録されている内容を保存します。
- 空白を含むパスを指定する場合はダブルクォートで囲ってください。
- MSX0 側の内容とズレている場合があります。
- その場合、Reload で MSX0 側と同期をとります。(未実装)
new
#new
プログラムバッファの中を消去します。 特に何も聞かずに消すので注意して下さい。
廃止予定の機能
以下のコマンドは MSX0 のファーム更新により不要となった機能です。 互換性のためまだ機能としては存在しますが、いずれ無くなる予定です。
lowsend_on (廃止予定の機能)
小文字化送信モードをオンにします。 起動時はオフになっています。
> #lowsend_on
試作機のMSX0で BASICは基本的に大文字で入力をするのが普通なのですが、それを MSX0 に送る際に小文字に変換してから送信します。 なぜそんな事をするかというと通信の高速化のためです。 試作機のMSX0では大文字を送信する際に小文字を送信するより2倍遅いという問題がありました。 最新のファームではこの問題が解消したため、機能自体が不要になりました。
lowsend_off (廃止予定の機能)
小文字化送信モードをオフにします。 起動時はオフになっています。
> #lowsend_off
小文字化送信で何かトラブルが起きた場合はこれでオフにしてください。
ここから先はまだ未実装のコマンド
reload_from (未実装)
> #reload_from
- ターミナル側のプログラムバッファを破棄して MSX0側のプログラムを読み込みます。
- list 命令で表示している内容を取り込む形になるので途中で Ctrl-C などで止めないようにしてください。
reload_to (未実装)
> #reload_to
- MSX0側のプログラムをNEWしてターミナル側のプログラムバッファから読み込みます。
- リロードの向きを間違って消さないように気をつけてください。
MSX0試作機の文字コードの問題について
MSX0試作機の初期ファームウェアでは MSX0側の受信処理は M5 Faces Keyboard からの入力処理が流用されていました。 その為かなり特殊な文字コードとなっていて構造上どうしても送れない文字がありました。 最新のファームウェアアップデートでこの問題が解消されました。送信できない文字などは無くなりました。 これに伴い、MSXTERM でも文字コードの変換処理を変更しました。 Ver 0.4 以降ではファームの古いMSX0試作機には対応しませんのでご注意下さい。
MSX0試作機の FacesKey コード表

MSX0製品版の問題について
MSX0試作機から製品版になるにあたり、修正されて良くなった部分もあれば悪くなった部分もあります。
- 文字出力が止まるバグがある
- BASICの一時停止などができなくなった
文字出力のバグ
ターミナルから入力した文字は問題なくMSX0に届くのですが、MSX0側の文字出力がターミナルへ帰ってこなくなる場合があります。MSX0とターミナル間の通信は保たれたままなので、MSX0のシステム側で何かバグが起きていると思われます。出力側が不安定になった事は退化と言わざるを得ません。これはターミナル側では対応できない部分となります。 発生条件はまちまちですが、私が気づいた所だと下記のパターンなどがあります。他にも気づいた点がありましたらご報告下さい。
MSX0側のスワイプで U0、U1 のインスタンスを切り替えたとき
大丈夫な場合とダメな場合があるように思います。
CALL KANJI などでモードを切り替えたとき
ASCII文字と漢字でMSXの内部処理が違っていて単純に漢字への対応もれかも知れませんが、ANK に戻しても出力が戻らないので困ってしまいます。
BASICの一時停止など
入力時の文字コードが「FacesKey Code」から「MSX ASCII」に変わったことにより、対応できなくなった機能となります。「FacesKey Code」による入力不可文字などのデメリットに比べればまぁ仕方ないかなと言える範囲かと思います。
文字コードの流れについて
MSXへの入力側
ver.0.4 以前の文字コードの流れ
msxterm(UTF-8) → (FacesKeybord Code) → MSX0 (MSX ASCII)
ver.0.4 以降の文字コードの流れ FacesKeyboard Code への変換が必要が無くなり、入力不可の文字なども無くなりました。
msxterm(UTF-8) → MSX0 (MSX ASCII)
半角かな の扱い
MSX ASCII コードでは「半角ひらがな」という特殊文字が入っています。 ターミナル側で全角ひらがな・カタカナを入力すると、MSX ASCIIのひらがな・カタカナになって届きます。ひらがな・カタカナ以外の全角文字は無視されます。
msxterm(UTF-8) → (全角かなを半角かな化) → MSX0 (MSX ASCII)
ver.0.4 からBASICの漢字モードに対応しました。 MSX0 側では下記のコマンドで漢字モードに切り替わります。
CALL kanji
ターミナル側でも #kanji_on とすると文字コードの変換方法が変わります。
msxterm (UTF-8) → (Shift JIS) → MSX0 (MSX SHIFT
Related Skills
node-connect
349.0kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
109.4kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
349.0kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
qqbot-media
349.0kQQBot 富媒体收发能力。使用 <qqmedia> 标签,系统根据文件扩展名自动识别类型(图片/语音/视频/文件)。
