[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1303] bucstual0.



  こんにちは、川合です。

  今日はbucstual0をベーターリリースします。まずは、毎度のベータ
ー版ダウンロードページの紹介から。

  ベータ版のダウンロード場所は、

    http://www.imasy.org/~kawai/osask/beta_ver.html

です。

  上記のページでリリースされているプログラムの著作権は川合堂にあ
ります。許可なく転載することは禁止します(一般公開版は、許可なく
転載していただいてかまいません)。

  また、このbeta版のダウンロードページURLもMLのメンバー以外には
教えないでください。リンクも禁止します。

  このようなきつい制限は、beta版にはバグが多く、危険度もかなりあ
ると思われるからです。したがって、MLメンバー以外の人がbeta版を入
手したり、テストしたりはしないようにするという方針をご理解くださ
い。もし、危険でもいいからbeta版をテストしてみたいという方がMLメ
ンバー以外におられましたら、このOSASK-MLのメンバーになるのをすす
めてください。

  しかし、このbeta版の存在そのものは秘密でもなんでもありませんか
ら、テストの様子や感想をMLメンバー以外に話したり伝えたりするのは
かまいません。

---

  さて、bucstual0の特徴は、以下の通りです。

・高解像度(1280x1024x256色)対応。・・・ただし、256色モードには
  なっていますが、アプリからは従来どおりの16色しか使えません。
・ANK16.FNT不要(フォント内包)。
・直接起動ディスクフォーマットルーチンが少しだけ変更。

  内包のフォントは、平木敬太郎さん(PAF03513 !Atmark! nifty.ne.jp)作のも
のを僕の趣味で少しだけいじったものです。平木敬太郎さんに直接メー
ルを出して、OSASKに組み込んでもよいかを伺ったところ、許可をいた
だけたので、内包できるようになりました。

  直接起動ディスクのフォーマットが変わったというのは、OSASKのカ
ーネルイメージが徐々に大きくなってきて44KBではおさまらなくなった
ので、66KBまで書き込めるようにシステム領域を増やしたせいです。DO
Sからは、不良セクタが54KBあると報告されるでしょう。・・・したが
って、今までの直接起動ディスクにシステムをオーバーライトすること
はできません。一度、フォーマットして下さい(つまり「S」で上書き
するのではなく、普通にEnterでフォーマットする)。・・・これが何
を言っているのかよく分からない人は、気にしなくていいです。直接起
動ディスクを作るときに普通に操作すれば問題はありません。

  高解像度に対応させるには、それなりに面倒です。しばらくは、これ
で辛抱して下さい。データーがそろって、こっちの準備もできたら、プ
ラグアンドプレイでできるようにしますから。

  ええと、まず、デフォルトは640x480です。また、設定が間違ってい
たりした場合も、自動的にこのモードになります。

  それで、bucsta0.exeのオフセット0500〜051fをご覧ください。デフォ
ルトは以下のようになっています。

  0500 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0510 : 12 00 00 00 80 02 e0 01 00 00 00 00 00 00 00 00

  この32バイトのうち、最初の16バイトがビデオカード認識ための部分
で、後ろの16バイトが解像度を設定するための部分です。

  800x600にするには、これを以下のように書き換えます。

  0500 : 00 00 00 00 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ??
  0510 : 02 01 00 00 20 03 58 02 00 00 00 00 00 00 00 00

ここで、「??」の部分はどんな値でもかまいません。というのは、0500
からの4バイトが0の場合、それに続く12バイトは参照されないからで
す。この設定で800x600になってくれるかどうかは、そのビデオカード
がVESAの画面モード0x0102をサポートしているかどうかにかかっていま
す。サポートしていなければ、この設定にしても640x480で起動します
。

  で、1280x1024に切り替えるには、

  0500 : 後述
  0510 : 07 01 00 00 00 05 00 04 00 00 00 00 00 00 00 00

    0500 : ビデオカード依存バイト
    0501 : dv * 8 + f(devlist1の結果を参照のこと)
    0502 : bus(devlist1の結果を参照のこと)
    0503 : 0x80
    0504 : vendの下位8bit
    0505 : vendの上位8bit
    0506 : deviの下位8bit
    0507 : deviの上位8bit
    0508 : rv
    0509 : classの下位8bit
    050a : classの中位8bit
    050b : classの上位8bit
    050c : subvの下位8bit
    050d : subvの上位8bit
    050e : subdの下位8bit
    050f : subdの上位8bit

という設定値を書き込む必要があります。わかりにくいと思われるので
、具体的な例を挙げます。

PCI device list
bus dv f   vend devi rv class  subv subd
----------------------------------------
  0  0 0 : 1022 7006 25 060000 0000 0000
  0  1 0 : 1022 7007 01 060400 0000 0000
  0  7 0 : 1022 7408 01 060100 0000 0000
  0  7 1 : 1022 7409 07 01018A 0000 0000
  0  7 3 : 1022 740B 03 068000 0000 0000
  0  7 4 : 1022 740C 06 0C0310 0000 0000
  0  9 0 : 1073 0004 02 040100 1073 0004
  0 10 0 : 12D2 0018 10 030000 2A15 54A3
  0 11 0 : 1000 000F 01 010000 0000 0000

  うちのビデオカードは、下から2番目のやつです。それで、

  0500 : 01 50 00 80 d2 12 18 00 10 00 00 03 15 2a a3 54

と設定するとうまく行きます。

  また、BIOSに「プラグアンドプレイOS」という項目があって、Yes/No
を選べるなら、Noを選択しておいて下さい。OSASKは今のところは、完
全なプラグアンドプレイOSではありませんから。これは、他のOSに害を
与えることはありません(プラグアンドプレイOSがインストールされて
いても、Noにして大丈夫です)。

  さて、問題は、ビデオカード依存バイトの決めかたです。RIVA128で
は01の様ですが、他のビデオカードでは違う値にしなければだめでしょ
う。これを突き止めなくてはいけません。この値が間違っていると、画
面は切り替わるものの、なにも表示されません。・・・もし、1280x102
4にならずに、640x480になってしまった場合、そのビデオカードは、VE
SAの画面モード0x0107をサポートしていないか、もしくは0501〜050fの
設定値が間違っている事を意味します。

  まず、ビデオカード依存バイトを00に設定してみることをお勧めしま
す。たいていはこれでうまく行くと思います。・・・で、うまく行かな
かったら、devlist1で、そのデバイスの詳細を表示させてみます。

Vender ID  : 0x12D2   NVidia Corporation
Device ID  : 0x0018
Revision   : 0x10
Class code : 0x030000   VGA compatible controller
Subsystem vender ID : 0x2A15   Asustek Computer, Inc.
Subsystem ID        : 0x54A3
Device name : Asustek V3000 rev.10 (NVidia RIVA128)

Base address list
no type   size   setting
-------------------------
 0 mem  01000000 EF000000
 1 mem  01000000 EC000008
 2 none 00000000 00000000
 3 none 00000000 00000000
 4 none 00000000 00000000
 5 none 00000000 00000000

  で、Base address listを見ます。実は、ビデオカード依存バイトと
いうのは、このベースアドレス番号と関連しています。00というのは、
ベースアドレスno.0のことです。01は、no.1のことです。で、このベー
スアドレスをよく見て、typeがmem(メモリのこと)で、サイズが比較
的大きなものを探して下さい(セッティングの部分は気にしないでいい
です)。その中のどれかが、高解像度用のVRAMを指しているはずなんで
す。

  しかし、設定値を適切に選びさえすれば、必ず高解像度表示に成功す
るとはいえません。実際、

5333 5631 06 030000 0000 0000 Diamond Stealth 3D 2000 (S3 ViRGE 325) rev.06

は、どんな設定をしてもだめでした(っていうか、0以外はnoneなので
、他の設定を試せない)。これは、今のドライバのアルゴリズムでは
カバーできないということです。そういう場合もありますので、過度
に期待をしないでください。

  それで、皆さんにお願いしたいのは、お持ちのビデオカードで高解像
度表示ができたかどうかを教えていただくことです。

・使っているビデオカードを特定するための12バイト
・800x600は表示できたか?
・1280x1024は表示できたか?その場合のビデオカード依存バイトの値
  は?

  この情報がある程度集まれば、ビデオカードのプラグアンドプレイが
できるようになります。

  それでは。

--
    川合 秀実(KAWAI Hidemi)
川合堂社長 / OSASK計画総指揮 / カーネル開発班
E-mail:kawai !Atmark! imasy.or.jp
Homepage http://www.imasy.or.jp/~kawai/