};\r
tSpinlock glVesa_Lock;\r
tVM8086 *gpVesa_BiosState;\r
- int giVesaCurrentMode = -1;\r
+ int giVesaCurrentMode = 0;\r
int giVesaCurrentFormat = VIDEO_BUFFMT_TEXT;\r
int giVesaDriverId = -1;\r
char *gVesaFramebuffer = (void*)0xC00A0000;\r
gVesa_Modes[i].fbSize = 0;\r
}\r
\r
+ gVesa_Modes[i].pitch = modeinfo->pitch;\r
gVesa_Modes[i].width = modeinfo->Xres;\r
gVesa_Modes[i].height = modeinfo->Yres;\r
gVesa_Modes[i].bpp = modeinfo->bpp;\r
// Default Text mode\r
if( giVesaCurrentMode == 0 )\r
{\r
- Uint8 *fb = (Uint8 *)(KERNEL_BASE|0xB8000);\r
- Uint32 *buf = Buffer;\r
+ Uint16 *fb = (Uint16*)(KERNEL_BASE|0xB8000);\r
+ tVT_Char *chars = Buffer;\r
int rem;\r
\r
if( giVesaCurrentFormat != VIDEO_BUFFMT_TEXT ) {\r
return -1;\r
}\r
\r
- if( Offset + Length > 25*80*8 ) {\r
+ if( Offset + Length > 25*80*sizeof(tVT_Char) ) {\r
Log_Warning("VESA", "Vesa_Write - Framebuffer Overflow");\r
LEAVE('i', 0);\r
return 0;\r
}\r
\r
- fb += 2*Offset;\r
- for(rem = Length / sizeof(tVT_Char); rem --; fb += 2)\r
+ fb += 2*(Offset/sizeof(tVT_Char));\r
+ LOG("fb = %p", fb);\r
+ for(rem = Length / sizeof(tVT_Char); rem --; fb ++, chars++)\r
{\r
- if( *buf < 0x80 )\r
- *fb = *buf & 0x7F;\r
+ if( chars->Ch < 0x80 )\r
+ *fb = chars->Ch & 0x7F;\r
else\r
*fb = 0x00;\r
- buf ++;\r
\r
- fb[1] = 0;\r
- fb[1] |= (*buf & 0x888) == 0x888 ? 0x8 : 0;\r
- fb[1] |= (*buf & 0x700) > 0x300 ? 0x4 : 0;\r
- fb[1] |= (*buf & 0x070) > 0x030 ? 0x2 : 0;\r
- fb[1] |= (*buf & 0x007) > 0x003 ? 0x1 : 0;\r
- fb[1] |= (*buf & 0x888000) == 0x888000 ? 0x80 : 0;\r
- fb[1] |= (*buf & 0x700000) > 0x300000 ? 0x40 : 0;\r
- fb[1] |= (*buf & 0x070000) > 0x030000 ? 0x20 : 0;\r
- fb[1] |= (*buf & 0x007000) > 0x003000 ? 0x10 : 0;\r
- buf ++;\r
+ *fb |= (chars->FGCol & 0x888) == 0x888 ? 0x8 : 0;\r
+ *fb |= (chars->FGCol & 0x700) > 0x300 ? 0x4 : 0;\r
+ *fb |= (chars->FGCol & 0x070) > 0x030 ? 0x2 : 0;\r
+ *fb |= (chars->FGCol & 0x007) > 0x003 ? 0x1 : 0;\r
+ *fb |= (chars->BGCol & 0x888) == 0x888 ? 0x80 : 0;\r
+ *fb |= (chars->BGCol & 0x700) > 0x300 ? 0x40 : 0;\r
+ *fb |= (chars->BGCol & 0x070) > 0x030 ? 0x20 : 0;\r
+ *fb |= (chars->BGCol & 0x007) > 0x003 ? 0x10 : 0;\r
+ //LOG("%08x (%03x,%03x) = %04x",\r
+ // chars->Ch, chars->BGCol, chars->FGCol, *fb);\r
}\r
Length /= sizeof(tVT_Char);\r
Length *= sizeof(tVT_Char);\r
\r
Offset /= sizeof(tVT_Char);\r
dest = (void*)gVesaFramebuffer;\r
- x = (Offset % gVesa_Modes[giVesaCurrentMode].width) * giVT_CharWidth;\r
- y = (Offset / gVesa_Modes[giVesaCurrentMode].width) * giVT_CharHeight;\r
+ LOG("gVesa_Modes[%i].width = %i", giVesaCurrentMode, gVesa_Modes[giVesaCurrentMode].width);\r
+ x = (Offset % (gVesa_Modes[giVesaCurrentMode].width/giVT_CharWidth)) * giVT_CharWidth;\r
+ y = (Offset / (gVesa_Modes[giVesaCurrentMode].width/giVT_CharWidth)) * giVT_CharHeight;\r
+ LOG("(x,y) = (%i,%i)", x, y);\r
\r
// Sanity Check\r
if(y > gVesa_Modes[giVesaCurrentMode].height) {\r