From 731c88d503ef07a06a03dd17a6e9163941b329da Mon Sep 17 00:00:00 2001 From: Kevin O'Connor Date: Mon, 1 Apr 2024 13:44:58 -0400 Subject: 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 --- vgasrc/stdvgaio.c | 38 +++++++++++++------------------------- 1 file changed, 13 insertions(+), 25 deletions(-) (limited to 'vgasrc/stdvgaio.c') 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); } -- cgit