#define FLAG_POPULATED 0x2\r
#define FLAG_VALID 0x4\r
#define VESA_DEFAULT_FRAMEBUFFER (KERNEL_BASE|0xA0000)\r
-#define BLINKING_CURSOR 1\r
+#define BLINKING_CURSOR 0\r
#if BLINKING_CURSOR\r
# define VESA_CURSOR_PERIOD 1000\r
#endif\r
// === PROTOTYPES ===\r
int Vesa_Install(char **Arguments);\r
int VBE_int_GetModeList(void);\r
-size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer);\r
+size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags);\r
int Vesa_IOCtl(tVFS_Node *Node, int ID, void *Data);\r
int Vesa_Int_SetMode(int Mode);\r
int Vesa_Int_FindMode(tVideo_IOCtl_Mode *data);\r
int gbVesa_CursorVisible = 0;\r
// --- 2D Video Stream Handlers ---\r
tDrvUtil_Video_BufInfo gVesa_BufInfo;\r
+// --- Settings ---\r
+// int gbVesa_DisableFBCache; // Disables the main-memory framebuffer cache\r
\r
// === CODE ===\r
int Vesa_Install(char **Arguments)\r
{\r
int rv;\r
+\r
+// for( int i = 0; Arguments[i]; i ++ )\r
+// {\r
+// if( strcmp(Aguments[i], "nocache") == 0 )\r
+// gbVesa_DisableFBCache = 1;\r
+// }\r
\r
gpVesa_BiosState = VM8086_Init();\r
\r
}\r
\r
modes = (Uint16 *) VM8086_GetPointer(gpVesa_BiosState, info->VideoModes.seg, info->VideoModes.ofs);\r
+ LOG("Virtual addres of mode list from %04x:%04x is %p",\r
+ info->VideoModes.seg, info->VideoModes.ofs, modes);\r
// VM8086_Deallocate( gpVesa_BiosState, info );\r
\r
// Count Modes\r
return ;\r
}\r
\r
+ #if 0\r
#define S_LOG(s, fld, fmt) LOG(" ."#fld" = "fmt, (s).fld)\r
LOG("vbeinfo[0x%x] = {", mode->code);\r
S_LOG(*vbeinfo, attributes, "0x%02x");\r
S_LOG(*vbeinfo, segmentB, "0x%04x");\r
LOG(" .realFctPtr = %04x:%04x", vbeinfo->realFctPtr.seg, vbeinfo->realFctPtr.ofs);\r
S_LOG(*vbeinfo, pitch, "0x%04x");\r
+\r
// -- Extended\r
S_LOG(*vbeinfo, Xres, "%i");\r
S_LOG(*vbeinfo, Yres, "%i");\r
S_LOG(*vbeinfo, image_count_banked, "%i");\r
S_LOG(*vbeinfo, image_count_lfb, "%i");\r
LOG("}");\r
+ #endif\r
\r
mode->flags = FLAG_POPULATED;\r
if( !(vbeinfo->attributes & 1) ) {\r
/**\r
* \brief Write to the framebuffer\r
*/\r
-size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer)\r
+size_t Vesa_Write(tVFS_Node *Node, off_t Offset, size_t Length, const void *Buffer, Uint Flags)\r
{\r
if( gVesa_Modes[giVesaCurrentMode].framebuffer == 0 ) {\r
Log_Warning("VESA", "Vesa_Write - Non-LFB Modes not yet supported.");\r
\r
Vesa_int_FillModeList();\r
\r
+ #if BLINKING_CURSOR\r
Time_RemoveTimer(gpVesaCursorTimer);\r
+ #endif\r
\r
Mutex_Acquire( &glVesa_Lock );\r
\r
\r
Mutex_Release( &glVesa_Lock );\r
\r
+ gVesa_BufInfo.BackBuffer = realloc(gVesa_BufInfo.BackBuffer,\r
+ gVesa_Modes[mode].height * gVesa_Modes[mode].pitch);\r
gVesa_BufInfo.Framebuffer = gpVesa_Framebuffer;\r
gVesa_BufInfo.Pitch = gVesa_Modes[mode].pitch;\r
gVesa_BufInfo.Width = gVesa_Modes[mode].width;\r
int Vesa_Int_FindMode(tVideo_IOCtl_Mode *data)\r
{\r
int i;\r
- int best = -1, bestFactor = 1000;\r
- int factor, tmp;\r
+ int best = -1, tmp;\r
+ unsigned int factor, bestFactor = -1;\r
\r
ENTER("idata->width idata->height idata->bpp", data->width, data->height, data->bpp);\r
\r
Vesa_int_FillModeList();\r
\r
- for(i=0;i<giVesaModeCount;i++)\r
+ for(i = 0; i < giVesaModeCount; i ++)\r
{\r
LOG("Mode %i (%ix%ix%i)", i, gVesa_Modes[i].width, gVesa_Modes[i].height, gVesa_Modes[i].bpp);\r
\r
tmp = gVesa_Modes[i].width * gVesa_Modes[i].height;\r
tmp -= data->width * data->height;\r
tmp = tmp < 0 ? -tmp : tmp;\r
- factor = tmp * 1000 / (data->width * data->height);\r
+ factor = (Uint64)tmp * 1000 / (data->width * data->height);\r
\r
if( data->bpp == 8 && gVesa_Modes[i].bpp != 8 ) continue;\r
if( data->bpp == 16 && gVesa_Modes[i].bpp != 16 ) continue;\r