summaryrefslogtreecommitdiff
path: root/hw/kdrive/src/vga.h
blob: 0615d52563e30192fce7f3d1b3e6d0fa0894e79f (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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * Copyright © 1999 Keith Packard
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the name of Keith Packard not be used in
 * advertising or publicity pertaining to distribution of the software without
 * specific, written prior permission.  Keith Packard makes no
 * representations about the suitability of this software for any purpose.  It
 * is provided "as is" without express or implied warranty.
 *
 * KEITH PACKARD DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
 * EVENT SHALL KEITH PACKARD BE LIABLE FOR ANY SPECIAL, INDIRECT OR
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

#ifndef _VGA_H_
#define _VGA_H_

typedef unsigned long	VGA32;
typedef unsigned short	VGA16;
typedef unsigned char	VGA8;
typedef int		VGABOOL;
typedef volatile VGA8	VGAVOL8;

#define VGATRUE	    1
#define VGAFALSE    0

typedef struct _vgaReg {
    VGA16	id;
    VGA8	base;
    VGA8	len;
} VgaReg;

#define VGA_REG_NONE	    0xffff
#define VGA_REG_END	    VGA_REG_NONE, 0, 0

typedef struct _vgaValue {
    VGA8	save;
    VGA8	cur;
    VGA16	flags;
} VgaValue;

#define VGA_VALUE_VALID	    1	/* value ever fetched */
#define VGA_VALUE_MODIFIED  2	/* value ever changed */
#define VGA_VALUE_DIRTY	    4	/* value needs syncing */
#define VGA_VALUE_SAVED	    8	/* value preserved */

typedef enum _vgaAccess {
    VgaAccessMem, VgaAccessIo, VgaAccessIndMem, VgaAccessIndIo,
    VgaAccessDone
} VgaAccess;

typedef struct _vgaMap {
    VgaAccess	access;
    VGA32	port;
    VGA8	addr;	    /* for Ind access; addr offset from port */
    VGA8	value;	    /* for Ind access; value offset from port */
    VGA8	index;	    /* for Ind access; index value */
} VgaMap;

#define VGA_UNLOCK_FIXED    1	/* dont save current value */
#define VGA_UNLOCK_LOCK	    2	/* execute only on relock */
#define VGA_UNLOCK_UNLOCK   4	/* execute only on unlock */

typedef struct _vgaSave {
    VGA16	first;
    VGA16	last;
} VgaSave;

#define VGA_SAVE_END	VGA_REG_NONE, VGA_REG_NONE

typedef struct _vgaCard {
    void	(*map) (struct _vgaCard *card, VGA16 reg, VgaMap *map, VGABOOL write);
    void	*closure;
    int		max;
    VgaValue	*values;
    VgaSave	*saves;
} VgaCard;

VGA8
VgaInb (VGA16 r);

void
VgaOutb (VGA8 v, VGA16 r);
    
VGA8
VgaReadMemb (VGA32 addr);

void
VgaWriteMemb (VGA8 v, VGA32 addr);

void
VgaSetImm (VgaCard *card, VgaReg *reg, VGA32 value);

VGA32
VgaGetImm (VgaCard *card, VgaReg *reg);

void
VgaSet (VgaCard *card, VgaReg *reg, VGA32 value);

VGA32
VgaGet (VgaCard *card, VgaReg *reg);

void
VgaFlush (VgaCard *card);

void
VgaFill (VgaCard *card, VGA16 low, VGA16 high);

void
VgaPreserve (VgaCard *card);

void
VgaInvalidate (VgaCard *card);

void
VgaRestore (VgaCard *card);

void
VgaFinish (VgaCard *card);

void
VgaFlushReg (VgaCard *card, VgaReg *reg);

VGA8
VgaFetch (VgaCard *card, VGA16 id);

void
VgaStore (VgaCard *card, VGA16 id, VGA8 value);

VGA8
_VgaFetchInd (VGA16 port, VGA8 reg);

void
_VgaStoreInd (VGA16 port, VGA8 reg, VGA8 value);

#endif /* _VGA_H_ */