VIP optimizations
This commit is contained in:
@@ -8,8 +8,11 @@
|
||||
|
||||
/*********************************** Types ***********************************/
|
||||
|
||||
/* Output image */
|
||||
typedef uint8_t Pixels[2][384*224];
|
||||
/* VIP BG map cell */
|
||||
typedef struct {
|
||||
uint8_t *palette; /* Points to a VB.vip.gplt */
|
||||
uint8_t *pixels; /* Points to a VB.vip.characters */
|
||||
} Cell;
|
||||
|
||||
/* VSU channel */
|
||||
typedef struct {
|
||||
@@ -69,6 +72,53 @@ typedef struct {
|
||||
uint32_t until; /* Clocks until channel component update */
|
||||
} Channel;
|
||||
|
||||
/* VIP character (hflp << 1 | vflp) */
|
||||
typedef uint8_t Character[4][64];
|
||||
|
||||
/* VIP object */
|
||||
typedef struct {
|
||||
Cell cell; /* BG map-like attributes */
|
||||
int16_t jp; /* Parallax */
|
||||
int16_t jx; /* Screen base X */
|
||||
int16_t jy; /* Screen Y */
|
||||
uint8_t lron; /* Visible in left and right images */
|
||||
} Object;
|
||||
|
||||
/* Output image */
|
||||
typedef uint8_t Pixels[2][384*224];
|
||||
|
||||
/* VIP world */
|
||||
typedef struct {
|
||||
|
||||
/* Attributes */
|
||||
uint8_t bgm; /* Mode */
|
||||
uint8_t end; /* Control world */
|
||||
int16_t gp; /* World parallax */
|
||||
int16_t gx; /* World base X */
|
||||
int16_t gy; /* World Y */
|
||||
int16_t mx; /* Scroll base X */
|
||||
int16_t mp; /* Scroll parallax */
|
||||
int16_t my; /* Scroll Y */
|
||||
uint8_t over; /* Use overplane */
|
||||
Cell *overplane; /* Overplane cell */
|
||||
|
||||
/* Non-attributes */
|
||||
Cell *bg[64]; /* Background arrangement */
|
||||
int32_t bgHeight; /* Height of background in pixels */
|
||||
uint32_t bgMaskX; /* Horizontal background mask */
|
||||
uint32_t bgMaskY; /* Vertical background mask */
|
||||
uint32_t bgShift; /* Bits to shift when selecting a BG map */
|
||||
int32_t bgWidth; /* Width of background in pixels */
|
||||
uint32_t hAffine; /* H for affine mode */
|
||||
uint32_t hNaffine; /* H for not affine mode */
|
||||
uint32_t height; /* Height of world in pixels */
|
||||
uint8_t lron; /* Visible in left and right images */
|
||||
uint32_t paramBase; /* H-bias and affine parameter address */
|
||||
uint32_t wAffine; /* W for affine mode */
|
||||
uint32_t wNaffine; /* W for not affine mode */
|
||||
uint32_t width; /* Width of world in pixels */
|
||||
} World;
|
||||
|
||||
/* Simulation state */
|
||||
struct VB {
|
||||
|
||||
@@ -280,7 +330,11 @@ struct VB {
|
||||
Pixels shadow; /* Drawing shadow image, column-major */
|
||||
|
||||
/* Other state */
|
||||
uint8_t ram[0x40000]; /* Video memory */
|
||||
Cell cells[0x10000]; /* Pre-computed BG map attributes */
|
||||
Character characters[2048]; /* Pre-computed character pixels */
|
||||
Object objects[1024]; /* Pre-computed object attributes */
|
||||
uint8_t ram[0x40000]; /* Video memory */
|
||||
World worlds[32]; /* Pre-computed world attributes */
|
||||
} vip;
|
||||
|
||||
/* VSU */
|
||||
|
||||
Reference in New Issue
Block a user