はじめに
『MSX0 Stack』付属の IoT BASIC サンプルを『Turbo Pascal』へ移植してみます。
INFO.BAS
◆MSX0 Stack 情報表示
| 項目 | 説明 |
|---|---|
| 概要 | システムメニューにある [MSX0 Stack 情報] と同等のプログラムです。 |
| ファイル名 | INFO.BAS |
| 対応デバイス | |
| コメント |
ファイルは存在するのですが、DOC\SAMPLES.TXT には説明がありません。SYSMENU.BAS と差し替えられたのでしょうか?
See also:
MSX0 Stack での挙動
INFO.BAS をロードして、
実行してみました。
ホスト名、内部ソフトウェアバージョン、IP アドレス、ヒープメモリ、バッテリーレベルが表示されます。ディスク内に SYSMENU.BAS が存在すれば、終了時に実行されます。
プログラムは〔Ctrl〕+〔Stop〕(リモートコントロールパネルからは〔Ctrl〕+〔F12〕) または画面タッチ (リモートコントロールパネルならマウスクリック) で中断できます。
Turbo Pascal へ移植
別途、MDL-LIB と SYSUTILS.LIB、IOT.LIB が必要です。
program INFO;
{$I MDLLIB.LIB}
{$I VRAM2.LIB}
{$I GAMEIO.LIB}
{$I SYSUTILS.LIB}
{$I IOT.LIB}
var
I: Integer;
begin
ClrScr;
ScrMode(1);
GoToXY(1, 2);
Writeln('name : ', IoTGetStr('host/name') );
Writeln('sw : ', IoTGetStr('host/sw_version'));
Writeln('ip : ', IoTGetStr('host/ip') );
while True do
begin
GoToXY(1, 6);
Writeln('heap : ', IoTGetInt('host/heap' ):4 , ' KB');
Writeln('batt : ', IoTGetInt('host/battery/level'):4 , ' %' );
for I:=1 to 32 do
begin
if Keypressed or (Pad(4) <> 0) then
Exit;
Delay(100);
end;
end;
end.
実行してみました。
ホスト名、内部ソフトウェアバージョン、IP アドレス、ヒープメモリ、バッテリーレベルが表示されます。ファンクションキーの表示がないので、ちゃんと Turbo Pascal での実行結果です。SYSMENU.BAS に相当するものはないので、プログラムを抜けると単純に終了します。
任意のキーまたは画面タッチで中断できます。
解説
Pad()
Pad(4) は汎用 I/O ポート (ジョイスティックポート) #2 に接続されたタッチパッドの押下を検出しています。汎用 I/O ポート #2 に何を接続するかは [Setup Utility] で変更可能なので、タッチパッドを JOY2 に設定していないと、画面タッチでは抜けられなくなります。
更新頻度
BASIC では 100 回の FOR ループ内でタッチを待ち、FOR 文実行の 20 回毎に、ヒープメモリとバッテリーレベルを更新しています。実測すると 4 秒くらいで更新されているようでしたので、Turbo Pascal のコードでも大体同じくらいの頻度で更新されるようになっています。
スクリーンモード
オリジナルの通りに移植したので、スクリーンモードを変更して元に戻していません。ちょっとお行儀がよくないですね。
See also:
おわりに
今回の移植に関して難しい所は特にありませんでした。


