MSXPad を 64bit Windows で使えるようにする

# はじめに
MSX-DOS 用の Turbo Pascal クロスコンパイラ統合環境である **MSXPad** の存在を知りました (情報が多い)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c393ceb6-3b00-8de4-a962-4c32007d5084.png)
この MSXPad を 64bit Windows で動作させる記事です。

# MSXPad
**MSXPad** は SLotman 氏による Turbo Pascal 統合環境です。 MSX computer club Enschede (Frits Hilderink 氏) によって作られた **Turbo Pascal 3.3f クロスコンパイラ　(MS-DOS 用)** と、MSX エミュレータ (デフォルトで openMSX) によるツールチェインです (情報が多い)。

:::note info
この Turbo Pascal は『MCCE Turbo Pascal』と呼ばれています。
:::

## MSXPad の問題点
先述の通り、Turbo Pascal 3.3f クロスコンパイラは MS-DOS プログラムのため、Google 検索で引っ掛かる MSXPad v1.6 以前のバージョンは 64bit Windows では動作しません (インストールは可能)。

これを解決するための **MSXPad Revived** があり、MSXPad v1.6 をインストールした環境に上書きする形でインストールすると、64bit Windows で動作するようになる上、openMSX も同時にインストールされます。

これで終わりでもいいのですが、いくつか引っ掛かる点があります。

 - MSXPad v1.6 はインストーラで提供されており、MSXPad Revived もインストーラで提供されているので、同じフォルダにインストールするとアンインストールの際に面倒な事になる。
 - MSXPad v1.6 はインストーラは何かに引っ掛かっているのか、インストールがとても遅い。
 - <font color="Crimson">実は 64bit Windows で動作する MSXPad v1.8 が存在する。</font>
 - MSXPad v1.8 はインストーラ形式ではない。

**See also:**
 - [Utilities - The MSX Files (icongames.com.br)](http://www.icongames.com.br/msxfiles/util-en.htm)
 - [MSXPad v1.6 (icongames.com.br)](https://www.icongames.com.br/msxfiles/utils/msxpad.zip) - 直接リンク
 - [MSXPad Revived (Desarrollos en 8 Bits. ZX Spectrum, Commodore 64.)](https://www.8bitsbasic.es/p/msx-pad-revived.html)

## MSXPad v1.8 のインストール

MSXPad v1.8 は次の場所からダウンロードできます。

 - [Utilities - The MSX Files (icongames.com.br)](http://www.icongames.com.br/msxfiles/util-en.htm)
 - [MSXPad v1.8 (icongames.com.br)](https://www.icongames.com.br/msxfiles/utils/MSXPad64.zip) - 直接リンク

### ■ 最も簡単なインストール方法
MSXPad v1.6 インストーラを実行し、同じ場所に MSXPad v1.8 のアーカイブを解凍するのが最も簡単なのですが、先述の通り MSXPad v1.6 のインストーラはとても遅いのです。

### ■ 手動インストール

MSXPad v1.8 を利用した手動インストールを行ってみます。

 1. MSXPad v1.8 アーカイブを適当な場所に展開します。`C:\TOOLS\MSXPad` のようなスペースを含まない単純なパスがオススメです。
 2. VB6 ランタイムのインストール
[Vector にある VB6 ランタイム](https://www.vector.co.jp/soft/win95/util/se342080.html)をインストールします。
 3. OCX の登録
コマンドプロンプトを<font color="Crimson">管理者権限で実行</font>し、次のコマンドを実行します。
```bat
C:> C:\Windows\SysWOW64\regsvr32.exe C:\Tools\MSXPad\cmax20.ocx
```

## MSXPad の使い方

軽く使い方を。

別途、何かしらの **MSX エミュレータ** が必要なので、事前にインストールしておいてください。デフォルトの設定では **openMSX** を使う事になっています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/4ac08029-0319-319d-2a28-16ae434b615f.png)

**blueMSX** も使えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/253a2856-a230-8a29-6c25-0c79096b4823.png)

**See also:**
 - [openMSX](https://openmsx.org)
 - [blueMSX](http://bluemsx.msxblue.com/jindex.htm)

### 環境設定

最初に使う時は環境設定を行います。まずは `MSXPad.exe` を実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/264b0936-2e11-45e4-aea5-3e95676d3b33.png)

テンプレート画面は [Cancel] で閉じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/509dc5d2-d042-8a0d-a85b-613e3671c432.png)

`[Edit | Preferences]` で設定画面を開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/5ea725d5-559c-4697-718a-3559d232550d.png)

| 項目 | 説明 |
|:---|:---|
| Emulator's path | エミュレータの EXE へのフルパス |
| Command line | エミュレータのためのオプション |
| Code font size | 16 とかに変更 |

コマンドラインのデフォルトは openMSX 用となっていますが、私は blueMSX を使っています。

| エミュレータ | オプション |
|:---|:---|
| openMSX | -diska %dsk -machine Philips_NMS_8250 |
| blueMSX | /diskA %dsk /machine "MSX2+" |

:::note info
openMSX の設定で Philips_NMS_8250 が指定されているのは、デフォルトの C-BIOS だと FD が使えないからです。
:::

:::note info
blueMSX の設定で MSX2+ を使うようになっているのは、MSX2 とかだとキーボードの刻印通りに入力できないからです。
:::

### Hello,world.

まずはプロジェクトを作成します。[File | New | Project] でテンプレートを開きます。どれでもいいので、テンプレートを選択し `[Open]` を押します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e2485202-653f-732d-3299-0f2e0c6e3565.png)

MSXPad のインストールフォルダの下に `PRJ` というフォルダを作り、その下に `HELLO` サブフォルダを作って、そこに `HELLO.PAS` という名前でファイルを保存します (`C:\TOOLS\MSXPad\PRJ\HELLO\HELLO.PAS`)。PASCAL ファイル名は 8.3 形式にしておいてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/9755688a-5384-e145-6d8b-3207083bea3a.png)

`[保存]` ボタンを押すと、選んだテンプレートを元にしてプロジェクトファイルが作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/926886ab-3223-5d85-c77a-5ba15c49d9bd.png)

一旦、`C:\TOOLS\MSXPad\PRJ\HELLO` へ行き、生成されている `AUTOEXEC.BAT` をテキストエディタで開きます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/12338686-fce3-4d33-ded0-a0f20fdb347a.png)

次のような内容になっていると思います。

```text
SET EXPERT ON

HELLO
```

`SET EXPERT ON` の行を削除して保存します。

```text
HELLO
```

MSXPad に戻って、コードを記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8150a76e-82d3-3e16-3ee2-f8be7590d8c9.png)

```pascal
begin
  WriteLn('Hello,world.');
end.
```

`[File | Compile and Run]` または `〔F5〕` キーでコンパイル＆実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f15265df-1704-6c7a-79db-360fa7ee2e93.png)

コンパイルが正常終了するとエミュレータが起動し、プログラムが実行されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/224d4d3b-cd5d-47d0-1601-797363504926.png)

簡単ですね！

ちなみに [Game] 等のテンプレートを使ってプロジェクトを作成すると、最初から各種インクルードファイルを追加したソースコードが生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/58a356af-6f22-a512-191b-974e12dc7cda.png)

| テンプレート | インクルードファイル |
|:---|:---|
| HiSpec | MSXDOS2.inc<br>msx.inc<br>pal.inc<br>sprite.inc<br>misc.inc<br>MAPPER.inc<br>Mbplayer.inc  |
| Game | MsxDskIO.inc<br>msx.inc<br>pal.inc<br>sprite.inc<br>misc.inc |
| msx1 | MsxDskIO.inc<br>msx.inc<br>msx1.inc<br>sprite.inc |
| normal | \<なし\>  |

インクルードファイルを使うと、グラフィックやサウンド、ジョイスティック等の **MSX 固有の機能**を使う事ができます。詳しくは `help` フォルダにある `ManualMSXPad.pdf` を参照してください。

# おわりに
MSXPad v1.7 以降がどうやって 64bit Windows で Turbo Pascal 3.3f クロスコンパイラを実行しているかというと、**DOSBox** を組み込んでクロスコンパイルを実現しています (`compiler` フォルダの中にあります)。力業なツールチェインですね (w

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e74f0c11-dc32-eb6e-8f5d-db02b830181b.png)

MSX で Turbo Pascal を実行してのセルフ開発もいいですが、クロスコンパイラ＋エミュレータ環境もいいですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f987f430-d94d-88b3-a646-bd403f63e573.png)

なお、Turbo Pascal 3.3f には (クロスじゃない) MSX で動作するコンパイラもあります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/cd9d81e7-cba7-76b6-0639-77de2f3dfb79.png)

**See also:**

 - [Pascal compilers for the MSX (pascal.hansotten.com)](http://pascal.hansotten.com/delphi/turbo-pascal-on-cpm-msx-dos-and-ms-dos/)
 - [MSX2 version of Turbo Pascal 3.00A (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/msx/tpmsx2.zip)
 - [Turbo Pascal 3.3f Command-line Compiler (pascal.hansotten.com)](http://pascal.hansotten.com/uploads/msx/turbo33f.zip)
 - [[Turbo Pascal] Q&amp;A official thread (MSX Resource Center)](https://www.msx.org/forum/msx-talk/development/turbo-pascal-qa-official-thread)
 - [Turbo Pascal 3.0.x の使い方 (Qiita)](https://qiita.com/ht_deko/items/ec212f5cc17cbe5f718b)
 - [Hinotori Library (Github: \@popolony2k)](https://github.com/popolony2k/hinotori)