|
|
1.1 root 1: // Standard VGA IO port access
2: //
3: // Copyright (C) 2012 Kevin O'Connor <[email protected]>
4: //
5: // This file may be distributed under the terms of the GNU LGPLv3 license.
6:
7: #include "stdvga.h" // stdvga_pelmask_read
8: #include "farptr.h" // GET_FARVAR
9: #include "ioport.h" // inb
10:
11: u8
12: stdvga_pelmask_read(void)
13: {
14: return inb(VGAREG_PEL_MASK);
15: }
16:
17: void
18: stdvga_pelmask_write(u8 value)
19: {
20: outb(value, VGAREG_PEL_MASK);
21: }
22:
23:
24: u8
25: stdvga_misc_read(void)
26: {
27: return inb(VGAREG_READ_MISC_OUTPUT);
28: }
29:
30: void
31: stdvga_misc_write(u8 value)
32: {
33: outb(value, VGAREG_WRITE_MISC_OUTPUT);
34: }
35:
36: void
37: stdvga_misc_mask(u8 off, u8 on)
38: {
39: stdvga_misc_write((stdvga_misc_read() & ~off) | on);
40: }
41:
42:
43: u8
44: stdvga_sequ_read(u8 index)
45: {
46: outb(index, VGAREG_SEQU_ADDRESS);
47: return inb(VGAREG_SEQU_DATA);
48: }
49:
50: void
51: stdvga_sequ_write(u8 index, u8 value)
52: {
53: outw((value<<8) | index, VGAREG_SEQU_ADDRESS);
54: }
55:
56: void
57: stdvga_sequ_mask(u8 index, u8 off, u8 on)
58: {
59: outb(index, VGAREG_SEQU_ADDRESS);
60: u8 v = inb(VGAREG_SEQU_DATA);
61: outb((v & ~off) | on, VGAREG_SEQU_DATA);
62: }
63:
64:
65: u8
66: stdvga_grdc_read(u8 index)
67: {
68: outb(index, VGAREG_GRDC_ADDRESS);
69: return inb(VGAREG_GRDC_DATA);
70: }
71:
72: void
73: stdvga_grdc_write(u8 index, u8 value)
74: {
75: outw((value<<8) | index, VGAREG_GRDC_ADDRESS);
76: }
77:
78: void
79: stdvga_grdc_mask(u8 index, u8 off, u8 on)
80: {
81: outb(index, VGAREG_GRDC_ADDRESS);
82: u8 v = inb(VGAREG_GRDC_DATA);
83: outb((v & ~off) | on, VGAREG_GRDC_DATA);
84: }
85:
86:
87: u8
88: stdvga_crtc_read(u16 crtc_addr, u8 index)
89: {
90: outb(index, crtc_addr);
91: return inb(crtc_addr + 1);
92: }
93:
94: void
95: stdvga_crtc_write(u16 crtc_addr, u8 index, u8 value)
96: {
97: outw((value<<8) | index, crtc_addr);
98: }
99:
100: void
101: stdvga_crtc_mask(u16 crtc_addr, u8 index, u8 off, u8 on)
102: {
103: outb(index, crtc_addr);
104: u8 v = inb(crtc_addr + 1);
105: outb((v & ~off) | on, crtc_addr + 1);
106: }
107:
108:
109: u8
110: stdvga_attr_read(u8 index)
111: {
112: inb(VGAREG_ACTL_RESET);
113: u8 orig = inb(VGAREG_ACTL_ADDRESS);
114: outb(index, VGAREG_ACTL_ADDRESS);
115: u8 v = inb(VGAREG_ACTL_READ_DATA);
116: inb(VGAREG_ACTL_RESET);
117: outb(orig, VGAREG_ACTL_ADDRESS);
118: return v;
119: }
120:
121: void
122: stdvga_attr_write(u8 index, u8 value)
123: {
124: inb(VGAREG_ACTL_RESET);
125: u8 orig = inb(VGAREG_ACTL_ADDRESS);
126: outb(index, VGAREG_ACTL_ADDRESS);
127: outb(value, VGAREG_ACTL_WRITE_DATA);
128: outb(orig, VGAREG_ACTL_ADDRESS);
129: }
130:
131: void
132: stdvga_attr_mask(u8 index, u8 off, u8 on)
133: {
134: inb(VGAREG_ACTL_RESET);
135: u8 orig = inb(VGAREG_ACTL_ADDRESS);
136: outb(index, VGAREG_ACTL_ADDRESS);
137: u8 v = inb(VGAREG_ACTL_READ_DATA);
138: outb((v & ~off) | on, VGAREG_ACTL_WRITE_DATA);
139: outb(orig, VGAREG_ACTL_ADDRESS);
140: }
141:
142: u8
143: stdvga_attrindex_read(void)
144: {
145: inb(VGAREG_ACTL_RESET);
146: return inb(VGAREG_ACTL_ADDRESS);
147: }
148:
149: void
150: stdvga_attrindex_write(u8 value)
151: {
152: inb(VGAREG_ACTL_RESET);
153: outb(value, VGAREG_ACTL_ADDRESS);
154: }
155:
156:
157: void
158: stdvga_dac_read(u16 seg, u8 *data_far, u8 start, int count)
159: {
160: outb(start, VGAREG_DAC_READ_ADDRESS);
161: while (count) {
162: SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
163: data_far++;
164: SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
165: data_far++;
166: SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
167: data_far++;
168: count--;
169: }
170: }
171:
172: void
173: stdvga_dac_write(u16 seg, u8 *data_far, u8 start, int count)
174: {
175: outb(start, VGAREG_DAC_WRITE_ADDRESS);
176: while (count) {
177: outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
178: data_far++;
179: outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
180: data_far++;
181: outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
182: data_far++;
183: count--;
184: }
185: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.