CLIe N700C 16bit color displayのメモ-----2001.9/2 00:23 rev.A
copyright 舟公木(jbc02370@nifty.ne.jp):禁転載,掲載
これは完全な方法の提示ではなく、あくまで私が経験的に得たことのメモです。動作を保証するわけではありません。
本件についてsony、MediaQへの問い合わせは遠慮願います。
- 1.情報源
(1) sony clie developper's kit
少なくともヘッダファイルが提供され、ハイレゾへの切り替え方法だけはわかる。
(2) MediaQ MQ-1100/1132 LCD and Peripheral Controller Datasheet
Preliminary Version June 8, 2001
MediaQのサイトでダウンロード可能です。
- 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を互換モードに戻す。(これで変更した他の部分は再設定される)
以上