X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FModules%2FDisplay%2FVESA%2Fmain.c;h=13fe798a902d6503b6e6ebc54c603cb51d683660;hb=e0c2db5162472ab3835ac5ce4da45dc58b41e252;hp=c9e3c84d8455da3e78f4819d6e5b1bd8a61ff140;hpb=533ed3e53b3b16da86c4e792eb52e0570e2cd21f;p=tpg%2Facess2.git diff --git a/KernelLand/Modules/Display/VESA/main.c b/KernelLand/Modules/Display/VESA/main.c index c9e3c84d..13fe798a 100644 --- a/KernelLand/Modules/Display/VESA/main.c +++ b/KernelLand/Modules/Display/VESA/main.c @@ -67,11 +67,19 @@ tTimer *gpVesaCursorTimer; int gbVesa_CursorVisible = 0; // --- 2D Video Stream Handlers --- tDrvUtil_Video_BufInfo gVesa_BufInfo; +// --- Settings --- +// int gbVesa_DisableFBCache; // Disables the main-memory framebuffer cache // === CODE === int Vesa_Install(char **Arguments) { int rv; + +// for( int i = 0; Arguments[i]; i ++ ) +// { +// if( strcmp(Aguments[i], "nocache") == 0 ) +// gbVesa_DisableFBCache = 1; +// } gpVesa_BiosState = VM8086_Init(); @@ -112,6 +120,8 @@ int VBE_int_GetModeList(void) } modes = (Uint16 *) VM8086_GetPointer(gpVesa_BiosState, info->VideoModes.seg, info->VideoModes.ofs); + LOG("Virtual addres of mode list from %04x:%04x is %p", + info->VideoModes.seg, info->VideoModes.ofs, modes); // VM8086_Deallocate( gpVesa_BiosState, info ); // Count Modes @@ -155,6 +165,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt return ; } + #if 0 #define S_LOG(s, fld, fmt) LOG(" ."#fld" = "fmt, (s).fld) LOG("vbeinfo[0x%x] = {", mode->code); S_LOG(*vbeinfo, attributes, "0x%02x"); @@ -166,6 +177,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt S_LOG(*vbeinfo, segmentB, "0x%04x"); LOG(" .realFctPtr = %04x:%04x", vbeinfo->realFctPtr.seg, vbeinfo->realFctPtr.ofs); S_LOG(*vbeinfo, pitch, "0x%04x"); + // -- Extended S_LOG(*vbeinfo, Xres, "%i"); S_LOG(*vbeinfo, Yres, "%i"); @@ -194,6 +206,7 @@ void VBE_int_FillMode_Int(int Index, tVesa_CallModeInfo *vbeinfo, tFarPtr *BufPt S_LOG(*vbeinfo, image_count_banked, "%i"); S_LOG(*vbeinfo, image_count_lfb, "%i"); LOG("}"); + #endif mode->flags = FLAG_POPULATED; if( !(vbeinfo->attributes & 1) ) { @@ -283,15 +296,11 @@ int Vesa_IOCtl(tVFS_Node *Node, int ID, void *Data) return Vesa_Int_ModeInfo((tVideo_IOCtl_Mode*)Data); case VIDEO_IOCTL_SETBUFFORMAT: - LOG("Hide cursor"); Vesa_int_HideCursor(); - LOG("Update internals"); ret = gVesa_BufInfo.BufferFormat; if(Data) gVesa_BufInfo.BufferFormat = *(int*)Data; - LOG("Swap back to text mode cursor"); if(gVesa_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT) DrvUtil_Video_SetCursor( &gVesa_BufInfo, &gDrvUtil_TextModeCursor ); - LOG("Show again"); Vesa_int_ShowCursor(); return ret; @@ -358,6 +367,8 @@ int Vesa_Int_SetMode(int mode) Mutex_Release( &glVesa_Lock ); + gVesa_BufInfo.BackBuffer = realloc(gVesa_BufInfo.BackBuffer, + gVesa_Modes[mode].height * gVesa_Modes[mode].pitch); gVesa_BufInfo.Framebuffer = gpVesa_Framebuffer; gVesa_BufInfo.Pitch = gVesa_Modes[mode].pitch; gVesa_BufInfo.Width = gVesa_Modes[mode].width; @@ -370,14 +381,14 @@ int Vesa_Int_SetMode(int mode) int Vesa_Int_FindMode(tVideo_IOCtl_Mode *data) { int i; - int best = -1, bestFactor = 1000; - int factor, tmp; + int best = -1, tmp; + unsigned int factor, bestFactor = -1; ENTER("idata->width idata->height idata->bpp", data->width, data->height, data->bpp); Vesa_int_FillModeList(); - for(i=0;iwidth * data->height; tmp = tmp < 0 ? -tmp : tmp; - factor = tmp * 1000 / (data->width * data->height); + factor = (Uint64)tmp * 1000 / (data->width * data->height); if( data->bpp == 8 && gVesa_Modes[i].bpp != 8 ) continue; if( data->bpp == 16 && gVesa_Modes[i].bpp != 16 ) continue;