5 static VGA_REGISTERS Mode12Regs
=
7 /* CRT Controller Registers */
8 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00,
9 0x00, 0x00, 0x00, 0x59, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3},
10 /* Attribute Controller Registers */
11 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
12 0x0C, 0x0D, 0x0E, 0x0F, 0x81, 0x00, 0x0F, 0x00, 0x00},
13 /* Graphics Controller Registers */
14 {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x0F, 0xFF},
15 /* Sequencer Registers */
16 {0x03, 0x01, 0x0F, 0x00, 0x06},
17 /* Misc Output Register */
21 VGA_REGISTERS TextModeRegs
;
24 vgaSaveRegisters(PVGA_REGISTERS Registers
)
28 for (i
= 0; i
< sizeof(Registers
->CRT
); i
++)
30 VideoPortWritePortUchar(CRTC
, i
);
31 Registers
->CRT
[i
] = VideoPortReadPortUchar(CRTCDATA
);
34 for (i
= 0; i
< sizeof(Registers
->Attribute
); i
++)
36 VideoPortReadPortUchar(STATUS
);
37 VideoPortWritePortUchar(ATTRIB
, i
);
38 Registers
->Attribute
[i
] = VideoPortReadPortUchar(ATTRIBREAD
);
41 for (i
= 0; i
< sizeof(Registers
->Graphics
); i
++)
43 VideoPortWritePortUchar(GRAPHICS
, i
);
44 Registers
->Graphics
[i
] = VideoPortReadPortUchar(GRAPHICSDATA
);
47 for (i
= 0; i
< sizeof(Registers
->Sequencer
); i
++)
49 VideoPortWritePortUchar(SEQ
, i
);
50 Registers
->Sequencer
[i
] = VideoPortReadPortUchar(SEQDATA
);
53 Registers
->Misc
= VideoPortReadPortUchar(MISC
);
57 vgaSetRegisters(PVGA_REGISTERS Registers
)
61 /* Update misc output register */
62 VideoPortWritePortUchar(MISC
, Registers
->Misc
);
64 /* Synchronous reset on */
65 VideoPortWritePortUchar(SEQ
, 0x00);
66 VideoPortWritePortUchar(SEQDATA
, 0x01);
68 /* Write sequencer registers */
69 for (i
= 1; i
< sizeof(Registers
->Sequencer
); i
++)
71 VideoPortWritePortUchar(SEQ
, i
);
72 VideoPortWritePortUchar(SEQDATA
, Registers
->Sequencer
[i
]);
75 /* Synchronous reset off */
76 VideoPortWritePortUchar(SEQ
, 0x00);
77 VideoPortWritePortUchar(SEQDATA
, 0x03);
79 /* Deprotect CRT registers 0-7 */
80 VideoPortWritePortUchar(CRTC
, 0x11);
81 VideoPortWritePortUchar(CRTCDATA
, Registers
->CRT
[0x11] & 0x7f);
83 /* Write CRT registers */
84 for (i
= 0; i
< sizeof(Registers
->CRT
); i
++)
86 VideoPortWritePortUchar(CRTC
, i
);
87 VideoPortWritePortUchar(CRTCDATA
, Registers
->CRT
[i
]);
90 /* Write graphics controller registers */
91 for (i
= 0; i
< sizeof(Registers
->Graphics
); i
++)
93 VideoPortWritePortUchar(GRAPHICS
, i
);
94 VideoPortWritePortUchar(GRAPHICSDATA
, Registers
->Graphics
[i
]);
97 /* Write attribute controller registers */
98 for (i
= 0; i
< sizeof(Registers
->Attribute
); i
++)
100 VideoPortReadPortUchar(STATUS
);
101 VideoPortWritePortUchar(ATTRIB
, i
);
102 VideoPortWritePortUchar(ATTRIB
, Registers
->Attribute
[i
]);
105 /* Renable screen. */
106 VideoPortWritePortUchar(ATTRIB
, 0x20);
112 vgaSaveRegisters(&TextModeRegs
);
113 vgaSetRegisters(&Mode12Regs
);
117 VGAResetDevice(OUT PSTATUS_BLOCK StatusBlock
)
119 vgaSetRegisters(&TextModeRegs
);