#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 */
};
|