[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