[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]
[OSASK 1076] High C利用計画.
こんばんは、川合です。リリースラッシュの残りの7つのファイルに
ついての説明です。
NASM利用計画がうまくいった後、ちょっとHigh Cの挙動を研究してみ
ました。その結果、何とかHigh Cで「ぐいぐい」用アプリケーションを
書けそうだったので、さらに研究を進めてここまでこぎつけました。
今日リリースされるアーカイブのうち、4つはサンプルです。残る3
つが重要なので、それから説明します。
・exp2bin0
このツールは、High Cで生成したEXPファイルをBINに変換するための
ものです。
・stdlib0
これは、ANSI準拠の標準ライブラリの一部です。現在サポートされて
いる関数はたったの4つ、
malloc, free, rand, srand
だけです。他の関数については時間がなくて準備できませんでした。ほ
しかったら僕の代わりに作ってください(笑)。ソースが入っています
が、結局必要なのは「stdlib.h」と「stdlib.lib」だけです。他のファ
イルはなくても支障ありません。
・gg00lib0
これは、「ぐいぐい」のライブラリコールをC言語から使うためのラ
イブラリです。また、生成されたコードを「ぐいぐい」対応にさせるた
めの重要なコードも含まれています。これも、ソースファイルがいろい
ろ入っていますが、結局必要なのは「guigui00.h」と「guigui00.lib」
だけです。
このライブラリをみると、構造体の中身を引数に並べるようになって
いるだけで、全然使いやすくなっていません。すみません、手抜きです
。ご不満でしょう。でしたら、僕の代わりに使いやすくしてください。
期待しています(笑)。
---
さて、上記3アーカイブを入手しても、High Cがなければ始まりませ
ん。High Cをお持ちでなかったらすみません。しかも、僕が動作チェッ
クしたのはTOWNS版のバージョン1.73だけです。他のバージョンでは駄
目かもしれません。うまくいかなかったらすみません。
ええと、結局のところ、必要なのは「hcd386.exe」、「386link.exe
」、「ck.st」の3ファイルだけのようです。他はなくてもなんとかな
りました。僕がこの3ファイルでコンパイルする方法をhelloc0を例に
して説明します。
1つのディレクトリに、
helloc0.c, hcd386.exe, 386link.exe, ck.st, guigui00.h,
guigui00.lib, stdlib.lib, exp2bin0.exe
の8ファイルを置きます。それで、
prompt>hcd386 helloc0.c -kanji
でコンパイルし、
prompt>386link helloc -LIB guigui00 stdlib
でリンクします。そして、
prompt>exp2bin0 helloc0.exp helloc0.bin -s 2k
でBINファイルが得られます。
---
いくつかの注意点を書いておきます。
まず、High Cに標準で付いてくるライブラリはすべて使えません。も
しかしたらいくつかは使えるかもしれませんが、ソースを見ないとなん
とも言えません。
ソースの一番最初は、
#include "guigui00.h"
でなければいけません。もちろん、この文の前に注釈があるのはかまい
ません。「guigui00.h」には、怪しげなコードがついていてこのコード
のおかげで、High Cの出力したコードが実行可能な状態になるからです
。
exp2bin0には、「-s」というオプションがあります。このオプション
は結構重要です。これは、スタックがどのくらい必要かを知らせるため
のもので、足りないとプログラムが正しくても暴走します。このオプシ
ョンは省略することができ、そのときは「-s 16k」とみなされます。
それで、このスタックがどのくらいになるかを見積もるのは慣れない
と難しいでしょう。よくわからなかったら、とりあえずデフォルトのま
ま使ってください。ちなみに、今のmallocの仕様は、スタック領域の下
位から割り当てているので、mallocする容量も「-s」オプションに含ま
れると考えてください。
各関数の仕様や使い方は、サンプルやソースを熟読してください。き
っとみなさんならそれだけでもそこそこわかるのではと思っています。
誰にも分からないことがあれば、その時は僕が説明します。
それでは。
--
川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/