QEMU Standard VGA
Exists in two variants, for isa and pci.
command line switches:
- -vga std
- picks isa for -M isapc, otherwise pci 
- -device VGA
- pci variant 
- -device isa-vga
- isa variant 
- -device secondary-vga
- legacy-free pci variant 
PCI spec
Applies to the pci variant only for obvious reasons.
- PCI ID
- 1234:1111
- PCI Region 0
- Framebuffer memory, 16 MB in size (by default). Size is tunable via vga_mem_mb property. 
- PCI Region 1
- Reserved (so we have the option to make the framebuffer bar 64bit). 
- PCI Region 2
- MMIO bar, 4096 bytes in size (QEMU 1.3+) 
- PCI ROM Region
- Holds the vgabios (QEMU 0.14+). 
The legacy-free variant has no ROM and has PCI_CLASS_DISPLAY_OTHER
instead of PCI_CLASS_DISPLAY_VGA.
IO ports used
Doesn’t apply to the legacy-free pci variant, use the MMIO bar instead.
- 03c0 - 03df
- standard vga ports 
- 01ce
- bochs vbe interface index port 
- 01cf
- bochs vbe interface data port (x86 only) 
- 01d0
- bochs vbe interface data port 
Memory regions used
- 0xe0000000
- Framebuffer memory, isa variant only. 
The pci variant used to mirror the framebuffer bar here, QEMU 0.14+
stops doing that (except when in -M pc-$old compat mode).
MMIO area spec
Likewise applies to the pci variant only for obvious reasons.
- 0000 - 03ff
- edid data blob. 
- 0400 - 041f
- vga ioports ( - 0x3c0to- 0x3df), remapped 1:1. Word access is supported, bytes are written in little endian order (aka index port first), so indexed registers can be updated with a single mmio write (and thus only one vmexit).
- 0500 - 0515
- bochs dispi interface registers, mapped flat without index/data ports. Use - (index << 1)as offset for (16bit) register access.
- 0600 - 0607
- QEMU extended registers. QEMU 2.2+ only. The pci revision is 2 (or greater) when these registers are present. The registers are 32bit. 
- 0600
- QEMU extended register region size, in bytes. 
- 0604
- framebuffer endianness register. - - 0xbebebebeindicates big endian. -- 0x1e1e1e1eindicates little endian.