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_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
|
||||
|
|
Loading…
Reference in New Issue