Specifications.
[pintos-anon] / specs / freevga / vga / extreg.htm
diff --git a/specs/freevga/vga/extreg.htm b/specs/freevga/vga/extreg.htm
new file mode 100644 (file)
index 0000000..d8ceb76
--- /dev/null
@@ -0,0 +1,282 @@
+<HTML>
+<HEAD>
+   <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
+   <META NAME="Author" CONTENT="Joshua Neal">
+   <META NAME="Description" CONTENT="Pure VGA/SVGA hardware programming (registers, identification, and other low-level stuff.)">
+   <META NAME="KeyWords" CONTENT="VGA SVGA hardware video programming">
+   <TITLE>VGA/SVGA Video Programming--External Regsters</TITLE>
+</HEAD>
+<BODY>
+
+<UL>
+<CENTER><A HREF="../home.htm">Home</A> <A HREF="vga.htm#register">Back</A>&nbsp;
+<HR WIDTH="100%"><B>Hardware Level VGA and SVGA Video Programming Information
+Page</B></CENTER>
+
+<CENTER>External Regsters</CENTER>
+
+<CENTER>
+<HR WIDTH="100%"></CENTER>
+</UL>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; The External Registers (sometimes
+called the General Registers) each have their own unique I/O location in
+the VGA, although sometimes the Read Port differs from the Write port,
+and some are Read-only.. See the <A HREF="vgareg.htm">Accessing the VGA
+Registers</A> section for more detals.
+<UL>
+<LI>
+Port 3CCh/3C2h -- <I>Miscellaneous Output Register</I></LI>
+
+<LI>
+Port 3CAh/3xAh -- <I>Feature Control Register</I></LI>
+
+<LI>
+Port 3C2h -- <I>Input Status #0 Register</I></LI>
+
+<LI>
+Port 3xAh -- <I>Input Status #1 Register</I></LI>
+</UL>
+&nbsp;
+<TABLE BORDER WIDTH="600" CELLPADING="2" >
+<CAPTION ALIGN=TOP><A NAME="3CCR3C2W"></A><B>Miscellaneous Output Register
+(Read at 3CCh, Write at 3C2h)</B></CAPTION>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75">7</TD>
+
+<TD WIDTH="75">6</TD>
+
+<TD WIDTH="75">5</TD>
+
+<TD WIDTH="75">4</TD>
+
+<TD WIDTH="75">3</TD>
+
+<TD WIDTH="75">2</TD>
+
+<TD WIDTH="75">1</TD>
+
+<TD WIDTH="75">0</TD>
+</TR>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75">VSYNCP</TD>
+
+<TD WIDTH="75">HSYNCP</TD>
+
+<TD WIDTH="75">O/E Page</TD>
+
+<TD WIDTH="75"></TD>
+
+<TD COLSPAN="2" WIDTH="150">Clock Select</TD>
+
+<TD WIDTH="75">RAM En.</TD>
+
+<TD WIDTH="75">I/OAS</TD>
+</TR>
+</TABLE>
+&nbsp;
+<UL><B>VSYNCP -- Vertical Sync Polarity<BR>
+</B>"<I>Determines the polarity of the vertical sync pulse and can be used
+(with HSP) to control the vertical size of the display by utilizing the
+autosynchronization feature of VGA displays.</I>
+<BR><I>&nbsp; = 0 selects a positive vertical retrace sync pulse.</I>"
+<BR><B>HSYNCP -- Horizontal Sync Polarity<BR>
+</B>"<I>Determines the polarity of the horizontal sync pulse.</I>
+<BR><I>&nbsp; = 0 selects a positive horizontal retrace sync pulse.</I>"
+<BR><B>O/E Page -- Odd/Even Page Select<BR>
+</B>"<I>Selects the upper/lower 64K page of memory when the system is in
+an eve/odd mode (modes 0,1,2,3,7).</I>
+<BR><I>&nbsp; = 0 selects the low page</I>
+<BR><I>&nbsp; = 1 selects the high page</I>"
+<LI>
+<B>Clock Select</B></LI>
+
+<BR>This field controls the selection of the dot clocks used in driving
+the display timing.&nbsp; The standard hardware has 2 clocks available
+to it, nominally 25 Mhz and 28 Mhz.&nbsp; It is possible that there may
+be other "external" clocks that can be selected by programming this register
+with the undefined values.&nbsp; The possible valuse of this register are:
+<UL>
+<LI>
+00 -- select 25 Mhz clock (used for 320/640 pixel wide modes)</LI>
+
+<LI>
+01 -- select 28 Mhz clock (used for 360/720 pixel wide modes)</LI>
+
+<LI>
+10 -- undefined (possible external clock)</LI>
+
+<LI>
+11 -- undefined (possible external clock)</LI>
+</UL>
+<B>RAM En. -- RAM Enable<BR>
+</B>"<I>Controls system access to the display buffer.</I>
+<BR><I>&nbsp; = 0 disables address decode for the display buffer from the
+system</I>
+<BR><I>&nbsp; = 1 enables address decode for the display buffer from the
+system</I>"
+<BR><B>I/OAS -- Input/Output Address Select<BR>
+</B>"<I>This bit selects the CRT controller addresses. When set to 0, this
+bit sets the CRT controller addresses to 0x03Bx and the address for the
+Input Status Register 1 to 0x03BA for compatibility withthe monochrome
+adapter.&nbsp; When set to 1, this bit sets CRT controller addresses to
+0x03Dx and the Input Status Register 1 address to 0x03DA for compatibility
+with the color/graphics adapter. The Write addresses to the Feature Control
+register are affected in the same manner.</I>"</UL>
+&nbsp;
+<TABLE BORDER WIDTH="600" CELLPADING="2" >
+<CAPTION ALIGN=TOP><A NAME="3CAR3xAW"></A><B>Feature Control Register (Read
+at 3CAh, Write at 3BAh (mono) or 3DAh (color))</B></CAPTION>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75">7</TD>
+
+<TD WIDTH="75">6</TD>
+
+<TD WIDTH="75">5</TD>
+
+<TD WIDTH="75">4</TD>
+
+<TD WIDTH="75">3</TD>
+
+<TD WIDTH="75">2</TD>
+
+<TD WIDTH="75">1</TD>
+
+<TD WIDTH="75">0</TD>
+</TR>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75">FC1</TD>
+
+<TD WIDTH="75">FC0</TD>
+</TR>
+</TABLE>
+&nbsp;
+<UL>
+<LI>
+<B>FC1 -- Feature Control bit 1<BR>
+</B>"<I>All bits are reserved.</I>"</LI>
+
+<LI>
+<B>FC2 -- Feature Control bit 0<BR>
+</B>"<I>All bits are reserved.</I>"</LI>
+</UL>
+&nbsp;
+<TABLE BORDER WIDTH="600" CELLPADING="2" >
+<CAPTION ALIGN=TOP><A NAME="3C2R"></A><B>Input Status #0 Register (Read-only
+at 3C2h)</B></CAPTION>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75">7</TD>
+
+<TD WIDTH="75">6</TD>
+
+<TD WIDTH="75">5</TD>
+
+<TD WIDTH="75">4</TD>
+
+<TD WIDTH="75">3</TD>
+
+<TD WIDTH="75">2</TD>
+
+<TD WIDTH="75">1</TD>
+
+<TD WIDTH="75">0</TD>
+</TR>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75">SS</TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+</TR>
+</TABLE>
+&nbsp;
+<UL><B>SS - Switch Sense<BR>
+</B>"<I>Returns the status of the four sense switches as selected by the
+CS field of the Miscellaneous Output Register.</I>"</UL>
+&nbsp;
+<TABLE BORDER WIDTH="600" CELLPADING="2" >
+<CAPTION ALIGN=TOP><A NAME="3xAR"></A><B>Input Status #1 Register (Read
+at 3BAh (mono) or 3DAh (color))</B></CAPTION>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75">7</TD>
+
+<TD WIDTH="75">6</TD>
+
+<TD WIDTH="75">5</TD>
+
+<TD WIDTH="75">4</TD>
+
+<TD WIDTH="75">3</TD>
+
+<TD WIDTH="75">2</TD>
+
+<TD WIDTH="75">1</TD>
+
+<TD WIDTH="75">0</TD>
+</TR>
+
+<TR ALIGN=CENTER VALIGN=CENTER>
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75">VRetrace</TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75"></TD>
+
+<TD WIDTH="75">DD</TD>
+</TR>
+</TABLE>
+&nbsp;
+<UL><B>VRetrace -- Vertical Retrace<BR>
+</B>"<I>When set to 1, this bit indicates that the display is in a vertical
+retrace interval.This bit can be programmed, through the Vertical Retrace
+End register, to generate an interrupt at the start of the vertical retrace.</I>"
+<BR><B>DD -- Display Disabled<BR>
+</B>"<I>When set to 1, this bit indicates a horizontal or vertical retrace
+interval. This bit is the real-time status of the inverted 'display enable'
+signal. Programs have used this status bit to restrict screen updates to
+the inactive display intervals in order to reduce screen flicker. The video
+subsystem is designed to eliminate this software requirement; screen updates
+may be made at any time without screen degradation.</I>"</UL>
+Notice: All trademarks used or referred to on this page are the property
+of their respective owners.
+<BR>All pages are Copyright &copy; 1997, 1998, J. D. Neal, except where
+noted. Permission for utilization and distribution is subject to the terms
+of the <A HREF="license.htm">FreeVGA Project Copyright License</A>.
+</BODY>
+</HTML>