1 // Standard VGA IO port access
3 // Copyright (C) 2012 Kevin O'Connor <kevin@koconnor.net>
5 // This file may be distributed under the terms of the GNU LGPLv3 license.
7 #include "stdvga.h" // stdvga_pelmask_read
8 #include "ioport.h" // inb
11 stdvga_pelmask_read(void)
13 return inb(VGAREG_PEL_MASK);
17 stdvga_pelmask_write(u8 value)
19 outb(value, VGAREG_PEL_MASK);
24 stdvga_misc_read(void)
26 return inb(VGAREG_READ_MISC_OUTPUT);
30 stdvga_misc_write(u8 value)
32 outb(value, VGAREG_WRITE_MISC_OUTPUT);
36 stdvga_misc_mask(u8 off, u8 on)
38 stdvga_misc_write((stdvga_misc_read() & ~off) | on);
43 stdvga_sequ_read(u8 index)
45 outb(index, VGAREG_SEQU_ADDRESS);
46 return inb(VGAREG_SEQU_DATA);
50 stdvga_sequ_write(u8 index, u8 value)
52 outw((value<<8) | index, VGAREG_SEQU_ADDRESS);
56 stdvga_sequ_mask(u8 index, u8 off, u8 on)
58 outb(index, VGAREG_SEQU_ADDRESS);
59 u8 v = inb(VGAREG_SEQU_DATA);
60 outb((v & ~off) | on, VGAREG_SEQU_DATA);
65 stdvga_grdc_read(u8 index)
67 outb(index, VGAREG_GRDC_ADDRESS);
68 return inb(VGAREG_GRDC_DATA);
72 stdvga_grdc_write(u8 index, u8 value)
74 outw((value<<8) | index, VGAREG_GRDC_ADDRESS);
78 stdvga_grdc_mask(u8 index, u8 off, u8 on)
80 outb(index, VGAREG_GRDC_ADDRESS);
81 u8 v = inb(VGAREG_GRDC_DATA);
82 outb((v & ~off) | on, VGAREG_GRDC_DATA);
87 stdvga_crtc_read(u16 crtc_addr, u8 index)
89 outb(index, crtc_addr);
90 return inb(crtc_addr + 1);
94 stdvga_crtc_write(u16 crtc_addr, u8 index, u8 value)
96 outw((value<<8) | index, crtc_addr);
100 stdvga_crtc_mask(u16 crtc_addr, u8 index, u8 off, u8 on)
102 outb(index, crtc_addr);
103 u8 v = inb(crtc_addr + 1);
104 outb((v & ~off) | on, crtc_addr + 1);
109 stdvga_attr_read(u8 index)
111 inb(VGAREG_ACTL_RESET);
112 u8 orig = inb(VGAREG_ACTL_ADDRESS);
113 outb(index, VGAREG_ACTL_ADDRESS);
114 u8 v = inb(VGAREG_ACTL_READ_DATA);
115 inb(VGAREG_ACTL_RESET);
116 outb(orig, VGAREG_ACTL_ADDRESS);
121 stdvga_attr_write(u8 index, u8 value)
123 inb(VGAREG_ACTL_RESET);
124 u8 orig = inb(VGAREG_ACTL_ADDRESS);
125 outb(index, VGAREG_ACTL_ADDRESS);
126 outb(value, VGAREG_ACTL_WRITE_DATA);
127 outb(orig, VGAREG_ACTL_ADDRESS);
131 stdvga_attr_mask(u8 index, u8 off, u8 on)
133 inb(VGAREG_ACTL_RESET);
134 u8 orig = inb(VGAREG_ACTL_ADDRESS);
135 outb(index, VGAREG_ACTL_ADDRESS);
136 u8 v = inb(VGAREG_ACTL_READ_DATA);
137 outb((v & ~off) | on, VGAREG_ACTL_WRITE_DATA);
138 outb(orig, VGAREG_ACTL_ADDRESS);
142 stdvga_attrindex_read(void)
144 inb(VGAREG_ACTL_RESET);
145 return inb(VGAREG_ACTL_ADDRESS);
149 stdvga_attrindex_write(u8 value)
151 inb(VGAREG_ACTL_RESET);
152 outb(value, VGAREG_ACTL_ADDRESS);
157 stdvga_dac_read(u16 seg, u8 *data_far, u8 start, int count)
159 outb(start, VGAREG_DAC_READ_ADDRESS);
161 SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
163 SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
165 SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
172 stdvga_dac_write(u16 seg, u8 *data_far, u8 start, int count)
174 outb(start, VGAREG_DAC_WRITE_ADDRESS);
176 outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
178 outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
180 outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);