47static void drawNV1(
void) {
49 rasterClearTestRegion(0, 0, 8, 16);
51 rasterFlushPrimitive();
54static void drawNV2(
void) {
56 rasterClearTestRegion(0, 0, 8, 16);
58 rasterFlushPrimitive();
61static void drawNV3(
void) {
63 rasterClearTestRegion(0, 0, 16, 32);
65 rasterFlushPrimitive();
70static void drawNH1(
void) {
72 rasterClearTestRegion(0, 0, 32, 4);
74 rasterFlushPrimitive();
77static void drawNH2(
void) {
79 rasterClearTestRegion(0, 0, 32, 4);
81 rasterFlushPrimitive();
84static void drawNH3(
void) {
86 rasterClearTestRegion(0, 0, 48, 4);
88 rasterFlushPrimitive();
93static void drawLE1(
void) {
95 rasterClearTestRegion(0, 0, 16, 16);
97 rasterFlushPrimitive();
100static void drawLE2(
void) {
102 rasterClearTestRegion(0, 0, 24, 8);
104 rasterFlushPrimitive();
107static void drawLE3(
void) {
109 rasterClearTestRegion(0, 0, 16, 24);
111 rasterFlushPrimitive();
116static void drawSF1(
void) {
118 rasterClearTestRegion(0, 0, 8, 12);
120 rasterFlushPrimitive();
123static void drawSF2(
void) {
125 rasterClearTestRegion(0, 0, 4, 8);
127 rasterFlushPrimitive();
130static void drawSF3(
void) {
132 rasterClearTestRegion(0, 0, 8, 12);
134 rasterFlushPrimitive();
139static void drawQS1(
void) {
141 rasterClearTestRegion(0, 0, 16, 16);
145 rasterFlushPrimitive();
148static void drawQS2(
void) {
150 rasterClearTestRegion(0, 0, 20, 16);
153 rasterFlushPrimitive();
182CESTER_TEST(nv1_right_edge_excluded, gpu_raster_phase3,
187CESTER_TEST(nv2_top_xmax_eq_xmin, gpu_raster_phase3,
330CESTER_TEST(le1_top_vertex_right, gpu_raster_phase3,
409CESTER_TEST(sf1_right_eq_2_excluded, gpu_raster_phase3,
419CESTER_TEST(sf1_right_eq_1_excluded, gpu_raster_phase3,
429CESTER_TEST(sf1_narrow_y7_dropped, gpu_raster_phase3,
434CESTER_TEST(sf1_narrow_y8_dropped, gpu_raster_phase3,
503CESTER_TEST(qs1_top_right_interior, gpu_raster_phase3,
523CESTER_TEST(qs1_bottom_right_interior, gpu_raster_phase3,
558CESTER_TEST(qs2_mid_left_interior, gpu_raster_phase3,
563CESTER_TEST(qs2_mid_right_interior, gpu_raster_phase3,
CESTER_TEST(cddaLevelHalf, test_instances, static const uint8_t atv[4]={0x40, 0x00, 0x40, 0x00};unsigned changes=0;int peak=cddaPeak(atv, 1, &changes);ramsyscall_printf("CD-DA level at half ATV: peak %i, %u sign changes\n", peak, changes);cester_assert_int_ge(peak, 11300);cester_assert_int_le(peak, 11800);cester_assert_uint_ge(changes, 4);) CESTER_TEST(cddaLevelClipped
CESTER_BODY(static uint16_t s_cddaCapture;static int cddaSpuDma(uint32_t spuAddr, void *buf, uint32_t bytes, int isRead) { const uint16_t tsa=spuAddr > > 3;const uint16_t mode=isRead ? 0x30 :0x20;SPU_RAM_DTA=tsa;for(int i=0;i< 0xf01 &&SPU_RAM_DTA !=tsa;i++);SPU_CTRL=(SPU_CTRL &~0x30)|mode;for(volatile int i=0;i< 60;i++);for(int i=0;i< 0xf01 &&(SPU_STATUS &0x30) !=mode;i++);CDDA_SPU_DELAY=(CDDA_SPU_DELAY &0xf0ffffff)|(isRead ? 0x22000000 :0x20000000);DMA_CTRL[DMA_SPU].MADR=(uint32_t) buf &0x1fffffff;DMA_CTRL[DMA_SPU].BCR=((bytes > > 6)<< 16)|0x10;DMA_CTRL[DMA_SPU].CHCR=isRead ? 0x01000200 :0x01000201;int ok=0;for(unsigned t=0;t< 4000000u;t++) { if((DMA_CTRL[DMA_SPU].CHCR &0x01000000)==0) { ok=1;break;} } SPU_CTRL=SPU_CTRL &~0x30;for(volatile int i=0;i< 60;i++);return ok;} static int cddaSimpleCmd(uint8_t cmd) { uint8_t response[16];CDROM_REG0=0;CDROM_REG1=cmd;uint32_t timeout=2000000;int ok=waitCDRomIRQWithTimeout(&timeout);ackCDRomCause();readResponse(response);return ok;} static void cddaWaitPauseComplete() { initializeTime();uint32_t elapsed=0;while(elapsed< 5000000u) { uint32_t budget=200000u;int ok=waitCDRomIRQWithTimeout(&budget);elapsed=budget;if(!ok) continue;uint8_t cause=ackCDRomCause();uint8_t response[16];readResponse(response);if(cause==2) return;} } static int cddaAudioSetup(const uint8_t atv[4], int demute) { if(!resetCDRom()) return 0;DPCR|=0x000b0000;SPU_CTRL=0;for(volatile int i=0;i< 20000;i++);SPU_VOL_MAIN_LEFT=0;SPU_VOL_MAIN_RIGHT=0;SPU_KEY_OFF_LOW=0xffff;SPU_KEY_OFF_HIGH=0xffff;SPU_RAM_DTC=4;SPU_CTRL=0x8001;for(volatile int i=0;i< 20000;i++);for(int i=0;i< 0x400;i++) s_cddaCapture[i]=CDDA_MARKER;if(!cddaSpuDma(0x000, s_cddaCapture, 0x800, 0)) return 0;if(!cddaSimpleCmd(demute ? CDL_DEMUTE :CDL_MUTE)) return 0;CDROM_REG0=2;CDROM_REG2=atv[0];CDROM_REG3=atv[1];CDROM_REG0=3;CDROM_REG1=atv[2];CDROM_REG2=atv[3];CDROM_REG0=3;CDROM_REG3=0x20;CDROM_REG0=0;SPU_VOL_CD_LEFT=0x7fff;SPU_VOL_CD_RIGHT=0x7fff;SPU_CTRL=SPU_CTRL|0x8001;return 1;} static int cddaBufferPeak(unsigned *signChanges) { int peak=0;unsigned changes=0;int prev=0;for(int i=0;i< 0x200;i++) { int v=(int16_t) s_cddaCapture[i];int a=v< 0 ? -v :v;if(a > peak) peak=a;int sign=v >=0 ? 1 :-1;if(i &&sign !=prev) changes++;prev=sign;} *signChanges=changes;return peak;} static int cddaCapturePeak(unsigned *signChanges) { int peak=0;for(unsigned attempt=0;attempt< 8;attempt++) { if(attempt) { initializeTime();while(updateTime()< 250000u);} if(!cddaSpuDma(0x000, s_cddaCapture, 0x800, 1)) return -1;peak=cddaBufferPeak(signChanges);if(peak) { if(attempt) ramsyscall_printf("capture was empty %u time(s) before audio\n", attempt);break;} } return peak;} static int cddaPeak(const uint8_t atv[4], int demute, unsigned *signChanges) { if(!cddaAudioSetup(atv, demute)) return -1;if(!setMode(0)) return -1;CDROM_REG0=0;CDROM_REG2=0x02;if(!cddaSimpleCmd(CDL_PLAY)) return -1;initializeTime();while(updateTime()< 1500000u);int peak=cddaCapturePeak(signChanges);CDROM_REG0=0;CDROM_REG1=CDL_PAUSE;cddaWaitPauseComplete();CDROM_REG0=0;CDROM_REG2=0x00;CDROM_REG2=0x02;CDROM_REG2=0x16;if(cddaSimpleCmd(CDL_SETLOC) &&cddaSimpleCmd(CDL_SEEKL)) cddaWaitPauseComplete();return peak;}[0x400])
Definition cdda.c:37
#define EXPECT_NH1_PIXEL_10_0
Definition raster-expected-phase3.h:103
#define EXPECT_LE2_PIXEL_19_0
Definition raster-expected-phase3.h:143
#define EXPECT_NV2_PIXEL_0_9
Definition raster-expected-phase3.h:80
#define EXPECT_SF1_PIXEL_2_0
Definition raster-expected-phase3.h:176
#define EXPECT_SF1_PIXEL_2_3
Definition raster-expected-phase3.h:179
#define EXPECT_SF3_PIXEL_0_0
Definition raster-expected-phase3.h:209
#define EXPECT_NH2_PIXEL_0_0
Definition raster-expected-phase3.h:113
#define EXPECT_SF3_PIXEL_2_2
Definition raster-expected-phase3.h:212
#define EXPECT_QS2_PIXEL_5_9
Definition raster-expected-phase3.h:254
#define EXPECT_LE3_PIXEL_5_10
Definition raster-expected-phase3.h:153
#define EXPECT_SF3_PIXEL_1_3
Definition raster-expected-phase3.h:215
#define EXPECT_QS2_PIXEL_9_0
Definition raster-expected-phase3.h:245
#define EXPECT_NV1_PIXEL_0_5
Definition raster-expected-phase3.h:62
#define EXPECT_NH1_PIXEL_0_0
Definition raster-expected-phase3.h:102
#define EXPECT_NH3_PIXEL_40_0
Definition raster-expected-phase3.h:122
#define EXPECT_NH3_PIXEL_0_0
Definition raster-expected-phase3.h:119
#define EXPECT_SF2_PIXEL_0_0
Definition raster-expected-phase3.h:196
#define EXPECT_LE3_PIXEL_2_0
Definition raster-expected-phase3.h:151
#define EXPECT_NV2_PIXEL_0_1
Definition raster-expected-phase3.h:78
#define EXPECT_LE2_PIXEL_0_0
Definition raster-expected-phase3.h:142
#define EXPECT_NH3_PIXEL_20_0
Definition raster-expected-phase3.h:120
#define EXPECT_QS1_PIXEL_8_7
Definition raster-expected-phase3.h:237
#define EXPECT_NH2_PIXEL_10_0
Definition raster-expected-phase3.h:114
#define EXPECT_SF3_PIXEL_0_5
Definition raster-expected-phase3.h:216
#define EXPECT_NH1_PIXEL_20_0
Definition raster-expected-phase3.h:105
#define EXPECT_SF1_PIXEL_1_3
Definition raster-expected-phase3.h:180
#define EXPECT_SF3_PIXEL_2_0
Definition raster-expected-phase3.h:210
#define EXPECT_NV2_PIXEL_0_0
Definition raster-expected-phase3.h:77
#define EXPECT_LE2_PIXEL_10_4
Definition raster-expected-phase3.h:144
#define EXPECT_QS2_PIXEL_0_0
Definition raster-expected-phase3.h:243
#define EXPECT_NV2_PIXEL_2_9
Definition raster-expected-phase3.h:82
#define EXPECT_SF2_PIXEL_0_1
Definition raster-expected-phase3.h:197
#define EXPECT_SF3_PIXEL_2_1
Definition raster-expected-phase3.h:211
#define EXPECT_NV3_PIXEL_5_10
Definition raster-expected-phase3.h:89
#define EXPECT_QS2_PIXEL_10_0
Definition raster-expected-phase3.h:246
#define EXPECT_NV1_PIXEL_0_9
Definition raster-expected-phase3.h:63
#define EXPECT_NV3_PIXEL_6_0
Definition raster-expected-phase3.h:92
#define EXPECT_SF2_PIXEL_0_4
Definition raster-expected-phase3.h:198
#define EXPECT_NV1_PIXEL_0_0
Definition raster-expected-phase3.h:61
#define EXPECT_LE1_PIXEL_0_0
Definition raster-expected-phase3.h:133
#define EXPECT_SF1_PIXEL_0_8
Definition raster-expected-phase3.h:184
#define EXPECT_SF3_PIXEL_0_3
Definition raster-expected-phase3.h:214
#define EXPECT_QS1_PIXEL_0_7
Definition raster-expected-phase3.h:238
#define EXPECT_QS1_PIXEL_1_7
Definition raster-expected-phase3.h:236
#define EXPECT_NH3_PIXEL_39_0
Definition raster-expected-phase3.h:121
#define EXPECT_SF3_PIXEL_1_2
Definition raster-expected-phase3.h:213
#define EXPECT_QS1_PIXEL_0_0
Definition raster-expected-phase3.h:232
#define EXPECT_QS2_PIXEL_2_5
Definition raster-expected-phase3.h:252
#define EXPECT_QS1_PIXEL_1_8
Definition raster-expected-phase3.h:239
#define EXPECT_SF1_PIXEL_2_2
Definition raster-expected-phase3.h:178
#define EXPECT_SF1_PIXEL_2_1
Definition raster-expected-phase3.h:177
#define EXPECT_QS1_PIXEL_8_0
Definition raster-expected-phase3.h:234
#define EXPECT_NV3_PIXEL_5_20
Definition raster-expected-phase3.h:91
#define EXPECT_SF1_PIXEL_1_6
Definition raster-expected-phase3.h:181
#define EXPECT_LE1_PIXEL_5_4
Definition raster-expected-phase3.h:134
#define EXPECT_LE1_PIXEL_10_0
Definition raster-expected-phase3.h:136
#define EXPECT_SF1_PIXEL_0_6
Definition raster-expected-phase3.h:182
#define EXPECT_NV2_PIXEL_0_5
Definition raster-expected-phase3.h:79
#define EXPECT_LE2_PIXEL_10_5
Definition raster-expected-phase3.h:145
#define EXPECT_QS1_PIXEL_7_0
Definition raster-expected-phase3.h:233
#define EXPECT_SF1_PIXEL_0_7
Definition raster-expected-phase3.h:183
#define EXPECT_NV1_PIXEL_0_10
Definition raster-expected-phase3.h:64
#define EXPECT_NH1_PIXEL_19_0
Definition raster-expected-phase3.h:104
#define EXPECT_NV3_PIXEL_5_0
Definition raster-expected-phase3.h:88
#define EXPECT_NV2_PIXEL_1_9
Definition raster-expected-phase3.h:81
#define EXPECT_LE1_PIXEL_5_9
Definition raster-expected-phase3.h:137
#define EXPECT_NV3_PIXEL_4_0
Definition raster-expected-phase3.h:93
#define EXPECT_NH3_PIXEL_20_1
Definition raster-expected-phase3.h:123
#define EXPECT_NH1_PIXEL_0_1
Definition raster-expected-phase3.h:106
#define EXPECT_LE3_PIXEL_3_0
Definition raster-expected-phase3.h:152
#define EXPECT_QS2_PIXEL_5_10
Definition raster-expected-phase3.h:255
#define EXPECT_QS1_PIXEL_4_4
Definition raster-expected-phase3.h:235
#define EXPECT_QS2_PIXEL_12_5
Definition raster-expected-phase3.h:253
#define EXPECT_NV1_PIXEL_1_0
Definition raster-expected-phase3.h:65
#define EXPECT_LE3_PIXEL_10_20
Definition raster-expected-phase3.h:154
#define EXPECT_SF1_PIXEL_0_0
Definition raster-expected-phase3.h:175
#define EXPECT_LE3_PIXEL_0_0
Definition raster-expected-phase3.h:150
#define EXPECT_QS2_PIXEL_5_0
Definition raster-expected-phase3.h:244
#define EXPECT_NV3_PIXEL_5_19
Definition raster-expected-phase3.h:90
#define EXPECT_LE1_PIXEL_9_0
Definition raster-expected-phase3.h:135
#define RASTER_CMD_BLUE
Definition raster-helpers.h:128
#define RASTER_CMD_RED
Definition raster-helpers.h:124
#define RASTER_CMD_WHITE
Definition raster-helpers.h:130
#define RASTER_CMD_GREEN
Definition raster-helpers.h:126
#define ASSERT_PIXEL_EQ(expected, x_, y_)
Definition raster-helpers.h:473