Implementation of VERA sprite functions

This commit is contained in:
Kyle Cardoza 2024-03-29 02:04:21 -04:00
parent 9fd38360a5
commit ed7c89a3f4
1 changed files with 46 additions and 8 deletions

View File

@ -12,35 +12,73 @@
#include "drivers/vera.h"
#include "drivers/vera_sprites.h"
static inline uint32_t
vera_get_sprite_offset(uint8_t index)
{
return 0x0001FC00 + (index * 8);
}
void
vera_sprite_set_bitmap_address(uint8_t index, uint32_t address)
{
(void) index;
(void) address;
uint32_t sprite_address = vera_get_sprite_offset(index);
address = address >> 5;
vera_set_addr0_incr1(sprite_address);
vera_poke_data0((uint8_t)(address & 0x000000FF));
vera_poke_data0((uint8_t)(address & 0x0000FF00) >> 8);
}
uint32_t
vera_sprite_get_bitmap_address(uint8_t index)
{
(void) index;
return 0;
uint32_t sprite_address = vera_get_sprite_offset(index);
vera_set_addr0_incr1(sprite_address);
uint32_t result = 0;
result = (uint32_t)(vera_peek_data0());
result |= ((uint32_t)(vera_peek_data0()) << 8);
result |= (((uint32_t)(vera_peek_data0() & 0b00000001) << 16));
return result;
}
void
vera_sprite_set_bit_depth(uint8_t index, VeraBitDepth depth)
{
(void) index;
(void) depth;
uint32_t sprite_address = vera_get_sprite_offset(index);
vera_set_data0_address(sprite_address + 1);
vera_set_addr0_auto_increment(ADDR_INCREMENT_0);
vera_set_addr0_decrement(false);
uint8_t value = vera_peek_data0();
switch (depth) {
case VERA_DEPTH_4BPP:
vera_poke_data0(value & 0b01111111);
break;
case VERA_DEPTH_8BPP:
vera_poke_data0(value | 0b10000000);
break;
default:
break;
}
}
VeraBitDepth
vera_sprite_get_bit_depth(uint8_t index)
{
(void) index;
return VERA_DEPTH_1BPP;
uint32_t sprite_address = vera_get_sprite_offset(index);
vera_set_data0_address(sprite_address + 1);
vera_set_addr0_auto_increment(ADDR_INCREMENT_0);
vera_set_addr0_decrement(false);
uint8_t value = vera_peek_data0() & 0b10000000;
if (value == 0) {
return VERA_DEPTH_4BPP;
} else {
return VERA_DEPTH_8BPP;
}
}
void