diff --git a/src/hardware/vga.cpp b/src/hardware/vga.cpp index 17a03739..280db46e 100644 --- a/src/hardware/vga.cpp +++ b/src/hardware/vga.cpp @@ -28,7 +28,9 @@ VGA_Type vga; +Bit32u CGA_2_Table[16]; Bit32u CGA_4_Table[256]; +Bit32u CGA_16_Table[256]; Bit32u ExpandTable[256]; Bit32u Expand16Table[4][16]; Bit32u Expand16BigTable[0x10000]; @@ -36,6 +38,7 @@ Bit32u FillTable[16]; void VGA_SetMode(VGAModes mode) { + if (vga.mode == mode) return; vga.mode=mode; VGA_SetupHandlers(); VGA_StartResize(); @@ -99,15 +102,19 @@ void VGA_Init(Section* sec) { CGA_4_Table[i]=((i>>0)&3) | (((i>>2)&3) << 8)| (((i>>4)&3) <<16) | (((i>>6)&3) << 24); #else CGA_4_Table[i]=((i>>6)&3) | (((i>>4)&3) << 8)| (((i>>2)&3) <<16) | (((i>>0)&3) << 24); + + #endif } for (i=0;i<16;i++) { #ifdef WORDS_BIGENDIAN + CGA_2_Table[i]=((i>>0)&1) | (((i>>1)&1) << 8)| (((i>>1)&1) <<16) | (((i>>3)&1) << 24); FillTable[i]= ((i & 1) ? 0xff000000 : 0) | - ((i & 2) ? 0x00ff0000 : 0) | + ((i & 2) ? 0x00ff0000 : 0) | ((i & 4) ? 0x0000ff00 : 0) | ((i & 8) ? 0x000000ff : 0) ; #else + CGA_2_Table[i]=((i>>3)&1) | (((i>>2)&1) << 8)| (((i>>1)&1) <<16) | (((i>>0)&1) << 24); FillTable[i]= ((i & 1) ? 0x000000ff : 0) | ((i & 2) ? 0x0000ff00 : 0) | ((i & 4) ? 0x00ff0000 : 0) |