xref: /plan9/sys/src/cmd/aux/vga/ibm8514.c (revision 9a747e4fd48b9f4522c70c07e8f882a15030f964)
1219b2ee8SDavid du Colombier #include <u.h>
2219b2ee8SDavid du Colombier #include <libc.h>
37dd7cddfSDavid du Colombier #include <bio.h>
4219b2ee8SDavid du Colombier 
5*9a747e4fSDavid du Colombier #include "pci.h"
6219b2ee8SDavid du Colombier #include "vga.h"
7219b2ee8SDavid du Colombier 
8219b2ee8SDavid du Colombier /*
9219b2ee8SDavid du Colombier  * IBM 8514/A Graphics Coprocessor.
10219b2ee8SDavid du Colombier  */
11219b2ee8SDavid du Colombier enum {
12219b2ee8SDavid du Colombier 	Subsys		= 0x42E8,	/* Subsystem Status (R), Control (W) */
13219b2ee8SDavid du Colombier 	Advfunc		= 0x4AE8,	/* Advanced Function Control */
14219b2ee8SDavid du Colombier 	CurY		= 0x82E8,	/* Current Y Position */
15219b2ee8SDavid du Colombier 	CurX		= 0x86E8,	/* Current X Position */
16219b2ee8SDavid du Colombier 	DestyAxstp	= 0x8AE8,	/* Destination Y Position/Axial Step Constant */
17219b2ee8SDavid du Colombier 	DestxDiastp	= 0x8EE8,	/* Destination X Position/Diagonal Step Constant */
18219b2ee8SDavid du Colombier 	ErrTerm		= 0x92E8,	/* Error Term */
19219b2ee8SDavid du Colombier 	MajAxisPcnt	= 0x96E8,	/* Major Axis Pixel Count */
20219b2ee8SDavid du Colombier 	GPstat		= 0x9AE8,	/* Graphics Processor Status (R) */
21219b2ee8SDavid du Colombier 	Cmd		= 0x9AE8,	/* Drawing Command (W) */
22219b2ee8SDavid du Colombier 	ShortStroke	= 0x9EE8,	/* Short Stroke Vector (W) */
23219b2ee8SDavid du Colombier 	BkgdColor	= 0xA2E8,	/* Background Colour */
24219b2ee8SDavid du Colombier 	FrgdColor	= 0xA6E8,	/* Foreground Colour */
25219b2ee8SDavid du Colombier 	WrtMask		= 0xAAE8,	/* Bitplane Write Mask */
26219b2ee8SDavid du Colombier 	RdMask		= 0xAEE8,	/* Bitplane Read Mask */
27219b2ee8SDavid du Colombier 	ColorCmp	= 0xB2E8,	/* Colour Compare */
28219b2ee8SDavid du Colombier 	BkgdMix		= 0xB6E8,	/* Background Mix */
29219b2ee8SDavid du Colombier 	FrgdMix		= 0xBAE8,	/* Foreground Mix */
30219b2ee8SDavid du Colombier 	Multifunc	= 0xBEE8,	/* Multifunction Control */
31219b2ee8SDavid du Colombier 	PixTrans	= 0xE2E8,	/* Pixel Data Transfer */
32219b2ee8SDavid du Colombier };
33219b2ee8SDavid du Colombier 
34219b2ee8SDavid du Colombier enum {					/* Multifunc Index */
35219b2ee8SDavid du Colombier 	MinAxisPcnt	= 0x0000,	/* Minor Axis Pixel Count */
36219b2ee8SDavid du Colombier 	ScissorsT	= 0x1000,	/* Top Scissors */
37219b2ee8SDavid du Colombier 	ScissorsL	= 0x2000,	/* Left Scissors */
38219b2ee8SDavid du Colombier 	ScissorsB	= 0x3000,	/* Bottom Scissors */
39219b2ee8SDavid du Colombier 	ScissorsR	= 0x4000,	/* Right Scissors */
40219b2ee8SDavid du Colombier 	MemCntl		= 0x5000,	/* Memory Control */
41219b2ee8SDavid du Colombier 	PixCntl		= 0xA000,	/* Pixel Control */
42219b2ee8SDavid du Colombier 	MultMisc	= 0xE000,	/* Miscellaneous Multifunction Control (S3) */
43219b2ee8SDavid du Colombier 	ReadSel		= 0xF000,	/* Read Register Select (S3) */
44219b2ee8SDavid du Colombier };
45219b2ee8SDavid du Colombier 
46219b2ee8SDavid du Colombier static void
load(Vga * vga,Ctlr *)477dd7cddfSDavid du Colombier load(Vga* vga, Ctlr*)
48219b2ee8SDavid du Colombier {
49219b2ee8SDavid du Colombier 	outportw(Pixmask, 0x00);
50219b2ee8SDavid du Colombier 	outportw(Subsys, 0x8000|0x1000);
51219b2ee8SDavid du Colombier 	outportw(Subsys, 0x4000|0x1000);
52219b2ee8SDavid du Colombier 	outportw(Pixmask, 0xFF);
53219b2ee8SDavid du Colombier 
54219b2ee8SDavid du Colombier 	outportw(FrgdMix, 0x47);
55219b2ee8SDavid du Colombier 	outportw(BkgdMix, 0x07);
56219b2ee8SDavid du Colombier 
57219b2ee8SDavid du Colombier 	outportw(Multifunc, ScissorsT|0x000);
58219b2ee8SDavid du Colombier 	outportw(Multifunc, ScissorsL|0x000);
597dd7cddfSDavid du Colombier 	outportw(Multifunc, ScissorsB|(vga->vmz/vga->mode->x-1));
60219b2ee8SDavid du Colombier 	outportw(Multifunc, ScissorsR|(vga->mode->x-1));
61219b2ee8SDavid du Colombier 
62219b2ee8SDavid du Colombier 	outportw(WrtMask, 0xFFFF);
63219b2ee8SDavid du Colombier 	outportw(Multifunc, PixCntl|0x0000);
64219b2ee8SDavid du Colombier }
65219b2ee8SDavid du Colombier 
66219b2ee8SDavid du Colombier static void
dump(Vga *,Ctlr * ctlr)677dd7cddfSDavid du Colombier dump(Vga*, Ctlr* ctlr)
68219b2ee8SDavid du Colombier {
69219b2ee8SDavid du Colombier 	printitem(ctlr->name, "Advfunc");
707dd7cddfSDavid du Colombier 	Bprint(&stdout, "%9.4uX\n", inportw(Advfunc));
71219b2ee8SDavid du Colombier 	printitem(ctlr->name, "Subsys");
727dd7cddfSDavid du Colombier 	Bprint(&stdout, "%9.4uX\n", inportw(Subsys));
73219b2ee8SDavid du Colombier }
74219b2ee8SDavid du Colombier 
75219b2ee8SDavid du Colombier Ctlr ibm8514 = {
76219b2ee8SDavid du Colombier 	"ibm8514",			/* name */
77219b2ee8SDavid du Colombier 	0,				/* snarf */
78219b2ee8SDavid du Colombier 	0,				/* options */
79219b2ee8SDavid du Colombier 	0,				/* init */
80219b2ee8SDavid du Colombier 	load,				/* load */
81219b2ee8SDavid du Colombier 	dump,				/* dump */
82219b2ee8SDavid du Colombier };
83