Added VERA palette functions

This commit is contained in:
Kyle Cardoza 2024-03-28 23:47:13 -04:00
parent a90d8f476d
commit 95306ab124
2 changed files with 57 additions and 0 deletions

View File

@ -29,6 +29,23 @@ typedef enum {
ADDR_INCREMENT_640 = 15
} VeraAddressIncrement;
typedef union vera_palette_entry_s {
struct {
uint8_t blue: 4;
uint8_t green: 4;
uint8_t red: 4;
uint8_t padding: 4;
};
uint8_t byte_value[2];
} VeraPaletteEntry;
typedef struct vera_palette_s {
union {
VeraPaletteEntry color[256];
VeraPaletteEntry colour[256];
};
} VeraPalette;
extern void vera_init(void);
extern void vera_set_data0_address(uint32_t addr);
@ -66,3 +83,11 @@ void vera_read(void *dest, uint32_t src, size_t length);
void vera_write(uint32_t dest, void *src, size_t length);
void vera_memset(uint32_t addr, uint8_t value, size_t length);
VeraPaletteEntry vera_get_palette_entry(uint8_t index);
void vera_set_palette_entry(uint8_t index, VeraPaletteEntry value);
void vera_palette_read(VeraPalette *dest);
void vera_palette_write(VeraPalette *src);

View File

@ -77,3 +77,35 @@ vera_memset(uint32_t addr, uint8_t value, size_t length)
vera_poke_data0(value);
}
}
VeraPaletteEntry
vera_get_palette_entry(uint8_t index)
{
uint32_t address = 0x0001FA00 + (index * 2);
vera_set_addr0_incr1(address);
VeraPaletteEntry result;
result.byte_value[0] = vera_peek_data0();
result.byte_value[1] = vera_peek_data0();
return result;
}
void
vera_set_palette_entry(uint8_t index, VeraPaletteEntry value)
{
uint32_t address = 0x0001FA00 + (index * 2);
vera_set_addr0_incr1(address);
vera_poke_data0(value.byte_value[0]);
vera_poke_data0(value.byte_value[1]);
}
void
vera_palette_read(VeraPalette *dest)
{
vera_read(dest, 0x0001FA00, sizeof(VeraPalette));
}
void
vera_palette_write(VeraPalette *src)
{
vera_write(0x0001FA00, src, sizeof(VeraPalette));
}