X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Modules%2FDisplay%2FBochsGA%2Fbochsvbe.c;h=806c1c13e600030d852dea86518cbd57bd5a05a7;hb=a6666cba9c202317ce7e563f8f8b69caf04aa8a0;hp=d9aada9154c76b686aec2333411f112e9369a9e6;hpb=15442765f459f04d9bcd6eac6726221272cc0a96;p=tpg%2Facess2.git diff --git a/Modules/Display/BochsGA/bochsvbe.c b/Modules/Display/BochsGA/bochsvbe.c index d9aada91..806c1c13 100644 --- a/Modules/Display/BochsGA/bochsvbe.c +++ b/Modules/Display/BochsGA/bochsvbe.c @@ -64,19 +64,20 @@ void BGA_int_SetMode(Uint16 width, Uint16 height); int BGA_int_MapFB(void *Dest); // Filesystem Uint64 BGA_Read(tVFS_Node *Node, Uint64 off, Uint64 len, void *buffer); -Uint64 BGA_Write(tVFS_Node *Node, Uint64 off, Uint64 len, void *buffer); +Uint64 BGA_Write(tVFS_Node *Node, Uint64 off, Uint64 len, const void *buffer); int BGA_IOCtl(tVFS_Node *Node, int ID, void *Data); // === GLOBALS === MODULE_DEFINE(0, VERSION, BochsGA, BGA_Install, NULL, "PCI", NULL); -tDevFS_Driver gBGA_DriverStruct = { - NULL, "BochsGA", - { +tVFS_NodeType gBGA_NodeType = { .Read = BGA_Read, .Write = BGA_Write, .IOCtl = BGA_IOCtl - } -}; + }; +tDevFS_Driver gBGA_DriverStruct = { + NULL, "BochsGA", + {.Type = &gBGA_NodeType} + }; int giBGA_CurrentMode = -1; tVideo_IOCtl_Pos gBGA_CursorPos = {-1,-1}; Uint *gBGA_Framebuffer; @@ -160,7 +161,7 @@ Uint64 BGA_Read(tVFS_Node *node, Uint64 off, Uint64 len, void *buffer) /** * \brief Write to the framebuffer */ -Uint64 BGA_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) +Uint64 BGA_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, const void *Buffer) { if( giBGA_CurrentMode == -1 ) BGA_int_UpdateMode(0); return DrvUtil_Video_WriteLFB(&gBGA_DrvUtil_BufInfo, Offset, Length, Buffer); @@ -193,14 +194,29 @@ int BGA_IOCtl(tVFS_Node *Node, int ID, void *Data) break; case VIDEO_IOCTL_SETBUFFORMAT: + DrvUtil_Video_RemoveCursor( &gBGA_DrvUtil_BufInfo ); ret = gBGA_DrvUtil_BufInfo.BufferFormat; if(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: @@ -239,7 +255,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('-'); }