diff options
author | Kevin O'Connor <kevin@koconnor.net> | 2024-04-01 13:44:58 -0400 |
---|---|---|
committer | Kevin O'Connor <kevin@koconnor.net> | 2024-04-13 13:19:56 -0400 |
commit | 731c88d503ef07a06a03dd17a6e9163941b329da (patch) | |
tree | d5be203fa866356a69b9d6cad6fc69426fa9ece3 /vgasrc/stdvgaio.c | |
parent | c5a361c09a19e3b1a83557b01f11f04b27181a11 (diff) | |
download | seabios-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.c | 38 |
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); } |