xref: /plan9-contrib/sys/src/cmd/aux/vga/ibm8514.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
1 #include <u.h>
2 #include <libc.h>
3 
4 #include "vga.h"
5 
6 /*
7  * IBM 8514/A Graphics Coprocessor.
8  */
9 enum {
10 	Subsys		= 0x42E8,	/* Subsystem Status (R), Control (W) */
11 	Advfunc		= 0x4AE8,	/* Advanced Function Control */
12 	CurY		= 0x82E8,	/* Current Y Position */
13 	CurX		= 0x86E8,	/* Current X Position */
14 	DestyAxstp	= 0x8AE8,	/* Destination Y Position/Axial Step Constant */
15 	DestxDiastp	= 0x8EE8,	/* Destination X Position/Diagonal Step Constant */
16 	ErrTerm		= 0x92E8,	/* Error Term */
17 	MajAxisPcnt	= 0x96E8,	/* Major Axis Pixel Count */
18 	GPstat		= 0x9AE8,	/* Graphics Processor Status (R) */
19 	Cmd		= 0x9AE8,	/* Drawing Command (W) */
20 	ShortStroke	= 0x9EE8,	/* Short Stroke Vector (W) */
21 	BkgdColor	= 0xA2E8,	/* Background Colour */
22 	FrgdColor	= 0xA6E8,	/* Foreground Colour */
23 	WrtMask		= 0xAAE8,	/* Bitplane Write Mask */
24 	RdMask		= 0xAEE8,	/* Bitplane Read Mask */
25 	ColorCmp	= 0xB2E8,	/* Colour Compare */
26 	BkgdMix		= 0xB6E8,	/* Background Mix */
27 	FrgdMix		= 0xBAE8,	/* Foreground Mix */
28 	Multifunc	= 0xBEE8,	/* Multifunction Control */
29 	PixTrans	= 0xE2E8,	/* Pixel Data Transfer */
30 };
31 
32 enum {					/* Multifunc Index */
33 	MinAxisPcnt	= 0x0000,	/* Minor Axis Pixel Count */
34 	ScissorsT	= 0x1000,	/* Top Scissors */
35 	ScissorsL	= 0x2000,	/* Left Scissors */
36 	ScissorsB	= 0x3000,	/* Bottom Scissors */
37 	ScissorsR	= 0x4000,	/* Right Scissors */
38 	MemCntl		= 0x5000,	/* Memory Control */
39 	PixCntl		= 0xA000,	/* Pixel Control */
40 	MultMisc	= 0xE000,	/* Miscellaneous Multifunction Control (S3) */
41 	ReadSel		= 0xF000,	/* Read Register Select (S3) */
42 };
43 
44 static void
45 load(Vga *vga, Ctlr *ctlr)
46 {
47 	verbose("%s->load\n", ctlr->name);
48 
49 	outportw(Pixmask, 0x00);
50 	outportw(Subsys, 0x8000|0x1000);
51 	outportw(Subsys, 0x4000|0x1000);
52 	outportw(Pixmask, 0xFF);
53 
54 	outportw(FrgdMix, 0x47);
55 	outportw(BkgdMix, 0x07);
56 
57 	outportw(Multifunc, ScissorsT|0x000);
58 	outportw(Multifunc, ScissorsL|0x000);
59 	outportw(Multifunc, ScissorsB|(vga->vmb/vga->mode->x-1));
60 	outportw(Multifunc, ScissorsR|(vga->mode->x-1));
61 
62 	outportw(WrtMask, 0xFFFF);
63 	outportw(Multifunc, PixCntl|0x0000);
64 }
65 
66 static void
67 dump(Vga *vga, Ctlr *ctlr)
68 {
69 	USED(vga);
70 
71 	printitem(ctlr->name, "Advfunc");
72 	print("%9.4luX\n", inportw(Advfunc));
73 	printitem(ctlr->name, "Subsys");
74 	print("%9.4luX\n", inportw(Subsys));
75 }
76 
77 Ctlr ibm8514 = {
78 	"ibm8514",			/* name */
79 	0,				/* snarf */
80 	0,				/* options */
81 	0,				/* init */
82 	load,				/* load */
83 	dump,				/* dump */
84 };
85