3
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?

日本語プログラミング言語 Mind(マインド)Advent Calendar 2024

Day 21

Windows11でPureMindPro5.2(16bitMSDOS版)を動かす方法(ステップ4 Mind8ソースコンパイル実行2)

Last updated at Posted at 2024-12-21

はじめに

前回記事で16bitMSDOS環境としてMS-DOS Playerを使用してPureMindPro5.2コンパイラによりMind8ソースのコンパイル実行を行ってみましたが、非互換単語でコンパイルエラーとなりましたので、今回はその解消の試みです。

前提条件

Windows11 Pro 22H2 22621.4169
puremind kihon 5.2 
MS-DOS Player

MS-DOS Player

MS-DOS Playerは下記のサイトからダウンロードできます。

ダウンロードしたmsdos.7zを解凍するとbinaryフォルダの中にプロセッサ環境別のMS-DOSPlayerが格納されています。フォルダ構成はたいへんお手数ですが初回記事を参照してください。

puremind kihon 5.2 

PureMind-KIHON-and-DOSV.zipを解凍してできるKIHONSET#1の構成もたいへんお手数ですがはたいへんお手数ですが初回記事を参照してください。

ターゲット環境のMS-DOS Playerをbinフォルダにコピー

BINフォルダ内のPMIND.COMがコンパイラ本体にあたりますので、ここにターゲット環境i286_x86のMS-DOS Player実行ファイルmsdos.exeをコピーしてあります。

サンプルソースをbinフォルダに解凍

KIHONSET#1フォルダ配下にはsampleフォルダにサンプルソースのアーカイブがあります。前回無事に解凍できましたが、binフォルダにソースを展開してしまいました。これはこれでパスの記述が減るのでこのままでよしといたします。今回のお題のMind8ソースファイルもここにコピーしてコンパイルしております。

お題のソースコード

今回のお題のMind8ソースファイルは昨年のMindアドベントカレンダー2023の下記の記事で使ったコードですが、これはこのままではコンパイルできませんでした。

MS-DOS Player(i286-x86)配下でのコンパイル実行の結果

C:\PureMind-KIHON-and-DOSV\KIHONSET\#1\BIN>type countup.inf
COUNTUP.SRC 10 行目でエラー。 行内容は、
        起動引数個数が ゼロ?
      要因1:"起動引数個数"は未定義の単語です。

COUNTUP.SRC 13 行目でエラー。 行内容は、
        起動引数(1)を 数値変換し countMaxと 合否に 入れ
      要因1:かっこ表記に誤りが有ります。
      要因2:"起動引数"は未定義の単語です。

COUNTUP.SRC 19 行目でエラー。 行内容は、
        日時を値で得る startTimeに 入れる
      要因1:"日時を値で得"は未定義の単語です。

COUNTUP.SRC 29 行目でエラー。 行内容は、
        日時を値で得る stopTimeに 入れる
      要因1:"日時を値で得"は未定義の単語です。

COUNTUP.SRC 32 行目でエラー。 行内容は、
        一行表示し
      要因1:"一行表示"は未定義の単語です。

6 個のエラーが有ります。
Next code addr=7DB0H  Next data addr=1A60H

お題のソースコード改定版

実は今回のお題のゴールは、中間コードコンパイラのMind8とネイティブコンパイラのMind5の実行速度の比較にあります。なので、あまり大きく書き換えたくはなく、とりあえずループ内の処理は互換コンパイルできているので、ループ外の前処理と後処理をコンパイル実行可能なよう、下記のとおり書き換えました。

countup.src
    メインとは
        countMaxは 変数
        countは 変数
        合否は 変数

        startTimeは 変数
        stopTimeは 変数
        spanTimeは 変数
        起動引数は 文字列
        
        起動パラメータから 単語切り出しし 起動引数に 入れ
        起動引数が 空列?
        ならば countMaxに 0を 入れ
        つぎに
        起動引数を 数値変換し countMaxと 合否に 入れ
        合否が 偽?
        ならば countMaxに 0を 入れ
        つぎに

        ※開始時間(秒)
        時刻を得て 時に 60を 掛け 分に 60を 掛け 秒を 加え startTimeに 入れる
        countに 0を 入れ
        ここから
          countが countMax 以上 ならば 打ち切り
                つぎに

            countを 一つ増加し
        繰り返し
        
        ※終了時間(秒)
        時刻を得て 時に 60を 掛け 分に 60を 掛け 秒を 加え stopTimeに 入れる
        stopTimeから startTimeを 引き 1000を 掛け spanTimeに 入れる
        「処理回数: 」と countを 文字列変換し 合成し 「回」を 合成し
        表示し 改行し
        「処理時間: 」を 表示し spanTimeを 文字列変換し 表示し
        「ミリ秒」を 表示し 改行すること。

spanTimeを文字列変換するの前後で、合成するを使った場合、正常に出力されませんでしたので、とりあえずつど表示するで逃げています。spanTimeを文字列変換して表示した後も「ミリ秒」が表示されませんでした。

MS-DOS Player(i286-x86)配下でのコンパイル実行

C:\PureMind-KIHON-and-DOSV\KIHONSET\#1\BIN>msdos pmind countup ..\lib\hfile

日本語プログラミング言語  PureMindPRO  Version 5.2
             Copyright(C)1989 Rigy Corporation

コンパイル中 - 終了。

とりあえずコンパイル成功しました!:tada:つづいて実行してみます。

C:\PureMind-KIHON-and-DOSV\KIHONSET\#1\BIN>msdos countup 1000000
処理回数: 1000000回
処理時間: 2000
C:\PureMind-KIHON-and-DOSV\KIHONSET\#1\BIN>msdos countup 10000000
処理回数: 10000000回
処理時間: 11000
C:\PureMind-KIHON-and-DOSV\KIHONSET\#1\BIN>msdos countup 40000000
処理回数: 40000000回
処理時間: 46000

100万回と1000万回を繰り返した実行時間です。単位は秒計測ですが1000倍してミリ秒単位にしています。spanTimeを文字列変換して表示した後の「ミリ秒」が表示されない謎現象は前述のとおりです。

おわりに

いかがでしたでしょうか?なにかの参考になれば幸いです。これで往年の名器PureMindPro5.2のコンパイル実行環境が手に入りました:santa_tone2:

3
0
2

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
3
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?