summaryrefslogtreecommitdiff
path: root/os/sa1110/gscreen.h
blob: 7c1de5857c7e89ebba4f6d0e9d57431f857257f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
typedef struct Cursor Cursor;
typedef struct LCDmode LCDmode;
typedef struct LCDparam LCDparam;
typedef struct Vmode Vmode;
typedef struct Physdisplay Physdisplay;
typedef struct Physcursor Physcursor;

#define CURSWID	16
#define CURSHGT	16

struct Cursor {
	Point	offset;
	uchar	clr[CURSWID/BI2BY*CURSHGT];
	uchar	set[CURSWID/BI2BY*CURSHGT];
};

struct Vmode {
	int	x;	/* 0 -> default or any match for all fields */
	int	y;
	uchar	depth;
	uchar	hz;
};

struct Physdisplay {
	uchar*	fb;		/* frame buffer */
	ulong	colormap[256][3];
	Rectangle	r;
	int	bwid;
	void*	aux;
	Memimage*	gscreen;
	Memsubfont*	memdefont;
	Physcursor*	cursor;
	void*	cdata;	/* cursor data */
	Lock;
	Vmode;
};

struct LCDparam {
	uchar	pbs;
	uchar	dual;
	uchar	mono;
	uchar	active;
	uchar	hsync_wid;
	uchar	sol_wait;
	uchar	eol_wait;
	uchar	vsync_hgt;
	uchar	sof_wait;
	uchar	eof_wait;
	uchar	lines_per_int;
	uchar	palette_delay;
	uchar	acbias_lines;
	uchar	obits;
	uchar	vsynclow;
	uchar	hsynclow;
};

struct LCDmode {
	Vmode;
	LCDparam;
};

int	archlcdmode(LCDmode*);

Vdisplay	*lcd_init(LCDmode*);
void	lcd_setcolor(ulong, ulong, ulong, ulong);
void	lcd_flush(void);

extern void	blankscreen(int);
extern void	drawblankscreen(int);
extern ulong blanktime;
extern Point mousexy(void);

enum {
	Backgnd = 0xFF,	/* white */
	Foregnd =	0x00,	/* black */
};

struct Physcursor {
	char*	name;

	void	(*create)(Physdisplay*);
	void	(*enable)(Physdisplay*);
	void	(*disable)(Physdisplay*);
	void	(*load)(Physdisplay*, Cursor*);
	int	(*move)(Physdisplay*, Point);
	void	(*destroy)(Physdisplay*);
};