!!! 無保証です !!!
ここに書かれている内容については、できるだけ正確を期すように
心がけてはいますが、一切の保証はできません。
もしおかしな記述を見つけた時には、お知らせ下さるとありがたいです。
FreyaBIOSをアセンブラなどから直接呼び出す場合、マニュアルに
「戻り値なし」と書かれていても、AXレジスタは破壊されるものとして
扱ったほうがいいようです。(サポートに問い合わせました)
もしかすると、x86系では常識に類することなのかもしれませんが、
私はx86のアセンブラでまともにプログラムを組むのはWonderWitchが
初めてなので、はまりました。
(でもたとえ常識だとしてもちゃんと明示しといてほしい…)
WWitch/doc/appendix/toolext.htmにリソースアクセスの
サンプルコードが載っていますが、このコードではリソース全体の
大きさが64kバイトを超えると正しく動作しません(DMC++の出力コードで確認)。
リソース一つではなく、結合されている全てのリソースの合計で
64kバイトまでです。_pc->_resourceが正規化されていない場合は
さらに上限が小さくなる可能性があります
(2001/11/24)ちゃんと正規化されている模様です。
「各リソースのサイズには、基本的に制限はありません」とあるので、 サンプルは64kバイト超のリソースに対応しているのかと思ったのですが、 「扱うプログラム側が対応していない」例のようです。(;p
動作しない原因は、「farポインタに対する演算ではセグメント値が
更新されない」ということのようです。
このことについて、PCプログラミングVol.3(技術評論社)の
わんだらぁさんの記事中でも触れられています。
インダイレクトライブラリ(以下IL)は実行時に動的にアドレス解決を しますが、アドレス解決に使用する構造体の大きさは、各ILに対応する ヘッダファイルで定義されることになっています。ILを呼び出したい プログラムは、この構造体へのポインタをOSに渡してアドレス解決を してもらうのですが、OSからは渡された構造体の大きさを知ることが できません。もし、ILがバージョンアップしてメソッド数が増えていたり すると、OSは構造体の範囲外のメモリ領域を書き換えることになるはずです。 (実際の動作は確認していません。ごめんなさい(^^;;)
ということで、ILのメソッド数を後から増やすことは極力避け、もし 増やす場合には、対応プログラムの再コンパイルを徹底する必要が あると思われます。
キャラクタフォントを90度回転させるルーチンがBIOSやライブラリに
用意されていないので、作ってみました。時計回り90度回転のみですが、
それ以外の角度は上下/左右反転機能を組み合わせて作ってください。(^^;;
グレースケール/4色カラーモード用、16色カラーモード用、16色カラーパックト
モード用の3種類あります。
NASM(Netwide Assembler)用のソースです。
これ
実は、実機ではまだ動作確認してません(^^;;
が、DOS上でテストプログラムを作って一応の検証はしましたので、
アルゴリズム自体はたぶん大丈夫と思います。
(2001/12/19)モノクロフォント(text_get_fontdata()で得られるフォント)用の
回転ルーチンを追加。あと、ファイル名・関数名を変更。
グレースケール/4色カラーモード用とモノクロフォント用については
実機で動作確認しました。…って言っても使い方まだ書いてないな(^^;;
.SUFFIXES:
のように書いても、実際にはリストがクリアされないようです。==> 結局、私はsmakeを捨ててGNU makeに逃げました。(^^;;
lib foo.lib -+hoge.obj
とするところを、間違えて
lib foo.lib hoge.obj
と書いて実行すると、ライブラリを破壊してしまうようです。(2003/01/11補足)DMC8.31から、lib.exeが大きく変わっているようです。
コマンドラインの書式が違うようなので、これから調べてみます。
(2003/01/13補足)どうやら前の書式もサポートしているみたいです。
(ドキュメントをちらっと読んだだけで、確認してませんが)