Home | Info | Community | Development | myReactOS | Contact Us
ReactOS Development > Doxygeninitvga.c
Go to the documentation of this file.
00001 #include "vgamp.h" 00002 00003 static VGA_REGISTERS Mode12Regs = 00004 { 00005 /* CRT Controller Registers */ 00006 {0x5F, 0x4F, 0x50, 0x82, 0x54, 0x80, 0x0B, 0x3E, 0x00, 0x40, 0x00, 0x00, 00007 0x00, 0x00, 0x00, 0x59, 0xEA, 0x8C, 0xDF, 0x28, 0x00, 0xE7, 0x04, 0xE3}, 00008 /* Attribute Controller Registers */ 00009 {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 00010 0x0C, 0x0D, 0x0E, 0x0F, 0x81, 0x00, 0x0F, 0x00, 0x00}, 00011 /* Graphics Controller Registers */ 00012 {0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x05, 0x0F, 0xFF}, 00013 /* Sequencer Registers */ 00014 {0x03, 0x01, 0x0F, 0x00, 0x06}, 00015 /* Misc Output Register */ 00016 0xE3 00017 }; 00018 00019 VGA_REGISTERS TextModeRegs; 00020 00021 static VOID FASTCALL 00022 vgaSaveRegisters(PVGA_REGISTERS Registers) 00023 { 00024 SIZE_T i; 00025 00026 for (i = 0; i < sizeof(Registers->CRT); i++) 00027 { 00028 VideoPortWritePortUchar(CRTC, i); 00029 Registers->CRT[i] = VideoPortReadPortUchar(CRTCDATA); 00030 } 00031 00032 for (i = 0; i < sizeof(Registers->Attribute); i++) 00033 { 00034 VideoPortReadPortUchar(STATUS); 00035 VideoPortWritePortUchar(ATTRIB, i); 00036 Registers->Attribute[i] = VideoPortReadPortUchar(ATTRIBREAD); 00037 } 00038 00039 for (i = 0; i < sizeof(Registers->Graphics); i++) 00040 { 00041 VideoPortWritePortUchar(GRAPHICS, i); 00042 Registers->Graphics[i] = VideoPortReadPortUchar(GRAPHICSDATA); 00043 } 00044 00045 for (i = 0; i < sizeof(Registers->Sequencer); i++) 00046 { 00047 VideoPortWritePortUchar(SEQ, i); 00048 Registers->Sequencer[i] = VideoPortReadPortUchar(SEQDATA); 00049 } 00050 00051 Registers->Misc = VideoPortReadPortUchar(MISC); 00052 } 00053 00054 static VOID FASTCALL 00055 vgaSetRegisters(PVGA_REGISTERS Registers) 00056 { 00057 SIZE_T i; 00058 00059 /* Update misc output register */ 00060 VideoPortWritePortUchar(MISC, Registers->Misc); 00061 00062 /* Synchronous reset on */ 00063 VideoPortWritePortUchar(SEQ, 0x00); 00064 VideoPortWritePortUchar(SEQDATA, 0x01); 00065 00066 /* Write sequencer registers */ 00067 for (i = 1; i < sizeof(Registers->Sequencer); i++) 00068 { 00069 VideoPortWritePortUchar(SEQ, i); 00070 VideoPortWritePortUchar(SEQDATA, Registers->Sequencer[i]); 00071 } 00072 00073 /* Synchronous reset off */ 00074 VideoPortWritePortUchar(SEQ, 0x00); 00075 VideoPortWritePortUchar(SEQDATA, 0x03); 00076 00077 /* Deprotect CRT registers 0-7 */ 00078 VideoPortWritePortUchar(CRTC, 0x11); 00079 VideoPortWritePortUchar(CRTCDATA, Registers->CRT[0x11] & 0x7f); 00080 00081 /* Write CRT registers */ 00082 for (i = 0; i < sizeof(Registers->CRT); i++) 00083 { 00084 VideoPortWritePortUchar(CRTC, i); 00085 VideoPortWritePortUchar(CRTCDATA, Registers->CRT[i]); 00086 } 00087 00088 /* Write graphics controller registers */ 00089 for (i = 0; i < sizeof(Registers->Graphics); i++) 00090 { 00091 VideoPortWritePortUchar(GRAPHICS, i); 00092 VideoPortWritePortUchar(GRAPHICSDATA, Registers->Graphics[i]); 00093 } 00094 00095 /* Write attribute controller registers */ 00096 for (i = 0; i < sizeof(Registers->Attribute); i++) 00097 { 00098 VideoPortReadPortUchar(STATUS); 00099 VideoPortWritePortUchar(ATTRIB, i); 00100 VideoPortWritePortUchar(ATTRIB, Registers->Attribute[i]); 00101 } 00102 00103 /* Renable screen. */ 00104 VideoPortWritePortUchar(ATTRIB, 0x20); 00105 } 00106 00107 VOID 00108 InitVGAMode() 00109 { 00110 vgaSaveRegisters(&TextModeRegs); 00111 vgaSetRegisters(&Mode12Regs); 00112 } 00113 00114 VOID 00115 VGAResetDevice(OUT PSTATUS_BLOCK StatusBlock) 00116 { 00117 vgaSetRegisters(&TextModeRegs); 00118 } Generated on Sat May 26 2012 04:36:57 for ReactOS by
1.7.6.1
|