46static inline uint32_t cmdR5(uint8_t r5) {
52static inline void fillR(int16_t x, int16_t y, int16_t w, int16_t h,
54 uint16_t pixel = rasterVram555((uint8_t)(b5 & 0x1f), 0, 0);
55 rasterFillRect(x, y, w, h, pixel);
61static void drawAbrTri(uint8_t b5, uint8_t f5, uint8_t abr) {
63 fillR(0, 0, 32, 32, b5);
65 rasterFlatTriSemi(cmdR5(f5),
69 rasterFlushPrimitive();
73static void drawAbrQuad(uint8_t b5, uint8_t f5, uint8_t abr) {
75 fillR(0, 0, 32, 32, b5);
77 rasterFlatQuadSemi(cmdR5(f5),
82 rasterFlushPrimitive();
86static void drawAbrRect(uint8_t b5, uint8_t f5, uint8_t abr) {
88 fillR(0, 0, 32, 32, b5);
90 rasterFlatRectSemi(cmdR5(f5), 0, 0, 12, 12);
91 rasterFlushPrimitive();
95static void drawAbrLine(uint8_t b5, uint8_t f5, uint8_t abr) {
97 fillR(0, 0, 32, 8, b5);
99 rasterFlatLineSemi(cmdR5(f5), 0, 4, 11, 4);
100 rasterFlushPrimitive();
109static inline void rasterTexTriSemi(
uint32_t cmdColor,
110 int16_t x0, int16_t y0, uint8_t u0, uint8_t v0,
111 int16_t x1, int16_t y1, uint8_t u1, uint8_t
v1,
112 int16_t x2, int16_t y2, uint8_t u2, uint8_t
v2,
113 uint16_t clut_field, uint16_t tpage_field) {
115 GPU_DATA = 0x26000000u | (cmdColor & 0x00ffffffu);
129static void drawAbrTexTriMasked(uint8_t b5, uint8_t abr) {
131 fillR(0, 0, 32, 16, b5);
134 uint16_t tpage = (uint16_t)((
TEX4_TX & 0xf) | ((
TEX4_TY & 1) << 4)
135 | ((abr & 3) << 5) | (0u << 7));
138 setTextureWindow(0, 0, 0, 0);
144 rasterFlushPrimitive();
150static void drawAbrTriSetMask(uint8_t b5, uint8_t f5, uint8_t abr) {
152 fillR(0, 0, 32, 32, b5);
154 rasterSetMaskCtrl(1, 0);
155 rasterFlatTriSemi(cmdR5(f5),
157 rasterFlushPrimitive();
158 rasterSetMaskCtrl(0, 0);
165static void drawAbrTriCheckMask(uint8_t b5, uint8_t f5, uint8_t abr) {
168 uint16_t bg = (uint16_t)(rasterVram555((uint8_t)(b5 & 0x1f), 0, 0) | 0x8000u);
169 rasterFillRect(0, 0, 32, 32, bg);
171 rasterSetMaskCtrl(0, 1);
172 rasterFlatTriSemi(cmdR5(f5),
174 rasterFlushPrimitive();
175 rasterSetMaskCtrl(0, 0);
CESTER_BODY(static int s_got40;static int s_got80;static uint32_t s_cause;static uint32_t s_epc;static uint32_t s_from;static uint32_t *s_resume;static uint32_t *s_regs;static uint32_t(*s_customhandler)()=NULL;static uint32_t s_oldIMASK;static uint32_t s_oldDPCR;static uint32_t s_oldDICR;uint32_t handler(uint32_t *regs, uint32_t from) { if(from==0x40) s_got40=1;if(from==0x80) s_got80=1;uint32_t cause;uint32_t epc;s_from=from;asm("mfc0 %0, $13\nnop\nmfc0 %1, $14\nnop" :"=r"(cause), "=r"(epc));s_cause=cause;s_epc=epc;if(s_customhandler) { return s_customhandler();} else { return s_resume ?((uint32_t) s_resume) :(epc+4);} } void installExceptionHandlers(uint32_t(*handler)(uint32_t *regs, uint32_t from));void uninstallExceptionHandlers();uint32_t branchbranch1();uint32_t branchbranch2();uint32_t jumpjump1();uint32_t jumpjump2();uint32_t cpu_LWR_LWL_half(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_nodelay(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_delayed(uint32_t buff[], uint32_t initial);uint32_t cpu_LWR_LWL_load_different(uint32_t buff[], uint32_t initial);uint32_t cpu_LW_LWR(uint32_t buff[], uint32_t initial);uint32_t cpu_delayed_load(uint32_t buff[], uint32_t override);uint32_t cpu_delayed_load_cancelled(uint32_t buff[], uint32_t override);uint64_t cpu_delayed_load_load(uint32_t buff[], uint32_t override);uint32_t linkandload();uint32_t lwandlink();uint32_t nolink();static int s_interruptsWereEnabled;) CESTER_BEFORE_EACH(cpu_tests
CESTER_TEST(cpu_cop0_basic_write_bp, cpu_tests, uint32_t expectedEPC;uint32_t t;volatile uint32_t *ptr=(volatile uint32_t *) 0x58; *ptr=1;__asm__ volatile("" " lui %0, 0b1100101010000000\n" " mtc0 %0, $7\n" " li %0, 0x58\n" " mtc0 %0, $5\n" " li %0, 0xfffffff0\n" " mtc0 %0, $9\n" :"=r"(t));cester_assert_uint_eq(1, *ptr);__asm__ volatile("la %0, 1f\n1:\nsw $0, 0x58($0)" :"=r"(expectedEPC));__asm__ volatile("mtc0 $0, $7\n");cester_assert_uint_eq(0, *ptr);cester_assert_uint_eq(1, s_got40);cester_assert_uint_eq(0, s_got80);cester_assert_uint_eq(0x40, s_from);cester_assert_uint_eq(expectedEPC, s_epc);) CESTER_TEST(cpu_cop0_kseg_write_bp
#define GPU_DATA
Definition hwregs.h:52
#define ABR0_PRIM_LINE
Definition raster-expected-phase12.h:118
#define ABR3_B16_F31
Definition raster-expected-phase12.h:99
#define ABR1_B16_F16
Definition raster-expected-phase12.h:70
#define ABR2_TEX_MASKED
Definition raster-expected-phase12.h:153
#define ABR0_B16_F31
Definition raster-expected-phase12.h:57
#define ABR3_SETMASK
Definition raster-expected-phase12.h:164
#define ABR1_B16_F00
Definition raster-expected-phase12.h:69
#define ABR3_PRIM_LINE
Definition raster-expected-phase12.h:121
#define ABR0_PRIM_QUAD
Definition raster-expected-phase12.h:108
#define ABR2_B00_F00
Definition raster-expected-phase12.h:80
#define ABR2_B00_F31
Definition raster-expected-phase12.h:82
#define ABR1_SETMASK
Definition raster-expected-phase12.h:162
#define ABR0_B00_F16
Definition raster-expected-phase12.h:53
#define ABR0_B16_F16
Definition raster-expected-phase12.h:56
#define ABR0_B31_F31
Definition raster-expected-phase12.h:60
#define ABR1_B16_F31
Definition raster-expected-phase12.h:71
#define ABR1_B00_F00
Definition raster-expected-phase12.h:66
#define ABR0_B16_F00
Definition raster-expected-phase12.h:55
#define ABR3_CHECKMASK
Definition raster-expected-phase12.h:174
#define ABR1_PRIM_LINE
Definition raster-expected-phase12.h:119
#define ABR2_PRIM_LINE
Definition raster-expected-phase12.h:120
#define ABR1_B31_F31
Definition raster-expected-phase12.h:74
#define ABR3_TEX_MASKED
Definition raster-expected-phase12.h:154
#define ABR0_B31_F16
Definition raster-expected-phase12.h:59
#define ABR3_B16_F16
Definition raster-expected-phase12.h:98
#define ABR2_B31_F16
Definition raster-expected-phase12.h:87
#define ABR0_PRIM_RECT
Definition raster-expected-phase12.h:113
#define ABR3_B00_F00
Definition raster-expected-phase12.h:94
#define ABR3_B31_F31
Definition raster-expected-phase12.h:102
#define ABR2_B16_F31
Definition raster-expected-phase12.h:85
#define ABR3_B00_F16
Definition raster-expected-phase12.h:95
#define ABR2_B31_F31
Definition raster-expected-phase12.h:88
#define ABR3_B31_F16
Definition raster-expected-phase12.h:101
#define ABR0_B00_F00
Definition raster-expected-phase12.h:52
#define ABR2_CHECKMASK
Definition raster-expected-phase12.h:173
#define ABR1_B00_F16
Definition raster-expected-phase12.h:67
#define ABR0_B00_F31
Definition raster-expected-phase12.h:54
#define ABR1_PRIM_QUAD
Definition raster-expected-phase12.h:109
#define ABR3_PRIM_RECT
Definition raster-expected-phase12.h:116
#define ABR0_CHECKMASK
Definition raster-expected-phase12.h:171
#define ABR2_B16_F00
Definition raster-expected-phase12.h:83
#define ABR2_B00_F16
Definition raster-expected-phase12.h:81
#define ABR2_B31_F00
Definition raster-expected-phase12.h:86
#define ABR2_B16_F16
Definition raster-expected-phase12.h:84
#define ABR3_B31_F00
Definition raster-expected-phase12.h:100
#define ABR3_B16_F00
Definition raster-expected-phase12.h:97
#define ABR1_B31_F16
Definition raster-expected-phase12.h:73
#define ABR1_CHECKMASK
Definition raster-expected-phase12.h:172
#define ABR1_B00_F31
Definition raster-expected-phase12.h:68
#define ABR2_PRIM_QUAD
Definition raster-expected-phase12.h:110
#define ABR0_B31_F00
Definition raster-expected-phase12.h:58
#define ABR0_SETMASK
Definition raster-expected-phase12.h:161
#define ABR2_SETMASK
Definition raster-expected-phase12.h:163
#define ABR1_PRIM_RECT
Definition raster-expected-phase12.h:114
#define ABR3_PRIM_QUAD
Definition raster-expected-phase12.h:111
#define ABR3_B00_F31
Definition raster-expected-phase12.h:96
#define ABR1_TEX_MASKED
Definition raster-expected-phase12.h:152
#define ABR0_TEX_MASKED
Definition raster-expected-phase12.h:151
#define ABR2_PRIM_RECT
Definition raster-expected-phase12.h:115
#define ABR1_B31_F00
Definition raster-expected-phase12.h:72
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:472
void uint32_t(classId, spec)
#define CLUT4_FIELD
Definition texture-fixtures.h:83
#define TEX_MOD_NEUTRAL
Definition texture-fixtures.h:328
#define TEX4_TY
Definition texture-fixtures.h:56
#define TEX4_TX
Definition texture-fixtures.h:55
uint16_t v2
Definition timers.c:262
uint16_t v1
Definition timers.c:260