[MSX0] 非公式?なIOT命令について調べてみた #MSX0

風の噂に、IoT BASICには未定義命令(未実装命令?)があるらしいと聞き、調べてみました。


CALL IOTSEND

あくまで中の人の読解による解釈なので間違ってるかもしれませんが、CALL IOTSENDは以下のような挙動になっているようです。

  1. I/Oポート8に対してコマンド0xAA,0x02を送信
  2. 第一引数の文字列長をI/Oポート8に送信
  3. 第一引数の文字列の内容をI/Oポート8に送信
  4. 第二引数の文字列長をI/Oポート8に送信
  5. 第二引数の文字列の内容をI/Oポート8に送信
  6. 終わり

で、何をするかなんですが。

最初に送信するコマンドと思われる0xAA,0x02が何をするものなのかは、MSX0側のファームウェアの処理に依存しています。なので、現時点では不明なのです。


ファイルデバイス名「IOT:」

OPEN文で指定するファイルデバイス名に「IOT:」というのが追加されています。

ただ、おそらくこのファイルデバイス名は完全に未完になっているようで、中の人が読んだ限りでは、シーケンシャル出力の処理(PRINT#文など)は、「ノード"host/name"に対するIOTPUT相当の処理(I/Oポート8への出力)しかしていないっぽいかんじです。

といって、

OPEN "IOT:" FOR OUTPUT AS #1

PRINT #1,"msx0-12345"

のように書いてもDevice I/O Errorになってしまって、なんだかうまくいきません。

実は、ROM内の"host/name"というデバイス名の近くには”net/s0/com/send"という文字列が見受けられますが、使われている形跡がなく、実際のMSX0にもそのようなノードパスは存在しません。

将来的には、このノードパスを使って、何かしらのアクセスができるようにしたいのかもしれません。付属のサンプルコードの解説にも、OPEN文でTCP/IP通信ができるようにする?とかの記述も見受けられたので、アップデートでの対応が予定されているのかもしれません。

期待して待ちましょう・・・



コメント