* Video Driver
*/
#define VERSION ((0<<8)|10)
+#define DEBUG 0
#include <acess.h>
#include <vfs.h>
#include <fs_devfs.h>
#include <modules.h>
-#include <tpl_drv_video.h>
+#include <api_drv_video.h>
#include "ui.h"
// === PROTOTYPES ===
// Sanity Check
if( Offset > (Uint64)(heightInChars*widthInChars) ) {
+ Log_Notice("Video", "Offset (%i) > %i*%i (%i)", Offset,
+ heightInChars, widthInChars, heightInChars*widthInChars);
LEAVE('i', 0);
return 0;
}
Log_Notice("Video", "Clipping write size to %i characters", (int)Length);
}
+// Log_Debug("Video", "(%i,%i) %i chars", x, y, (int)Length);
+
// Print characters
for( i = 0; i < (int)Length; i++ )
{
- VT_Font_Render(
- chars->Ch,
- //dest + x*giVT_CharWidth, pitch,
- tmpBuf, giVT_CharWidth,
- VT_Colour12to24(chars->BGCol),
- VT_Colour12to24(chars->FGCol)
- );
- UI_BlitBitmap(
- x*giVT_CharWidth, y*giVT_CharHeight,
- giVT_CharWidth, giVT_CharHeight,
- tmpBuf
- );
+ if( chars->Ch )
+ {
+// Log_Debug("Video", "Render Char 0x%x in 0x%03x:%03x",
+// chars->Ch, chars->FGCol, chars->BGCol);
+ memset(tmpBuf, 0xFF, giVT_CharWidth*giVT_CharHeight*4);
+ VT_Font_Render(
+ chars->Ch,
+ tmpBuf, 32, giVT_CharWidth*4,
+ VT_Colour12to24(chars->BGCol),
+ VT_Colour12to24(chars->FGCol)
+ );
+ UI_BlitBitmap(
+ x*giVT_CharWidth, y*giVT_CharHeight,
+ giVT_CharWidth, giVT_CharHeight,
+ tmpBuf
+ );
+ }
+ else
+ {
+ UI_FillBitmap(
+ x*giVT_CharWidth, y*giVT_CharHeight,
+ giVT_CharWidth, giVT_CharHeight,
+ VT_Colour12to24(chars->BGCol)
+ );
+ }
chars ++;
x ++;
}
LOG("buffer = %p", Buffer);
- LOG("Updating Framebuffer (%p to %p)", destBuf, destBuf + (Uint)Length);
startX = Offset % giUI_Width;
startY = Offset / giUI_Width;
return Length;
}
-const char * const csaVIDEO_IOCTLS[] = {DRV_IOCTLNAMES, DRV_VIDEO_IOCTLNAMES, NULL};
+const char * csaVIDEO_IOCTLS[] = {DRV_IOCTLNAMES, DRV_VIDEO_IOCTLNAMES, NULL};
/**
* \brief Handle messages to the device
*/
#if 0
case VIDEO_IOCTL_SETCURSOR: // Set cursor position
#if !BLINKING_CURSOR
- if(giVesaCursorX > 0)
- Vesa_FlipCursor(Node);
+ if(giVideo_CursorX > 0)
+ Video_FlipCursor(Node);
#endif
- giVesaCursorX = ((tVideo_IOCtl_Pos*)Data)->x;
- giVesaCursorY = ((tVideo_IOCtl_Pos*)Data)->y;
- //Log_Debug("VESA", "Cursor position (%i,%i)", giVesaCursorX, giVesaCursorY);
- if(
- giVesaCursorX < 0 || giVesaCursorY < 0
- || giVesaCursorX >= gpVesaCurMode->width/giVT_CharWidth
- || giVesaCursorY >= gpVesaCurMode->height/giVT_CharHeight)
+ giVideo_CursorX = ((tVideo_IOCtl_Pos*)Data)->x;
+ giVideo_CursorY = ((tVideo_IOCtl_Pos*)Data)->y;
+ if( giVideo_CursorX < 0 || giVesaCursorY < 0
+ || giVideo_CursorX >= gpVesaCurMode->width/giVT_CharWidth
+ || giVideo_CursorY >= gpVesaCurMode->height/giVT_CharHeight)
{
#if BLINKING_CURSOR
if(giVesaCursorTimer != -1) {
//Log_Debug("VESA", "Cursor position (%i,%i) Timer %i", giVesaCursorX, giVesaCursorY, giVesaCursorTimer);
return 0;
#endif
-
- case VIDEO_IOCTL_REQLFB: // Request Linear Framebuffer
- return 0;
}
return 0;
}