ref: 678be8399090b9eb90f983b1b4105495893f57f1
dir: /sys/src/cmd/aux/vga/ibm8514.c/
#include <u.h> #include <libc.h> #include <bio.h> #include "pci.h" #include "vga.h" /* * IBM 8514/A Graphics Coprocessor. */ enum { Subsys = 0x42E8, /* Subsystem Status (R), Control (W) */ Advfunc = 0x4AE8, /* Advanced Function Control */ CurY = 0x82E8, /* Current Y Position */ CurX = 0x86E8, /* Current X Position */ DestyAxstp = 0x8AE8, /* Destination Y Position/Axial Step Constant */ DestxDiastp = 0x8EE8, /* Destination X Position/Diagonal Step Constant */ ErrTerm = 0x92E8, /* Error Term */ MajAxisPcnt = 0x96E8, /* Major Axis Pixel Count */ GPstat = 0x9AE8, /* Graphics Processor Status (R) */ Cmd = 0x9AE8, /* Drawing Command (W) */ ShortStroke = 0x9EE8, /* Short Stroke Vector (W) */ BkgdColor = 0xA2E8, /* Background Colour */ FrgdColor = 0xA6E8, /* Foreground Colour */ WrtMask = 0xAAE8, /* Bitplane Write Mask */ RdMask = 0xAEE8, /* Bitplane Read Mask */ ColorCmp = 0xB2E8, /* Colour Compare */ BkgdMix = 0xB6E8, /* Background Mix */ FrgdMix = 0xBAE8, /* Foreground Mix */ Multifunc = 0xBEE8, /* Multifunction Control */ PixTrans = 0xE2E8, /* Pixel Data Transfer */ }; enum { /* Multifunc Index */ MinAxisPcnt = 0x0000, /* Minor Axis Pixel Count */ ScissorsT = 0x1000, /* Top Scissors */ ScissorsL = 0x2000, /* Left Scissors */ ScissorsB = 0x3000, /* Bottom Scissors */ ScissorsR = 0x4000, /* Right Scissors */ MemCntl = 0x5000, /* Memory Control */ PixCntl = 0xA000, /* Pixel Control */ MultMisc = 0xE000, /* Miscellaneous Multifunction Control (S3) */ ReadSel = 0xF000, /* Read Register Select (S3) */ }; static void load(Vga* vga, Ctlr*) { outportw(Pixmask, 0x00); outportw(Subsys, 0x8000|0x1000); outportw(Subsys, 0x4000|0x1000); outportw(Pixmask, 0xFF); outportw(FrgdMix, 0x47); outportw(BkgdMix, 0x07); outportw(Multifunc, ScissorsT|0x000); outportw(Multifunc, ScissorsL|0x000); outportw(Multifunc, ScissorsB|(vga->vmz/vga->mode->x-1)); outportw(Multifunc, ScissorsR|(vga->mode->x-1)); outportw(WrtMask, 0xFFFF); outportw(Multifunc, PixCntl|0x0000); } static void dump(Vga*, Ctlr* ctlr) { printitem(ctlr->name, "Advfunc"); Bprint(&stdout, "%9.4uX\n", inportw(Advfunc)); printitem(ctlr->name, "Subsys"); Bprint(&stdout, "%9.4uX\n", inportw(Subsys)); } Ctlr ibm8514 = { "ibm8514", /* name */ 0, /* snarf */ 0, /* options */ 0, /* init */ load, /* load */ dump, /* dump */ };