aboutsummaryrefslogtreecommitdiffstats
path: root/vgasrc/stdvgaio.c
diff options
context:
space:
mode:
authorKevin O'Connor <kevin@koconnor.net>2024-04-01 13:44:58 -0400
committerKevin O'Connor <kevin@koconnor.net>2024-04-13 13:19:56 -0400
commit731c88d503ef07a06a03dd17a6e9163941b329da (patch)
treed5be203fa866356a69b9d6cad6fc69426fa9ece3 /vgasrc/stdvgaio.c
parentc5a361c09a19e3b1a83557b01f11f04b27181a11 (diff)
downloadseabios-731c88d503ef07a06a03dd17a6e9163941b329da.tar.gz
stdvgaio: Only read/write one color palette entry at a time
Introduce stdvga_dac_read_many() and stdvga_dac_write_many() for writing multiple dac palette entries. Convert the stdvga_dac_read() and stdvga_dac_write() low-level IO access functions in stdvgaio.c to access just one color palette entry. Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
Diffstat (limited to 'vgasrc/stdvgaio.c')
-rw-r--r--vgasrc/stdvgaio.c38
1 files changed, 13 insertions, 25 deletions
diff --git a/vgasrc/stdvgaio.c b/vgasrc/stdvgaio.c
index 77fcecdf..d8a5774b 100644
--- a/vgasrc/stdvgaio.c
+++ b/vgasrc/stdvgaio.c
@@ -6,7 +6,6 @@
#include "farptr.h" // GET_FARVAR
#include "stdvga.h" // VGAREG_PEL_MASK
-#include "vgautil.h" // stdvga_pelmask_read
#include "x86.h" // inb
u8
@@ -155,32 +154,21 @@ stdvga_attrindex_write(u8 value)
}
-void
-stdvga_dac_read(u16 seg, u8 *data_far, u8 start, int count)
+struct vbe_palette_entry
+stdvga_dac_read(u8 color)
{
- outb(start, VGAREG_DAC_READ_ADDRESS);
- while (count) {
- SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
- data_far++;
- SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
- data_far++;
- SET_FARVAR(seg, *data_far, inb(VGAREG_DAC_DATA));
- data_far++;
- count--;
- }
+ outb(color, VGAREG_DAC_READ_ADDRESS);
+ u8 r = inb(VGAREG_DAC_DATA);
+ u8 g = inb(VGAREG_DAC_DATA);
+ u8 b = inb(VGAREG_DAC_DATA);
+ return (struct vbe_palette_entry){ .red=r, .green=g, .blue=b };
}
void
-stdvga_dac_write(u16 seg, u8 *data_far, u8 start, int count)
-{
- outb(start, VGAREG_DAC_WRITE_ADDRESS);
- while (count) {
- outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
- data_far++;
- outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
- data_far++;
- outb(GET_FARVAR(seg, *data_far), VGAREG_DAC_DATA);
- data_far++;
- count--;
- }
+stdvga_dac_write(u8 color, struct vbe_palette_entry rgb)
+{
+ outb(color, VGAREG_DAC_WRITE_ADDRESS);
+ outb(rgb.red, VGAREG_DAC_DATA);
+ outb(rgb.green, VGAREG_DAC_DATA);
+ outb(rgb.blue, VGAREG_DAC_DATA);
}