[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[WitchTech 00206] Re: ちょっとしたベンチマーク



おはつです。西風と申します。

> > Borland "ブランド" 最後の 16bit コンパイラは Borland C++ 5.0 に
> > 含まれている bcc.exe です。
> さて、誰か、このコンパイラ用のスタートアップコードを書きませんか〜?

とりあえずリンクするだけなら以下の方法でできます。

1)MASM を用意します。( LASM 持ってないもんで )
  http://msdn.microsoft.com/vstudio/downloads/ppack/vcpp.exe
  を解凍して ml.exe ml.err, h2inc.exe, h2inc.err, MasmRef.doc を取り出す。
  これで MASM 6.15 が使えるようになります。

2)スタートアッププログラムにエントリーアドレスを設定する。
  WWitch\src\tcc_rt\c0ww.asm の一番最後の end に _load0 を追加する。
  end _load0

3)makefile を書き換えて MASM でアセンブル。
  AS=ml
  $(AS) /c /D DISPLAY_MODE_JAPANESE1 /Fo$(CRT0_JAPANESE1) c0ww.asm
  $(AS) /c /D DISPLAY_MODE_JAPANESE2 /Fo$(CRT0_JAPANESE2) c0ww.asm
  $(AS) /c /D DISPLAY_MODE_ASCII1    /Fo$(CRT0_ASCII1)    c0ww.asm
  $(AS) /c /D DISPLAY_MODE_ASCII2    /Fo$(CRT0_ASCII2)    c0ww.asm

tasm.exe だと proc の引き数の関係で BP の値が壊れるので MASM 使ってます。
ここでできた c0wwasm1.obj ... は bcc の tlink でリンクできます。
ついでに、そのまま tcc でも使えます。

4)bcc でコンパイル。
  コンパイルフラグ -x- で例外を使用しない。
 -1 -x- -ms


でも、元が C のスタートアップだから以下のような問題があります。

・グローバルで宣言されたクラスのコンストラクタが呼ばれない。
・例外が使えない。

さらに C++ だと、

・メンバ関数はインスタンスが DS にあることを想定しているから
  インスタンスを SS に作れない。
・operator new, delete を自作しなくてはならない。

などなど。
少しいじっただけですが、クラス、例外はほぼダメですかね。
でも、少し便利なC言語として割り切れば使えるかも。

'//' コメントが使えて
'表'なんかの文字列が化けない

って、これだけでも嬉んですけどね!

ああ、早く誰か本物のスタートアップ書いてくれないかなぁ!

-------------------
西風





ML Archives