Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

614 lines
24 KiB

VIDEOMODE ModesVGA[] = {
//
// Beginning of VGA color modes.
//
//
// Mode index 0.
// Color text mode 3, 720x400, 9x16 char cell (VGA).
//
{ VIDEO_MODE_COLOR, // flags that this mode is a color mode, but not graphics
4, // four bits of color representation = 16 colors available
80, 25, // 80x25 text resolution
720, 400, // 720x400 pixels on screen
160, 0x10000, // 160 bytes per scan line, 64K of CPU-addressable bitmap
MemMap_CGA, // the memory mapping is the standard CGA memory mapping
// of 32K at B8000
{
//
// These are the register-setting commands, in the form of REGCMD structures.
// The first entry is the action to be taken (set a register, set an
// indexed register block, or end the mode initialization). Immediately
// following is a REGDATA structure, containing the value(s) to be output
// (represented as a string for convenience, but the terminating 0 is
// ignored), followed by the first index to be written to and then the
// number of indexed registers to loaded. Note that if the command is
// SetRegCmd, to set a single non-indexed register, then the field following
// the string (the FirstEntry field) is actually the I/O address of the
// register to be written to, and the last field (NumEntries) is ignored.
//
{ BeginSyncResetCmd }, // enable synchronous reset while we change
// clocks and timing states
//
// Set the 4 Sequence Controller registers other than the Synchronous Reset
// register. Synchronous reset must be in effect while clock and timing
// state related Sequencer registers are being set.
//
{ SetSeqCmd, // set a block of Sequencer registers
{ "\x00\x03\x00\x02", // values for indexed registers 1-4
0x01, // first index to set = 1
VGA_NUM_SEQUENCER_PORTS-1 // set all but 1 indexed Sequencer register
}
},
//
// Set the Miscellaneous Output register to establish color/mono addressing
// and select clocks and sync polarities.
// Synchronous reset must be in effect while this register is being set,
// because it contains clock control bits.
//
{ SetRegCmd, // set a non-indexed register
{ "\x67", // set to 0x67
MISC_OUTPUT_REG_WRITE_PORT // set the Miscellaneous Output register
}
},
//
// Important! Never change the memory chaining state except in sync reset!
//
{ SetGraphCmd, { "\x0E", 0x06, 1 } },
{ EndSyncResetCmd }, // terminate synchronous reset; clocks changed
//
// Set CRT Controller register 0x11 to unprotect CRTC registers 0-7.
//
{ SetCrtcCmd,
{ "\x0E",
IND_VSYNC_END,
0x01
}
},
//
// Set all 25 CRT Controller registers.
//
{ SetCrtcCmd,
{ "\x5F\x4F\x50\x82\x55\x81\xBF\x1F\x0\x4F\xD\xE\x0\x0\x0\x0\x9C\x8E\x8F\x28\x1F\x96\xB9\xA3\xFF",
0x00,
VGA_NUM_CRTC_PORTS
}
},
//
// Set all 21 Attribute Controller registers.
//
{ SetAttCmd,
{ "\x00\x01\x02\x03\x04\x05\x14\x07\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x04\x00\x0F\x08\x0",
0x00,
VGA_NUM_ATTRIB_CONT_PORTS
}
},
//
// Set all 9 Graphics Controller registers.
//
{ SetGraphCmd,
{ "\x00\x00\x00\x00\x00\x10\x0E\x00\xFF",
0x00,
VGA_NUM_GRAPH_CONT_PORTS
}
},
//
// done
//
{ TerminateCmd }
}
},
//
// Mode index 1
// Color text mode 3, 640x400, 8x16 char cell (not a VGA mode; MCGA mode, can
// be used for plasma/LCD displays).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ VIDEO_MODE_COLOR, 4, 80, 25, 640, 400, 160, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x1\x3\x0\x2", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\xBF\x1F\x0\x4F\xD\xE\x0\x0\x0\x0\x9C\x8E\x8F\x28\x1F\x96\xB9\xA3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x4\x0\xF\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 2
// Color text mode 1, 360x400, 9x16 char cell.
//
{ VIDEO_MODE_COLOR, 4, 40, 25, 360, 400, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x08\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x67", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x0A0\x0BF\x1F\x00\x4F\x0D\x0E\x0\x0\x0\x0\x09C\x8E\x8F\x14\x1F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x4\x0\xF\x8\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 3
// Color text mode 1, 320x400, 8x16 char cell (not a VGA mode; MCGA mode, can
// be used for plasma/LCD displays).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ VIDEO_MODE_COLOR, 4, 40, 25, 320, 400, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x09\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x0A0\x0BF\x1F\x00\x4F\x0D\x0E\x0\x0\x0\x0\x09C\x8E\x8F\x14\x1F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x4\x0\xF\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 4
// Color text mode 3, 640x350, 8x14 char cell (EGA).
//
{ VIDEO_MODE_COLOR, 4, 80, 25, 640, 350, 160, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\xBF\x1F\x0\x4D\xB\xC\x0\x0\x0\x0\x83\x85\x5D\x28\x1F\x63\x0BA\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x00\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 5
// Color text mode 1, 320x350, 8x14 char cell (EGA).
//
{ VIDEO_MODE_COLOR, 4, 40, 25, 320, 350, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x09\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x0A0\x0BF\x1F\x00\x4D\x0B\x0C\x0\x0\x0\x0\x83\x85\x5D\x14\x1F\x63\x0BA\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x00\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 6
// Color text mode 3, 640x200 double-scanned, 8-wide char cell (CGA).
//
{ VIDEO_MODE_COLOR, 4, 80, 25, 640, 200, 160, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0BF\x1F\x00\x0C7\x06\x07\x0\x0\x0\x0\x9C\x8E\x8F\x28\x1F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x00\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 7
// Color text mode 1, 320x200 double-scanned, 80, 0x10000, 8-wide char cell (CGA).
//
{ VIDEO_MODE_COLOR, 4, 40, 25, 320, 200, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x09\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 0x06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x0A0\x0BF\x1F\x00\x0C7\x06\x07\x0\x0\x0\x0\x9C\x8E\x8F\x14\x1F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x00\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 8
// Color graphics mode 0x04, 320x200 4 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 2, 40, 25, 320, 200, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x09\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0F", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x80\xBF\x1F\x0\xC1\x0\x0\x0\x0\x0\x0\x9C\x8E\x8F\x14\x0\x96\xB9\xA2\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x13\x15\x17\x2\x4\x6\x7\x10\x11\x12\x13\x14\x15\x16\x17\x01\x0\x03\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x30\x0F\x00\x0FF ", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 9
// Color graphics mode 0x06, 640x200 2 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 1, 80, 25, 640, 200, 80, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x01\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0D", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xBF\x1F\x0\xC1\x0\x0\x0\x0\x0\x0\x9C\x8E\x8F\x28\x0\x96\xB9\xC2\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x17\x01\x0\x01\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x0D\x0\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 10
// Color graphics mode 0x0D, 320x200 16 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 4, 40, 25, 320, 200, 40, 0x10000, MemMap_VGA4Plane,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x09\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x2D\x27\x28\x90\x2B\x80\xBF\x1F\x0\xC0\x0\x0\x0\x0\x0\x0\x9C\x8E\x8F\x14\x0\x96\xB9\xE3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x6\x7\x10\x11\x12\x13\x14\x15\x16\x17\x01\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x05\x0F\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 11
// Color graphics mode 0x0E, 640x200 16 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 4, 80, 25, 640, 200, 80, 0x10000, MemMap_VGA4Plane,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xBF\x1F\x0\xC0\x0\x0\x0\x0\x0\x0\x9C\x8E\x8F\x28\x0\x96\xB9\xE3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x6\x7\x10\x11\x12\x13\x14\x15\x16\x17\x01\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x05\x0F\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 12
// Color graphics mode 0x10, 640x350 16 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 4, 80, 25, 640, 350, 80, 0x10000, MemMap_VGA4Plane,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xBF\x1F\x0\x40\x0\x0\x0\x0\x0\x0\x83\x85\x5D\x28\xF\x63\xBA\xE3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x01\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x05\x0F\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 13
// Color graphics mode 0x11, 640x480 2 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 1, 80, 30, 640, 480, 80, 0x10000, MemMap_VGALinear,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xE3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0C", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xB\x3E\x0\x40\x0\x0\x0\x0\x0\x0\xEA\x8C\xDF\x28\x0\xE7\x4\xC3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x3F\x01\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x05\x01\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 14
// Color graphics mode 0x12, 640x480 16 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 4, 80, 30, 640, 480, 80, 0x10000, MemMap_VGA4Plane,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xE3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xB\x3E\x0\x40\x0\x0\x0\x0\x0\x0\xEA\x8C\xDF\x28\x0\xE7\x4\xE3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x01\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x05\x0F\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 15
// Color graphics mode 0x13, 320x200 256 colors.
//
{ VIDEO_MODE_COLOR+VIDEO_MODE_GRAPHICS, 8, 40, 25, 320, 200, 320, 0x10000, MemMap_VGALinear,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x0E", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x63", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xBF\x1F\x0\x41\x0\x0\x0\x0\x0\x0\x9C\x8E\x8F\x28\x40\x96\xB9\xA3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\x0A\x0B\x0C\x0D\x0E\x0F\x41\x0\x0F\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x40\x05\x0F\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 16
// Color text mode 3, 720x480, 9x16 char cell (non-standard, provides 5 extra
// lines of text).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ VIDEO_MODE_COLOR, 4, 80, 30, 720, 480, 160, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x00\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xE7", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0C", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0B\x3E\x0\x4F\xD\xE\x0\x0\x0\x0\xEA\x8C\xDF\x28\x1F\xE7\x04\xA3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x4\x0\xF\x8\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 17
// Color text mode 3, 640x480, 8x16 char cell (non-standard, provides 5 extra
// lines of text, can be used for plasma/LCD displays).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ VIDEO_MODE_COLOR, 4, 80, 30, 640, 480, 160, 0x10000, MemMap_CGA,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xE3", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0E", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0C", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0B\x3E\x0\x4F\xD\xE\x0\x0\x0\x0\xEA\x8C\xDF\x28\x1F\xE7\x04\xA3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x1\x2\x3\x4\x5\x14\x7\x38\x39\x3A\x3B\x3C\x3D\x3E\x3F\x4\x0\xF\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0E\x00\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Beginning of monochrome VGA modes.
//
//
// Mode index 18
// Mono text mode 7, 720x400, 9x16 char cell (VGA).
//
{ 0, 0, 80, 25, 720, 400, 160, 0x10000, MemMap_Mono,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x00\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x66", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0A", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0BF\x1F\x00\x47\x0D\x0E\x0\x0\x0\x0\x9C\x8E\x8F\x28\x0F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x8\x8\x8\x8\x8\x8\x8\x10\x18\x18\x18\x18\x18\x18\x18\x06\x0\x0F\x08\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0A\x00\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 19
// Mono text mode 7, 640x400, 8x16 char cell (non-standard, can be used for
// plasma displays).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ 0, 0, 80, 25, 640, 400, 160, 0x10000, MemMap_Mono,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\x62", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0A", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x0E", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0BF\x1F\x00\x4F\x0D\x0E\x0\x0\x0\x0\x9C\x8E\x8F\x28\x0F\x96\x0B9\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x8\x8\x8\x8\x8\x8\x8\x10\x18\x18\x18\x18\x18\x18\x18\x06\x0\x0F\x00\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0A\x00\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 20
// Mono text mode 7, 720x350, 9x14 char cell (EGA).
//
{ 0, 0, 80, 25, 720, 350, 160, 0x10000, MemMap_Mono,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x00\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA6", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0A", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0BF\x1F\x00\x4D\x0B\x0C\x0\x0\x0\x0\x83\x85\x5D\x28\x0D\x63\x0BA\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x8\x8\x8\x8\x8\x8\x8\x10\x18\x18\x18\x18\x18\x18\x18\x06\x0\x0F\x08\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0A\x00\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 21
// Mono text mode 7, 640x350, 8x14 char cell (non-standard, can be used for
// plasma displays).
// Values not checked, because this is a non-standard mode and there's nothing
// to compare it to, so it may or may not work.
//
{ 0, 0, 80, 25, 640, 350, 160, 0x10000, MemMap_Mono,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x03\x00\x02", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA2", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x0A", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x55\x81\x0BF\x1F\x00\x4D\x0B\x0C\x0\x0\x0\x0\x83\x85\x5D\x28\x0D\x63\x0BA\x0A3\x0FF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x8\x8\x8\x8\x8\x8\x8\x10\x18\x18\x18\x18\x18\x18\x18\x06\x0\x0F\x00\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x10\x0A\x00\x0FF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
},
//
// Mode index 22
// Mono graphics mode 0x0F, 640x350 4 attributes.
//
{ VIDEO_MODE_GRAPHICS, 0, 80, 25, 640, 350, 80, 0x10000, MemMap_VGA2Plane,
{
{ BeginSyncResetCmd },
{ SetSeqCmd, { "\x01\x0F\x00\x06", 0x01, VGA_NUM_SEQUENCER_PORTS-1 } },
{ SetRegCmd, { "\xA2", MISC_OUTPUT_REG_WRITE_PORT, 0x01 } },
{ SetGraphCmd,{ "\x05", 06, 1} },
{ EndSyncResetCmd },
{ SetCrtcCmd, { "\x05", IND_VSYNC_END, 0x01 } },
{ SetCrtcCmd, { "\x5F\x4F\x50\x82\x54\x80\xBF\x1F\x0\x40\x0\x0\x0\x0\x0\x0\x83\x85\x5D\x28\xF\x63\xBA\xE3\xFF", 0x00, VGA_NUM_CRTC_PORTS } },
{ SetAttCmd, { "\x0\x8\x0\x0\x18\x18\x0\x0\x0\x8\x0\x0\x0\x18\x0\x0\x3\x0\x5\x0\x0", 0x00, VGA_NUM_ATTRIB_CONT_PORTS } },
{ SetGraphCmd,{ "\x0\x0\x0\x0\x0\x0\x5\xF\xFF", 0x00, VGA_NUM_GRAPH_CONT_PORTS } },
{ TerminateCmd }
}
}
};
//
// Total # of video modes this driver supports.
//
#define NUM_VIDEO_MODES (sizeof(ModesVGA)/sizeof(VIDEOMODE))
//
// Memory map table -
//
// These memory maps are used to save and restore the physical video buffer.
//
MEMORYMAPS MemoryMaps[] = {
// planes length start
// ------ ------ -----
{0, 0x08000, 0xB0000}, // all mono text modes (7)
{0, 0x08000, 0xB8000}, // all color text modes (0, 1, 2, 3,
// standard and non-standard),
// CGA graphics modes (4, 5, 6),
{1+2+4+8, 0x20000, 0xA0000}, // all VGA 4-plane graphics modes
// (D, E, 10, 12)
{1 +4, 0x20000, 0xA0000}, // all VGA 2-plane graphics modes (F)
{0, 0x20000, 0xA0000}, // all VGA linear graphics modes
// (11, 13)
};