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) {
108 uint32_t r8 = (uint32_t)(r5 & 0x1f) << 3;
109 uint32_t g8 = (uint32_t)(g5 & 0x1f) << 3;
110 uint32_t b8 = (uint32_t)(b5 & 0x1f) << 3;
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)
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,
229 GPU_DATA = ((uint32_t)(uint16_t)y << 16) | (uint32_t)(uint16_t)x;
230 GPU_DATA = ((uint32_t)(uint16_t)h << 16) | (uint32_t)(uint16_t)w;
231 uint32_t doubled = (uint32_t)
value | ((uint32_t)
value << 16);
232 int words = ((int)w * (
int)h) >> 1;
244static inline uint16_t rasterReadPixel(int16_t x, int16_t y) {
247 GPU_DATA = ((uint32_t)(uint16_t)y << 16) | (uint32_t)(uint16_t)x;
248 GPU_DATA = ((uint32_t)(uint16_t)1 << 16) | (uint32_t)(uint16_t)2;
252 return (uint16_t)(word & 0xffff);
258static inline void rasterReadStrip(int16_t x, int16_t y, int16_t w,
262 GPU_DATA = ((uint32_t)(uint16_t)y << 16) | (uint32_t)(uint16_t)x;
263 GPU_DATA = ((uint32_t)(uint16_t)1 << 16) | (uint32_t)(uint16_t)w;
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);
293 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
294 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
295 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
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);
305 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
306 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
307 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
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);
316 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
317 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
318 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
319 GPU_DATA = ((uint32_t)(uint16_t)y3 << 16) | (uint32_t)(uint16_t)x3;
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);
327 GPU_DATA = ((uint32_t)(uint16_t)y << 16) | (uint32_t)(uint16_t)x;
328 GPU_DATA = ((uint32_t)(uint16_t)h << 16) | (uint32_t)(uint16_t)w;
337static inline void rasterSetAbr(uint8_t abr) {
338 uint32_t e1 = 0xe1000400u | ((uint32_t)(abr & 3) << 5);
346static inline void rasterSetMaskCtrl(
int set_mask,
int check_mask) {
347 uint32_t e6 = 0xe6000000u |
348 ((uint32_t)(set_mask & 1)) |
349 ((uint32_t)(check_mask & 1) << 1);
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);
361 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
362 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
363 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
364 GPU_DATA = ((uint32_t)(uint16_t)y3 << 16) | (uint32_t)(uint16_t)x3;
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);
372 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
373 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
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);
382 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
383 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
387static inline void rasterGouraudLine(uint32_t c0, int16_t x0, int16_t y0,
388 uint32_t
c1, int16_t x1, int16_t y1) {
391 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
393 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
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);
405 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
406 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
407 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
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);
416 GPU_DATA = ((uint32_t)(uint16_t)y << 16) | (uint32_t)(uint16_t)x;
417 GPU_DATA = ((uint32_t)(uint16_t)h << 16) | (uint32_t)(uint16_t)w;
433static inline void rasterGouraudTri(uint32_t c0, int16_t x0, int16_t y0,
434 uint32_t
c1, int16_t x1, int16_t y1,
435 uint32_t c2, int16_t x2, int16_t y2) {
438 GPU_DATA = ((uint32_t)(uint16_t)y0 << 16) | (uint32_t)(uint16_t)x0;
440 GPU_DATA = ((uint32_t)(uint16_t)y1 << 16) | (uint32_t)(uint16_t)x1;
442 GPU_DATA = ((uint32_t)(uint16_t)y2 << 16) | (uint32_t)(uint16_t)x2;
451static inline void rasterSetDither(
int on) {
453 uint32_t e1 = 0xe1000400u;
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 cdlreadn.c:178
@ 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:299
#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:874
volatile void * c0
Definition load-timings.c:873
list w
Definition gentable.py:108
list words
Definition mktest.py:123
#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:553