はじめに
『Turbo Pascal (MSX) 』関連の情報を集めてみました。
Turbo Pascal
『Turbo Pascal』は Borland 社が発売した製品です。誇張抜きに 爆速の Pascal コンパイラ です。
ver3.0 までは CP/M-80 版、CP/M-86 版、MS-DOS 版、PC DOS 版がありました。ver4.0 以降は MS-DOS / PC DOS 版となりました 1。
『Turbo Pascal for Windows』を経て、現在の『Delphi』までその流れは続いています。
Turbo Pascal (MSX)
『Turbo Pascal』 の MSX 版が Borland 社から発売される事はありませんでしたが、書籍『Turbo Pascal Compleet』と一緒になったものが Philips 社から発売されていたようです (日本未発売)。
会社 | 国 | 型番 | 製品 |
---|---|---|---|
Philips | 蘭 | NMS 8901 | Turbo Pascal |
Philips Italy | 伊 | VG 8105 | Turbo Pascal |
- Turbo Pascal (Generation MSX)
- TURBO PASCAL ON CP/M, MSX-DOS AND MS-DOS (Pascal for small machines)
- Pascal and MSX - MSX Info Pages (file-hunter.com)
MSX で動作する Turbo Pascal
MSX-DOS がほぼ CP/M-80 なので、CP/M-80 版の『Turbo Pascal』が MSX 上で動作します。MSX 版は CP/M-80 用 ver3.0 をカスタマイズしたもののようです。
CP/M-80 版 Turbo Pascal の最終バージョンは 3.01A です。
『Turbo Pascal』には インライン機械語 (≠ インラインアセンブラ) があるので、MSX 固有の機能を利用可能です。
Turbo Pascal のインストール
MSX-DOS 版はそのままディスクから起動するだけです。
CP/M-80 版『Turbo Pascal 3.0』を MSX で使うのなら、MSX-DOS が起動するディスクに以下のファイルをコピーします。
ファイル名 | 説明 |
---|---|
TURBO.COM | Turbo Pascal 本体 |
TURBO.MSG | エラーメッセージファイル |
TURBO.OVR | オーバーレイファイル |
TINST.COM | 環境設定プログラム |
TINST.MSG | 環境設定プログラム用テキストファイル |
TINST.DTA | 環境設定用データファイル |
起動は 80 文字モードで TURBO.COM
を実行するだけです。
A> MODE 80
A> TURBO
PC DOS 版の『Turbo Pascal 3.0』は Embarcadero 社がアンティークソフトウェアとして公開していますが、CP/M-80 版や MSX 版は公開されていません。
Web 上にあるアーカイブの使用は自己責任となります。この件に関して Embarcadero 社に問い合わせたりする事は控えてください。
- MSX-2 version of Turbo Pascal 3 (MSX-DOS 版: tpmsx2.zip) (Pascal for small machines)
- Turbo Pascal v3.01A (CP/M-80 版: TP_301A.ZIP) (retroarchive.org)
スクリーン設定 (TINST)
スクリーン設定を TINST.COM
で行う事ができます。
A> MODE 80
A> TINST
別記事に詳細がありますが、80 文字 (MODE 80
) で動作させるなら、Teleray series 10
を選べばいいです。
項目 | 説明 |
---|---|
25) Teleray series 10 | VT-52 互換 (ハイライトなし) |
MSX は 3.58MHz なので、クロックはとりあえず 4
に設定しておきます。
項目 | 設定値 |
---|---|
Operating frequency of your microprocessor in MHz (for delays): | 4 |
Turbo Pascal は MSX1 でも動作するのですが、80 文字モードにできないため MODE 40
用のスクリーン設定を作成する必要があります。40 文字モードでは TINST.COM
の設定画面が見にくいので、一旦 MSX2 等の 80 文字モードや CP/M-80 エミュレータで MODE 40
用のスクリーン設定を作成する事をオススメします。
コマンド設定 (TINST)
コマンド設定を TINST.COM
で行う事ができます。
A> MODE 80
A> TINST
CURSOR MOVEMENTS:
NO | 機能 | ショートカット | 表示 |
---|---|---|---|
1 | Character left | カーソル左 (←) | Ctrl-] |
2 | Alternative | ||
3 | Character right | カーソル左 (→) | Ctrl-\ |
4 | Word left | ||
5 | Word right | ||
6 | Line up | カーソル上 (↑) | Ctrl-^ |
7 | Line down | カーソル下 (↓) | Ctrl-_ |
8 | Scroll down | ||
9 | Scroll up | ||
10 | Page up | ||
11 | Page down | ||
13 | To right on line | ||
14 | To top of page | ||
15 | To bottom of page | ||
16 | To top of file | ||
17 | To end of file | ||
18 | To beginning of block | ||
19 | To end of block | ||
20 | To last cursor position |
INSERT & DELETE:
NO | 機能 | ショートカット | 表示 |
---|---|---|---|
21 | Insert mode on/off | ||
22 | Insert line | ||
23 | Delete line | ||
24 | Delete to end of line | ||
25 | Delete right word | ||
26 | Delete character under cursor | 〔Delete〕 | <DEL> |
27 | Delete left character | 〔BS〕 | Ctrl-H |
28 | Alternative |
BLOCK COMMANDS:
NO | 機能 | ショートカット | 表示 |
---|---|---|---|
29 | Mark block begin | ||
30 | Mark block end | ||
31 | Mark single word | ||
32 | Hide/display block | ||
33 | Copy block | ||
34 | Move block | ||
35 | Delete block | ||
36 | Read block from disk | ||
37 | Write block to disk |
MISC. EDITING COMMANDS:
NO | 機能 | ショートカット | 表示 |
---|---|---|---|
38 | End edit | 〔ESC〕〔0〕 | <ESC> 0 |
39 | Tab | ||
40 | Auto tab on/off | ||
41 | Restore line | ||
42 | Find | ||
43 | Find & replace | ||
44 | Repeat last find | ||
45 | Control character prefix |
MSX0 Stack のキーボードフェイスでは〔Ctrl〕
キーが押せないため、そのままではコードエディタを終了させる事ができません。38: End edit
に別のショートカットを割り当てる必要があります。例では〔ESC〕〔0〕
を割り当てています。キーボードフェイスで設定するのは危険を伴うので、リモートコントロールパネルからの設定をオススメします。
8 bit パッチ
CP/M 80 版の Turbo Pascal は 8bit 文字が通りません (MSX 版は大丈夫)。このため、自前でパッチをあてる必要があります。
任意のバイナリエディタで TURBO.COM
から 7F
FE
を検索し、FF
FE
に書き換えれば 8bit 文字が通るようになります。これは Turbo Pascal 1.0 / 2.0 も同様です。
TPA とエンドアドレス
実行形式ファイル (*.COM
) をメモリ搭載量の異なる機種で動作させるためには、その機種の TPA 2 に合わせてコンパイラオプションでエンドアドレスを変更する必要があります。
Mem | Start (Min) |
End | End (Max) |
---|---|---|---|
64K | 20E3 | F942 | FC06 |
MSX0 Stack MSX-DOS (57.25K) |
20E3 | DE42 | E106 |
MSX0 Stack MSX-DOS (漢字) |
20E3 | DA42 | DD06 |
56K | 20E3 | D942 | DC06 |
MSX0 Stack Nextor (54.75K) |
20E3 | D442 | D706 |
MSX0 Stack MSX-DOS2 (54.5K) |
20E3 | D342 | D606 |
54K | 20E3 | D142 | D406 |
MSX0 Stack MSX-DOS2 (漢字) |
20E3 | CF42 | D206 |
48K | 20E3 | B942 | BC06 |
PC-G850V EborsyEEP (43K) |
20E3 | A542 | A806 |
40K | 20E3 | 9942 | 9C06 |
32K | 20E3 | 7942 | 7C06 |
48K の設定にしておけば、殆どの MSX で動作すると思います。
エンドアドレスはターゲットの MSX の TPA に合わせる必要があります。
例えば、ANK モードで『Turbo Pascal』を起動して実行形式ファイルを生成し、漢字モードで実行形式ファイルを実行するとメモリ不足で動作しない事があります。
クロスコンパイル
PC で CP/M-80 エミュレータを動作させ、そこで『Turbo Pascal』を走らせて MSX 用にクロスコンパイルする事もできます。
例えば 『RunCPM』 は TPA を 64KB に設定できるので、MSX ではコンパイルできないサイズのソースコードをコンパイルする事が可能です。
MSX 固有の機能を使っていなければ、CP/M-80 で動作するアプリケーションを MSX で作る事も可能です。
クロスコンパイル環境でも MSX 用のスクリーン設定を追加し、TINST で MSX 用に切り替えた状態でコンパイルする必要があります。テキスト画面制御用の関数 (GotoXY()
等) は TINST でのスクリーン設定 (エスケープシーケンス) を参照しているからです。
クロスコンパイル (その2)
『MSXPad』という Windows で動作するクロスコンパイル環境もあります。
こちらには 『Turbo Pascal 3.3f』 という MSX computer club Enschede (Frits Hilderink 氏) 製の MS-DOS 用コマンドラインコンパイラが使われています。
なお、『Turbo Pascal 3.3f』には (クロスじゃない) MSX で動作するコマンドラインコンパイラもあります。
- MSXPad を 64bit Windows で使えるようにする (Qiita)
- MCCE Turbo Pascal (MSX Resource Center)
- Hinotori Library (Github: @popolony2k)
再帰
再帰を含むコードを記述する場合にはコンパイラ指令 {$A-}
を指定する必要があります。
指令 | 指令 | 説明 |
---|---|---|
絶対コード | {$A+} または {$A-} | 絶対コードの生成。再帰的呼び出し (リカーシブコール) が不可能なコードを生成するか、可能なコードを生成するか?再帰を含むコードでは {$A-} を指定しなくてはならない。 |
program TEST(Input, Output);
{$A-}
...
{$A+}
は C 言語の #pragma nonrec
に相当します。
コード入力支援
『MSX-DOS TOOLS』や『MSX-DOS2 TOOLS』に含まれる KEY.COM を使ったキーボードテンプレートです。大したものではありませんが、Turbo Pascal 起動前に実行しておくとコードの記述が幾分楽になります。
KEY OFF
KEY 1,"begin\0Dend\3B"
KEY 2,"if\20\20then"
KEY 3,"for\20\20to\20\20do"
KEY 4,"while\20\20do"
KEY 5,"repeat\0Duntil\20\3B"
KEY 6,"program\20\3B"
KEY 7,"else"
KEY 8,"goto\20\3B"
KEY 9,"case\20\20of\0Dend\3B"
KEY 10,"with\20\20do"
KEY ON
こちらの方が速いです。
KEY ON 1,"begin\0Dend\3B" 2,"if\20\20then" 3,"for\20\20to\20\20do" 4,"while\20\20do" 5,"repeat\0Duntil\20\3B"
KEY 6,"program\20\3B" 7,"else" 8,"goto\20\3B" 9,"case\20\20of\0Dend\3B" 10,"with\20\20do"
ファンクションキー | キーボードテンプレート |
---|---|
[F1] |
begin end; |
[F2] | if then |
[F3] | for to do |
[F4] | while do |
[F5] |
repeat until ; |
[F6] | program ; |
[F7] | else |
[F8] | goto ; |
[F9] |
case of end; |
[F10] | with do |
KEY.COM
を使ってキーボードテンプレートを最下行に表示する場合は TINST.COM
を使ってスクリーンの行数を 23 にする必要があります。また、キーボードテンプレートは最下行に表示されていなくても利用可能です。
TPKEYS.COM
トランジェントコマンド TPKEYS.COM を作成しました。
ドキュメント
公式の日本語マニュアルは書籍として販売されていました。
タイトル | 著者 | ISBN-10 (Amazon) |
出版年 |
---|---|---|---|
Turbo Pascal プログラミング・マニュアル | ボーランドインターナショナル(編) マイクロソフトウエアアソシエイツ(訳) |
4880631205 | 1984/6/25 |
この書籍は国立国会図書館デジタルコレクションで読む事ができます。
書籍の閲覧には国立国会図書館の利用者登録 (本登録) が必要です。
書籍
Turbo Pascal 関連書籍に関する別記事があります。
広告
『Turbo Pascal 3.0』の広告です。
おわりに
『Turbo Pascal 3.0』の使い方に関しては別記事があり、本記事は MSX 用に抜粋して加筆したものになります。
MSX 固有の機能を Turbo Pascal から使う方法や、MSX そのものの書籍については以下のリンクが参考になるかと思います。
- MDL-LIB version 2.2 の使い方 (Qiita)
- 【MSX0】IOT.LIB (Qiita)
- 【MSX0】LCD.LIB (Qiita)
- 【MSX0】IoT BASIC サンプルの移植【Turbo Pascal】 (Qiita)
- MSX0_TP3 (Github: @ht_deko)
- MSX-C に関する情報 (Qiita)