Pascal の勉強に使えそうな Pascal 処理系

# はじめに
Pascal の勉強をしていると、Pascal を実際に動かしてみたくなります。現物があると理解も早いですからね。

 - [標準 Pascal 範囲内での Delphi 入門 (Qiita)](https://qiita.com/ht_deko/items/e2796788c65c2cda1de5)
 - [Pascal / Turbo Pascal / Delphi 関連の書籍を読んでみる (まとめ) (Qiita)](https://qiita.com/ht_deko/items/34bbcdea27ce224079e0)

# 各 Pascal について
書籍のサンプルコードを試すには対象となっている Pascal を用意しなくてはなりません。Pascal を日本語で解説した書籍の殆どが、

 - **標準 Pascal**
 - **Turbo Pascal**
 - **Delphi**

このいずれかを対象としているようです。

## ■ 標準 Pascal / ISO 準拠 Pascal
標準 Pascal は Pascal-P5 で試せます。Pascal-P5 は ISO 7185 (水準 0) 準拠 の Pascal コンパイラ / インタプリタです。

 - [PASCAL-P5 (SourceForge)](https://sourceforge.net/projects/pascalp5/)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f7291706-6abe-f21b-cefa-842a07a16303.png)

**See also:**

 - [割と簡単に ’標準 Pascal' を試してみたい (Qiita)](https://qiita.com/ht_deko/items/41e95154e8da2f901698)
 - [テキストエディタ Micro を Delphi 互換のキーバインドで使う (Qiita)](https://qiita.com/ht_deko/items/c47fb602d090e5a2bfa8)

## ■ Turbo Pascal 3.0
Turbo Pascal 3.0 (MS-DOS 版) はアンティークソフトウェアとして Embarcadero のサイトから DL 可能です。

1.0 / 2.0 用に書かれたコードの多くは 3.0 でもそのまま動作します。後述の Turbo Pascal 5.5 でも代替できるかもしれませんが、Turbo Pascal 関連書籍の多くでは ver3.0 以前が使われているようです。

 - [Antique Software: Turbo Pascal v3.02 (EDN)](https://edn.embarcadero.com/article/20792)
 - [Turbo Pascal 3.02 (Embarcadero)](https://cc.embarcadero.com/Item/26016)
 - [Embarcadero が公開しているアンティークソフト一覧 (Qiita)](https://qiita.com/ht_deko/items/ae7605c6b1f426ae234a)
 - [Turbo Pascal 3.0 の使い方 (Qiita)](https://qiita.com/ht_deko/items/ec212f5cc17cbe5f718b)
 - [Turbo Pascal 3.02 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/03f5f7ee0893402f99f6)
 - [PUG BOOKS の Turbo Pascal 関連書籍を読んでみる (Qiita)](https://qiita.com/ht_deko/items/e110443098055327ca61)

※Turbo Pascal 3.0 によって生成される[実行ファイルの形式は *.COM](https://ja.wikipedia.org/wiki/COM%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB) です。

### ・DOSBox(-X) で実行
Turbo Pascal 3.0 は DOSBox(-X) で動作させる事ができます。`TURBO.COM` が Turbo Pascal の本体です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c34f5d10-fd57-32d8-bda2-3735a3367dc9.png)
環境設定ツール `TINST.COM` を動かそうとするとエラーが発生します。

```
*** FATAL ERROR: File TURBO.COM not found
```

これは解凍したファイルに`読み取り専用属性`が付いているからです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8d398ac3-67ac-48b9-9637-93b5c970a090.png)
読み取り専用属性を外せば TINST を実行できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/10ac74cd-15e8-c9eb-06b2-d7a17d3ad8a7.png)

**See also:**

 - [DOSBox](https://www.dosbox.com/)
 - [DOSBox-X (GitHub)](https://github.com/joncampbell123/dosbox-x/releases)
 - [Borland Turbo Pascal - RunCPM (ht-deko.com)](https://ht-deko.com/arduino/runcpm.html#04)

### ・MS-DOS Player で実行
Turbo Pascal 3.0 は **MS-DOS Player** でも動作するようです。　
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/da9d205d-d667-5724-c96a-f87c4518d51d.png)

```
msdos TURBO.EXE <ソースファイル名>
```

#### 64bit Windows で動作する EXE
**MS-DOS Player** は `-c` コマンドで EXE を 64bit 実行ファイルにコンバートする事ができるため、64bit Windows のコマンドプロンプトで直接動作する **turbo64.exe** なんていうのを作る事もできます。

```
msdos -cTURBO64.EXE -x TURBO.COM
msdos -cTINST64.EXE -x TINST.COM
```
TINST.COM も一緒にコンバートしておくといいと思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/958e3ad3-0c21-f51c-8df6-865bc297730b.png)
但し、TURBO64.EXE が吐く実行可能ファイルは MS-DOS 形式なので、これを実行するにはやっぱり msdos.exe を使う必要があります。IDE からプログラムを実行する分には問題ありません。

**See also:**

 - [MS-DOS Player for Win32-x64](http://takeda-toshiya.my.coocan.jp/msdos/)

## ■ Turbo Pascal 5.5
Turbo Pascal 5.5 はアンティークソフトウェアとして Embarcadero のサイトから DL 可能です。

Turbo Pascal 5.5 以降を前提として書かれた書籍はそう多くはないと思われますが、見かけたら一冊持っておくと便利です。

 - [Antique Software: Turbo Pascal v5.5 (EDN)](https://edn.embarcadero.com/article/20803)
 - [Turbo Pascal 5.5 (Embarcadero)](https://codecentral.embarcadero.com/Item/26015)
 - [Turbo Pascal 5.5 Object-Oriented Programming Guide (Embarcadero)](http://edn.embarcadero.com/jp/article/images/20803/TP_55_OOP_Guide.pdf)
 - [Turbo Pascal 5.5 (Mr.XRAY)](http://mrxray.on.coocan.jp/Delphi/Others/TurboPascal55.htm)
 - [Embarcadero が公開しているアンティークソフト一覧 (Qiita)](https://qiita.com/ht_deko/items/ae7605c6b1f426ae234a)
 - [Turbo Pascal 5.5 を Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/eb35e0480559f893a9b8)
 - [PUG BOOKS の Turbo Pascal 関連書籍を読んでみる (Qiita)](https://qiita.com/ht_deko/items/e110443098055327ca61)


※Turbo Pascal 5.5 によって生成される[実行ファイルの形式は *.EXE](https://ja.wikipedia.org/wiki/EXE%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%83%E3%83%88) です。

### ・DOSBox(-X) で実行
Turbo Pascal 5.5 は DOSBox(-X) で動作させる事ができます。`TURBO.EXE` が Turbo Pascal の本体です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b4f1a9ea-0b0b-20ae-452e-bd7c35e9eb9c.png)

**See also:**

 - [DOSBox](https://www.dosbox.com/)
 - [DOSBox-X (GitHub)](https://github.com/joncampbell123/dosbox-x/releases)

### ・MS-DOS Player で実行
Turbo Pascal 5.5 の本体は `TURBO.EXE` です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/44f7966a-2067-a560-0125-1b6a2cd5e035.png)
**MS-DOS Player** を使えば 64bit Windows のコマンドプロンプトでも `TURBO.EXE` を実行する事ができます。

```
chcp 437
msdos TURBO.EXE <ソースファイル名>
```

フォントの関係で、`TURBO.EXE` を起動する前にコードページを 437 に切り替える必要があります。切り替えないとこうなってしまいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c7d1fbeb-f9cf-85d1-de38-5f915cb80cf3.png)
コードページを元に戻すには `chcp 932` を実行します。

#### 64bit Windows で動作する EXE
Turbo Pascal 3.0 同様、**MS-DOS Player** で **TURBO64.EXE** を作る事もできます。

```
msdos -cTURBO64.EXE -x TURBO.EXE
```

但し、TURBO64.EXE が吐く実行可能ファイルは MS-DOS 形式なので、これを実行するにはやっぱり msdos.exe を使う必要があります。IDE からプログラムを実行する分には問題ありません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/6a871b33-b984-a0f7-7e7b-bb0aecfea457.png)


### ・MS-DOS Player で実行 (コマンドラインコンパイラ)
Turbo Pascal 5.5 には **tpc.exe** というコマンドラインコンパイラも付属します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f83db73a-34de-fe23-79fb-e1fc464a2e26.png)
**MS-DOS Player** を使えば 64bit Windows のコマンドプロンプトでも tpc.exe を実行する事ができます。

```
msdos TPC.EXE <ソースファイル名>
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d43ed94a-b91b-dea2-cc29-fd9dc338a9a1.png)

#### 64bit Windows で動作する EXE (コマンドラインコンパイラ)

**MS-DOS Player** で **TPC64.EXE** を作る事もできます。

```
msdos -cTPC64.EXE -x TPC.EXE
```

但し、tpc64.exe が吐く実行可能ファイルは MS-DOS 形式なので、これを実行するにはやっぱり msdos.exe を使う必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c35a37ce-f46f-7d70-4f0c-cff534f66e91.png)

**See also:**

 - [MS-DOS Player for Win32-x64](http://takeda-toshiya.my.coocan.jp/msdos/)

## ■ UCSD P-System
MS-DOS で動作する UCSD P-System が pascal.hansotten.com から DL 可能です。

 - [UCSD P-SYSTEM (Pascal for small machines)](http://pascal.hansotten.com/ucsd-p-system/)
 - [UCSD p-System IV 2.2 への直接リンク](http://pascal.hansotten.com/uploads/ucsd/files/psys22.zip)
 - [UCSD Pascal を触るためだけの UCSD P-System 操作ガイド (Qiita)](https://qiita.com/ht_deko/items/50c0cb0fd3cbafc1f8e1)

### ・DOSBox(-X) で実行
UCSD P-System は DOSBox(-X) で動作させる事ができます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/828e6619-bb55-cc25-26b2-7becd68a0bbb.png)

 **See also:**

 - [DOSBox](https://www.dosbox.com/)
 - [DOSBox-X (GitHub)](https://github.com/joncampbell123/dosbox-x/releases)

### ・MS-DOS Player で実行
UCSD P-System は **MS-DOS Player** で動作させる事ができます。

```
msdos PSYSTEM.COM PSYSTEM.VOL PUTIL.VOL
```

#### 64bit Windows で動作する EXE
**MS-DOS Player** で PSYSTEM64.EXE を作る事もできます。

```
msdos -cPSYSTEM64.EXE -x PSYSTEM.COM
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c9b3216b-b061-6e40-a5ca-fb5bc5fb0e72.png)
UCSD P-System での実行ファイルは P コード形式なので、ホスト OS が何であっても動作します。

 **See also:**

 - [MS-DOS Player for Win32-x64](http://takeda-toshiya.my.coocan.jp/msdos/)

## ■ Delphi 1
~~今となっては Delphi 1 の入手は難しいのですが、幾つか手段があります。~~

 - ~~雑誌付属の体験版 (EEP = Early Experience Program) を入手する。~~
 - Delphi 2 ～ Delphi 4 の CD-ROM 内に格納されている Delphi 1 を使う。

**追記: 2020/02/15**
Delphi 1.0 Client/Server (英語版) がアンティークソフトウェアとして公開されました。

 - [Historic Delphi 1 Client/Server Install ISO (Embarcadero)](https://cc.embarcadero.com/item/30911)
 - [Embarcadero が公開しているアンティークソフト一覧 (Qiita)](https://qiita.com/ht_deko/items/ae7605c6b1f426ae234a)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/81d30b7c-37d0-a81c-6d95-058bc3cdcc46.png)
有償版 (Professional 版以上) を購入すると入手できる **Delphi 7** だと IDE がほぼ同じです。また、一部を除けば最新版の Delphi Community Edition (無償版) でも通用すると思います。

なお、Delphi 1 は Windows XP (32bit) 以前のバージョンにインストールする事ができます。Vista 以降の Windows では未確認です。

**See also:**

 - [Delphi 1.0 Client/Server が無償公開されたので Windows 7 の XP Mode にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/e02a7b42ef65baa5d175)
 - [Delphi 1.0 Client/Server が無償公開されたので Windows 10 (64bit) / 11 にインストールしてみる (Qiita)](https://qiita.com/ht_deko/items/a65e0950b906d28ccb5f)
 - ["常に新しい、不変のDelphi - Delphi 2009以降の新機能" のソースコードが何だったのかを検証してみる (Qiita)](https://qiita.com/ht_deko/items/ff958b9866cf5252cd13)
 - [Delphi 旧バージョン情報 (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/previous-versions)

## ■ Delphi Community Edition
Delphi 2 以降に関するものは最新版の Delphi でも殆ど通用すると思います。無償版である Community Edition は Embarcadero のサイトから DL できます。

 - [Delphi Community Edition (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/starter)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a455adc8-7ee1-ef38-724e-9bbc96497e9d.png)
個人学習にはこれでいいかと思いますが、同一サブネットで 5 台までしか同時利用できないという制限があるため、教室などでの利用には向いていません。アカデミック版を含め、[教育用途の場合にはエンバカデロさんに相談](https://learndelphi.org/ja/licenses/)してみてください。

**See also:**

 - [Delphi Community Edition (Qiita: @pik)](https://qiita.com/pik/items/1db2b6d2f9972d953df4)
 - [Delphi Community Edition と過去の無償版との比較 (Qiita)](https://qiita.com/ht_deko/items/3c4c83157fe072532912)
 - [Delphi 10.3 Community Edition をインストール (Qiita: @CYonezawa)](https://qiita.com/CYonezawa/items/f0a14357b77c5ab19ca6)
 - [Community Edition Q&A (Embarcadero)](https://www.embarcadero.com/jp/products/delphi/starter/faq)
 - [Object Pascal Handbook (Embarcadero)](http://forms.embarcadero.com/DownloadMarcoCantueBook)
 - [Delphi で始めるビジュアルプログラミング (Embarcadero)](https://www.embarcadero.com/images/jp/whitepaper/delphi-visual-programming-wp-sydney.pdf)
 - [C++Builderで始めるビジュアルプログラミング (Embarcadero)](https://www.embarcadero.com/images/jp/whitepaper/cbuilder-visual-programming-wp-sydney.pdf)

## ■ ideone
ブラウザで各種言語が試せるサイトです。FreePascal (FPC) / Lazarus や GNU Pascal (GPC) をインストールせずに試すことができます。簡単なものならこれでいいかもしれません。

 - [Ideone (ideone.com)](https://ideone.com/)
 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/14092e4d-447d-80e7-334d-d14211a5e9a1.png)
右下のボタンで言語を切り替えられます。Pascal (fpc) または Pascal (gpc) を選んでください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/72ba4e17-8def-7ba6-c9df-e3bca500cd4d.png)
GPC はほぼ標準 Pascal です。FPC は Turbo Pascal に近いと思います (コンパイラモードを切り替え可能)。いずれも拡張が施されているので、純粋な標準 Pascal として使うのは難しいかもしれません。

**See also:**

 - [Lazarus / FPC (lazarus-ide.org)](https://www.lazarus-ide.org/)
 - [Compiler Mode (freepascal.org)](https://wiki.freepascal.org/Compiler_Mode)
 - [GNU Pascal (gnu-pascal.de)](http://www.gnu-pascal.de/gpc/h-index.html)

# おわりに
Pascal を気軽に試せるのはいい事ですね。

**MS-DOS Player** での動作についてですが、表示が崩れる事があったらコマンドプロンプトのフォントを欧文フォントに変更してみてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b4031414-6be7-9411-018f-0bd4355b1053.png)
折角なので、どの処理系でも動作するであろう (ちょっと凝った) FizzBuzz を貼っておきますね。

```FizzBuzz.pas
program FizzBuzz(Output);
{$APPTYPE CONSOLE}
const
  NUM1 = 3;
  NUM2 = 5;
  LOOP = 100;
var
  i, n: Integer;
  function GCD(X, Y: Integer): Integer;
  begin
    if Y = 0 then
      GCD := X
    else
      GCD := GCD(Y, X mod Y);
  end; { GCD }
  function LCM(X, Y: Integer): Integer;
  begin
    LCM := Y * (X div GCD(X, Y));
  end; { LCM }
begin
  n := LCM(NUM1, NUM2);
  for i:=1 to LOOP do
  begin
    if (i mod n) = 0 then
      writeln('FizzBuzz')
    else if (i mod NUM1) = 0 then
      writeln('Fizz')
    else if (i mod NUM2) = 0 then
      writeln('Buzz')
    else
      writeln(i);
  end;
end.
```

Delphi で試す場合にはファイルの拡張子を `*.dpr` にしてください。Delphi 以外では `{$APPTYPE CONSOLE}` は不要です。