#ifndef GFX_H #define GFX_H #include #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 */