MMIO_OUT32
MMIO_OUT32(VIA_REG_GEMODE, 0);
MMIO_OUT32(VIA_REG_SRCPOS, 0);
MMIO_OUT32(VIA_REG_DSTPOS, 0);
MMIO_OUT32(VIA_REG_DIMENSION, 0);
MMIO_OUT32(VIA_REG_PATADDR, 0);
MMIO_OUT32(VIA_REG_FGCOLOR, 0);
MMIO_OUT32(VIA_REG_BGCOLOR, 0);
MMIO_OUT32(VIA_REG_CLIPTL, 0);
MMIO_OUT32(VIA_REG_CLIPBR, 0);
MMIO_OUT32(VIA_REG_OFFSET, 0);
MMIO_OUT32(VIA_REG_KEYCONTROL, 0);
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, 0);
MMIO_OUT32(VIA_REG_MONOPAT1, 0);
MMIO_OUT32(VIA_REG_TRANSET, 0x00100000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x00000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x00333004);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x60000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x61000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x62000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x63000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x64000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x7d000000);
MMIO_OUT32(VIA_REG_TRANSET, 0xfe020000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x00000000);
MMIO_OUT32(VIA_REG_TRANSET, 0x00fe0000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x00000004);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x40008c0f);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x44000000);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x45080c04);
MMIO_OUT32(VIA_REG_TRANSPACE, 0x46800408);
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, VIA_PITCH_ENABLE |
MMIO_OUT32(VIA_REG_GEMODE, gemode);
MMIO_OUT32(VIA_REG_SRCPOS, 0);
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, VIA_PITCH_ENABLE |
MMIO_OUT32(VIA_REG_DSTPOS, ((y << 16) | x));
MMIO_OUT32(VIA_REG_DIMENSION,
MMIO_OUT32(VIA_REG_FGCOLOR, colour);
MMIO_OUT32(VIA_REG_GECMD, (0x01 | 0x2000 | 0xf0 << 24));
MMIO_OUT32(VIA_REG_SRCPOS, 0);
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, VIA_PITCH_ENABLE |
MMIO_OUT32(VIA_REG_DSTPOS, ((y << 16) | x));
MMIO_OUT32(VIA_REG_DIMENSION,
MMIO_OUT32(VIA_REG_GECMD, (0x01 | 0x2000 | 0x55 << 24));
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, VIA_PITCH_ENABLE |
MMIO_OUT32(VIA_REG_SRCPOS, ys << 16 | xs);
MMIO_OUT32(VIA_REG_DSTPOS, yd << 16 | xd);
MMIO_OUT32(VIA_REG_DIMENSION, ((height - 1) << 16) | (width - 1));
MMIO_OUT32(VIA_REG_GECMD, (0x01 | dir | (0xcc << 24)));
MMIO_OUT32(VIA_REG_SRCBASE, 0);
MMIO_OUT32(VIA_REG_DSTBASE, 0);
MMIO_OUT32(VIA_REG_PITCH, VIA_PITCH_ENABLE |
MMIO_OUT32(VIA_REG_SRCPOS, 0);
MMIO_OUT32(VIA_REG_DSTPOS, (yd << 16) | xd);
MMIO_OUT32(VIA_REG_DIMENSION, ((height - 1) << 16) | (width - 1));
MMIO_OUT32(VIA_REG_FGCOLOR, fg);
MMIO_OUT32(VIA_REG_BGCOLOR, bg);
MMIO_OUT32(VIA_REG_GECMD, 0xcc020142);
MMIO_OUT32(VIA_REG_CURSOR_MODE, val);
MMIO_OUT32(VIA_REG_CURSOR_MODE, val);
MMIO_OUT32(VIA_MMIO_BLTBASE, *data);