The VGA is upwardly-compatible with the CGA, MDA, and EGA in that all
commonly-used I/O activities are emulated at the expected port addresses.

Video programming at the hardware port level has become increasingly
difficult and risky while the BIOS programming interface has become
flexible and comprehensive.  It is recommended that you use the BIOS
functions when possible.  See INT 10H (video services).

The following table lists ports and indexes for the VGA without providing
full details.  Since the VGA uses the same port range as the EGA, you may
refer to EGA I/O Ports and CGA I/O Ports for related information.

Port  Description
3c0H  Attribute Address Register (read/write)
3c0H  Palette Registers / Other Attribute Registers (write)
Index: 00H   0fH  Palette registers
10H  mode control
11H  overscan (border) color
12H  enable color planes
13H  horizontal pixel panning
14H  color select register
3c1H  Palette Registers (read)
3c2H  Miscellaneous Output Register (write)
3c2H  Input Status Register 0 (read)
3c3H  VGA Enable Register (read/write)
3c4H  Sequencer Address Register (read/write)
3c5H  Other Sequencer Registers (read/write)
Index: 00H  reset
01H  Clocking Mode
02H  Map Mask
03H  Character Map Select
04H  Memory Mode
3c6H  PEL Mask Register
3c7H  PEL Address Register for Read Mode (write)
3c7H  DAC State Register (read)
3c8H  PEL Address Register for Write Mode (read)
3c9H  PEL Data Register
3caH  Feature Control Register (read)
3ccH  Miscellaneous Output Register (read)
3ceH  Graphics Address Register
3cfH  Other Graphics Registers
Index: 00H  set/reset
01H  enable set/reset
02H  color compare
03H  data rotate
04H  read map select
05H  graphics mode register
06H  miscellaneous graphics control
07H  color don't care
08H  plane bit mask
3?4H  CRT controller address (3b4H=MDA emulation, 3d4H=CGA emulation)
3?5H  CRT controller internal registers
Index: 00H  horizontal total
02H  start horizontal blanking (character count)
03H  end horizontal blanking
04H  start horizontal retrace (character position)
05H  end horizontal retrace
06H  vertical total (scan lines)
07H  overflow (bit 8 for certain CRTC registers)
08H  preset row scan; first scan line after vertical retrace
09H  maximum scan line
0aH  cursor start
0bH  cursor end
0cH  regen start address (high)
0dH  regen start address (low)
0eH  Cursor location (high)
0fH  Cursor location (low)
10H  vertical retrace start
11H  vertical retrace end
12H  vertical displayed end (scan line)
13H  vertical displayed adjustment
14H  underline location.  Bits 0-5 are scan line number.
15H  start vertical blanking (scan line)
16H  end vertical blanking
17H  mode control
18H  line compare (scan line)  Used for split screen
3?aH  Feature Control Register (write) (3baH=mono emulation, 3daH=CGA emul.)
3?aH  Input Status Register 1 (read)
See Also: EGA I/O Ports
INT 10H (BIOS video services)
- -

Video Graphics Array I/O Ports