PurePASCAL  

最初に...

Oh!X」1990/06号に付属した「創刊8周年記念PRO-68K」に収録されたX680x0用(Human68K)PASCALコンパイラ「PurePASCAL」を扱うページです。

開発者である「藤井義巳/藤木健士」氏の両名から掲載許可を頂いています。


特徴

 ・Human68K上で動作する伝統的なPASCALコンパイラ(*1)。
 ・P-Codeや実行時ランタイムを使用しない。
 ・コンパイルでAS.X用のアセンブラソースを吐く(*2)。
 ・コンパイル,アセンブル,リンク(*3)を自動で行う。
 ・環境設定(インストール)が容易。
 ・インラインアセンブラを使用できる。

*1 「ISO 7185 PASCAL規格」の水準0に準拠している。

*2 HAS.Xでも使えるような気がするが、PASCAL.Xが内部でAS.Xを呼ぶようになっているために使用できない。
  また、HAS.Xをリネームしても駄目だった(エラーが発生してしまう。AS.Xとオプションスイッチが異なるためか?)。
  よって、現段階ではなんらかの方法でAS.X(C Compiler PRO-68Kに付属)を入手するしかない。

*3 HLK.Xでも使えるような気がするが、PASCAL.Xが内部でLK.Xを呼ぶようになっているために使用できない。
  また、HLK.Xをリネームしても駄目だった。また、GCC2に付属の「g2as.x」や「g2lk.x」でも同様だった。

 ※HAS.X/HLK.Xは開発者の方も使っていらしたようなので、「使えるハズだ」という事でした。


ダウンロード

PASCAL.LZH   「PurePASCAL」コンパイラVer1.0本体(Oh!X版)
PUREPASCAL101.LZH   「PurePASCAL」コンパイラVer1.01本体
IOCSCALL.LZH   「PurePASCAL」でIOCSコールを行うための定義ファイルとインクルードファイル

 AS.XとLK.Xは付属していません。DOSコール用の定義ファイルとインクルードファイルは存在しませんので、後々どうにかしたいと思っています。

 C Compiler PRO-68Kに付属のライブラリやlibcも使えます。IOCSコールやDOSコールはこれらのライブラリから呼び出すのがいいでしょう。


インストール

アーカイブファイルを解凍したら、

 PASCAL.X
 PASLIB.A
 PASCAL.MAC
 AS.X(C Compiler PRO-68Kに付属)
 LK.X(C Compiler PRO-68Kに付属)

を同じディレクトリに置き、環境変数を設定する。

[環境変数]

PASCAL   PASLIB.AとPASCAL.MACの置いてあるディレクトリを指定する。
temp   コンパイル時のテンポラリファイル作成場所を指定する。

コンパイル

コマンドラインから

>PASCAL.X ソースファイル

とします。

AS.XとLK.XがPASCAL.Xと同じディレクトリにある場合には自動でコンパイル、アセンブル、リンクを行います。

libc等の外部ライブラリを使用する場合にはアセンブルまでしか行いませんので、リンクは別途行う必要があります。

[例]
 >LK test1.o paslib.a libiocs.a


コンパイルオプション

コンパイルオプション

 

書 式

 

機  能

ファイルインクルード   {$Iファイル名}   指定されたファイルを挿入します。
インラインアセンブラ   {$asm}~{$endasm}   アセンブリ言語のプログラムを埋め込みます。
スタック領域指定   {$Sスタックサイズ}   スタック領域を1Kバイト単位で指定します。デフォルトは64Kバイトです。
ヒープ領域指定   {$Hヒープサイズ}   ヒープ領域を1Kバイト単位で指定します。デフォルトは64Kバイトです。
実行時チェックのコード生成   {$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.0以降の「PurePASCAL」が存在する事を示唆した一文ですが、いかんせん情報が少なく、所在の確認は取れていません。ご存知の方は私宛にMailを下さい。


参考文献

 SoftBank Oh!X 90年6月/7月/8月/9月/11月号及び91年1月/3月号