pinboid/src/gfx/inc/gfx.h

83 lines
1.9 KiB
C

#ifndef GFX_H
#define GFX_H
#include <stdint.h>
#ifdef __cplusplus
extern "C"
{
#endif
enum
{
SCREEN_X = 368,
SCREEN_Y = 240
};
/* 0-3 Texture page X Base (N*64) (ie. in 64-halfword steps) ;GPUSTAT.0-3
4 Texture page Y Base (N*256) (ie. 0 or 256) ;GPUSTAT.4
5-6 Semi Transparency (0=B/2+F/2, 1=B+F, 2=B-F, 3=B+F/4) ;GPUSTAT.5-6
7-8 Texture page colors (0=4bit, 1=8bit, 2=15bit, 3=Reserved);GPUSTAT.7-8
9 Dither 24bit to 15bit (0=Off/strip LSBs, 1=Dither Enabled) ;GPUSTAT.9
10 Drawing to display area (0=Prohibited, 1=Allowed) ;GPUSTAT.10
11 Texture Disable (0=Normal, 1=Disable if GP1(09h).Bit0=1) ;GPUSTAT.15
(Above might be chipselect for (absent) second VRAM chip?)
12 Textured Rectangle X-Flip (BIOS does set this bit on power-up...?)
13 Textured Rectangle Y-Flip (BIOS does set it equal to GPUSTAT.13...?)
14-23 Not used (should be 0)
24-31 Command (E1h)*/
union gfx_common
{
struct
{
uint32_t tpagex :4;
uint32_t tpagey :1;
uint32_t stp :2;
uint32_t bpp :2;
uint32_t dither :1;
uint32_t draw_to_disp :1;
uint32_t disable :1;
uint32_t xflip :1;
uint32_t yflip :1;
uint32_t :10;
uint8_t cmd;
};
uint32_t mask;
};
union gfx_sznext
{
struct
{
uint32_t next :24;
uint32_t sz :8;
};
uint32_t cmd_next;
};
struct gfx_sprite
{
union gfx_sznext sznext;
union gfx_common common;
uint8_t r, g, b;
uint8_t cmd;
uint16_t x, y;
uint16_t clutid;
uint8_t u, v;
uint16_t w, h;
};
int gfx_init(void);
void gfx_draw(void);
void gfx_sprite_init(struct gfx_sprite *s);
void gfx_sprite_sort(struct gfx_sprite *s);
int gfx_sprite_from_file(const char *path, struct gfx_sprite *s);
#ifdef __cplusplus
}
#endif
#endif /* GFX_H */