QEMU Standard VGA — QEMU documentation

# 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 (`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.

`0600`

  QEMU extended register region size, in bytes.

`0604`

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