66#define RASTER_DRAW_AREA_X1 0
67#define RASTER_DRAW_AREA_Y1 0
68#define RASTER_DRAW_AREA_X2 1024
69#define RASTER_DRAW_AREA_Y2 512
94#define RASTER_SENTINEL 0xDEADu
106static inline uint32_t rasterCmdColor(uint8_t r5, uint8_t g5, uint8_t b5) {
110 return r8 | (g8 << 8) | (b8 << 16);
115static inline uint16_t rasterVram555(uint8_t r5, uint8_t g5, uint8_t b5) {
116 return (uint16_t)((r5 & 0x1f) | ((g5 & 0x1f) << 5) | ((b5 & 0x1f) << 10));
123#define RASTER_CMD_RED rasterCmdColor(0x1f, 0x00, 0x00)
124#define RASTER_VRAM_RED rasterVram555(0x1f, 0x00, 0x00)
125#define RASTER_CMD_GREEN rasterCmdColor(0x00, 0x1f, 0x00)
126#define RASTER_VRAM_GREEN rasterVram555(0x00, 0x1f, 0x00)
127#define RASTER_CMD_BLUE rasterCmdColor(0x00, 0x00, 0x1f)
128#define RASTER_VRAM_BLUE rasterVram555(0x00, 0x00, 0x1f)
129#define RASTER_CMD_WHITE rasterCmdColor(0x1f, 0x1f, 0x1f)
130#define RASTER_VRAM_WHITE rasterVram555(0x1f, 0x1f, 0x1f)
139static inline void rasterFullReset(
void) {
142 for (
unsigned i = 0;
i < 7;
i++) {
165 setDisplayMode(&config);
166 setHorizontalRange(0, 0xa00);
167 setVerticalRange(16, 255);
168 setDisplayArea(0, 0);
179 setDrawingOffset(0, 0);
194static inline void rasterReset(
void) {
199 setDrawingOffset(0, 0);
212static inline void rasterStreamPace(
int idx) {
213 if ((idx & 7) == 0) {
224static inline void rasterFillRect(int16_t x, int16_t y, int16_t w, int16_t h,
231 int words = ((
int)w * (
int)h) >> 1;
232 for (
int i = 0;
i < words;
i++) {
243static inline uint16_t rasterReadPixel(int16_t x, int16_t y) {
251 return (uint16_t)(word & 0xffff);
257static inline void rasterReadStrip(int16_t x, int16_t y, int16_t w,
263 int words = (w + 1) >> 1;
264 for (
int i = 0;
i < words;
i++) {
268 dst[
i * 2] = (uint16_t)(word & 0xffff);
269 if (
i * 2 + 1 < w) dst[
i * 2 + 1] = (uint16_t)(word >> 16);
276static inline void rasterClearTestRegion(int16_t x, int16_t y, int16_t w,
287static inline void rasterFlatTri(
uint32_t cmdColor, int16_t x0, int16_t y0,
288 int16_t x1, int16_t y1, int16_t x2,
291 GPU_DATA = 0x20000000u | (cmdColor & 0x00ffffffu);
299static inline void rasterFlatTriSemi(
uint32_t cmdColor, int16_t x0, int16_t y0,
300 int16_t x1, int16_t y1, int16_t x2,
303 GPU_DATA = 0x22000000u | (cmdColor & 0x00ffffffu);
310static inline void rasterFlatQuadSemi(
uint32_t cmdColor, int16_t x0, int16_t y0,
311 int16_t x1, int16_t y1, int16_t x2,
312 int16_t y2, int16_t x3, int16_t y3) {
314 GPU_DATA = 0x2a000000u | (cmdColor & 0x00ffffffu);
322static inline void rasterFlatRectSemi(
uint32_t cmdColor, int16_t x, int16_t y,
323 int16_t w, int16_t h) {
325 GPU_DATA = 0x62000000u | (cmdColor & 0x00ffffffu);
336static inline void rasterSetAbr(uint8_t abr) {
345static inline void rasterSetMaskCtrl(
int set_mask,
int check_mask) {
355static inline void rasterFlatQuad(
uint32_t cmdColor, int16_t x0, int16_t y0,
356 int16_t x1, int16_t y1, int16_t x2,
357 int16_t y2, int16_t x3, int16_t y3) {
359 GPU_DATA = 0x28000000u | (cmdColor & 0x00ffffffu);
367static inline void rasterFlatLine(
uint32_t cmdColor, int16_t x0, int16_t y0,
368 int16_t x1, int16_t y1) {
370 GPU_DATA = 0x40000000u | (cmdColor & 0x00ffffffu);
376static inline void rasterFlatLineSemi(
uint32_t cmdColor,
377 int16_t x0, int16_t y0,
378 int16_t x1, int16_t y1) {
380 GPU_DATA = 0x42000000u | (cmdColor & 0x00ffffffu);
386static inline void rasterGouraudLine(
uint32_t c0, int16_t x0, int16_t y0,
387 uint32_t c1, int16_t x1, int16_t y1) {
389 GPU_DATA = 0x50000000u | (c0 & 0x00ffffffu);
398static inline void rasterFlatPolyline3(
uint32_t cmdColor,
399 int16_t x0, int16_t y0,
400 int16_t x1, int16_t y1,
401 int16_t x2, int16_t y2) {
403 GPU_DATA = 0x48000000u | (cmdColor & 0x00ffffffu);
411static inline void rasterFlatRect(
uint32_t cmdColor, int16_t x, int16_t y,
412 int16_t w, int16_t h) {
414 GPU_DATA = 0x60000000u | (cmdColor & 0x00ffffffu);
432static inline void rasterGouraudTri(
uint32_t c0, int16_t x0, int16_t y0,
433 uint32_t c1, int16_t x1, int16_t y1,
434 uint32_t c2, int16_t x2, int16_t y2) {
436 GPU_DATA = 0x30000000u | (c0 & 0x00ffffffu);
450static inline void rasterSetDither(
int on) {
453 if (on) e1 |= 0x00000200u;
459static inline void rasterFlushPrimitive(
void) { waitGPU(); }
472#define ASSERT_PIXEL_EQ(expected, x_, y_) \
474 int16_t _ax = (int16_t)(x_); \
475 int16_t _ay = (int16_t)(y_); \
476 uint16_t _aval = rasterReadPixel(_ax, _ay); \
477 ramsyscall_printf("OBS x=%d y=%d val=0x%04x expect=0x%04x\n", \
478 (int)_ax, (int)_ay, (unsigned)_aval, \
479 (unsigned)(expected)); \
480 cester_assert_uint_eq((unsigned)(expected), (unsigned)_aval); \
485#define ASSERT_PIXEL_UNTOUCHED(x_, y_) \
486 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
#define RASTER_DRAW_AREA_Y2
Definition raster-helpers.h:69
#define RASTER_DRAW_AREA_X1
Definition raster-helpers.h:66
#define RASTER_DRAW_AREA_Y1
Definition raster-helpers.h:67
#define RASTER_DRAW_AREA_X2
Definition raster-helpers.h:68
#define RASTER_SENTINEL
Definition raster-helpers.h:94
enum HResolution hResolution
Definition gpu.h:67
static int value
Definition syscalls.h:534
void uint32_t(classId, spec)