CUI terminal software for MSX0.

Related tags

Command-line msxterm
Overview

msxterm とは

  • msxterm とは PC から MSX0 に TCP/IP 接続するための専用ターミナルソフトです。 CUI で主にプログラム作成に使用する事を想定しています。 BASICでプログラムを組む際に色々便利な機能を内蔵しています。
  • MSX0 の文字コードをフルにサポートしているので文字化けなどの問題が発生しません。

対応プラットフォーム

  • CUI のコマンドラインから起動するようになっており、Windows、mac, Linux に対応します。
  • Windows版、Mac版 のバイナリは Release ページからダウンロードしてください。
  • Linux の方は各自でビルドしてください。
  • 既知の問題としてWindows版の実行ファイルがウィルスと検知される場合があるようです。
    • #2
    • ツールの構造的にセキュリティーチェックには引っかかりやすい事になります。
    • セキュリティーを外してインストールするか、心配であればソースコードからビルドしてください。

バイナリからインストールする場合

  • zip を展開してパスの通った場所にコピーしてください。

ソースコードからインストールする場合

  • ビルドの際には rust のインストールが必要です。

  • rust がインストール済みであれば下記の方法でOKです。

> git clone https://github.com/akio-se/msxterm.git
> cd msxterm
> cargo install --path ./

起動方法

  • Mac、Linux の場合通常のシェルから実行します。
  • Windows の場合コマンドプロンプトあるいは powershell から実行してください。
> msxterm -f history.txt 192.168.100.2:2223
  • 引数として MSX0 の「IPアドレス:ポート番号」を指定して接続します。
  • -f で「ヒストリファイル名」を指定します。
    • オプションを省略した場合、history.txt というファイル名になります。

文字の入力

  • 通常のプロンプトが出ている状態で文字を入力します。
  • 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)

ターミナルコマンド

文字入力の先頭が # から始まる行は 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
  • ヒストリバッファの履歴を全て消去します。

プログラムバッファについて (未実装)

ここから先はこれから実装する予定です。 ターミナル側にはヒストリバッファとは別にプログラムバッファを作成します。 行の先頭から行番号がついた文字列はプログラムとみなしてプログラムバッファに溜めます。ターミナル側にプログラムのバックアップがある状態と思ってください。

list

> #list

ターミナル側のプログラムバッファからlistを表示します。

save

> #save ./save_file.bas
  • ターミナル側のプログラムバッファに登録されている内容を保存します。
  • MSX0 側の内容とズレている場合があります。
  • その場合、Reload で MSX0 側と同期をとります。

reload_from

> #reload_from
  • ターミナル側のプログラムバッファを破棄して MSX0側のプログラムを読み込みます。
  • list 命令で表示している内容を取り込む形になるので途中で Ctrl-C などで止めないようにしてください。

reload_to

> #reload_to
  • MSX0側のプログラムをNEWしてターミナル側のプログラムバッファから読み込みます。
  • リロードの向きを間違って消さないように気をつけてください。

MSX0 の文字コードの問題について

現状の試作機では MSX0側の受信処理は M5 Faces Keyboard からの入力処理が流用されているようです。その為かなり特殊な文字コードとなっています。構造上どうしても送れない文字があります。

MSX0 Key

また、ターミナルから MSX0 に対しての送信がやたら遅く感じるかもしれませんが、keyboard入力をエミュレートする部分がウェイトを入れて同期を取っていて、それが1文字ずつ処理しているため遅いのだと思われます。 また、英数大文字やかなを受信したmsx0側では一文字ずつ Kana や Caps の状態切り替えをしているようにも見える為、余計に遅くなります。 そんなわけでプログラムは小文字で入力した方が早いです。 ここは MSX0側のシステムの問題なのでいつか改善されることを切に願います。

文字コードの流れ

MSXへの入力側

msxterm(UTF-8) → (FacesKeybord Code) → MSX0 (MSX ASCII)

半角の入力不可文字は間違って入力してもプログラム的な害がないよう半角スペースに変換します。

! % ? ` { | } ~

ターミナル側で全角ひらがな・カタカナを入力すると、MSX ASCIIのひらがな・カタカナになって届きます。 ひらがな・カタカナ以外の全角文字は無視されます。入力不可のかな文字は近しい文字に変換されます。

 

MSXからの出力側

MSX0 (MSX ASCII) → msxterm (UTF-8)

出力側は特に大きな問題はないと思います。 ひらがな、カタカナなどはターミナル側では半角ではなく全角で表示されるようになっています。 MSX特有のグラフィック文字には対応していません。

ロードマップ

大まかな予定。 一般ユーザーにMSX0が届く7月までに ver.1.0 の正式リリースを目指す。

  • 0.1系 エディタなどの基本構造、Wifi TCP/IP接続の作成
  • 0.2系 文字コード関連の対応全般
  • 0.3系 USBケーブルでのシリアル接続に対応
  • 0.4系 プログラムバッファ関連対応
  • 0.5系 キー割り当ての調整
You might also like...
A server software designed for fetching Minecraft and Minecraft-related metadata

Minecraft Metadata Server A server software designed for fetching Minecraft and Minecraft-related metadata (such as Forge, Fabric, Quilt and Liteloade

A free and open-source DNA Sequencing/Visualization software for bioinformatics research.
A free and open-source DNA Sequencing/Visualization software for bioinformatics research.

DNArchery 🧬 A free and open-source cross-platform DNA Sequencing/Visualization Software for bioinformatics research. A toolkit for instantly performi

Bolik Timeline is local-first software for keeping notes and files.

Bolik monorepo Bolik Timeline is local-first software for keeping notes and files. This repo contains alpha-quality software. This means that we are e

A tiny software renderer written in Rust.
A tiny software renderer written in Rust.

tiny-renderer 简单的软光栅化渲染器 基础数学库 Bresenham画线算法 Cohen-Sutherland线段裁剪算法 glTF模型加载 模型/视图/投影变换 背面剔除 视椎剔除 齐次空间裁剪 深度测试 Blinn–Phong着色模型 重心坐标插值 运行 bresenham画线算法

nix2sbom extracts the SBOM (Software Bill of Materials) from a Nix derivation

nix2sbom nix2sbom extracts the SBOM (Software Bill of Materials) from a Nix derivation 📚 Documentation for using nix2sbom is here Warning This repo i

Rust vs C: Software Graphics Challenge
Rust vs C: Software Graphics Challenge

Rust vs C: Reto de Gráficos por Software Aprende Rust y C programando gráficos por software con efectos de demoscene clásica de los años 80. Episodios

A reliable key-value storage for modern software

Quick-KV A reliable key-value storage for modern software Features Binary Based Data-Store Serde Supported Data Types Thread Safe Links Documentation

Prisma2D - Fast, API agnostic, software only 2D graphics crate in pure Rust.

Prisma2D: Ultra-fast CPU 2D graphics Prisma2D is a blazingly fast, efficient yet minimal crate for basic 2D graphics on the CPU. for Rust. With Prisma

More than safe rust abstractions over rytm-sys, an unofficial SDK for writing software for Analog Rytm running on firmware 1.70.
More than safe rust abstractions over rytm-sys, an unofficial SDK for writing software for Analog Rytm running on firmware 1.70.

rytm-rs More than safe rust abstractions over rytm-sys, an unofficial SDK for writing software for Analog Rytm running on firmware 1.70. On top of CC

Comments
  • exe ファイルがウィルス扱いされる

    exe ファイルがウィルス扱いされる

    ウィルス判定される部分の検証

    要するに 「TCP/IPのネットワークで他のマシン(MSX0)に接続して色々コマンド送ったり操作したりスクリプト(BASIC)を送信できるプログラム」 ということでマルウェア扱いされているらしい。 うーん、いや、まぁ、そうなんだけどさ。


    攻撃者が悪意のあるコードを実行しようとしています。 実行は、敵対者が制御するコードをローカル システムまたはリモート システムで実行する手法で構成されます。 悪意のあるコードを実行する手法は、多くの場合、ネットワークの探索やデータの盗用など、より広範な目標を達成するために、他のすべての戦術の手法と組み合わされます。 たとえば、攻撃者はリモート アクセス ツールを使用して、リモート システム検出を行う PowerShell スクリプトを実行する可能性があります。

    攻撃者は、コマンドおよびスクリプト インタープリターを悪用して、コマンド、スクリプト、またはバイナリを実行する可能性があります。 これらのインターフェイスと言語は、コンピューター システムと対話する方法を提供し、多くの異なるプラットフォームに共通の機能です。 ほとんどのシステムには、コマンド ライン インターフェイスとスクリプト機能が組み込まれています。たとえば、macOS と Linux のディストリビューションには Unix シェルのフレーバーが含まれていますが、Windows のインストールには Windows コマンド シェルと PowerShell が含まれています。 また、Python などのクロスプラットフォーム インタープリターや、JavaScript や Visual Basic などのクライアント アプリケーションに一般的に関連付けられているインタープリターもあります。 攻撃者は、任意のコマンドを実行する手段として、さまざまな方法でこれらのテクノロジを悪用する可能性があります。 コマンドとスクリプトは、ルアー ドキュメントまたは既存の C2 からダウンロードされたセカンダリ ペイロードとして被害者に配信される初期アクセス ペイロードに埋め込むことができます。 攻撃者は、インタラクティブなターミナル/シェルを介してコマンドを実行したり、リモート実行を実現するためにさまざまなリモート サービスを利用したりすることもあります。

    opened by akio-se 0
Releases(release_0_2_1)
Owner
Akio Setsumasa
Game Programmer
Akio Setsumasa
ask.sh: AI terminal assistant that can read and write your terminal directly!

ask.sh: AI terminal assistant that read from & write to your terminal ask.sh is an AI terminal assistant based on OpenAI APIs such as GPT-3.5/4! What'

hmirin 5 Jun 20, 2023
A simple and efficient terminal UI implementation with ratatui.rs for getting quick insights from csv files right on the terminal

CSV-GREP csv-grep is an intuitive TUI application writting with ratatui.rs for reading, viewing and quickly analysing csv files right on the terminal.

Anthony Ezeabasili 16 Mar 10, 2024
A curated list of replacements for existing software written in Rust

Awesome Alternatives in Rust A curated list of replacements for existing software written in Rust. If you want to contribute, please read CONTRIBUTING

Takayuki Maeda 2.7k Jan 8, 2023
Metaballs (blobs) coded in Rust. 100% software rendering.

Metaballs (blobs) coded in Rust. 100% software rendering. It is basically a Rust version of my old demo effect from the 90s (back then we'd use a fake Phong shading, though).

Maciej Sinilo 7 Dec 4, 2022
Chaos Cat brings destruction and suffering to your software

Chaos Cat brings destruction and suffering to your software. When Chaos Cat is loaded it will randomly make predefined syscalls fail. This tests your software for the the things you might have forgotten to check because operating systems usually Just Work™ and syscalls usually never fail.

Ossi Herrala 2 Oct 8, 2022
A simple gtk4/libadwaita software center to easily install and manage nix packages

Nix Software Center A graphical app store for Nix built with libadwaita, GTK4, and Relm4. Heavily inspired by GNOME Software. Features Install package

Victor Fuentes 169 Dec 30, 2022
UniSBOM is a tool to build a software bill of materials on any platform with a unified data format.

UniSBOM is a tool to build a software bill of materials on any platform with a unified data format. Work in progress Support MacOS Uses system_profile

Simone Margaritelli 32 Nov 2, 2022
Work-in-progress software for managing the Azeron keypad on any operating system.

azeron-cli A small, unfinished CLI application intended to manage the Azeron Cyborg. The code is still in a very messy state and doesn't look very rus

cozyGalvinism 5 Nov 24, 2022
This is a multilingual word learning software.

Ladder This is a multilingual word learning software. How to add words to the software The project contains the words.json file, json contains learn a

Kuil 4 Jan 17, 2023
(Pre-Release Software) Secure, Encrypted, P2P chat written atop Warp, IPFS, LibP2P, Dioxus and many more awesome projects and protocols.

Uplink Privacy First, Modular, P2P messaging client built atop Warp. Uplink is written in pure Rust with a UI in Dioxus (which is also written in Rust

Satellite 13 Jan 25, 2023