}\r
};\r
int giBGA_CurrentMode = -1;\r
- int giBGA_BufferFormat = 0;\r
tVideo_IOCtl_Pos gBGA_CursorPos = {-1,-1};\r
Uint *gBGA_Framebuffer;\r
const tBGA_Mode *gpBGA_CurrentMode;\r
version = BGA_int_ReadRegister(VBE_DISPI_INDEX_ID);\r
LOG("version = 0x%x", version);\r
\r
- // NOTE: This driver was written for later than 0xB0C2\r
- // NOTE: Qemu is braindead and doesn't return the actual version\r
+ // NOTE: This driver was written for BGA versions >= 0xBOC2\r
+ // NOTE: However, Qemu is braindead and doesn't return the actual version\r
if( version != 0xB0C0 && ((version & 0xFFF0) != 0xB0C0 || version < 0xB0C2) ) {\r
- Log_Warning("BGA", "Bochs Adapter Version is not 0xB0C4 or 0xB0C5, instead 0x%x", version);\r
+ Log_Warning("BGA", "Bochs Adapter Version is not compatible (need >= 0xB0C2), instead 0x%x", version);\r
return MODULE_ERR_NOTNEEDED;\r
}\r
\r
\r
// Map Framebuffer to hardware address\r
gBGA_Framebuffer = (void *) MM_MapHWPages(base, 768); // 768 pages (3Mb)\r
- MM_DumpTables(0, -1);\r
\r
// Install Device\r
if( DevFS_AddDevice( &gBGA_DriverStruct ) == -1 )\r
void BGA_Uninstall(void)\r
{\r
DevFS_DelDevice( &gBGA_DriverStruct );\r
- MM_UnmapHWPages( VBE_DISPI_LFB_PHYSICAL_ADDRESS, 768 );\r
+ MM_UnmapHWPages( (tVAddr)gBGA_Framebuffer, 768 );\r
}\r
\r
/**\r
Uint64 BGA_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer)\r
{\r
if( giBGA_CurrentMode == -1 ) BGA_int_UpdateMode(0);\r
- return DrvUtil_Video_WriteLFB(giBGA_BufferFormat, &gBGA_DrvUtil_BufInfo, Offset, Length, Buffer);\r
+ return DrvUtil_Video_WriteLFB(&gBGA_DrvUtil_BufInfo, Offset, Length, Buffer);\r
}\r
\r
const char *csaBGA_IOCtls[] = {DRV_IOCTLNAMES, DRV_VIDEO_IOCTLNAMES, NULL};\r
break;\r
\r
case VIDEO_IOCTL_SETBUFFORMAT:\r
- ret = giBGA_BufferFormat;\r
+ DrvUtil_Video_RemoveCursor( &gBGA_DrvUtil_BufInfo );\r
+ ret = gBGA_DrvUtil_BufInfo.BufferFormat;\r
if(Data)\r
- giBGA_BufferFormat = *(int*)Data;\r
+ gBGA_DrvUtil_BufInfo.BufferFormat = *(int*)Data;\r
+ if(gBGA_DrvUtil_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT)\r
+ DrvUtil_Video_SetCursor( &gBGA_DrvUtil_BufInfo, &gDrvUtil_TextModeCursor );\r
break;\r
\r
case VIDEO_IOCTL_SETCURSOR:\r
+ DrvUtil_Video_RemoveCursor( &gBGA_DrvUtil_BufInfo );\r
gBGA_CursorPos.x = ((tVideo_IOCtl_Pos*)Data)->x;\r
gBGA_CursorPos.y = ((tVideo_IOCtl_Pos*)Data)->y;\r
+ if(gBGA_DrvUtil_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT)\r
+ DrvUtil_Video_DrawCursor(\r
+ &gBGA_DrvUtil_BufInfo,\r
+ gBGA_CursorPos.x*giVT_CharWidth,\r
+ gBGA_CursorPos.y*giVT_CharHeight\r
+ );\r
+ else\r
+ DrvUtil_Video_DrawCursor(\r
+ &gBGA_DrvUtil_BufInfo,\r
+ gBGA_CursorPos.x, gBGA_CursorPos.y\r
+ );\r
break;\r
\r
default:\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_YRES, Height);\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_BPP, 32);\r
BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_NOCLEARMEM | VBE_DISPI_LFB_ENABLED);\r
- MAGIC_BREAK();\r
LEAVE('-');\r
}\r
\r