3 static VGA_REGISTERS Mode12Regs
=
5 /* CRT Controller Registers */
6 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00,
7 0x00, 0x00, 0x00, 0x59, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3},
8 /* Attribute Controller Registers */
9 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B,
10 0x0C, 0x0D, 0x0E, 0x0F, 0x81, 0x00, 0x0F, 0x00, 0x00},
11 /* Graphics Controller Registers */
12 {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x0F, 0xFF},
13 /* Sequencer Registers */
14 {0x03, 0x01, 0x0F, 0x00, 0x06},
15 /* Misc Output Register */
19 VGA_REGISTERS TextModeRegs
;
22 vgaSaveRegisters(PVGA_REGISTERS Registers
)
26 for (i
= 0; i
< sizeof(Registers
->CRT
); i
++)
28 VideoPortWritePortUchar(CRTC
, i
);
29 Registers
->CRT
[i
] = VideoPortReadPortUchar(CRTCDATA
);
32 for (i
= 0; i
< sizeof(Registers
->Attribute
); i
++)
34 VideoPortReadPortUchar(STATUS
);
35 VideoPortWritePortUchar(ATTRIB
, i
);
36 Registers
->Attribute
[i
] = VideoPortReadPortUchar(ATTRIBREAD
);
39 for (i
= 0; i
< sizeof(Registers
->Graphics
); i
++)
41 VideoPortWritePortUchar(GRAPHICS
, i
);
42 Registers
->Graphics
[i
] = VideoPortReadPortUchar(GRAPHICSDATA
);
45 for (i
= 0; i
< sizeof(Registers
->Sequencer
); i
++)
47 VideoPortWritePortUchar(SEQ
, i
);
48 Registers
->Sequencer
[i
] = VideoPortReadPortUchar(SEQDATA
);
51 Registers
->Misc
= VideoPortReadPortUchar(MISC
);
55 vgaSetRegisters(PVGA_REGISTERS Registers
)
59 /* Update misc output register */
60 VideoPortWritePortUchar(MISC
, Registers
->Misc
);
62 /* Synchronous reset on */
63 VideoPortWritePortUchar(SEQ
, 0x00);
64 VideoPortWritePortUchar(SEQDATA
, 0x01);
66 /* Write sequencer registers */
67 for (i
= 1; i
< sizeof(Registers
->Sequencer
); i
++)
69 VideoPortWritePortUchar(SEQ
, i
);
70 VideoPortWritePortUchar(SEQDATA
, Registers
->Sequencer
[i
]);
73 /* Synchronous reset off */
74 VideoPortWritePortUchar(SEQ
, 0x00);
75 VideoPortWritePortUchar(SEQDATA
, 0x03);
77 /* Deprotect CRT registers 0-7 */
78 VideoPortWritePortUchar(CRTC
, 0x11);
79 VideoPortWritePortUchar(CRTCDATA
, Registers
->CRT
[0x11] & 0x7f);
81 /* Write CRT registers */
82 for (i
= 0; i
< sizeof(Registers
->CRT
); i
++)
84 VideoPortWritePortUchar(CRTC
, i
);
85 VideoPortWritePortUchar(CRTCDATA
, Registers
->CRT
[i
]);
88 /* Write graphics controller registers */
89 for (i
= 0; i
< sizeof(Registers
->Graphics
); i
++)
91 VideoPortWritePortUchar(GRAPHICS
, i
);
92 VideoPortWritePortUchar(GRAPHICSDATA
, Registers
->Graphics
[i
]);
95 /* Write attribute controller registers */
96 for (i
= 0; i
< sizeof(Registers
->Attribute
); i
++)
98 VideoPortReadPortUchar(STATUS
);
99 VideoPortWritePortUchar(ATTRIB
, i
);
100 VideoPortWritePortUchar(ATTRIB
, Registers
->Attribute
[i
]);
103 /* Renable screen. */
104 VideoPortWritePortUchar(ATTRIB
, 0x20);
110 vgaSaveRegisters(&TextModeRegs
);
111 vgaSetRegisters(&Mode12Regs
);
115 VGAResetDevice(OUT PSTATUS_BLOCK StatusBlock
)
117 vgaSetRegisters(&TextModeRegs
);