ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

initvga.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 doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.