SGDK
A free and open development kit for the Sega Mega Drive
Loading...
Searching...
No Matches
vdp_spr.h
Go to the documentation of this file.
1
10
11#include "config.h"
12#include "types.h"
13#include "dma.h"
14
15#ifndef _VDP_SPR_H_
16#define _VDP_SPR_H_
17
22#define SAT_MAX_SIZE 80
23
33#define SPRITE_SIZE(w, h) ((((w) - 1) << 2) | ((h) - 1))
34
35
65typedef struct
66{
67 s16 y; // 10 bits
68 union
69 {
70 struct
71 {
72 u16 unused1 : 4;
73 u16 sizeH : 2;
74 u16 sizeV : 2;
75 u16 unused2 : 1;
76 u16 linkData : 7;
77 };
78 struct
79 {
80 u8 size;
81 u8 link;
82 };
83 u16 size_link;
84 };
85 union
86 {
87 u16 attribut;
88 struct
89 {
90 u16 priority : 1;
91 u16 palette : 2;
92 u16 flipV : 1;
93 u16 flipH : 1;
94 u16 tile : 11;
95 };
96 };
97 s16 x; // 10 bits
98} VDPSprite;
99
100
104extern VDPSprite vdpSpriteCache[SAT_MAX_SIZE + 16];
105
110extern VDPSprite* lastAllocatedVDPSprite;
120extern s16 highestVDPSpriteIndex;
121
122
127void VDP_resetSprites(void);
128
133void VDP_releaseAllSprites(void);
134
171void VDP_releaseSprites(u16 index, u16 num);
193
198void VDP_clearSprites(void);
220void VDP_setSpriteFull(u16 index, s16 x, s16 y, u8 size, u16 attribut, u8 link);
239void VDP_setSprite(u16 index, s16 x, s16 y, u8 size, u16 attribut);
254void VDP_setSpritePosition(u16 index, s16 x, s16 y);
267void VDP_setSpriteSize(u16 index, u8 size);
280void VDP_setSpriteAttribut(u16 index, u16 attribut);
293void VDP_setSpriteLink(u16 index, u8 link);
306VDPSprite* VDP_linkSprites(u16 index, u16 num);
307
339void VDP_setSpritePriority(u16 index, bool priority);
347bool VDP_getSpritePriority(u16 index);
360void VDP_setSpritePalette(u16 index, u16 palette);
383void VDP_setSpriteFlip(u16 index, bool flipH, bool flipV);
396void VDP_setSpriteFlipH(u16 index, bool flipH);
409void VDP_setSpriteFlipV(u16 index, bool flipV);
417bool VDP_getSpriteFlipH(u16 index);
425bool VDP_getSpriteFlipV(u16 index);
438void VDP_setSpriteTile(u16 index, u16 tile);
447
448#endif // _VDP_SPR_H_
Basic SGDK library configuration file.
DMA support.
TransferMethod
VRAM transfer method.
Definition dma.h:52
VDP sprite definition structure replicating VDP hardware sprite.
Definition vdp_spr.h:66
Types definition.
short s16
Definition types.h:84
unsigned short u16
Definition types.h:100
unsigned char u8
Definition types.h:95
void VDP_setSpriteFull(u16 index, s16 x, s16 y, u8 size, u16 attribut, u8 link)
Set a sprite (use sprite list cache).
Definition vdp_spr.c:160
void VDP_setSpriteTile(u16 index, u16 tile)
Set sprite tile index (use sprite list cache).
Definition vdp_spr.c:283
u16 VDP_getAvailableSprites(void)
Returns the number of available VDP sprite from the SAT. WARNING: the SAT maximum size is 128 entries...
Definition vdp_spr.c:125
s16 VDP_refreshHighestAllocatedSpriteIndex(void)
Compute and return the highest index of currently allocated VDP sprite. A value of -1 mean no VDP Sp...
Definition vdp_spr.c:130
void VDP_updateSprites(u16 num, TransferMethod tm)
Send the cached sprite list to the VDP.
Definition vdp_spr.c:224
void VDP_setSpriteFlipH(u16 index, bool flipH)
Set sprite horizontal flip (use sprite list cache).
Definition vdp_spr.c:263
void VDP_setSpriteLink(u16 index, u8 link)
Set sprite link (use sprite list cache).
Definition vdp_spr.c:199
void VDP_setSpriteFlipV(u16 index, bool flipV)
Set sprite vertical flip (use sprite list cache).
Definition vdp_spr.c:268
void VDP_setSpriteSize(u16 index, u8 size)
Set sprite size (use sprite list cache).
Definition vdp_spr.c:189
VDPSprite * VDP_linkSprites(u16 index, u16 num)
Link sprites starting at the specified index. Links are created in simple ascending order (1 --> 2 -...
Definition vdp_spr.c:204
s16 VDP_allocateSprites(u16 num)
Allocate the specified number of hardware VDP sprites and link them together.
Definition vdp_spr.c:49
void VDP_clearSprites(void)
Clear all sprites.
Definition vdp_spr.c:151
void VDP_releaseSprites(u16 index, u16 num)
Release specified number of VDP sprites.
Definition vdp_spr.c:103
bool VDP_getSpriteFlipV(u16 index)
Get sprite vertical flip (use sprite list cache).
Definition vdp_spr.c:278
u16 VDP_getSpriteTile(u16 index)
Get sprite tile index (use sprite list cache).
Definition vdp_spr.c:288
void VDP_setSprite(u16 index, s16 x, s16 y, u8 size, u16 attribut)
Set a sprite (use sprite list cache).
Definition vdp_spr.c:171
void VDP_setSpriteAttribut(u16 index, u16 attribut)
Set sprite attributes (use sprite list cache).
Definition vdp_spr.c:194
void VDP_resetSprites(void)
Clear all sprites and reset VDP sprite allocation (if any).
Definition vdp_spr.c:27
#define SAT_MAX_SIZE
Maximum size of Sprite Attribute Table (128 in VRAM but limited to 80 in VDP anyway)
Definition vdp_spr.h:22
void VDP_setSpritePriority(u16 index, bool priority)
Set sprite priority (use sprite list cache).
Definition vdp_spr.c:236
u16 VDP_getSpritePalette(u16 index)
Get sprite palette (use sprite list cache).
Definition vdp_spr.c:251
void VDP_setSpriteFlip(u16 index, bool flipH, bool flipV)
Set sprite horizontal and vertical flip (use sprite list cache).
Definition vdp_spr.c:256
bool VDP_getSpritePriority(u16 index)
Get sprite priority (use sprite list cache).
Definition vdp_spr.c:241
bool VDP_getSpriteFlipH(u16 index)
Get sprite horizontal flip (use sprite list cache).
Definition vdp_spr.c:273
void VDP_setSpritePalette(u16 index, u16 palette)
Set sprite palette (use sprite list cache).
Definition vdp_spr.c:246
void VDP_setSpritePosition(u16 index, s16 x, s16 y)
Set sprite position (use sprite list cache).
Definition vdp_spr.c:181
void VDP_releaseAllSprites(void)
Release all VDP sprite allocation.
Definition vdp_spr.c:35