DOS/FreeDOS/build/kernel(2035a)

DOS/FreeDOS/build/kernel(2035a)

ビルド環境&必要なもの

kernel 2035a の場合。 これ以前のカーネルの場合は環境やツールがもうすこし限定されるかも。

使えるコンパイラが DOS もしくは Win32 用しかないので、DOS もしくは Windows 上でしかカーネルはビルドできない。 (ついでに言うとビルドスクリプトは DOS 用のバッチファイル)

コンパイラ

以下のコンパイラがひとまず考慮されている。

  • Borland Turbo C 2.0, Turbo C++ 1.01, Turbo C++ 3.0, Borland C++ 5.0
  • Microsoft Visual C++ 1.52(すくなくとも MSCL8.MAK の修正が必要。nmake を使いたい場合はさらに修正が必要)
  • OpenWatcom C/C++ 1.3(1.4 以上の場合は WATCOM.MAK の修正が必要)

Visual C++ 1.52 の場合、nmake を使うと通常の手順でコンパイルできない。Borland C++ 5.5 付属の make を使ったほうが楽。

OpenWatcom 1.4(以上)の場合、コンパイル時に警告が出るためエラー停止してしまう。 MKFILES\WATCOM.MAK を編集して、ALLFLAGS=... のところにある -we オプションを除去する。

というか、Turbo C 2.0/Turbo C++ 1.01 と OpenWatcom 以外は対応がおざなりな気がする。 9x 系でない Windows 環境なら OpenWatcom を使うのがいちばん無難だと思う。

アセンブラ

  • nasm

0.98.39 でいいみたい。 Turbo C++ 3.0 でコンパイルする場合、djgpp 版の nasm はボーランドの 16bit DPMI サーバと相性が悪いので 16bit DOS 版の nasm を使ったほうがいいとか何とかドキュメントに書かれていたような気がする。

その他のツール

  • upx

カーネルのファイルサイズを圧縮する場合は必要。

ビルド

おおまかな手順はこんな感じ。

  1. コンパイラやツールを(正しく)インストールしておく
  2. copy config.b config.bat
  3. config.bat を手持ちの環境にあわせて修正
  4. build.bat 実行

ke2035a に付属している config.b なんですけど、なんか改行コードがおかしいような気が(CR CR LF になってるような)。

config.bat

環境変数をいろいろ設定しているので、使用ツールや作成したいカーネルの種別にあわせて各自で修正する。

XNASM
nasm のパス名。 Win32 版の nasm って、なぜか微妙にファイル名が違うんだよね…(nasmw.exe)
COMPILER
デフォルトコンパイラの指定。
Turbo C 2.0, Turbo C++ 1.01, Visual C++ 1.52, OpenWatcom の場合は build 時の引数でコンパイラを指定できるので、あえて設定しなくてもよい。 その他のコンパイラ(Turbo C++ 3.0, Borland C++ 5.0)を使う場合は指定が必要。
TC2_BASE, TP1_BASE, TC3_BASE, BC5_BASE, MS_BASE
コンパイラがインストールされているベースディレクトリの指定。
XUPX
UPX のパス名(と実行時オプション)。
UPX を使わない場合は set XUPX= と設定する(と config.b に書いてある)。
XLINK
カーネルリンク時に使うリンカのパス名。
ふつうはコンパイラ付属のリンカを使うので、指定しなくてもいいと思う。
MAKE
ビルド時に使う make のパス名。
Visual C++ 1.52 を使ったとき、付属の nmake だとうまくビルドできなかった。 Borland C++ 5.51 の make を指定して回避した。
XCPU, XFAT
ビルドするカーネルの種類。
build 実行時にオプションで指定することも可能。
ALLCFLAGS
コンパイル時の追加フラグ。 詳細は config.b のコメントで。

build.bat

ビルド時に実行するファイル。 実行時のオプションは build.bat の先頭付近に記述されている。

用例:

build fat16 tcpp 86
  • コンパイラ : Turbo C++ 1.01
  • カーネル : FAT16, 8086 用
build -r fat32 wc 386
  • 以前のビルド時に作成したファイルをまず消去
  • コンパイラ : OpenWatcom
  • カーネル : FAT32, 386 必須

オプションを変更して再構築するときは -r をつける。

めも

ke2035a を Visual C++ 1.52 でビルドする場合、MKFILES\MSCL8.MAK の修正が必要。

--- MKFILES\MSCL8.ORG	2004-04-11 12:22:18.000000000 +0900
+++ MKFILES\MSCL8.MAK	2006-06-17 15:00:56.750000000 +0900
@@ -23,8 +23,8 @@
 # used for building the library
 
 CLIB=$(COMPILERPATH)\lib\slibce.lib
-MATH_EXTRACT=*aflmul *aFlshl *aFNauldi *aFulrem *aFulshr *aFuldiv *aFlrem *aFldiv
-MATH_INSERT= +aflmul +aFlshl +aFNauldi +aFulrem +aFulshr +aFuldiv +aFlrem +aFldiv
+MATH_EXTRACT=*aflmul *afnaulsh *aFlshl *aFNauldi *aFulrem *aFulshr *aFuldiv *aFlrem *aFldiv
+MATH_INSERT= +aflmul +afnaulsh +aFlshl +aFNauldi +aFulrem +aFulshr +aFuldiv +aFlrem +aFldiv
 
 TARGETOPT=
 !if $(XCPU) == 186    

Micorosoft C/C++ 7.0 ではコンパイルできなかった(main.c でエラーが)…

Borland C++ 5.0 でコンパイルするときは command.com から build.bat を起動したほうがよさそう。 (コマンドプロンプト上であらかじめ command を実行し、DOS のコマンドプロンプトにしておく)

できあがるカーネルのサイズは OpenWatcom でビルドしたものが圧倒的に小さい(upx で圧縮するとそれほど差はなくなる)。