+++ /dev/null
-#include <conio.h>\r
-#include <dos.h>\r
-#include <mem.h>\r
-\r
-#include "modex.hpp"\r
-\r
-#define ATTRCON_ADDR 0x3C0\r
-#define MISC_ADDR 0x3C2\r
-#define VGAENABLE_ADDR 0x3C3\r
-#define SEQU_ADDR 0x3C4\r
-#define GRACON_ADDR 0x3CE\r
-#define CRTC_ADDR 0x3D4\r
-#define STATUS_ADDR 0x3DA\r
-\r
-unsigned short width, height, widthBytes, num_pages;\r
-unsigned short pageSize, activeStart, visibleStart;\r
-unsigned char write_plane, read_plane;\r
-unsigned char *RowsX[600];\r
-unsigned char line_head[4] = { 0xFF, 0x0E, 0x0C, 0x08 };\r
-unsigned char line_tail[4] = { 0x00, 0x01, 0x03, 0x07 };\r
-unsigned short plane_mask[4] = { PLANE_0, PLANE_1, PLANE_2, PLANE_3 };\r
-unsigned short read_mask[4] = { READ_PLANE_0, READ_PLANE_1,\r
- READ_PLANE_2, READ_PLANE_3 };\r
-unsigned short text_mask[16] = { 0x0002, 0x0102, 0x0202, 0x0302,\r
- 0x0402, 0x0502, 0x0602, 0x0702,\r
- 0x0802, 0x0902, 0x0A02, 0x0B02,\r
- 0x0C02, 0x0D02, 0x0E02, 0x0F02 };\r
-unsigned short page_offset[5];\r
-unsigned short page_mask_high[5];\r
-unsigned short page_mask_low[5];\r
-\r
-\r
-unsigned short ModeX_256x224regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x3f,\r
- 0x3d4, 0x02, 0x40,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x4a,\r
- 0x3d4, 0x05, 0x9a,\r
- 0x3d4, 0x06, 0x0b,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0xda,\r
- 0x3d4, 0x11, 0x9c,\r
- 0x3d4, 0x12, 0xbf,\r
- 0x3d4, 0x13, 0x20,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xc7,\r
- 0x3d4, 0x16, 0x04,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_256x240regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x3f,\r
- 0x3d4, 0x02, 0x40,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x4e,\r
- 0x3d4, 0x05, 0x96,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x20,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_256x256regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x3f,\r
- 0x3d4, 0x02, 0x40,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x4a,\r
- 0x3d4, 0x05, 0x9a,\r
- 0x3d4, 0x06, 0x23,\r
- 0x3d4, 0x07, 0xb2,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x61,\r
- 0x3d4, 0x10, 0x0a,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xff,\r
- 0x3d4, 0x13, 0x20,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x07,\r
- 0x3d4, 0x16, 0x1a,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_256x480regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x3f,\r
- 0x3d4, 0x02, 0x40,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x4e,\r
- 0x3d4, 0x05, 0x96,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x20,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_320x200regs[75] =\r
-{\r
- 0x3c2, 0x00, 0x63,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x4f,\r
- 0x3d4, 0x02, 0x50,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x54,\r
- 0x3d4, 0x05, 0x80,\r
- 0x3d4, 0x06, 0xbf,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0x9c,\r
- 0x3d4, 0x11, 0x8e,\r
- 0x3d4, 0x12, 0x8f,\r
- 0x3d4, 0x13, 0x28,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x96,\r
- 0x3d4, 0x16, 0xb9,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_320x240regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x4f,\r
- 0x3d4, 0x02, 0x50,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x54,\r
- 0x3d4, 0x05, 0x80,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x28,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_320x400regs[75] =\r
-{\r
- 0x3c2, 0x00, 0x63,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x4f,\r
- 0x3d4, 0x02, 0x50,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x54,\r
- 0x3d4, 0x05, 0x80,\r
- 0x3d4, 0x06, 0xbf,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0x9c,\r
- 0x3d4, 0x11, 0x8e,\r
- 0x3d4, 0x12, 0x8f,\r
- 0x3d4, 0x13, 0x28,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x96,\r
- 0x3d4, 0x16, 0xb9,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_320x480regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe3,\r
- 0x3d4, 0x00, 0x5f,\r
- 0x3d4, 0x01, 0x4f,\r
- 0x3d4, 0x02, 0x50,\r
- 0x3d4, 0x03, 0x82,\r
- 0x3d4, 0x04, 0x54,\r
- 0x3d4, 0x05, 0x80,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x28,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x200regs[75] =\r
-{\r
- 0x3c2, 0x00, 0x67,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0xbf,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0x9c,\r
- 0x3d4, 0x11, 0x8e,\r
- 0x3d4, 0x12, 0x8f,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x96,\r
- 0x3d4, 0x16, 0xb9,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x240regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x41,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x270regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0x30,\r
- 0x3d4, 0x07, 0xf0,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x61,\r
- 0x3d4, 0x10, 0x20,\r
- 0x3d4, 0x11, 0xa9,\r
- 0x3d4, 0x12, 0x1b,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x1f,\r
- 0x3d4, 0x16, 0x2f,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x360regs[75] =\r
-{\r
- 0x3c2, 0x00, 0x67,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0xbf,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0x88,\r
- 0x3d4, 0x11, 0x85,\r
- 0x3d4, 0x12, 0x67,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x6d,\r
- 0x3d4, 0x16, 0xba,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x400regs[75] =\r
-{\r
- 0x3c2, 0x00, 0x67,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0xbf,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0x9c,\r
- 0x3d4, 0x11, 0x8e,\r
- 0x3d4, 0x12, 0x8f,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x96,\r
- 0x3d4, 0x16, 0xb9,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_360x480regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x6b,\r
- 0x3d4, 0x01, 0x59,\r
- 0x3d4, 0x02, 0x5a,\r
- 0x3d4, 0x03, 0x8e,\r
- 0x3d4, 0x04, 0x5e,\r
- 0x3d4, 0x05, 0x8a,\r
- 0x3d4, 0x06, 0x0d,\r
- 0x3d4, 0x07, 0x3e,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0xea,\r
- 0x3d4, 0x11, 0xac,\r
- 0x3d4, 0x12, 0xdf,\r
- 0x3d4, 0x13, 0x2d,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0xe7,\r
- 0x3d4, 0x16, 0x06,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_376x282regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x6e,\r
- 0x3d4, 0x01, 0x5d,\r
- 0x3d4, 0x02, 0x5e,\r
- 0x3d4, 0x03, 0x91,\r
- 0x3d4, 0x04, 0x62,\r
- 0x3d4, 0x05, 0x8f,\r
- 0x3d4, 0x06, 0x62,\r
- 0x3d4, 0x07, 0xf0,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x61,\r
- 0x3d4, 0x10, 0x37,\r
- 0x3d4, 0x11, 0x89,\r
- 0x3d4, 0x12, 0x33,\r
- 0x3d4, 0x13, 0x2f,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x3c,\r
- 0x3d4, 0x16, 0x5c,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_376x564regs[75] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x6e,\r
- 0x3d4, 0x01, 0x5d,\r
- 0x3d4, 0x02, 0x5e,\r
- 0x3d4, 0x03, 0x91,\r
- 0x3d4, 0x04, 0x62,\r
- 0x3d4, 0x05, 0x8f,\r
- 0x3d4, 0x06, 0x62,\r
- 0x3d4, 0x07, 0xf0,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x60,\r
- 0x3d4, 0x10, 0x37,\r
- 0x3d4, 0x11, 0x89,\r
- 0x3d4, 0x12, 0x33,\r
- 0x3d4, 0x13, 0x2f,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x3c,\r
- 0x3d4, 0x16, 0x5c,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_400x300regs[78] =\r
-{\r
- 0x3c2, 0x00, 0xa7,\r
- 0x3d4, 0x00, 0x71,\r
- 0x3d4, 0x01, 0x63,\r
- 0x3d4, 0x02, 0x64,\r
- 0x3d4, 0x03, 0x92,\r
- 0x3d4, 0x04, 0x65,\r
- 0x3d4, 0x05, 0x82,\r
- 0x3d4, 0x06, 0x46,\r
- 0x3d4, 0x07, 0x1f,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x40,\r
- 0x3d4, 0x10, 0x31,\r
- 0x3d4, 0x11, 0x80,\r
- 0x3d4, 0x12, 0x2b,\r
- 0x3d4, 0x13, 0x32,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x2f,\r
- 0x3d4, 0x16, 0x44,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x02, 0x0f,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-unsigned short ModeX_400x600regs[78] =\r
-{\r
- 0x3c2, 0x00, 0xe7,\r
- 0x3d4, 0x00, 0x70,\r
- 0x3d4, 0x01, 0x63,\r
- 0x3d4, 0x02, 0x64,\r
- 0x3d4, 0x03, 0x92,\r
- 0x3d4, 0x04, 0x65,\r
- 0x3d4, 0x05, 0x82,\r
- 0x3d4, 0x06, 0x70,\r
- 0x3d4, 0x07, 0xf0,\r
- 0x3d4, 0x08, 0x00,\r
- 0x3d4, 0x09, 0x60,\r
- 0x3d4, 0x10, 0x5b,\r
- 0x3d4, 0x11, 0x8c,\r
- 0x3d4, 0x12, 0x57,\r
- 0x3d4, 0x13, 0x32,\r
- 0x3d4, 0x14, 0x00,\r
- 0x3d4, 0x15, 0x58,\r
- 0x3d4, 0x16, 0x70,\r
- 0x3d4, 0x17, 0xe3,\r
- 0x3c4, 0x01, 0x01,\r
- 0x3c4, 0x02, 0x0f,\r
- 0x3c4, 0x04, 0x06,\r
- 0x3ce, 0x05, 0x40,\r
- 0x3ce, 0x06, 0x05,\r
- 0x3c0, 0x10, 0x41,\r
- 0x3c0, 0x13, 0x00\r
-};\r
-\r
-\r
-void\r
-calc_rows(void)\r
-{\r
- int i;\r
-\r
- // Each byte addresses four pixels, so the width of a scan line\r
- // in *bytes* is one fourth of the number of pixels on a line.\r
- widthBytes = width / 4;\r
-\r
- pageSize = (widthBytes * height);\r
-\r
- for (i=0; i < height; i++) {\r
- RowsX[i] = (unsigned char *)((0xA000 << 4) + (widthBytes * i));\r
- }\r
-\r
- // Clear entire video memory, by selecting all four planes, then\r
- // writing 0 to entire segment.\r
- outpw(SEQU_ADDR, ALL_PLANES);\r
- memset((unsigned char *)(0xA000 << 4), 0x00, 0x00010000);\r
-\r
- // By default we want screen refreshing and drawing operations\r
- // to be based at offset 0 in the video segment.\r
- activeStart = visibleStart = 0;\r
-\r
- // Set current plane to invalid value\r
- write_plane = -1;\r
- read_plane = -1;\r
-\r
- // How many pages fit in 256K VGA Card?\r
- num_pages = ((64 * 1024) / pageSize);\r
-\r
- for (i=0; i < num_pages; i++) {\r
- page_offset[i] = (pageSize * i);\r
- page_mask_high[i] = (0x0C | (page_offset[i] & 0xFF00));\r
- page_mask_low[i] = (0x0D | ((page_offset[i] & 0x00FF) << 8));\r
- }\r
-}\r
-\r
-\r
-// setBaseXMode() does the initialization to make the VGA ready to\r
-// accept any combination of configuration register settings. This\r
-// involves enabling writes to index 0 to 7 of the CRT controller (port\r
-// 0x3D4), by clearing the most significant bit (bit 7) of index 0x11.\r
-void\r
-setBaseXMode(void)\r
-{\r
- int temp;\r
- union REGS r;\r
-\r
- r.x.eax = 0x0013;\r
- int386(0x10, &r, &r);\r
-\r
- outp(0x3D4, 0x11);\r
- temp = inp(0x3D5) & 0x7F;\r
- outp(0x3D4, 0x11);\r
- outp(0x3D5, temp);\r
-}\r
-\r
-\r
-void\r
-outReg(unsigned short *r)\r
-{\r
- switch (r[0]) {\r
- // First handle special cases:\r
-\r
- case ATTRCON_ADDR:\r
- // reset read/write flip-flop\r
- inp(STATUS_ADDR);\r
- outp(ATTRCON_ADDR, r[1] | 0x20);\r
- // ensure VGA output is enabled\r
- outp(ATTRCON_ADDR, r[2]);\r
- break;\r
-\r
- case MISC_ADDR:\r
- case VGAENABLE_ADDR:\r
- // Copy directly to port\r
- outp(r[0], r[2]);\r
- break;\r
-\r
- case SEQU_ADDR:\r
- case GRACON_ADDR:\r
- case CRTC_ADDR:\r
- default:\r
- // Index to port\r
- outp(r[0], r[1]);\r
- // Value to port+1\r
- outp(r[0] + 1, r[2]);\r
- break;\r
- }\r
-}\r
-\r
-void\r
-outRegArray(unsigned short *r, int n)\r
-{\r
- while (n--) {\r
- outReg(r);\r
- r += 3;\r
- }\r
-}\r
-\r
-\r
-void\r
-set80x25(void)\r
-{\r
- union REGS r;\r
- r.x.eax = 0x0003;\r
-\r
- int386(0x10, &r, &r);\r
-}\r
-\r
-void\r
-set256x224x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_256x224regs, 25);\r
-\r
- width = 256;\r
- height = 224;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set256x240x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_256x240regs, 25);\r
-\r
- width = 256;\r
- height = 240;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set256x256x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_256x256regs, 25);\r
-\r
- width = 256;\r
- height = 256;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set256x480x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_256x480regs, 25);\r
-\r
- width = 256;\r
- height = 480;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set320x200x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_320x200regs, 25);\r
-\r
- width = 320;\r
- height = 200;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set320x240x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_320x240regs, 25);\r
-\r
- width = 320;\r
- height = 240;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set320x400x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_320x400regs, 25);\r
-\r
- width = 320;\r
- height = 400;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set320x480x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_320x480regs, 25);\r
-\r
- width = 320;\r
- height = 480;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x200x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x200regs, 25);\r
-\r
- width = 360;\r
- height = 200;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x240x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x240regs, 25);\r
-\r
- width = 360;\r
- height = 240;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x270x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x270regs, 25);\r
-\r
- width = 360;\r
- height = 270;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x360x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x360regs, 25);\r
-\r
- width = 360;\r
- height = 360;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x400x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x400regs, 25);\r
-\r
- width = 360;\r
- height = 400;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set360x480x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_360x480regs, 25);\r
-\r
- width = 360;\r
- height = 480;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set376x282x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_376x282regs, 25);\r
-\r
- width = 376;\r
- height = 282;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set376x564x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_376x564regs, 25);\r
-\r
- width = 376;\r
- height = 564;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set400x300x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_400x300regs, 26);\r
-\r
- width = 400;\r
- height = 300;\r
-\r
- calc_rows();\r
-}\r
-\r
-void\r
-set400x600x256_X(void)\r
-{\r
- setBaseXMode();\r
- outRegArray(ModeX_400x600regs, 26);\r
-\r
- width = 400;\r
- height = 600;\r
-\r
- calc_rows();\r
-}\r
-\r
-\r
-COORD\r
-get_xres(void)\r
-{\r
- return width;\r
-}\r
-\r
-\r
-COORD\r
-get_yres(void)\r
-{\r
- return height;\r
-}\r
-\r
-\r
-void\r
-set_write_plane(unsigned short int plane_mask)\r
-{\r
- write_plane = -1;\r
- outpw(SEQU_ADDR, plane_mask);\r
-}\r
-\r
-\r
-void\r
-set_read_plane(unsigned short int plane_mask)\r
-{\r
- read_plane = -1;\r
- outpw(GRACON_ADDR, plane_mask);\r
-}\r
-\r