はじめに
『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:
おわりに
今回の移植に関して難しい所は特にありませんでした。