[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pbsd-mg2] Re: E-55 Builtin Console Params
> pbsdboot.exe を修正しているのですが、
> Cassiopeia E-55 のフレームバッファの情報を知っているひとは
> 教えてください。
遅くなりました。_o_
> pbsdboot のメニューに追加するには、以下の情報が必要です。
>
> ドット数(縦×横)
縦240×横320
> 1 ラインのバイト数
256byte
> スタートアドレス
これは、VRAM のアドレスのことでしょうか?
他のマシンと同様 0xAA000000 です。
> ビットの構成( 1pixel が 2 ビットであるとか、11 が白だとか、MSB
> が右だとか)
1pixel 2bit です。
bit 00: 黒
bit 01: 濃灰
bit 10: 薄灰
bit 11: 白
1byte を構成する 4 pixel は、MSB側が画面左、LSB側が画面右です。
参考になるかどうか分かりませんが、bicons.c: revision 1.1 に対する
いい加減なパッチをつけておきます。(いい加減ですみません)
------------------------------ ここから ------------------------------
*** bicons.c- Thu Feb 11 20:37:17 1999
--- bicons.c Fri Apr 2 09:19:29 1999
***************
*** 37,42 ****
--- 37,44 ----
static void xmemcpy(volatile void *dst0, volatile const void *src0, int length);
#endif
+ static void put_oxel_XXXX(u_char*, u_char, u_char);
+ static void put_oxel_XXXXx2(u_char*, u_char, u_char);
static void put_oxel_D2_M2L_3(u_char*, u_char, u_char);
static void put_oxel_D2_M2L_3x2(u_char*, u_char, u_char);
static void put_oxel_D2_M2L_0(u_char*, u_char, u_char);
***************
*** 227,232 ****
--- 229,235 ----
int fb_index = -1;
TRACE(1, 0);
+ #if 0 /* XXX: E-55 */
if (bootinfo) {
TRACE(1, 1);
for (fb_index = 0; fb_index < FB_TABLE_SIZE; fb_index++) {
***************
*** 265,270 ****
--- 268,288 ----
fb_put_oxel = put_oxel_D2_M2L_3;
#endif
}
+ #else /* E-55 */
+ fb_vram = (unsigned char*)0xAA000000;
+ fb_line_bytes = 256;
+ fb_clear_byte = 0xff; /* 11b:white, 00b:black */
+ fb_height = 320;
+ #ifdef HALF_FONT
+ fb_width = 480; /* fake */
+ fb_oxel_bytes = 1;
+ fb_put_oxel = put_oxel_XXXXx2;
+ #else
+ fb_width = 240;
+ fb_oxel_bytes = 2;
+ fb_put_oxel = put_oxel_XXXX;
+ #endif
+ #endif /* E-55 */
width = fb_width / (8 * FONT_WIDTH);
height = fb_height / FONT_HEIGHT;
***************
*** 277,287 ****
--- 295,309 ----
if (bootinfo) {
bicons_puts(fb_table[fb_index].name);
} else {
+ #if 0 /* E-55 */
#ifdef HALF_FONT
bicons_puts("default(D2_M2L_3x2)");
#else
bicons_puts("default(D2_M2L_3)");
#endif
+ #else /* E-55 */
+ bicons_puts("E-55 hack");
+ #endif /* E-55 */
}
bicons_puts("\n");
***************
*** 312,317 ****
--- 334,371 ----
}
}
#endif
+
+ /*=============================================================================
+ *
+ * XXXX
+ *
+ */
+ static void
+ put_oxel_XXXX(u_char* xaddr, u_char data, u_char mask)
+ {
+ static unsigned char map[] = {
+ 0x00, 0x03, 0x0c, 0x0f, 0x30, 0x33, 0x3c, 0x3f,
+ 0xc0, 0xc3, 0xcc, 0xcf, 0xf0, 0xf3, 0xfc, 0xff,
+ };
+ u_char* addr = xaddr;
+
+ *addr++ = ~map[(data >> 4) & 0xf];
+ *addr = ~map[data & 0xf];
+ }
+
+ /*=============================================================================
+ *
+ * XXXXx2
+ *
+ */
+ static void
+ put_oxel_XXXXx2(u_char* xaddr, u_char data, u_char mask)
+ {
+ register u_char odd = (data & 0xaa);
+ register u_char even = (data & 0x55);
+
+ *xaddr = ~((odd | (even << 1)) | ((odd >> 1) & even));
+ }
/*=============================================================================
*
------------------------------ ここまで ------------------------------
--
soda