Windows Mobile デベロッパー センター > Windows Mobile 向けアプリケーション開発 フォーラム > Windows CE > OS(CE 6.0)が立ち上がるまでの黒い画面上にロゴを出したい
質問する質問する
 

回答済みOS(CE 6.0)が立ち上がるまでの黒い画面上にロゴを出したい

  • 2009年8月28日 1:41鏑木肆星 ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    いつもお世話になっております、鏑木と申します。
    CE6.0について詳しいお答えもらうのに、こちらのフォーラムが一番適している為、毎度の
    質問で申し訳ございません。

    今回お聞きしたいことは、OS(CE 6.0)が電源を投入してから立ち上がるまでに20秒程かかる
    のですが、その間がずっと黒い画面(何も表示されていない)のままな為、正常に動いているのか
    相手にわかりません。
    そこで、その黒い画面時に、何も表示しないのではなく、ある画像(ロゴや文字)を表示させたい
    と思っているのですが、その為にどの箇所を修正すれば良いのでしょうか?
    私としては、BSPがあやしいのかなと思い、いろいろ見てはいるのですが修正箇所を未だ見つけれず
    におりません。
    どなたか、ご存じの方がいらっしゃいましたら、ご意見を頂ければと思っております。

    開発環境は
    Windows CE 6.0
    使用しているBSPは
    Geode LX
    開発環境は
    Visual Studio 2005 C++
    です。
    どうか、よろしくお願いいたします。

回答

  • 2009年9月26日 14:42hnakayam ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    このようなロゴは普通ブートローダーで出していると思います。

    GeodeLXであれば、BIOSを使ったBIOSローダーかBIOSと置き換わるROMローダーを使用すると思います。

    x86 BIOS Boot Loader
    http://msdn.microsoft.com/en-us/library/aa914786.aspx

    x86 ROM Boot Loader
    http://msdn.microsoft.com/en-us/library/aa914476.aspx


    BIOSローダーの場合はそもそもBIOSが何らか画面の初期化をして、ひょっとすると画面にBIOSメーカのロゴが出るかと思いますが、そのようなことはありませんか?
    また、BIOSローダーが動作するタイミングでは画面は初期化済みだったり、VESA BIOSで画面モードが変えたりできると思うので、あとはPCのプログラムと同じくフレームバッファに直に書き込めばよいと思います。

    ROMローダーの場合であればローダー時点では画面が初期化されていない可能性があると思いますが、画面初期化のコードをローダー内に自分で組み込み、同様にフレームバッファに直にビットマップを書くことになると思います。

    hnakayam

すべての返信

  • 2009年9月26日 14:42hnakayam ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     回答済み
    このようなロゴは普通ブートローダーで出していると思います。

    GeodeLXであれば、BIOSを使ったBIOSローダーかBIOSと置き換わるROMローダーを使用すると思います。

    x86 BIOS Boot Loader
    http://msdn.microsoft.com/en-us/library/aa914786.aspx

    x86 ROM Boot Loader
    http://msdn.microsoft.com/en-us/library/aa914476.aspx


    BIOSローダーの場合はそもそもBIOSが何らか画面の初期化をして、ひょっとすると画面にBIOSメーカのロゴが出るかと思いますが、そのようなことはありませんか?
    また、BIOSローダーが動作するタイミングでは画面は初期化済みだったり、VESA BIOSで画面モードが変えたりできると思うので、あとはPCのプログラムと同じくフレームバッファに直に書き込めばよいと思います。

    ROMローダーの場合であればローダー時点では画面が初期化されていない可能性があると思いますが、画面初期化のコードをローダー内に自分で組み込み、同様にフレームバッファに直にビットマップを書くことになると思います。

    hnakayam
  • 2009年9月28日 8:47鏑木肆星 ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    hnakayam様、かなり前の投稿なのにご回答ありがとうございます。

    >GeodeLXであれば、BIOSを使ったBIOSローダーかBIOSと置き換わるROMローダーを使用すると思います。

    私が現在使用している方法はBIOSローダだと思われます。
    ですが、BIOSメーカーのロゴのようなものは表示されず、いきなりWindows CE のロゴが表示され、そのロゴの下のバーが動き、
    バーが右端まで到達すると、画面がブラックアウトし、約40秒程経過して、OSが立ち上がります。

    >また、BIOSローダーが動作するタイミングでは画面は初期化済みだったり、VESA BIOSで画面モードが変えたりできると思うので、あとはPCのプログラムと同じくフレームバッファに直に書き込めばよいと思います。
    理解力が乏しく、申し訳ございません。PCのプログラムと同じくフレームバッファに直に書き込む、というのはどういうことなのでしょうか?bibファイルやregファイルを編集するということでしょうか?

    なかなかOSについての知識を得る場がなく、なかなか進歩していないのですが、ご助力頂ければと思っております。よろしくお願いいたします。

    鏑木
  • 2009年10月26日 13:05hnakayam ユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダルユーザーのメダル
     
    私が現在使用している方法はBIOSローダだと思われます。
    ですが、BIOSメーカーのロゴのようなものは表示されず、いきなりWindows CE のロゴが表示され、そのロゴの下のバーが動き、
    バーが右端まで到達すると、画面がブラックアウトし、約40秒程経過して、OSが立ち上がります。


    このような状況だと、"Windows CE のロゴが表示され、そのロゴの下のバーが動き、バーが右端まで到達すると、画面がブラックアウトし"までがブートローダーの動作で、
    "約40秒程経過して"以降がOS起動後、ディスプレイドライバが動作し最初のアプリケーションが画面描画するまでだと思われます。

    で、この場合すでに「起動時のロゴ」は出ているのではないでしょうか? このローダーを改造するのが(可能であれば)いちばんまっとうだと思います。

    >理解力が乏しく、申し訳ございません。PCのプログラムと同じくフレームバッファに直に書き込む、というのはどういうことなのでしょうか?

    BIOSローダー内ではVESA BIOSで画面モードを設定し、そのフレームバッファの物理アドレスを取得することができます。(というかすでにそうなっているはずです)

    こうやって取得したフレームバッファメモリに対して直接書き込みます。
    たとえば256色モードであれば(パレット次第ではありますが)0x00をメモリアドレスに書けば白、0xffを書けば黒とか。

    WIndows CEのアプリレベルの話ではありません。言ってみればDOS時代(あるいはDOS Extension時代)の画面描画の方法です。
    昔あったFlight UnlimitedとかのゲームはProtect Mode DOSで画面描画をしていました。


    hnakayam