CLIe N700C 16bit color displayのメモ-----2001.9/2 00:23 rev.A

copyright 舟公木(jbc02370@nifty.ne.jp):禁転載,掲載

これは完全な方法の提示ではなく、あくまで私が経験的に得たことのメモです。動作を保証するわけではありません。
本件についてsony、MediaQへの問い合わせは遠慮願います。

  1. 1.情報源
    (1) sony clie developper's kit
    少なくともヘッダファイルが提供され、ハイレゾへの切り替え方法だけはわかる。
    (2) MediaQ MQ-1100/1132 LCD and Peripheral Controller Datasheet
    Preliminary Version June 8, 2001
    MediaQのサイトでダウンロード可能です。
  2. 2.切り替え手順
     (1) ハイレゾモードに切り替える(320x320x8bit color)
       これで画面サイズなどのレジスタは勝手に設定される。
     (2) MQ-1100を設定する。
       何を書くのがわかりやすいのか不明なので使ってるコードをこぴー。
    gOnScr = WinGetDisplayWindow();
    grp_reg = BmpGetBits(WinGetBitmap(gOnScr));
    // scradrは実際にデータを書き込むスクリーンバッファの開始位置
    //  grp_regをマスクしているのはMQ1100上に320x320x8の時2画面
    //  作成可能でどちらの画面のアドレスがくるか不明のため。
    scradr = (UInt16 *)((long)grp_reg & 0xfff00000L);
    // grp_regはMQ-1100のgrahic controllerのレジスタの開始アドレス
    grp_reg = (void *)((long)grp_reg & 0xfff00000L) + 0x40180;
    // MSB 7:0,15-8 LSB
    *(UInt16 *)grp_reg = 0xc900; //GC00R set 16bitcolor mode
    // Window Start Address (GC0CR: Index 30h, Offset 1B0h) bit17:0
    gc0cr1 = *(UInt16 *)(grp_reg+0x30); //保存しておいて終了時リストアすること
    gc0cr2 = *(UInt16 *)(grp_reg+0x32);
    *(UInt16 *)(grp_reg+0x30) = 0x0; //GC0CR window start addr
    *(UInt16 *)(grp_reg+0x32) = 0x0; //GC0CR window start addr
    // 0x1b8 GC0ER bit15:0 1行のバイト数 320*2=0x280
    *(UInt16 *)(grp_reg+0x38) = 0x8002; //GC0ER set line byte number
     (3) scradrが通常のBmpGetBitsで得たスクリーンのアドレスに相当するので
       好き放題書き込む。
       注意:私はpixelの描画はUInt16でアクセスしている(UInt32は上位・下位16bitがswapされる可能性大)
          pixel dataのendianはlittle endianなのでbyteをひっくり返すのを忘れないこと。
          (2)のレジスタ設定も同様である。
          OSサポート外なのでスクリーンメモリに書き込む一連の関数は全て(ハイレゾも含め)
          おかしな挙動になります。(オフスクリーンは16bit colorを使わなければ大丈夫)
          画面のスクリーンメモリは64Kを越えるのでオフスクリーンを作る場合は
          何個かに分割するなどの対応が必要となります。
     (4) 終了時
       gc0cr1,gc0cr2を元に戻す。
       screen modeを互換モードに戻す。(これで変更した他の部分は再設定される)

以上