xref: /illumos-gate/usr/src/common/vga/vgasubr.c (revision 9890ff83)
1*9890ff83SToomas Soome /*
2*9890ff83SToomas Soome  * CDDL HEADER START
3*9890ff83SToomas Soome  *
4*9890ff83SToomas Soome  * The contents of this file are subject to the terms of the
5*9890ff83SToomas Soome  * Common Development and Distribution License (the "License").
6*9890ff83SToomas Soome  * You may not use this file except in compliance with the License.
7*9890ff83SToomas Soome  *
8*9890ff83SToomas Soome  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*9890ff83SToomas Soome  * or http://www.opensolaris.org/os/licensing.
10*9890ff83SToomas Soome  * See the License for the specific language governing permissions
11*9890ff83SToomas Soome  * and limitations under the License.
12*9890ff83SToomas Soome  *
13*9890ff83SToomas Soome  * When distributing Covered Code, include this CDDL HEADER in each
14*9890ff83SToomas Soome  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*9890ff83SToomas Soome  * If applicable, add the following below this CDDL HEADER, with the
16*9890ff83SToomas Soome  * fields enclosed by brackets "[]" replaced with your own identifying
17*9890ff83SToomas Soome  * information: Portions Copyright [yyyy] [name of copyright owner]
18*9890ff83SToomas Soome  *
19*9890ff83SToomas Soome  * CDDL HEADER END
20*9890ff83SToomas Soome  */
21*9890ff83SToomas Soome 
22*9890ff83SToomas Soome /*
23*9890ff83SToomas Soome  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
24*9890ff83SToomas Soome  * Use is subject to license terms.
25*9890ff83SToomas Soome  * Copyright 2018 Toomas Soome <tsoome@me.com>
26*9890ff83SToomas Soome  */
27*9890ff83SToomas Soome 
28*9890ff83SToomas Soome /*
29*9890ff83SToomas Soome  * Support routines for VGA drivers
30*9890ff83SToomas Soome  */
31*9890ff83SToomas Soome 
32*9890ff83SToomas Soome #if defined(_KERNEL)
33*9890ff83SToomas Soome #include <sys/debug.h>
34*9890ff83SToomas Soome #include <sys/types.h>
35*9890ff83SToomas Soome #include <sys/param.h>
36*9890ff83SToomas Soome #include <sys/time.h>
37*9890ff83SToomas Soome #include <sys/buf.h>
38*9890ff83SToomas Soome #include <sys/errno.h>
39*9890ff83SToomas Soome #include <sys/systm.h>
40*9890ff83SToomas Soome #include <sys/conf.h>
41*9890ff83SToomas Soome 
42*9890ff83SToomas Soome #include <sys/cmn_err.h>
43*9890ff83SToomas Soome 
44*9890ff83SToomas Soome #include <sys/kmem.h>
45*9890ff83SToomas Soome #include <sys/conf.h>
46*9890ff83SToomas Soome #include <sys/ddi.h>
47*9890ff83SToomas Soome #include <sys/devops.h>
48*9890ff83SToomas Soome #include <sys/sunddi.h>
49*9890ff83SToomas Soome 
50*9890ff83SToomas Soome #include <sys/modctl.h>
51*9890ff83SToomas Soome 
52*9890ff83SToomas Soome #define	PUTB(reg, off, v)	ddi_put8(reg->handle, reg->addr + (off), v)
53*9890ff83SToomas Soome #define	GETB(reg, off)		ddi_get8(reg->handle, reg->addr + (off))
54*9890ff83SToomas Soome 
55*9890ff83SToomas Soome #elif defined(_STANDALONE)
56*9890ff83SToomas Soome 
57*9890ff83SToomas Soome #include <stand.h>
58*9890ff83SToomas Soome #include <machine/cpufunc.h>
59*9890ff83SToomas Soome 
60*9890ff83SToomas Soome #define	PUTB(reg, off, v)	outb(reg + (off), v)
61*9890ff83SToomas Soome #define	GETB(reg, off)		inb(reg + (off))
62*9890ff83SToomas Soome #endif
63*9890ff83SToomas Soome 
64*9890ff83SToomas Soome #include <sys/vgareg.h>
65*9890ff83SToomas Soome #include <sys/vgasubr.h>
66*9890ff83SToomas Soome 
67*9890ff83SToomas Soome #define	GET_HORIZ_END(c)	vga_get_crtc(c, VGA_CRTC_H_D_END)
68*9890ff83SToomas Soome #define	GET_VERT_END(c)	(vga_get_crtc(c, VGA_CRTC_VDE) \
69*9890ff83SToomas Soome 	+ (((vga_get_crtc(c, VGA_CRTC_OVFL_REG) >> \
70*9890ff83SToomas Soome 	    VGA_CRTC_OVFL_REG_VDE8) & 1) << 8) \
71*9890ff83SToomas Soome 	+ (((vga_get_crtc(c, VGA_CRTC_OVFL_REG) >> \
72*9890ff83SToomas Soome 	    VGA_CRTC_OVFL_REG_VDE9) & 1) << 9))
73*9890ff83SToomas Soome 
74*9890ff83SToomas Soome #define	GET_VERT_X2(c)	\
75*9890ff83SToomas Soome 	(vga_get_crtc(c, VGA_CRTC_CRT_MD) & VGA_CRTC_CRT_MD_VT_X2)
76*9890ff83SToomas Soome 
77*9890ff83SToomas Soome unsigned char VGA_CRTC_TEXT[NUM_CRTC_REG] = {
78*9890ff83SToomas Soome 	0x5f, 0x4f, 0x50, 0x82, 0x55, 0x81, 0xbf, 0x1f,
79*9890ff83SToomas Soome 	0x00, 0x4f, 0x0d, 0x0e, 0x00, 0x00, 0x05, 0x00,
80*9890ff83SToomas Soome 	0x9c, 0x8e, 0x8f, 0x28, 0x1f, 0x96, 0xb9, 0xa3,
81*9890ff83SToomas Soome 	0xff };
82*9890ff83SToomas Soome unsigned char VGA_SEQ_TEXT[NUM_SEQ_REG] = {
83*9890ff83SToomas Soome 	0x03, 0x00, 0x03, 0x00, 0x02 };
84*9890ff83SToomas Soome unsigned char VGA_GRC_TEXT[NUM_GRC_REG] = {
85*9890ff83SToomas Soome 	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0e, 0x00, 0xff };
86*9890ff83SToomas Soome unsigned char VGA_ATR_TEXT[NUM_ATR_REG] = {
87*9890ff83SToomas Soome 	0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x14, 0x07,
88*9890ff83SToomas Soome 	0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
89*9890ff83SToomas Soome 	0x0c, 0x00, 0x0f, 0x08, 0x00 };
90*9890ff83SToomas Soome 
91*9890ff83SToomas Soome void
vga_get_hardware_settings(vgaregmap_t reg,int * width,int * height)92*9890ff83SToomas Soome vga_get_hardware_settings(vgaregmap_t reg, int *width, int *height)
93*9890ff83SToomas Soome {
94*9890ff83SToomas Soome 	*width = (GET_HORIZ_END(reg)+1)*8;
95*9890ff83SToomas Soome 	*height = GET_VERT_END(reg)+1;
96*9890ff83SToomas Soome 	if (GET_VERT_X2(reg)) *height *= 2;
97*9890ff83SToomas Soome }
98*9890ff83SToomas Soome 
99*9890ff83SToomas Soome int
vga_get_reg(vgaregmap_t reg,int indexreg)100*9890ff83SToomas Soome vga_get_reg(vgaregmap_t reg, int indexreg)
101*9890ff83SToomas Soome {
102*9890ff83SToomas Soome 	return (GETB(reg, indexreg));
103*9890ff83SToomas Soome }
104*9890ff83SToomas Soome 
105*9890ff83SToomas Soome void
vga_set_reg(vgaregmap_t reg,int indexreg,int v)106*9890ff83SToomas Soome vga_set_reg(vgaregmap_t reg, int indexreg, int v)
107*9890ff83SToomas Soome {
108*9890ff83SToomas Soome 	PUTB(reg, indexreg, v);
109*9890ff83SToomas Soome }
110*9890ff83SToomas Soome 
111*9890ff83SToomas Soome int
vga_get_crtc(vgaregmap_t reg,int i)112*9890ff83SToomas Soome vga_get_crtc(vgaregmap_t reg, int i)
113*9890ff83SToomas Soome {
114*9890ff83SToomas Soome 	return (vga_get_indexed(reg, VGA_CRTC_ADR, VGA_CRTC_DATA, i));
115*9890ff83SToomas Soome }
116*9890ff83SToomas Soome 
117*9890ff83SToomas Soome void
vga_set_crtc(vgaregmap_t reg,int i,int v)118*9890ff83SToomas Soome vga_set_crtc(vgaregmap_t reg, int i, int v)
119*9890ff83SToomas Soome {
120*9890ff83SToomas Soome 	vga_set_indexed(reg, VGA_CRTC_ADR, VGA_CRTC_DATA, i, v);
121*9890ff83SToomas Soome }
122*9890ff83SToomas Soome 
123*9890ff83SToomas Soome int
vga_get_seq(vgaregmap_t reg,int i)124*9890ff83SToomas Soome vga_get_seq(vgaregmap_t reg, int i)
125*9890ff83SToomas Soome {
126*9890ff83SToomas Soome 	return (vga_get_indexed(reg, VGA_SEQ_ADR, VGA_SEQ_DATA, i));
127*9890ff83SToomas Soome }
128*9890ff83SToomas Soome 
129*9890ff83SToomas Soome void
vga_set_seq(vgaregmap_t reg,int i,int v)130*9890ff83SToomas Soome vga_set_seq(vgaregmap_t reg, int i, int v)
131*9890ff83SToomas Soome {
132*9890ff83SToomas Soome 	vga_set_indexed(reg, VGA_SEQ_ADR, VGA_SEQ_DATA, i, v);
133*9890ff83SToomas Soome }
134*9890ff83SToomas Soome 
135*9890ff83SToomas Soome int
vga_get_grc(vgaregmap_t reg,int i)136*9890ff83SToomas Soome vga_get_grc(vgaregmap_t reg, int i)
137*9890ff83SToomas Soome {
138*9890ff83SToomas Soome 	return (vga_get_indexed(reg, VGA_GRC_ADR, VGA_GRC_DATA, i));
139*9890ff83SToomas Soome }
140*9890ff83SToomas Soome 
141*9890ff83SToomas Soome void
vga_set_grc(vgaregmap_t reg,int i,int v)142*9890ff83SToomas Soome vga_set_grc(vgaregmap_t reg, int i, int v)
143*9890ff83SToomas Soome {
144*9890ff83SToomas Soome 	vga_set_indexed(reg, VGA_GRC_ADR, VGA_GRC_DATA, i, v);
145*9890ff83SToomas Soome }
146*9890ff83SToomas Soome 
147*9890ff83SToomas Soome int
vga_get_atr(vgaregmap_t reg,int i)148*9890ff83SToomas Soome vga_get_atr(vgaregmap_t reg, int i)
149*9890ff83SToomas Soome {
150*9890ff83SToomas Soome 	int ret;
151*9890ff83SToomas Soome 
152*9890ff83SToomas Soome 	(void) GETB(reg, CGA_STAT);
153*9890ff83SToomas Soome 	PUTB(reg, VGA_ATR_AD, i);
154*9890ff83SToomas Soome 	ret = GETB(reg, VGA_ATR_DATA);
155*9890ff83SToomas Soome 
156*9890ff83SToomas Soome 	(void) GETB(reg, CGA_STAT);
157*9890ff83SToomas Soome 	PUTB(reg, VGA_ATR_AD, VGA_ATR_ENB_PLT);
158*9890ff83SToomas Soome 
159*9890ff83SToomas Soome 	return (ret);
160*9890ff83SToomas Soome }
161*9890ff83SToomas Soome 
162*9890ff83SToomas Soome void
vga_set_atr(vgaregmap_t reg,int i,int v)163*9890ff83SToomas Soome vga_set_atr(vgaregmap_t reg, int i, int v)
164*9890ff83SToomas Soome {
165*9890ff83SToomas Soome 	(void) GETB(reg, CGA_STAT);
166*9890ff83SToomas Soome 	PUTB(reg, VGA_ATR_AD, i);
167*9890ff83SToomas Soome 	PUTB(reg, VGA_ATR_AD, v);
168*9890ff83SToomas Soome 
169*9890ff83SToomas Soome 	(void) GETB(reg, CGA_STAT);
170*9890ff83SToomas Soome 	PUTB(reg, VGA_ATR_AD, VGA_ATR_ENB_PLT);
171*9890ff83SToomas Soome }
172*9890ff83SToomas Soome 
173*9890ff83SToomas Soome void
vga_set_indexed(vgaregmap_t reg,int indexreg,int datareg,unsigned char index,unsigned char val)174*9890ff83SToomas Soome vga_set_indexed(
175*9890ff83SToomas Soome 	vgaregmap_t reg,
176*9890ff83SToomas Soome 	int indexreg,
177*9890ff83SToomas Soome 	int datareg,
178*9890ff83SToomas Soome 	unsigned char index,
179*9890ff83SToomas Soome 	unsigned char val)
180*9890ff83SToomas Soome {
181*9890ff83SToomas Soome 	PUTB(reg, indexreg, index);
182*9890ff83SToomas Soome 	PUTB(reg, datareg, val);
183*9890ff83SToomas Soome }
184*9890ff83SToomas Soome 
185*9890ff83SToomas Soome int
vga_get_indexed(vgaregmap_t reg,int indexreg,int datareg,unsigned char index)186*9890ff83SToomas Soome vga_get_indexed(
187*9890ff83SToomas Soome 	vgaregmap_t reg,
188*9890ff83SToomas Soome 	int indexreg,
189*9890ff83SToomas Soome 	int datareg,
190*9890ff83SToomas Soome 	unsigned char index)
191*9890ff83SToomas Soome {
192*9890ff83SToomas Soome 	PUTB(reg, indexreg, index);
193*9890ff83SToomas Soome 	return (GETB(reg, datareg));
194*9890ff83SToomas Soome }
195*9890ff83SToomas Soome 
196*9890ff83SToomas Soome /*
197*9890ff83SToomas Soome  * VGA DAC access functions
198*9890ff83SToomas Soome  * Note:  These assume a VGA-style 6-bit DAC.  Some DACs are 8 bits
199*9890ff83SToomas Soome  * wide.  These functions are not appropriate for those DACs.
200*9890ff83SToomas Soome  */
201*9890ff83SToomas Soome void
vga_put_cmap(vgaregmap_t reg,int index,unsigned char r,unsigned char g,unsigned char b)202*9890ff83SToomas Soome vga_put_cmap(
203*9890ff83SToomas Soome 	vgaregmap_t reg,
204*9890ff83SToomas Soome 	int index,
205*9890ff83SToomas Soome 	unsigned char r,
206*9890ff83SToomas Soome 	unsigned char g,
207*9890ff83SToomas Soome 	unsigned char b)
208*9890ff83SToomas Soome {
209*9890ff83SToomas Soome 
210*9890ff83SToomas Soome 	PUTB(reg, VGA_DAC_WR_AD, index);
211*9890ff83SToomas Soome 	PUTB(reg, VGA_DAC_DATA, r >> 2);
212*9890ff83SToomas Soome 	PUTB(reg, VGA_DAC_DATA, g >> 2);
213*9890ff83SToomas Soome 	PUTB(reg, VGA_DAC_DATA, b >> 2);
214*9890ff83SToomas Soome }
215*9890ff83SToomas Soome 
216*9890ff83SToomas Soome void
vga_get_cmap(vgaregmap_t reg,int index,unsigned char * r,unsigned char * g,unsigned char * b)217*9890ff83SToomas Soome vga_get_cmap(
218*9890ff83SToomas Soome 	vgaregmap_t reg,
219*9890ff83SToomas Soome 	int index,
220*9890ff83SToomas Soome 	unsigned char *r,
221*9890ff83SToomas Soome 	unsigned char *g,
222*9890ff83SToomas Soome 	unsigned char *b)
223*9890ff83SToomas Soome {
224*9890ff83SToomas Soome 	PUTB(reg, VGA_DAC_RD_AD, index);
225*9890ff83SToomas Soome 	*r = GETB(reg, VGA_DAC_DATA) << 2;
226*9890ff83SToomas Soome 	*g = GETB(reg, VGA_DAC_DATA) << 2;
227*9890ff83SToomas Soome 	*b = GETB(reg, VGA_DAC_DATA) << 2;
228*9890ff83SToomas Soome }
229*9890ff83SToomas Soome 
230*9890ff83SToomas Soome #ifdef	DEBUG
231*9890ff83SToomas Soome 
232*9890ff83SToomas Soome void
vga_dump_regs(vgaregmap_t reg,int maxseq,int maxcrtc,int maxatr,int maxgrc)233*9890ff83SToomas Soome vga_dump_regs(vgaregmap_t reg, int maxseq, int maxcrtc, int maxatr, int maxgrc)
234*9890ff83SToomas Soome {
235*9890ff83SToomas Soome 	int i, j;
236*9890ff83SToomas Soome 
237*9890ff83SToomas Soome 	printf("Sequencer regs:\n");
238*9890ff83SToomas Soome 	for (i = 0; i < maxseq; i += 0x10) {
239*9890ff83SToomas Soome 		printf("%2x:  ", i);
240*9890ff83SToomas Soome 		for (j = 0; j < 0x08; j++) {
241*9890ff83SToomas Soome 			printf("%2x ", vga_get_seq(reg, i+j));
242*9890ff83SToomas Soome 		}
243*9890ff83SToomas Soome 		printf("- ");
244*9890ff83SToomas Soome 		for (; j < 0x10; j++) {
245*9890ff83SToomas Soome 			printf("%2x ", vga_get_seq(reg, i+j));
246*9890ff83SToomas Soome 		}
247*9890ff83SToomas Soome 		printf("\n");
248*9890ff83SToomas Soome 	}
249*9890ff83SToomas Soome 	printf("\nCRT Controller regs:\n");
250*9890ff83SToomas Soome 	for (i = 0; i < maxcrtc; i += 0x10) {
251*9890ff83SToomas Soome 		printf("%2x:  ", i);
252*9890ff83SToomas Soome 		for (j = 0; j < 0x08; j++) {
253*9890ff83SToomas Soome 			printf("%2x ", vga_get_crtc(reg, i+j));
254*9890ff83SToomas Soome 		}
255*9890ff83SToomas Soome 		printf("- ");
256*9890ff83SToomas Soome 		for (; j < 0x10; j++) {
257*9890ff83SToomas Soome 			printf("%2x ", vga_get_crtc(reg, i+j));
258*9890ff83SToomas Soome 		}
259*9890ff83SToomas Soome 		printf("\n");
260*9890ff83SToomas Soome 	}
261*9890ff83SToomas Soome 	printf("\nAttribute Controller regs:\n");
262*9890ff83SToomas Soome 	for (i = 0; i < maxatr; i += 0x10) {
263*9890ff83SToomas Soome 		printf("%2x:  ", i);
264*9890ff83SToomas Soome 		for (j = 0; j < 0x08; j++) {
265*9890ff83SToomas Soome 			printf("%2x ", vga_get_atr(reg, i+j));
266*9890ff83SToomas Soome 		}
267*9890ff83SToomas Soome 		printf("- ");
268*9890ff83SToomas Soome 		for (; j < 0x10; j++) {
269*9890ff83SToomas Soome 			printf("%2x ", vga_get_atr(reg, i+j));
270*9890ff83SToomas Soome 		}
271*9890ff83SToomas Soome 		printf("\n");
272*9890ff83SToomas Soome 	}
273*9890ff83SToomas Soome 	printf("\nGraphics Controller regs:\n");
274*9890ff83SToomas Soome 	for (i = 0; i < maxgrc; i += 0x10) {
275*9890ff83SToomas Soome 		printf("%2x:  ", i);
276*9890ff83SToomas Soome 		for (j = 0; j < 0x08; j++) {
277*9890ff83SToomas Soome 			printf("%2x ", vga_get_grc(reg, i+j));
278*9890ff83SToomas Soome 		}
279*9890ff83SToomas Soome 		printf("- ");
280*9890ff83SToomas Soome 		for (; j < 0x10; j++) {
281*9890ff83SToomas Soome 			printf("%2x ", vga_get_grc(reg, i+j));
282*9890ff83SToomas Soome 		}
283*9890ff83SToomas Soome 		printf("\n");
284*9890ff83SToomas Soome 	}
285*9890ff83SToomas Soome }
286*9890ff83SToomas Soome #endif	/* DEBUG */
287*9890ff83SToomas Soome 
288*9890ff83SToomas Soome /*
289*9890ff83SToomas Soome  * VGA 80X25 text mode standard palette
290*9890ff83SToomas Soome  */
291*9890ff83SToomas Soome unsigned char VGA_TEXT_PALETTES[64][3] = {
292*9890ff83SToomas Soome 	{ 0x00, 0x00, 0x00 },
293*9890ff83SToomas Soome 	{ 0x00, 0x00, 0x2A },
294*9890ff83SToomas Soome 	{ 0x00, 0x2A, 0x00 },
295*9890ff83SToomas Soome 	{ 0x00, 0x2A, 0x2A },
296*9890ff83SToomas Soome 	{ 0x2A, 0x00, 0x00 },
297*9890ff83SToomas Soome 	{ 0x2A, 0x00, 0x2A },
298*9890ff83SToomas Soome 	{ 0x2A, 0x2A, 0x00 },
299*9890ff83SToomas Soome 	{ 0x2A, 0x2A, 0x2A },
300*9890ff83SToomas Soome 	{ 0x00, 0x00, 0x15 },
301*9890ff83SToomas Soome 	{ 0x00, 0x00, 0x3F },
302*9890ff83SToomas Soome 	{ 0x00, 0x2A, 0x15 },
303*9890ff83SToomas Soome 	{ 0x00, 0x2A, 0x3F },
304*9890ff83SToomas Soome 	{ 0x2A, 0x00, 0x15 },
305*9890ff83SToomas Soome 	{ 0x2A, 0x00, 0x3F },
306*9890ff83SToomas Soome 	{ 0x2A, 0x2A, 0x15 },
307*9890ff83SToomas Soome 	{ 0x2A, 0x2A, 0x3F },
308*9890ff83SToomas Soome 	{ 0x00, 0x15, 0x00 },
309*9890ff83SToomas Soome 	{ 0x00, 0x15, 0x2A },
310*9890ff83SToomas Soome 	{ 0x00, 0x3F, 0x00 },
311*9890ff83SToomas Soome 	{ 0x00, 0x3F, 0x2A },
312*9890ff83SToomas Soome 	{ 0x2A, 0x15, 0x00 },
313*9890ff83SToomas Soome 	{ 0x2A, 0x15, 0x2A },
314*9890ff83SToomas Soome 	{ 0x2A, 0x3F, 0x00 },
315*9890ff83SToomas Soome 	{ 0x2A, 0x3F, 0x2A },
316*9890ff83SToomas Soome 	{ 0x00, 0x15, 0x15 },
317*9890ff83SToomas Soome 	{ 0x00, 0x15, 0x3F },
318*9890ff83SToomas Soome 	{ 0x00, 0x3F, 0x15 },
319*9890ff83SToomas Soome 	{ 0x00, 0x3F, 0x3F },
320*9890ff83SToomas Soome 	{ 0x2A, 0x15, 0x15 },
321*9890ff83SToomas Soome 	{ 0x2A, 0x15, 0x3F },
322*9890ff83SToomas Soome 	{ 0x2A, 0x3F, 0x15 },
323*9890ff83SToomas Soome 	{ 0x2A, 0x3F, 0x3F },
324*9890ff83SToomas Soome 	{ 0x15, 0x00, 0x00 },
325*9890ff83SToomas Soome 	{ 0x15, 0x00, 0x2A },
326*9890ff83SToomas Soome 	{ 0x15, 0x2A, 0x00 },
327*9890ff83SToomas Soome 	{ 0x15, 0x2A, 0x2A },
328*9890ff83SToomas Soome 	{ 0x3F, 0x00, 0x00 },
329*9890ff83SToomas Soome 	{ 0x3F, 0x00, 0x2A },
330*9890ff83SToomas Soome 	{ 0x3F, 0x2A, 0x00 },
331*9890ff83SToomas Soome 	{ 0x3F, 0x2A, 0x2A },
332*9890ff83SToomas Soome 	{ 0x15, 0x00, 0x15 },
333*9890ff83SToomas Soome 	{ 0x15, 0x00, 0x3F },
334*9890ff83SToomas Soome 	{ 0x15, 0x2A, 0x15 },
335*9890ff83SToomas Soome 	{ 0x15, 0x2A, 0x3F },
336*9890ff83SToomas Soome 	{ 0x3F, 0x00, 0x15 },
337*9890ff83SToomas Soome 	{ 0x3F, 0x00, 0x3F },
338*9890ff83SToomas Soome 	{ 0x3F, 0x2A, 0x15 },
339*9890ff83SToomas Soome 	{ 0x3F, 0x2A, 0x3F },
340*9890ff83SToomas Soome 	{ 0x15, 0x15, 0x00 },
341*9890ff83SToomas Soome 	{ 0x15, 0x15, 0x2A },
342*9890ff83SToomas Soome 	{ 0x15, 0x3F, 0x00 },
343*9890ff83SToomas Soome 	{ 0x15, 0x3F, 0x2A },
344*9890ff83SToomas Soome 	{ 0x3F, 0x15, 0x00 },
345*9890ff83SToomas Soome 	{ 0x3F, 0x15, 0x2A },
346*9890ff83SToomas Soome 	{ 0x3F, 0x3F, 0x00 },
347*9890ff83SToomas Soome 	{ 0x3F, 0x3F, 0x2A },
348*9890ff83SToomas Soome 	{ 0x15, 0x15, 0x15 },
349*9890ff83SToomas Soome 	{ 0x15, 0x15, 0x3F },
350*9890ff83SToomas Soome 	{ 0x15, 0x3F, 0x15 },
351*9890ff83SToomas Soome 	{ 0x15, 0x3F, 0x3F },
352*9890ff83SToomas Soome 	{ 0x3F, 0x15, 0x15 },
353*9890ff83SToomas Soome 	{ 0x3F, 0x15, 0x3F },
354*9890ff83SToomas Soome 	{ 0x3F, 0x3F, 0x15 },
355*9890ff83SToomas Soome 	{ 0x3F, 0x3F, 0x3F }
356*9890ff83SToomas Soome };
357