0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【MSX0】PERFORMC.PAS【Turbo Pascal】

Last updated at Posted at 2023-12-21

はじめに

『MSX0 Stack』付属の IoT BASIC サンプルを『Turbo Pascal』へ移植してみます。

PERFORMC.BAS

◆負荷測定

項目 説明
概要 仮想 Z80 の周波数を振ってオーバークロック余力を測定します。
ファイル名 PERFORMC.BAS
対応デバイス
コメント SCREEN モードや、ネットワーク機能利用時など使用状況に影響を受けます。

See also:

MSX0 Stack での挙動

PERFORMC.BAS をロードして、

image.png

実行してみました。

image.png

240% までクロックアップしながら負荷測定を行います。OVER が表示され負荷が 100% を超えると処理が追い付いていない事を意味します。逆に言うと、負荷が 100% を超えない範囲ならクロックアップが可能という事になります。

プログラムは〔Ctrl〕+〔Stop〕(リモートコントロールパネルからは〔Ctrl〕+〔F12〕) で中断できます。

Turbo Pascal へ移植

別途、MDL-LIB と SYSUTILS.LIBIOT.LIB が必要です。

INFO.PAS
program PERFORMC;
{$I MDLLIB.LIB}
{$I VRAM2.LIB}
{$I SYSUTILS.LIB}
{$I IOT.LIB}
label
  JP;
type
  Str4 = string[4];
const
  OVSTR: array [Boolean] of Str4 = ('', 'OVER');
var
  S: Byte;
  I, P, W: Integer;
begin
  S := sys_scrmod;
  ScrMode(1);
  Writeln;
  Writeln('**** PERFORMANCE CHECK ****');
  Writeln;
  I := 0;
  repeat
    I := I + 20;
    IoTPutInt('msx/me/pm/cpu/percent', I);
    write('Z80:', I:3, '% ');
    for W:=0 to 2 do
    begin
      Delay(I * 10);
      if KeyPressed then
        goto JP;
      write('-');
    end;
    P := IoTGetInt('msx/me/pm/cpu/load');
    Writeln(' LOAD:', P:3, '% ', OVSTR[P > 100]);
  until I >= 280;
  Writeln;
  Writeln('Press any key.');
  while not KeyPressed do
    ;
JP:
  IoTPutInt('msx/me/pm/cpu/percent', 100);
  ScrMode(S);
end.

実行してみました。

image.png

SAMPLE.TXT の説明にもあったように負荷は環境によって左右されるようで、BASIC での結果よりも負荷が軽めに出るようです。

任意のキーで中断できます。

解説

ループ (1)

Pascal の for 文にステップ構文はないので、I のループは repeatuntil で置換しています。

ループ (2)

多重ループを抜けるために goto を使っています。Pascal に行番号はないのでラベルによるジャンプとなります。

負荷

負荷が軽めなので、280% まで測定する事にしました。

測定終了時の処理

プログラム終了時にスクリーンモードを元へ戻すようにしましたが、そうすると測定終了後の画面を確認できないため、何かのキーが押されるまで画面をそのままにしておく事にしました。

おわりに

今回の移植に関して難しい所は特にありませんでした。

記事に関連しますが、以前 MSX-DOS でクロックアップを行うトランジェントコマンド M0CLKUP を作った事があります。

image.png

MSX-C のセルフコンパイルは遅いので、M0CLKUP で 200% にクロックアップしてコンパイルし、実行形式ファイルは 100% に戻して実行する、なんて事が可能です。

事前にパフォーマンスチェックを行って、何 % くらいまでクロックアップが可能なのかを調べておくといいかもですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?