PC-9800シリーズで、最小セットアップを行うために必要なファイルは以下の通りです。
これらのファイルは1997年の5月頃に選択されたものなので、現在はもっと新しいファイルになっている可能性があります。
また、これだけだと肝心のPC-9800シリーズでは上手く動作しない部分が残ります。その解決についてはあとで述べます。
[環境設定]
まずconfig.sysを書き換えます。DPMI か VCPI に対応したメモリドライバを入れなければなりません。MS-DOS6.2の標準設定で入るドライバはDPMIスイッチが標準では設定されてないので/DPMIオプションをつけてください。サンプルのConfig.sys を示します。
DEVICE = a:\tool\HSB.EXE VC T2 I26 Y2 TD BUFFERS=20 FILES=20 DEVICE=a:\dos\HIMEM.SYS DEVICE=a:\dos\EMM386.EXE /P=160 /UMB /DPMI DEVICE=a:\dos\print.sys DEVICEHIGH = a:\ATOK8\ATOK8A.SYS /UCF=a:\ATOK8\ATOK8.UCF DEVICEHIGH = a:\ATOK8\ATOK8B.SYS DOS=HIGH,UMB今現在私は、Melwareを使用しています。config.sys は組み込むデバイスや順番によっては動作不良をまねくので、やってみてダメだった人は、必要最低限の記述に切りつめていって徐々に様子を見ながら煮詰めていってください。
PATH a:\djgpp\bin; set DJGPP=a:\djgpp\djgpp.envgcc以外にもほかのコンパイラを使う人は注意が必要です。gccはまずcppを呼び出しますが、このとき検索パスでcppを探すので たとえば Turbo C のcppが先にパスに切ってあった場合そちらが実行されてしまいます。gccのcpp と tccのcpp は挙動が違うので上手くコンパイルされません。ほかのコンパイラよりも先に gccのパスを切るようにしてください。
#include <stdio.h> int main(void) { printf("Hello World.\n"); return 0; }これをgccでコンパイルします。
a:\eisuke\src>go32 a.out go32 version 1.12.maint3 Copyright (C) 1994 DJ Delorie For PC98*1 provisional version 0.7 by tantan Swap Feature by Hawk.T Hello World.なんだかいっぱい文字がでて分け分かりませんが、最後にHello World.とでているのが分かります。これでめでたし、めでたし、セットアップの終了です。
[getch(),kbhit()]
標準ライブラリではないconio.hで定義されている関数は、ハードウエアに依存する関数がありそのままでは動きません。頻繁に使う getch()とkbhit()もそのままでは動きませんでした。そこで、getch()とkbhit()を自分で作って解決することにしました。ソースはgetch98.cとkbhit98.cを見てください。インラインアセンブルは他人が作っていたものを参考に自分で適当に作ったものなので間違っているかもしれませんがご勘弁を。
プログラムを組むときにkbhit()の変わりにkbhit98()を、getch()の変わりにgetch98()を使い、リンクするときに一緒にリンクすればいいのですがそれではめんどうなのでヘッダとライブラリに手を加えて解決します。
kbhitがkbhit98に、getchがgetch98に置き換わるようにconio.hを書き換えます。また、いつでも自動的にリンクされるように標準のlibc.aにオブジェクトを追加します。その方法についてはどこかのドキュメントの ar の説明を参考にしてください。
こうしてgetch()とkbhit()が使えるようになったら同梱のテストプログラム getkb()をコンパイル、実行して、ちゃんと動くかどうかを確認してください。
[outportx(),inportx()]
pc.hで定義されている関数はコンパイル時に -lpcオプションをつけないとリンクが通りません。それもやはりめんどうなので、libpc.aからいかのオプションを抽出してlibc.aに追加しました。
inportb.o 1バイト入力関数 inportb() inportw.o 1ワード入力関数 inportw() outportb.o 1バイト出力関数 outportb() outportw.o 1ワード出力関数 outportw()やり方は以下の通りですが、詳しくはドキュメントの ar の項目を見てください
a:\djgpp\lib\>ar x libpc.a inportb.o オブジェクトの抽出 a:\djgpp\lib\.ar cvr libc.a inportb.o オブジェクトの置き換え追加 a:\djgpp\lib\>ar x libpc.a inportw.o a:\djgpp\lib\.ar cvr libc.a inportw.o a:\djgpp\lib\>ar x libpc.a outortb.o a:\djgpp\lib\.ar cvr libc.a outortb.o a:\djgpp\lib\>ar x libpc.a outortw.o a:\djgpp\lib\.ar cvr libc.a outortw.o[alloc.h]