--- /dev/null
+\r
+#include "core.h"\r
+\r
+void (*Draw_Put_String)(void *vram, uint xsize, uint x, uint y, uint c, const uchar *s);\r
+void (*Draw_Fill_Rectangle)(void *vram, uint xsize, uint c, uint x0, uint y0, uint x1, uint y1);\r
+void (*Draw_Slide_Line)(void *vram, uint xsize, uint ysize, uint vxsize, uint px, uint py);\r
+\r
+void Initialise_Graphic(uint bpp)\r
+{\r
+ if(bpp == 8){\r
+ Draw_Initialise_Palette();\r
+ Draw_Put_String = Draw_Put_String_08;\r
+ Draw_Fill_Rectangle = Draw_Fill_Rectangle_08;\r
+ Draw_Slide_Line = Draw_Slide_Line_08;\r
+ } else if(bpp == 16){\r
+ Draw_Put_String = Draw_Put_String_16;\r
+ Draw_Fill_Rectangle = Draw_Fill_Rectangle_16;\r
+ Draw_Slide_Line = Draw_Slide_Line_16;\r
+ } else if(bpp == 32){\r
+ Draw_Put_String = Draw_Put_String_32;\r
+ Draw_Fill_Rectangle = Draw_Fill_Rectangle_32;\r
+ Draw_Slide_Line = Draw_Slide_Line_32;\r
+ }\r
+ return;\r
+}\r
+\r
+uchar RGB_32_To_08(uint c32)\r
+{\r
+ uchar c8;\r
+ uchar c[4];\r
+\r
+ c[3] = (c32 << 24) >> 24;\r
+ c[2] = (c32 << 16) >> 24;\r
+ c[1] = (c32 << 8) >> 24;\r
+ c[0] = (c32 >> 24);\r
+\r
+ c[1] = c[1] / 51;\r
+ c[2] = c[2] / 51;\r
+ c[3] = c[3] / 51;\r
+\r
+ c8 = (c[1] + c[2] * 6 + c[3] * 36) + 16;\r
+\r
+ return c8;\r
+}\r
+\r
+uchar RGB_32_To_08_xy(uint c32, int x, int y)\r
+{\r
+ static int table[4] = { 3, 1, 0, 2 };\r
+ uchar c8;\r
+ uchar c[4];\r
+ int i;\r
+\r
+ c[3] = (c32 << 24) >> 24;\r
+ c[2] = (c32 << 16) >> 24;\r
+ c[1] = (c32 << 8) >> 24;\r
+ c[0] = (c32 >> 24);\r
+\r
+ x &= 1; /* \8bô\90\94\82©\8aï\90\94\82© */\r
+ y &= 1;\r
+\r
+ i = table[x + y * 2]; /* \92\86\8aÔ\90F\82ð\8dì\82é\82½\82ß\82Ì\92è\90\94 */\r
+ c[1] = (c[1] * 21) / 256; /* \82±\82ê\82Å 0\81`20 \82É\82È\82é */\r
+ c[2] = (c[2] * 21) / 256;\r
+ c[3] = (c[3] * 21) / 256;\r
+ c[1] = (c[1] + i) / 4; /* \82±\82ê\82Å 0\81`5 \82É\82È\82é */\r
+ c[2] = (c[2] + i) / 4;\r
+ c[3] = (c[3] + i) / 4;\r
+\r
+ c8 = 16 + c[1] + c[2] * 6 + c[3] * 36;\r
+\r
+ return c8;\r
+}\r
+\r
+ushort RGB_32_To_16(uint c32)\r
+{\r
+ ushort c16;\r
+ uchar c[4];\r
+\r
+ c[3] = (c32 << 24) >> 24;\r
+ c[2] = (c32 << 16) >> 24;\r
+ c[1] = (c32 << 8) >> 24;\r
+ c[0] = (c32 >> 24);\r
+\r
+ c16 = ((c[1] >> 3) << 11 | (c[2] >> 2) << 5 | (c[3] >> 3));\r
+ \r
+ return c16;\r
+}\r
+\r
+uchar Emergency_Out_Count;\r
+\r
+void Emergency_Out_Reset(void)\r
+{\r
+ Emergency_Out_Count = 0;\r
+ return;\r
+}\r
+\r
+int Emergency_Out(const uchar *format, ...)\r
+{\r
+ int i;\r
+ va_list ap;\r
+ uchar s[256];\r
+ DATA_VESAInfo *vesa = (DATA_VESAInfo *) ADR_VESAINFO;\r
+ DATA_BootInfo *boot = (DATA_BootInfo *) ADR_BOOTINFO;\r
+\r
+ va_start(ap, format);\r
+ i = vsprintf(s, format, ap);\r
+ va_end(ap);\r
+\r
+ Draw_Fill_Rectangle(vesa->PhysBasePtr, boot->scrnx, 0x000000, 0, Emergency_Out_Count << 4, boot->scrnx - 1, (Emergency_Out_Count << 4) + 15);\r
+ Draw_Put_String(vesa->PhysBasePtr, boot->scrnx, 0, Emergency_Out_Count << 4, 0xFFFFFF, s);\r
+\r
+ if(Emergency_Out_Count < 12){\r
+ Emergency_Out_Count++;\r
+ }\r
+\r
+ return i;\r
+}\r