Implementation of VERA sprite functions
This commit is contained in:
parent
9fd38360a5
commit
ed7c89a3f4
|
@ -12,35 +12,73 @@
|
||||||
#include "drivers/vera.h"
|
#include "drivers/vera.h"
|
||||||
#include "drivers/vera_sprites.h"
|
#include "drivers/vera_sprites.h"
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
vera_get_sprite_offset(uint8_t index)
|
||||||
|
{
|
||||||
|
return 0x0001FC00 + (index * 8);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
vera_sprite_set_bitmap_address(uint8_t index, uint32_t address)
|
vera_sprite_set_bitmap_address(uint8_t index, uint32_t address)
|
||||||
{
|
{
|
||||||
(void) index;
|
uint32_t sprite_address = vera_get_sprite_offset(index);
|
||||||
(void) address;
|
|
||||||
|
|
||||||
|
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
|
uint32_t
|
||||||
vera_sprite_get_bitmap_address(uint8_t index)
|
vera_sprite_get_bitmap_address(uint8_t index)
|
||||||
{
|
{
|
||||||
(void) index;
|
uint32_t sprite_address = vera_get_sprite_offset(index);
|
||||||
return 0;
|
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
|
void
|
||||||
vera_sprite_set_bit_depth(uint8_t index, VeraBitDepth depth)
|
vera_sprite_set_bit_depth(uint8_t index, VeraBitDepth depth)
|
||||||
{
|
{
|
||||||
(void) index;
|
uint32_t sprite_address = vera_get_sprite_offset(index);
|
||||||
(void) depth;
|
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
|
VeraBitDepth
|
||||||
vera_sprite_get_bit_depth(uint8_t index)
|
vera_sprite_get_bit_depth(uint8_t index)
|
||||||
{
|
{
|
||||||
(void) index;
|
uint32_t sprite_address = vera_get_sprite_offset(index);
|
||||||
return VERA_DEPTH_1BPP;
|
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
|
void
|
||||||
|
|
Loading…
Reference in New Issue