# PurePASCAL ## 最初に... [Oh!X](http://www.softbank.co.jp/publishing/ohx/) 1990/06 号に付属した "創刊 8 周年記念 PRO-68K" に収録された X680x0 用 (Human68K) PASCAL コンパイラ "PurePASCAL" を扱うページです。 ※ 開発者である 藤井義巳 / 藤木健士 両氏から掲載許可を頂いています。 ## 特徴 - Human68K 上で動作する伝統的な PASCAL コンパイラ *1。 - P-Code や実行時ランタイムを使用しない。 - コンパイルで AS.X 用のアセンブラソースを吐く*2。 - コンパイル, アセンブル, リンク *3 を自動で行う。 - 環境設定 (インストール) が容易。 - インラインアセンブラを使用できる。 *1 ISO 7185:83 の水準 0 に準拠している。 *2 [C Compiler PRO-68K](http://retropc.net/x68000/software/sharp/xc21/) 付属の AS.X、または [HAS.X](x68k.html#HAS) を AS.X にリネームしたものが使える。 *3 [C Compiler PRO-68K](http://retropc.net/x68000/software/sharp/xc21/) 付属の LK.X、または [HLK.X](x68k.html#HLK) を LK.X にリネームしたものが使える。 ## ダウンロード |ファイル|説明| |:---|:---| |[PASCAL.LZH](/software/pascal.lzh)|PurePASCAL コンパイラ Ver1.0 本体 (Oh!X 版)| |[PUREPASCAL101.LZH](/software/purepascal101.lzh)|PurePASCAL コンパイラ Ver1.01 本体| |[IOCSCALL.LZH](/software/iocscall.lzh)|PurePASCAL で IOCS コールを行うための定義ファイルとインクルードファイル| |[PUREPASCAL_IMG.LZH](/software/purepascal_img.lzh)|エミュレータ等で使える FD イメージ (XDF)。| - AS.X と LK.X は付属していません。FD イメージには HAS.X / HLK.X が付属しています。AS.X と LK.X が使いたい場合には、別途 [C Compiler PRO-68K](http://retropc.net/x68000/software/sharp/xc21/) から抽出してください。 - [C Compiler PRO-68K](http://retropc.net/x68000/software/sharp/xc21/) に付属のライブラリや [libc](http://www.vector.co.jp/vpack/filearea/x68/prog/lib/index.html) も使えます。IOCS コールや DOS コールはこれらのライブラリから呼び出すのがいいでしょう。 ## インストール 基本的には以下の手順となります。 1. アーカイブを解凍。 2. PASCAL.X と同じ場所に AS.X と LK.X を置く。 3. 環境変数を定義 ### 環境変数 |環境変数|説明| |:---|:---| |PATH|PurePASCAL インストールフォルダを追記| |PASCAL|PurePASCAL インストールフォルダを設定| |TEMP|コンパイル時のテンポラリファイル作成場所を指定| ### AUTOEXEC.BAT の例 ``` ECHO OFF PROMPT $P$G PATH A:\;A:\SYS;A:\BIN;A:\BASIC2;A:\ETC;B:\PASCAL; SET PASCAL=B:\PASCAL SET temp=B:\TEMP SET ecc=FUSys.Cnf FuKey.Cnf FuExt.Cnf SET FASTIO=DONE IF %FASTIO% == DONE GOTO SKIP FASTIO 384 -S32 -D -F -E FASTSEEK 128 FASTOPEN 100 SET FASTIO=DONE :SKIP ``` ## コンパイル コマンドラインから `PASCAL.X ソースファイル名[.pas]` とします。AS.X と LK.X が PASCAL.X と同じディレクトリにある場合には自動でコンパイル、アセンブル、リンクを行います。 [libc](http://www.vector.co.jp/vpack/filearea/x68/prog/lib/index.html) 等の外部ライブラリを使用する場合にはアセンブルまでしか行いませんので、リンクは別途行う必要があります。 [例] `LK test1.o paslib.a libiocs.a` ## コンパイルオプション |コンパイルオプション|書式|機能| |:---|:---|:---| |ファイルインクルード|{$I ファイル名}| 指定されたファイルを挿入します。| |インラインアセンブラ|{$asm}~{$endasm}|アセンブリ言語のプログラムを埋め込みます。| |スタック領域指定|{$S スタックサイズ}|スタック領域を 1KB 単位で指定します。デフォルトは 64KB です。| |ヒープ領域指定|{$H ヒープサイズ}|ヒープ領域を 1KB 単位で指定します。デフォルトは64KB です。| |実行時チェックのコード生成|{$check} または
{$nocheck}|実行時チェックのコード生成を行うかどうか指定します。デフォルトは{$check}です。| ## C 言語ライブラリの使用方法 ソースで **extern** 指令を使い、外部関数の使用を宣言します。 ``` function ABC(arg1: Integer): Integer; extern; procedure DEF(arg1: Integer); extern; ``` といった具合です。但し、C とは**引数の順序が逆になっている** ことに注意して下さい。 例えば C で ``` int ABC(int arg1, int arg2, int arg3); ``` となっていたら、PASCAL では ``` function ABC(arg3: Integer; arg2: Integer; arg1: Integer): Integer; extern; ``` と宣言する必要があります。 ## 既知の問題 - FLOAT2+/3+ では正常に動作しない。 - レコード型変数を実引数として積む事ができない。 - エラーメッセージの一部に不備がある。 - 定数宣言に負の数が使えない。 これらの問題について、Oh!X 90 年 11 月号に以下のような記述があります。 > 我々の手元では、これらのバグはすでに取れているのですが、 > いまのところ皆さんにお届けする方法がありません。 恐らく ver1.01 では修正されているのだろうと思われます。 ## 参考文献 SoftBank Oh!X 90 年 6, 7, 8, 9, 11 月号及び 91 年 1, 3 月号 ### 連載 PASCAL プログラミングへの招待 掲載号 PurePASCAL の詳しい説明が載っていますので、バックナンバーを探してみてください。 | 掲載号 |タイトル| |:----------------:|:------------------| | 1990/06 | <1> X68000 に PASCAL コンパイラを| | 1990/07 | <2> PASCAL の特徴的な性格について| | 1990/08 | <3> PASCAL のデータ型を見る| | 1990/09 | <4> PASCAL の制御構造, 関数および手続き| | 1990/11 | <5> 演算子・式, インラインアセンブラ| | 1991/01 | <6> 実行時チェック・C とのリンク| | 1991/03 | <7> Gabage Collection in Pure PASCAL|