2016-06-13 17:21 — asano
カテゴリー:
CP/M-68Kのマニュアルが出てきました。
CP/Mというと8080用のものや8086用のCP/M-86が有名ですが、このMC68000用のCP/M-68KやZ-8000用のCP/M-8000というのもありました。
変わったサイズのバインダーですが、おそらくは8インチフロッピーが入るサイズだったのでしょう。私は日本でパソコンの68000拡張ボード用に移植されたものを購入したのでメディアは5インチの2HDでしたね。それをさらに自作のボードに移植して使っていました。
確か定価が80,000円だったと記憶していますが、実際には56,000円で買えたのかな。意外に高いと思うかもしれませんが、アセンブラもCコンパイラもデバッガも含まれていますので、これだけで一通りの開発はできるようになります。さすがに付属のエディタはラインエディタなのでフリーのスクリーンエディタ(「e」とかいう名前だったような)を入れていました。
実は私がC言語を習得したのはこのCP/M-68Kの環境なんですよね。CP/M-80にもSmall-Cというのがあって使ったこともあるのですが、floatもdoubleもstructもunionも無いというサブセットだったのです。その点、68K付属のはANSI非対応とはいえフルセットのCコンパイラでしたから、(本などの)例題を実行するにはあまり余計なことに悩まずに済むよい環境でした。また「cc」や「cl」コマンドでプリプロセッサからリンカまで自動的に実行してしまうのではなく、自分でcp68(プリプロセッサ)⇒c068(パーサ)⇒c168(コードジェネレータ)⇒as68(アセンブラ)⇒lo68(リンカ)と順を追って実行する必要があり、ブラックボックス化しなかったのも学習には良かったかもしれません。
ちょっと困ったのは制限事項の多さですね。『CP/M-68K V1.2 制限事項一覧表』という文書が添付されており、内容が3ページ、27項目もあるのです。中でも構造体のメンバに関する以下のものには悩まされました。
異なる構造体のメンバに同一名を使用すると不正なオブジェクトを出力する場合がある。構造体のメンバ名は、ユニークなものとしてください。
実際に試したところ、メンバ名と構造体先頭からのオフセットのテーブルを全ての構造体で共有してしまっているような動きでした。
よくコーディング規約に「構造体メンバ名の先頭に構造体を特定する文字をつけること」みたいなのがありますが、こういうコンパイラの存在も理由の一つだったのかもしれません。
コメントを追加