Turbo Pascal 3.0 の使い方

# はじめに
Turbo Pascal 3.0 の使い方を調べてみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/3279c8a6-a63f-8ab4-b7f7-2d480cf01351.png)

:::note info
Turbo Pascal 1.0～3.0 までは基本的に同じ操作方法です。
:::

# 使い方
`TINST.COM` を実行すると環境設定プログラムが起動します。`TURBO.COM` を実行すると Turbo Pascal が起動します。

Turbo Pascal 3.0 は、基本的に `TURBO.*` と `TINST.*` というファイルだけ揃えれば動作します。

| ファイル名 | 説明 |
|:---|:---|
| TURBO.COM | Turbo Pascal 本体 |
| TURBO.MSG | エラーメッセージファイル |
| TURBO.OVR | オーバーレイファイル (CP/M-80 版のみ)|
| TINST.COM | 環境設定プログラム |
| TINST.MSG | 環境設定プログラム用テキストファイル |
| TINST.DTA | 環境設定用データファイル |

Turbo Pascal 3.0 には、大きく分けて 4 種類ありますが、IDE の使い方にほぼ差異はありません。OS 固有の機能については、それと判るようなコメントを入れておきます。

|  | Z80 | Intel 8086 |
|:---|:---|:---|
| CP/M | CP/M-80 | CP/M-86 |
| PC DOS | (N/A)  | PC DOS (IBM PC) |
| MS-DOS | (N/A)  | MS-DOS (非 IBM PC) |

:::note
PC DOS と MS-DOS に固有機能以外の差異はないので、PC DOS と MS-DOS をひっくるめて DOS と呼んでいる箇所があります。
:::

最終マイナーバージョンは次の通りだと思われます。

|  | バージョン | リリース年 |
|:---|:---:|:---:|
| CP/M-80 | 3.01A | 1985 |
| CP/M-86 | 3.01A | 1985 |
| MS-DOS | 3.02A | 1986 |
| PC DOS | 3.02A | 1986 |

:::note
パッケージによっては、その機種用のグラフィックライブラリ等が付属している事があります。
:::

## TINST.COM
Turbo Pascal の環境設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/c6ebc857-bb4f-26ce-be49-48c5a8dfb1b9.png)

:::note warn
Embarcadero が配布しているアーカイブ中のファイルは何故か読み取り専用の属性が付いているので `attrib -R *.*` で属性を解除する必要があります。これを忘れていると `TINST.COM` を実行した時にエラーになります。
:::


### ■ Screen type
画面の設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/6a649cf4-621d-bc2d-2404-4e6d5576d81f.png)

詳細については別記事[「Turbo Pascal 3.0 のスクリーン設定」](https://qiita.com/items/0d8976801c02ec685bd6)にまとめてあります。

### ■ Command installation 

キーボードショートカットの設定を行います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d0c4bed4-87c2-be33-0369-f62e81229122.png)

詳細については別記事[「Turbo Pascal 3.0 のキーボードショートカット」](https://qiita.com/ht_deko/items/86ddf71d0c509125b7ba)にまとめてあります。

### ■ Msg file path (DOS 版のみ)
メッセージファイルのパスを指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e6fc8c3b-a0a5-10cb-fe3a-1bc6e3b27735.png)

## TURBO.COM

### エラーメッセージファイルの読み込み

Turbo Pascal が起動するとエラーメッセージファイルを読み込むか聞かれます。`N` を選ぶと使用可能なメモリがわずかばかり増えますが [^1]、普通は `Y` でいいと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/6d43da52-07a7-2b79-2710-cfe2a1658969.png)

### メインメニュー
メインメニューです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/053d4500-06c1-5637-5db9-64ef5d751816.png)

#### ■ Logged drive:
メインメニューで`〔L〕`を押すとカレントドライブを切り替えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ba745a0f-f117-3227-8eaf-e4677d0a766d.png)

#### ■ Active directory: (DOS 版のみ)
メインメニューで`〔A〕`を押すとカレントディレクトリを切り替えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/400f9cca-abb6-9aa2-cdc1-5031ea142545.png)


#### ■ Work file
メインメニューで`〔W〕`を押すとワークファイルを選べます。拡張子 *.PAS の場合、拡張子は省略できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8e052621-61cd-2cb6-d10d-c790856488ec.png)
ワークファイルは編集対象のファイルです。

#### ■ Main file
メインメニューで`〔M〕`を押すとメインファイルを選べます。拡張子 *.PAS の場合、拡張子は省略できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/f3414ac7-4e97-8be8-1b54-7edb0b03ddad.png)

メインファイルはコンパイル対象のファイルです。プロジェクトファイルに相当するファイルを指定します。単一のソースファイルしか使わないのであれば、メインファイルを指定する必要はありません。

複数のソースファイルがある場合にメインとなるファイルをここに指定し、ワークファイルを切り替えながら編集する感じです。

#### ■ Edit
メインメニューで`〔E〕`を押すとワークファイルを編集します。ワークファイルを指定していない場合には、ワークファイルを選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/8fa7840f-c0e7-0950-21c4-173da48773bc.png)

エディタでの操作方法や、言語については別記事にまとめてあります。エディタに関しては、終了コマンド`〔Ctrl〕+〔K〕〔D〕`だけ覚えておけばなんとかなるでしょう。

 - キーボードショートカットの詳細については「[Turbo Pascal 3.0 のキーボードショートカット](https://qiita.com/ht_deko/items/86ddf71d0c509125b7ba)」という別記事があります。
 - Turbo Pascal の文法については Delphi 向けではありますが「[標準 Pascal 範囲内での Delphi 入門](https://qiita.com/ht_deko/items/e2796788c65c2cda1de5)」が役に立つと思います。
 - 『Turbo Pascal ver 3.0』固有のルーチンや機能については「[Turbo Pascal 3.0 の Pascal](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b)」という別記事があります。

#### ■ Compile
メインメニューで`〔C〕`を押すと、メインファイルが指定してあればメインファイルを、ワークファイルしか指定してなければワークファイルをコンパイルします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/255c7508-2ef9-f595-dbb8-42ab4d6821c6.png)
コンパイルした実行ファイルの形式は `compiler Options` で選べます。


#### ■ Run
メインメニューで`〔R〕`を押すと、プログラムを実行します。ファイルが指定されていない場合にはワークファイルを選べます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7a144e60-40e8-16e4-68c7-cbf171a1d951.png)

#### ■ Save
メインメニューで`〔S〕`を押すと、ワークファイルを保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/1f89e71c-bab0-60ad-d04f-808fa06ed631.png)

#### ■ eXecute
メインメニューで`〔X〕`を押すと、任意の実行形式ファイルを実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/30f310b3-270e-5c12-ded5-91c316d87313.png)
`Compile` で生成した *.com ファイルも実行できます。

#### ■ Dir
メインメニューで`〔D〕`を押すと、カレントドライブのファイルを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/2e8a3ad6-0e10-4e3b-a0fe-358870fad69d.png)
表示するファイルにマスクをかけることもできます。

#### ■ Quit
メインメニューで`〔Q〕`を押すと、Turbo Pascal を終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e83bb963-e686-1b97-e69b-5b580ea8b786.png)

#### ■ compiler Options
メインメニューで`〔O〕`を押すと、コンパイラオプションを表示します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/1449d92e-2eb9-cd18-1050-8a3d31c427bc.png)

##### ▶ compile
次の 3 つのコンパイラオプションは出力を決定するもので、互いに排他となります。

| オプション | 説明 |
|:---|:---|
| 〔M〕emory  | 出力先をメモリに指定します (デフォルト)。 |
| 〔C〕om-file  | 出力先をファイルに指定します。*.COM ファイルを生成します (CP/M-80 / DOS)。 |
| 〔C〕md-file  | 出力先をファイルに指定します。*.CMD ファイルを生成します (CP/M-86)。 |
| c〔H〕n-file  | 出力先をファイルに指定します。*.CHN ファイルを生成します。  |

 - デフォルトの `Memory` はメモリ上でそのままコンパイル＆実行します。実行形式ファイルは作られません。
 - `Com-file` にすると実行形式ファイル (\*.COM) が作られます (CP/M-80 / DOS)。
 - `Cmd-file` にすると実行形式ファイル (\*.CMD) が作られます (CP/M-86)。
 - メモリが足りなくて `Memory` では実行できない場合でも、一旦実行形式ファイルを作れば実行できる事があります。
 - \*.CHN ファイルは `Chain()` で使われるファイル形式です。\*.CHN を生成します。

メインメニューから`〔O〕〔C〕〔Q〕`とやって実行ファイルを吐く設定にして戻るってのをよくやります。

:::note warn
Turbo Pascal 3.0 では DOS 版であっても COM 形式ファイルしか出力できません。
:::

**See also:**

 - [Execute() - Turbo Pascal 3.0 の Pascal (Qiita)](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-execute)
 - [Chain() - Turbo Pascal 3.0 の Pascal (Qiita)](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-chain)


##### ▶ [Memory]: 追加設定 (DOS 版 / CP/M-86 版)
**・command line Parameter:**
コンパイラオプションで`〔P〕`を押すと、実行時引数を設定する事ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/fa9a5eb3-50a4-b809-95d3-e95d0a4b33fb.png)

:::note warn
オリジナルのマニュアルには CP/M-80 版でも実行時引数を設定できるような事を書いてありますが、CP/M-80 版では設定できません。
:::

##### ▶ [Com-file] / [cHn-file]: 追加設定 (CP/M-80 版)
**・Start address:**
COM / CHN ファイル出力時に`〔S〕`を押すと、コードの最初のアドレスを設定できます。

**・End address:**
COM / CHN ファイル出力時に`〔E〕`を押すと、プログラムが利用可能な最高位のアドレスを設定できます。

| Mem | Start<br>(Min) | End | End<br>(Max) |
|:---|:---:|:---:|:---:|
| 64K | 20E3 | **F942** | FC06 |
| MSX-DOS Player | 20E3 | **EC42** | EF06 |
| MSX0 Stack<br>MSX-DOS (57.25K) | 20E3 | **DE42** | E106 |
| MSX0 Stack<br>MSX-DOS (漢字) | 20E3 | **DA42** | DD06 |
| 56K | 20E3 | **D942** | DC06 |
| MSX0 Stack<br>Nextor (54.75K) | 20E3 | **D442** | D706 |
| MSX0 Stack<br>MSX-DOS2 (54.5K) | 20E3 | **D342** | D606 |
| MSX0 Stack<br>MSX-DOS2 (漢字) | 20E3 | **CF42** | D206 |
| 48K | 20E3 | **B942** | BC06 |
| PC-G850V<br>EborsyEEP (43K) | 20E3 | **A542** | A806 |	   
| 40K | 20E3 | **9942** | 9C06 |
| 32K | 20E3 | **7942** | 7C06 |

:::note warn
実行形式ファイル (*.COM) をメモリ搭載量の異なる機種で動作させるためには、その機種の TPA に合わせてエンドアドレスを変更する必要があります。
:::

##### ▶ [Cmd-file] / [cHn-file]: 追加設定 (CP/M-86 版)
**・minimum cOde segment size:**
CMD / CHN ファイル出力時に`〔O〕`を押すと、最低限必要なコードセグメントのサイズを設定する事ができます。

**・minimum Data segment size:**
CMD / CHN ファイル出力時に`〔D〕`を押すと、最低限必要なデータセグメントのサイズを設定する事ができます。

**・mInimum free dynamic memory:**
CMD / CHN ファイル出力時に`〔I〕`を押すと、最低限必要な動的メモリ領域を設定する事ができます。

**・mAximum free dynamic memory:**
CMD / CHN ファイル出力時に`〔A〕`を押すと、動的メモリ領域の上限を設定する事ができます。

##### ▶ [Com-file] / [cHn-file]: 追加設定 (DOS 版)
**・minimum cOde segment size:**
COM / CHN ファイル出力時に`〔O〕`を押すと、最低限必要なコードセグメントのサイズを設定する事ができます。

**・minimum Data segment size:**
COM / CHN ファイル出力時に`〔D〕`を押すと、最低限必要なデータセグメントのサイズを設定する事ができます。

**・mInimum free dynamic memory:**
COM / CHN ファイル出力時に`〔I〕`を押すと、最低限必要な動的メモリ領域を設定する事ができます。

**・mAximum free dynamic memory:**
COM / CHN ファイル出力時に`〔A〕`を押すと、動的メモリ領域の上限を設定する事ができます。


##### ▶ Find run-time error
コンパイラオプションで`〔F〕`を押し、実行時エラーが出た場合に表示される PC の値を入力すると、該当するソースコードの位置へジャンプする事ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7522aa52-f658-e8d7-1efd-c9bc43152082.png)

##### ▶ Quit
コンパイラオプションは`〔Q〕`を押して抜けられます。メインメニューへ戻ります。

#### ■ (Enter)
メインメニューで何もせずに`〔Enter〕`を押下すると、メインメニューを再描画します。

## Hello,world.

とりあえず `Hello,world.` を表示するプログラムを作ってみましょう。

```
A:>TURBO
```

Turbo Pascal を起動します。

:::note
機種によっては事前に画面モードを切り替えるコマンドを実行する必要があるかもしれません。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/3a1a4f6a-3d3c-34a7-cfbd-b3ceb314ded5.png)

`Include error messages (Y/N)? ` はとりあえず `Y` を押しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a5b5197a-bd35-7bc8-7ed8-005867fed071.png)

メニューで `〔W〕` を押してワークファイルを指定します。ファイル名は `hello` とします。拡張子を省略しているので `hello.pas` がワークファイルとなります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/64550bb5-8dc7-5580-3e7c-a4ad5df04004.png)

`〔Enter〕` を一度押すとメニューが更新され、`Work file:` の所が更新されているのが確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/b979e012-fce3-7bc0-0354-252880186db5.png)

メニューで `〔E〕` を押してワークファイルを編集します。

```pascal:hello.pas
program Hello;
begin
  Writeln('Hello,world.');
end.
```

 `〔Ctrl〕+〔K〕〔D〕` でエディタを終了します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d6a2fbe4-40c6-3d16-bf61-fd8aace65256.png)

メニューで `〔S〕` を押してワークファイルを保存します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ed6985d2-cbdc-76e2-f30d-428bb6dbd1f8.png)

メニューで `〔C〕` を押してワークファイルをコンパイルします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/79bb04e2-e025-432e-608c-5fbbb4b079c4.png)

メニューで `〔R〕` を押してプログラムを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/dfca21ef-280d-c919-3834-93a274678d9f.png)

次に、メニューで `〔O〕〔C〕〔Q〕` と順に押し、実行形式ファイルを生成するように指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/5724d3fc-db89-6bda-72c1-622090fdd157.png)

メニューで `〔C〕` を押してワークファイルをコンパイルすると、実行形式ファイル `hello.com` が生成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/7a5ada68-192b-9149-6262-0e36531e1c51.png)

メニューで `〔R〕` を押して実行形式ファイルを実行する事も、メニューで `〔Q〕` を押して DOS のプロンプトに戻ってから `hello.com` を実行する事もできます。

## 異なる仕様の Turbo Pascal (DOS 版 / CP/M-86 版)
DOS 版および CP/M-86 版には、異なる仕様の Turbo Pascal が 2 種類用意されています。

### TURBO-87
数値演算コプロセッサ Intel 8087 が有効な環境では `TURBO.COM` (CP/M-86 版は `TURBO.CMD`) の代わりに `TURBO-87.COM` (CP/M-86 版は `TURBO-87.CMD`) を実行する事ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/09b6bf96-38c1-c927-6879-902a2023cebf.png)
Real 型に対して 8087 の演算が行われます。80486DX 以降の CPU では数値演算コプロセッサが内蔵されているため、こちらを常用していいかと思います。

### TURBO-BCD
`TURBOBCD.COM` (CP/M-86 版は `TURBOBCD.CMD`)  は、BCD 演算をサポートしているバージョンです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d665533d-32b0-9291-65f7-d1e75e292ec1.png)
Real 型に対して BCD 演算が使われるため、精度が向上します。有効範囲は 1E-63 ～ 1E+63 です。 

:::note warn
`TURBOBCD.COM` (CP/M-86 版は `TURBOBCD.CMD`) では次の実数型を返す関数及び定数は利用できません。

ArcTan(), Cos(), Exp(), Ln(), Pi, Sin(), Sqrt()
:::

#### Form() 関数
TURBO-BCD 版には `Form()` という関数が追加されています。これは書式文字列からフォーマットされた文字列を作るための関数です。

```pascal
function Form(St, var1, var2, ...varN): (Type of String);
```

次のような使い方になります。

```pascal
var
  s: string[20];
begin  
  s := Form('Total: $#,###.##', 1234.56);
  Writeln(s);
end;  
```

書式文字列に使える文字は次の通りです。

**・数値の場合**

| 記号 | 説明 |
|:---:|:---|
| # | 桁数を指定します。指定幅未満の場合、空白で埋められ、指定幅を超えると * で埋められます。負数の場合には - が出力されます。|
| @ | 指定幅未満の場合、空白で埋められます。その他は # と同じです。 |
| * | 指定幅未満の場合、* で埋められます。その他は # と同じです。 |
| $ | 先頭に $ が出力されます。 |
| - | 指定位置に - が出力されます。  |
| + | 指定位置に + が出力されます。  |
| , | 整数部を , で区切ります |
| . | 整数部と小数部を . で区切ります。  |

**・文字列の場合**

| 記号 | 説明 |
|:---:|:---|
| # | 文字列は左詰めで出力されます。 |
| @ | 先頭から指定すると文字列は右詰めで出力されます。 |


:::note info
`TINST.COM` によるカスタマイズの対象ファイルは `TURBO.COM` なので、事前にリネームが必要となります。常用するのであれば `TURBO-87.COM` や `TURBOBCD.COM` を `TURBO.COM` にリネームしておくとよいでしょう (CP/M-86 版は `*.CMD`)。
:::

## 8bit 文字 (CP/M 80 版)
CP/M 80 版の Turbo Pascal は 8bit 文字が通りません。

このため、ソースコードにカナ等を入力できても保存して開き直すとソースコードが破損する事があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/e908e386-271a-1ccc-cf98-65cb2fd15572.png)
この問題を回避するには `TURBO.COM` にパッチを当てます。

任意のバイナリエディタで `7F FE` を検索し、`FF FE` に書き換えれば 8bit 文字が通るようになります。これは Turbo Pascal 1.0 / 2.0 も同様です。

:::note
・本当は `E6 7F` を検索すべきなのですが、それだと該当箇所が多くなってしまうため `7F FE` を検索しています。検索にヒットした箇所は `E6 7F FE` という並びになっていると思います。
・`E6 7F` は「AND 7F (ANI 7F)」なので、これを「AND FF (ANI FF)」にして 7 bit のマスクを外しています。
:::

:::note
似たような問題で、漢字が使えるバージョンの Turbo Pascal 3.0 において、
・コメントに 2 バイト目が `}` (0x7D) になっている漢字が含まれると正しくコンパイルできない
・文字列リテラルに 2 バイト目が `‘` (0x60) になっている漢字が含まれると正しくコンパイルできない
というものがあります。
:::

## 書籍

製品のマニュアルを探すのがベストでしょう。

:::note
ver4.0 以降では CP/M 対応がなくなったので、CP/M 版の情報を知るのに ver4.0 以降のマニュアルでは情報不足かもしれません。
:::

### 英語版製品マニュアル

英語版の **『Turbo Pascal version 3.0 Reference Manual』** にも 2 種類あるようで、CP/M と DOS を扱ったものと、CP/M-80 のみを扱ったもの (8bit コンピュータ向けに再構成されているもの。Alpha Systems Corporation 製) があります。

有難い事に、英語版のマニュアルを公開しているサイトと、CP/M-80 部分に特化したマニュアルを公開しているサイトがあります。

 - [Turbo Pascal version 3.0 Reference Manual (hansotten.file-hunter.com)](https://hansotten.file-hunter.com/uploads/files/Turbo_Pascal_Version_3.0_Reference_Manual_1986.pdf)
 - [The Turbo Pascal Reference Manual project](https://electrickery.hosting.philpem.me.uk/comp/tp30/)

:::note warn
『Turbo Pascal version 3.0 Reference Manual』には誤りと記載漏れがあり、各 OS 用の誤りと記載漏れはインストールディスク内の `READ.ME` (または `README`) に書かれています。すべての誤りと記載漏れについて知るには CP/M-80, CP/M-86, DOS 用のインストールディスクを確認する必要があります。
:::

### 日本語製品マニュアル

#### ・マイクロソフトウエアアソシエイツ (MSA) 版
マイクロソフトウエアアソシエイツ (MSA) 版の『Turbo Pascal』のマニュアルです。カバーはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/d2e48312-5eac-4598-8e59-5d1d4b5bd271.png)

『Turbo Pascal ver.3.0』に添付されていたとしても、これ自体は『Turbo Pascal ver.1.0』の内容しか網羅していません。

:::note
マニュアルには機種固有の資料が挟み込まれている事があります。例えば PC-9800 (MS-DOS) 版には「TURBO PASCAL グラフィック機能について」という資料が付属していました。
:::

#### 『Turbo Pascal ver.3 プログラミング・マニュアルの追加』
どうやら『Turbo Pascal 3.0』には『Turbo Pascal プログラミング・マニュアル』と、ver3.0 差分の『Turbo Pascal ver.3 プログラミング・マニュアルの追加』という冊子が添付されていたようです。

:::note
オリジナルの英語版『Turbo Pascal ver2.0』マニュアルがこのような構成を採っており、巻末に

『Turbo Pascal
Version 2.0 and 8087 Supplement 
Addendum to Reference Manual』

という差分マニュアルが追加されています。
:::

#### 書籍版

書籍 **『Turbo Pascal プログラミング・マニュアル』**(定価: 1,600円) は、『Turbo Pascal』製品付属のマニュアルと同等です (本文に差異はないと思われます)。カバーにはイラストが描かれていますが、カバーを外した表紙にイラストはありません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/38d25937-23c3-62b0-9c43-3da5712fd62c.png)

:::note
製品付属マニュアルと書籍版の裸本は右上の `MSA SOFT BOOKS` のロゴの有無で判別できます。また、製品付属マニュアルは裏表紙に何も書かれていません。
:::

 - [Turbo Pascal プログラミング・マニュアル (Amazon)](https://www.amazon.co.jp/dp/4880631205/)
 - [Turbo Pascal プログラミング・マニュアル (国立国会図書館デジタルコレクション)](https://dl.ndl.go.jp/pid/12632227)

ただ、こちらの書籍は 1984/6/25 発行で、時期的には ver2.0 リリース後なのですが、ver1.0 の内容しか書かれていません。

 - ver1.0 から ver2.0 で追加された主な機能は Dispose() / FreeMem() と[オーバーレイ](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-%E3%82%AA%E3%83%BC%E3%83%90%E3%83%BC%E3%83%AC%E3%82%A4%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB)です。 [8087 対応版](#異なる仕様の-turbo-pascal) (`TURBO-87.COM`) も追加されています (8086)
 - ver2.0 から ver3.0 で追加された主な機能はコンパイラ性能の向上と[ファイル処理ルーチン](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%93%8D%E4%BD%9C%E3%83%AB%E3%83%BC%E3%83%81%E3%83%B3)の拡充です。[BCD 対応版](#異なる仕様の-turbo-pascal)  (`TURBOBCD.COM`)  が追加されています (8086)

#### ・サザンパシフィック版
サザンパシフィック版『Turbo Pascal ver3.0』のマニュアルは英語版の『Turbo Pascal version 3.0 Reference Manual』を翻訳したもので、ver3.0 固有の機能についても記述があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/ae4407ea-4cdd-45a3-9503-1be745b34f1a.png)

:::note
オリジナルの英語版マニュアルや MSA のマニュアルにある間違いはあらかた訂正されていますが、誤字は多いようです。
:::

### マニュアルの代替

いくつかの書籍はマニュアルの代替品として使えます。

#### ・『Turbo Pascal ハンディ・マニュアル』

MS-DOS、特に PC-98 版用であれば **『Turbo Pascal ハンディ・マニュアル』** があれば、大抵の事は理解できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/2b85280d-d855-59cc-318f-21eca7021606.png)

 - [Turbo Pascal ハンディ・マニュアル (Amazon)](https://www.amazon.co.jp/dp/4880631205/)

残念ながら [mem[]](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-%E9%85%8D%E5%88%97-mem) や [port[]](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b#-%E9%85%8D%E5%88%97-port) など、ハードウエア寄りの機能については説明がありません。


#### ・『Turbo Pascal トレーニングマニュアル』

『Turbo Pascal トレーニングマニュアル』もマニュアルの代わりに使えると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21785/a5705c17-41fa-5eec-1b51-08047b1d160f.png)

:::note
Turbo Pascal の各バージョン毎に『Turbo Pascal トレーニングマニュアル』があります。ver3.0 対応のものはこの表紙のものです。
:::

**Seea also:**

 - [PUG BOOKS の Turbo Pascal 関連書籍を読んでみる (Qiita)](https://qiita.com/ht_deko/items/e110443098055327ca61)
 - [イロイロな出版社から出ている Turbo Pascal 関連書籍を読んでみる (Qiita)](https://qiita.com/ht_deko/items/29d9167bf288f303eb93)

### 公式のサンプルプログラム集
公式からサンプルプログラム集がリリースされていました。『Turbo Tutor』を除き、基本的には DOS 用のサンプルプログラム集となっています。

| 書籍 | 説明 |
|:---|:---|
| Turbo Tutor | チュートリアル集。チュートリアルと言いながら、マニュアルに書かれていない重要な事がサラっと書かれている。|
| Turbo Pascal Database Toolbox | 旧 Turbo Toolbox。Turbo Access (B+tree データベース)、Turbo Sort (クイックソート)、GINST (TINST のような汎用インストーラ) が含まれる。 |
| Turbo Pascal Editor Toolbox | テキストエディタの作り方。 |
| Turbo Pascal Graphic Toolbox | グラフィックスルーチン。最終バージョンは恐らく 1.07A。 |
| Turbo Pascal Numerical Methods Toolbox | 一次方程式、補間、数値微分、数値積分、行列、固有値と固有ベクトル、初期値問題と境界値問題、最小二乗近似、高速フーリエ変換ルーチンなど。DOS 用。`TURBO-87.COM` の使用が前提となっている。  |
| Turbo GameWorks  | チェスとブリッジと五目並べ。 |

:::note
『Turbo Toolbox』の機能の多くは Turbo Pascal 5.0 以降の製品に取り込まれています。
:::

# おわりに
何も難しいことはないですね。

アンティークソフトとして PC DOS 版も公開されているので、そちらで練習 (？) してみるのもいいかもしれませんね。

**See also:**

 - [Turbo Pascal v3.01A (CP/M-80 版: TP_301A.ZIP) (retroarchive.org)](http://www.retroarchive.org/cpm/lang/lang.htm)
 - [Turbo Pascal v3.01A (CP/M-86 版: Trbpas86.zip) (retroarchive.org)](http://www.retroarchive.org/cpm/lang/lang.htm)
 - [Turbo Pascal v3.01A (MS-DOS 版: Turbo Pascal 16-Bit 3.0.zip) (archive.org)](https://archive.org/details/victor-turbo-pascal-3.0)
 - [Turbo Pascal v3.02A (PC DOS 版: tp302.zip) (embarcadero.com)](https://cc.embarcadero.com/Item/26016)
 - [Turbo Pascal v3.02A (PC DOS 版: tp302.zip) (borland.com: Internet Archive)](https://web.archive.org/web/20040603220649/http://community.borland.com/article/0,1410,20792,00.html
)
 - [Embarcadero が公開しているアンティークソフト一覧 (Qiita)](https://qiita.com/ht_deko/items/ae7605c6b1f426ae234a)
 - [Pascal の勉強に使えそうな Pascal 処理系 (Qiita)](https://qiita.com/ht_deko/items/6376997a6d74e77c89e3)

## 索引

 - **Turbo Pascal 3.0.x の使い方**
   - [Turbo Pascal 3.0.x の Pascal](https://qiita.com/ht_deko/items/f9f394dc2342afd2ea7b)
   - [Turbo Pascal 3.0.x のスクリーン設定](https://qiita.com/items/0d8976801c02ec685bd6)
   - [Turbo Pascal 3.0.x のキーボードショートカット](https://qiita.com/ht_deko/items/86ddf71d0c509125b7ba)


[^1]: 1.5KB 程節約できます。CP/M-80 版では "わずか" ではないかもしれませんね。