X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FDisplay%2FBochsGA%2Fbochsvbe.c;h=58a024f96f9dae93b91ecc44078d8ea2a73c1e19;hb=de37bdfbcd4814c20babda4a7198736bf0effd3e;hp=3d3132a9c1f7be67194d227067254c29c6ca8c6e;hpb=231a5fe8671c58d6fa159f2f4f71ab353ae23cd8;p=tpg%2Facess2.git diff --git a/Modules/Display/BochsGA/bochsvbe.c b/Modules/Display/BochsGA/bochsvbe.c index 3d3132a9..58a024f9 100644 --- a/Modules/Display/BochsGA/bochsvbe.c +++ b/Modules/Display/BochsGA/bochsvbe.c @@ -78,7 +78,6 @@ tDevFS_Driver gBGA_DriverStruct = { } }; int giBGA_CurrentMode = -1; - int giBGA_BufferFormat = 0; tVideo_IOCtl_Pos gBGA_CursorPos = {-1,-1}; Uint *gBGA_Framebuffer; const tBGA_Mode *gpBGA_CurrentMode; @@ -104,10 +103,10 @@ int BGA_Install(char **Arguments) version = BGA_int_ReadRegister(VBE_DISPI_INDEX_ID); LOG("version = 0x%x", version); - // NOTE: This driver was written for later than 0xB0C2 - // NOTE: Qemu is braindead and doesn't return the actual version + // NOTE: This driver was written for BGA versions >= 0xBOC2 + // NOTE: However, Qemu is braindead and doesn't return the actual version if( version != 0xB0C0 && ((version & 0xFFF0) != 0xB0C0 || version < 0xB0C2) ) { - Log_Warning("BGA", "Bochs Adapter Version is not 0xB0C4 or 0xB0C5, instead 0x%x", version); + Log_Warning("BGA", "Bochs Adapter Version is not compatible (need >= 0xB0C2), instead 0x%x", version); return MODULE_ERR_NOTNEEDED; } @@ -120,7 +119,6 @@ int BGA_Install(char **Arguments) // Map Framebuffer to hardware address gBGA_Framebuffer = (void *) MM_MapHWPages(base, 768); // 768 pages (3Mb) - MM_DumpTables(0, -1); // Install Device if( DevFS_AddDevice( &gBGA_DriverStruct ) == -1 ) @@ -138,7 +136,7 @@ int BGA_Install(char **Arguments) void BGA_Uninstall(void) { DevFS_DelDevice( &gBGA_DriverStruct ); - MM_UnmapHWPages( VBE_DISPI_LFB_PHYSICAL_ADDRESS, 768 ); + MM_UnmapHWPages( (tVAddr)gBGA_Framebuffer, 768 ); } /** @@ -165,7 +163,7 @@ Uint64 BGA_Read(tVFS_Node *node, Uint64 off, Uint64 len, void *buffer) Uint64 BGA_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) { if( giBGA_CurrentMode == -1 ) BGA_int_UpdateMode(0); - return DrvUtil_Video_WriteLFB(giBGA_BufferFormat, &gBGA_DrvUtil_BufInfo, Offset, Length, Buffer); + return DrvUtil_Video_WriteLFB(&gBGA_DrvUtil_BufInfo, Offset, Length, Buffer); } const char *csaBGA_IOCtls[] = {DRV_IOCTLNAMES, DRV_VIDEO_IOCTLNAMES, NULL}; @@ -195,14 +193,29 @@ int BGA_IOCtl(tVFS_Node *Node, int ID, void *Data) break; case VIDEO_IOCTL_SETBUFFORMAT: - ret = giBGA_BufferFormat; + DrvUtil_Video_RemoveCursor( &gBGA_DrvUtil_BufInfo ); + ret = gBGA_DrvUtil_BufInfo.BufferFormat; if(Data) - giBGA_BufferFormat = *(int*)Data; + gBGA_DrvUtil_BufInfo.BufferFormat = *(int*)Data; + if(gBGA_DrvUtil_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT) + DrvUtil_Video_SetCursor( &gBGA_DrvUtil_BufInfo, &gDrvUtil_TextModeCursor ); break; case VIDEO_IOCTL_SETCURSOR: + DrvUtil_Video_RemoveCursor( &gBGA_DrvUtil_BufInfo ); gBGA_CursorPos.x = ((tVideo_IOCtl_Pos*)Data)->x; gBGA_CursorPos.y = ((tVideo_IOCtl_Pos*)Data)->y; + if(gBGA_DrvUtil_BufInfo.BufferFormat == VIDEO_BUFFMT_TEXT) + DrvUtil_Video_DrawCursor( + &gBGA_DrvUtil_BufInfo, + gBGA_CursorPos.x*giVT_CharWidth, + gBGA_CursorPos.y*giVT_CharHeight + ); + else + DrvUtil_Video_DrawCursor( + &gBGA_DrvUtil_BufInfo, + gBGA_CursorPos.x, gBGA_CursorPos.y + ); break; default: @@ -241,7 +254,6 @@ void BGA_int_SetMode(Uint16 Width, Uint16 Height) BGA_int_WriteRegister(VBE_DISPI_INDEX_YRES, Height); BGA_int_WriteRegister(VBE_DISPI_INDEX_BPP, 32); BGA_int_WriteRegister(VBE_DISPI_INDEX_ENABLE, VBE_DISPI_ENABLED | VBE_DISPI_NOCLEARMEM | VBE_DISPI_LFB_ENABLED); - MAGIC_BREAK(); LEAVE('-'); }