67#define RASTER_DRAW_AREA_X1 0
68#define RASTER_DRAW_AREA_Y1 0
69#define RASTER_DRAW_AREA_X2 1024
70#define RASTER_DRAW_AREA_Y2 512
95#define RASTER_SENTINEL 0xDEADu
107static inline uint32_t rasterCmdColor(uint8_t r5, uint8_t g5, uint8_t b5) {
111 return r8 | (g8 << 8) | (b8 << 16);
116static inline uint16_t rasterVram555(uint8_t r5, uint8_t g5, uint8_t b5) {
117 return (uint16_t)((r5 & 0x1f) | ((g5 & 0x1f) << 5) | ((b5 & 0x1f) << 10));
124#define RASTER_CMD_RED rasterCmdColor(0x1f, 0x00, 0x00)
125#define RASTER_VRAM_RED rasterVram555(0x1f, 0x00, 0x00)
126#define RASTER_CMD_GREEN rasterCmdColor(0x00, 0x1f, 0x00)
127#define RASTER_VRAM_GREEN rasterVram555(0x00, 0x1f, 0x00)
128#define RASTER_CMD_BLUE rasterCmdColor(0x00, 0x00, 0x1f)
129#define RASTER_VRAM_BLUE rasterVram555(0x00, 0x00, 0x1f)
130#define RASTER_CMD_WHITE rasterCmdColor(0x1f, 0x1f, 0x1f)
131#define RASTER_VRAM_WHITE rasterVram555(0x1f, 0x1f, 0x1f)
140static inline void rasterFullReset(
void) {
143 for (
unsigned i = 0;
i < 7;
i++) {
166 setDisplayMode(&config);
167 setHorizontalRange(0, 0xa00);
168 setVerticalRange(16, 255);
169 setDisplayArea(0, 0);
180 setDrawingOffset(0, 0);
195static inline void rasterReset(
void) {
200 setDrawingOffset(0, 0);
213static inline void rasterStreamPace(
int idx) {
214 if ((idx & 7) == 0) {
225static inline void rasterFillRect(int16_t x, int16_t y, int16_t w, int16_t h,
232 int words = ((
int)w * (
int)h) >> 1;
233 for (
int i = 0;
i < words;
i++) {
244static inline uint16_t rasterReadPixel(int16_t x, int16_t y) {
252 return (uint16_t)(word & 0xffff);
258static inline void rasterReadStrip(int16_t x, int16_t y, int16_t w,
264 int words = (
w + 1) >> 1;
265 for (
int i = 0;
i < words;
i++) {
269 dst[
i * 2] = (uint16_t)(word & 0xffff);
270 if (
i * 2 + 1 < w) dst[
i * 2 + 1] = (uint16_t)(word >> 16);
277static inline void rasterClearTestRegion(int16_t x, int16_t y, int16_t w,
288static inline void rasterFlatTri(
uint32_t cmdColor, int16_t x0, int16_t y0,
289 int16_t x1, int16_t y1, int16_t x2,
292 GPU_DATA = 0x20000000u | (cmdColor & 0x00ffffffu);
300static inline void rasterFlatTriSemi(
uint32_t cmdColor, int16_t x0, int16_t y0,
301 int16_t x1, int16_t y1, int16_t x2,
304 GPU_DATA = 0x22000000u | (cmdColor & 0x00ffffffu);
311static inline void rasterFlatQuadSemi(
uint32_t cmdColor, int16_t x0, int16_t y0,
312 int16_t x1, int16_t y1, int16_t x2,
313 int16_t y2, int16_t x3, int16_t y3) {
315 GPU_DATA = 0x2a000000u | (cmdColor & 0x00ffffffu);
323static inline void rasterFlatRectSemi(
uint32_t cmdColor, int16_t x, int16_t y,
324 int16_t w, int16_t h) {
326 GPU_DATA = 0x62000000u | (cmdColor & 0x00ffffffu);
337static inline void rasterSetAbr(uint8_t abr) {
346static inline void rasterSetMaskCtrl(
int set_mask,
int check_mask) {
356static inline void rasterFlatQuad(
uint32_t cmdColor, int16_t x0, int16_t y0,
357 int16_t x1, int16_t y1, int16_t x2,
358 int16_t y2, int16_t x3, int16_t y3) {
360 GPU_DATA = 0x28000000u | (cmdColor & 0x00ffffffu);
368static inline void rasterFlatLine(
uint32_t cmdColor, int16_t x0, int16_t y0,
369 int16_t x1, int16_t y1) {
371 GPU_DATA = 0x40000000u | (cmdColor & 0x00ffffffu);
377static inline void rasterFlatLineSemi(
uint32_t cmdColor,
378 int16_t x0, int16_t y0,
379 int16_t x1, int16_t y1) {
381 GPU_DATA = 0x42000000u | (cmdColor & 0x00ffffffu);
387static inline void rasterGouraudLine(
uint32_t c0, int16_t x0, int16_t y0,
399static inline void rasterFlatPolyline3(
uint32_t cmdColor,
400 int16_t x0, int16_t y0,
401 int16_t x1, int16_t y1,
402 int16_t x2, int16_t y2) {
404 GPU_DATA = 0x48000000u | (cmdColor & 0x00ffffffu);
412static inline void rasterFlatRect(
uint32_t cmdColor, int16_t x, int16_t y,
413 int16_t w, int16_t h) {
415 GPU_DATA = 0x60000000u | (cmdColor & 0x00ffffffu);
433static inline void rasterGouraudTri(
uint32_t c0, int16_t x0, int16_t y0,
435 uint32_t c2, int16_t x2, int16_t y2) {
451static inline void rasterSetDither(
int on) {
454 if (on) e1 |= 0x00000200u;
460static inline void rasterFlushPrimitive(
void) { waitGPU(); }
473#define ASSERT_PIXEL_EQ(expected, x_, y_) \
475 int16_t _ax = (int16_t)(x_); \
476 int16_t _ay = (int16_t)(y_); \
477 uint16_t _aval = rasterReadPixel(_ax, _ay); \
478 ramsyscall_printf("OBS x=%d y=%d val=0x%04x expect=0x%04x\n", \
479 (int)_ax, (int)_ay, (unsigned)_aval, \
480 (unsigned)(expected)); \
481 cester_assert_uint_eq((unsigned)(expected), (unsigned)_aval); \
486#define ASSERT_PIXEL_UNTOUCHED(x_, y_) \
487 ASSERT_PIXEL_EQ(RASTER_SENTINEL, (x_), (y_))
uint32_t dicr
Definition cester-cop0.c:98
@ VM_NTSC
Definition gpu.h:47
@ HRE_NORMAL
Definition gpu.h:62
@ VR_240
Definition gpu.h:42
@ HR_320
Definition gpu.h:36
@ VI_OFF
Definition gpu.h:57
@ CD_15BITS
Definition gpu.h:52
#define DMA_CTRL
Definition dma.h:36
int i
Definition gte-regio.c:287
#define DPCR
Definition hwregs.h:49
#define GPU_DATA
Definition hwregs.h:52
#define IMASK
Definition hwregs.h:47
#define GPU_STATUS
Definition hwregs.h:53
#define DICR
Definition hwregs.h:50
#define IREG
Definition hwregs.h:46
volatile void * c1
Definition load-timings.c:522
volatile void * c0
Definition load-timings.c:521
list w
Definition gentable.py:86
#define RASTER_DRAW_AREA_Y2
Definition raster-helpers.h:70
#define RASTER_DRAW_AREA_X1
Definition raster-helpers.h:67
#define RASTER_DRAW_AREA_Y1
Definition raster-helpers.h:68
#define RASTER_DRAW_AREA_X2
Definition raster-helpers.h:69
#define RASTER_SENTINEL
Definition raster-helpers.h:95
enum HResolution hResolution
Definition gpu.h:67
static int value
Definition syscalls.h:535
void uint32_t(classId, spec)