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 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


bochs vbe interface index port


bochs vbe interface data port (x86 only)


bochs vbe interface data port

Memory regions used


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 (0x3c0 to 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.


QEMU extended register region size, in bytes.


framebuffer endianness register. - 0xbebebebe indicates big endian. - 0x1e1e1e1e indicates little endian.