aboutsummaryrefslogtreecommitdiff
path: root/source/dsp4emu.c
diff options
context:
space:
mode:
Diffstat (limited to 'source/dsp4emu.c')
-rw-r--r--source/dsp4emu.c169
1 files changed, 0 insertions, 169 deletions
diff --git a/source/dsp4emu.c b/source/dsp4emu.c
index d3c85f8..4ea8fcb 100644
--- a/source/dsp4emu.c
+++ b/source/dsp4emu.c
@@ -45,10 +45,6 @@ void DSP4_Op06(bool size, bool msb)
}
}
-#if OP==0x0001
-#define PRINT
-#endif
-
void DSP4_Op01()
{
uint16_t command;
@@ -70,7 +66,6 @@ void DSP4_Op01()
// process initial inputs
// sort inputs
- // 0x00 = DSP4_READ_WORD(0x00);
project_focaly = DSP4_READ_WORD(0x02);
raster = DSP4_READ_WORD(0x04);
viewport_top = DSP4_READ_WORD(0x06);
@@ -80,13 +75,11 @@ void DSP4_Op01()
project_focalx = DSP4_READ_WORD(0x0e);
project_centerx = DSP4_READ_WORD(0x10);
project_ptr = DSP4_READ_WORD(0x12);
- // (envelope?) 0xc0 = DSP4_READ_WORD(0x14);
project_pitchylow = DSP4_READ_WORD(0x16);
project_pitchy = DSP4_READ_WORD(0x18);
project_pitchxlow = DSP4_READ_WORD(0x1a);
project_pitchx = DSP4_READ_WORD(0x1c);
far_plane = DSP4_READ_WORD(0x1e);
- // ? = DSP4_READ_WORD(0x20);
project_y1low = DSP4_READ_WORD(0x22);
// pre-compute
@@ -138,7 +131,6 @@ DSP4_WAIT(1) resume1:
resume2:
plane = DSP4_READ_WORD(0);
- py_dy = 0;
px_dx = 0;
// ignore invalid data
@@ -186,10 +178,6 @@ resume2:
// debug
++block;
-#ifdef PRINT
- printf("(line %d) Op01 check %02X, plane %04X, focal_y %04X, y2 %04X\n", c,
- (uint16_t)segments, (uint16_t)(plane), (uint16_t)project_focaly, (uint16_t)project_y2);
-#endif
// prepare output
DSP4.out_count = 8 + 2 + 6 * segments;
@@ -201,14 +189,6 @@ resume2:
DSP4_WRITE_WORD(6, project_y2);
DSP4_WRITE_WORD(8, segments);
-#if 0
- DSP4_WRITE_WORD(0, -1);
- DSP4_WRITE_WORD(2, -1);
- DSP4_WRITE_WORD(4, -1);
- DSP4_WRITE_WORD(6, -1);
- DSP4_WRITE_WORD(8, -1);
-#endif
-
index = 10;
// iterate through each point
@@ -218,12 +198,6 @@ resume2:
y_out = project_y + ((py_dy * lcv) >> 8);
x_out = project_x + ((px_dx * lcv) >> 8);
-#if 0
- project_ptr = -1;
- y_out = -1;
- x_out = -1;
-#endif
-
// data
DSP4_WRITE_WORD(index + 0, project_ptr);
DSP4_WRITE_WORD(index + 2, y_out);
@@ -264,12 +238,6 @@ resume2:
DSP4.out_count = 0;
}
-#undef PRINT
-
-#if OP==0x0007
-#define PRINT
-#endif
-
void DSP4_Op07()
{
uint16_t command;
@@ -316,10 +284,6 @@ void DSP4_Op07()
// debug
block = 0;
-#ifdef PRINT
- printf("(line %d) Op07 data %04X\n", c, (uint16_t)project_y1);
-#endif
-
////////////////////////////////////////////////////
// command check
@@ -351,7 +315,6 @@ DSP4_WAIT(1) resume1:
int16_t py_dy, px_dx;
resume2:
- py_dy = 0;
px_dx = 0;
// debug
@@ -394,11 +357,6 @@ resume2:
px_dx = ((project_x2 - project_x1) << 8) / segments;
}
-#ifdef PRINT
- printf("(line %d) Op07 block %d, loc %04X, out %02X, project_x2 %04X\n", c,
- block, plane, segments, (uint16_t)project_x2);
-#endif
-
// prepare pre-output
DSP4.out_count = 4 + 2 + 6 * segments;
@@ -406,12 +364,6 @@ resume2:
DSP4_WRITE_WORD(2, project_y2);
DSP4_WRITE_WORD(4, segments);
-#if 0
- DSP4_WRITE_WORD(0, -1);
- DSP4_WRITE_WORD(2, -1);
- DSP4_WRITE_WORD(4, -1);
-#endif
-
index = 6;
for (lcv = 0; lcv < segments; lcv++)
{
@@ -419,12 +371,6 @@ resume2:
y_out = project_y + ((py_dy * lcv) >> 8);
x_out = project_x + ((px_dx * lcv) >> 8);
-#if 0
- project_ptr = -1;
- //y_out = -1;
- x_out = -1;
-#endif
-
// data
DSP4_WRITE_WORD(index + 0, project_ptr);
DSP4_WRITE_WORD(index + 2, y_out);
@@ -455,12 +401,6 @@ resume2:
DSP4.out_count = 0;
}
-#undef PRINT
-
-#if OP==0x0008
-#define PRINT
-#endif
-
void DSP4_Op08()
{
uint16_t command;
@@ -599,11 +539,6 @@ DSP4_WAIT(2) resume2:
if (pos2 < path_clipLeft[1]) pos2 = path_clipLeft[1];
if (pos2 > path_clipRight[1]) pos2 = path_clipRight[1];
-#if 0
- pos1 = -1;
- //pos2=-1;
-#endif
-
path_plane[0] = plane;
path_plane[1] = plane;
@@ -611,10 +546,6 @@ DSP4_WAIT(2) resume2:
DSP4.out_count = 2;
DSP4.output[0] = pos1 & 0xFF;
DSP4.output[1] = pos2 & 0xFF;
-
-#ifdef PRINT
- printf("(line %d) Op08 x_left %04X\n", c, (uint16_t)x_left);
-#endif
}
// proceed with projection
else
@@ -661,11 +592,6 @@ DSP4_WAIT(2) resume2:
path_plane[0] = plane;
}
-#ifdef PRINT
- printf("(line %d) Op08 block %d, out %02X, raster %02X\n", c, block, segments,
- (uint16_t)y_left);
-#endif
-
// zone 1
DSP4.out_count = (2 + 4 * segments);
DSP4_WRITE_WORD(index, segments);
@@ -685,14 +611,6 @@ DSP4_WAIT(2) resume2:
if (pos2 < path_clipLeft[1]) pos2 = path_clipLeft[1];
if (pos2 > path_clipRight[1]) pos2 = path_clipRight[1];
-#if 0
- if (pos1 == 0x00ff) pos1 = 0;
- if (pos2 == 0x00ff) pos2 = 0;
- path_ptr[0] = -1;
- pos1 = -1;
- pos2 = -1;
-#endif
-
// data
DSP4_WRITE_WORD(index, path_ptr[0]);
index += 2;
@@ -776,14 +694,6 @@ DSP4_WAIT(2) resume2:
if (pos2 < path_clipLeft[3]) pos2 = path_clipLeft[3];
if (pos2 > path_clipRight[3]) pos2 = path_clipRight[3];
-#if 0
- if (pos1 == 0x00ff) pos1 = 0;
- if (pos2 == 0x00ff) pos2 = 0;
- path_ptr[2] = -1;
- //pos1 = -1;
- pos2 = -1;
-#endif
-
// data
DSP4_WRITE_WORD(index, path_ptr[2]);
index += 2;
@@ -817,12 +727,6 @@ DSP4_WAIT(2) resume2:
DSP4_WRITE_WORD(0, 0);
}
-#undef PRINT
-
-#if OP==0x000D
-#define PRINT
-#endif
-
void DSP4_Op0D()
{
uint16_t command;
@@ -844,7 +748,6 @@ void DSP4_Op0D()
// process initial inputs
// sort inputs
- // 0x00 = DSP4_READ_WORD(0x00);
project_focaly = DSP4_READ_WORD(0x02);
raster = DSP4_READ_WORD(0x04);
viewport_top = DSP4_READ_WORD(0x06);
@@ -855,13 +758,11 @@ void DSP4_Op0D()
project_focalx = DSP4_READ_WORD(0x0e);
project_centerx = DSP4_READ_WORD(0x10);
project_ptr = DSP4_READ_WORD(0x12);
- // 0xc0 = DSP4_READ_WORD(0x14);
project_pitchylow = DSP4_READ_WORD(0x16);
project_pitchy = DSP4_READ_WORD(0x18);
project_pitchxlow = DSP4_READ_WORD(0x1a);
project_pitchx = DSP4_READ_WORD(0x1c);
far_plane = DSP4_READ_WORD(0x1e);
- // ? = DSP4_READ_WORD(0x20);
// multi-op storage
multi_index1++;
@@ -932,7 +833,6 @@ DSP4_WAIT(1) resume1:
resume2:
plane = DSP4_READ_WORD(0);
- py_dy = 0;
px_dx = 0;
@@ -982,11 +882,6 @@ resume2:
// debug
++block;
-#ifdef PRINT
- printf("(line %d) Op0D check %02X, plane %04X\n", c, (uint16_t)segments,
- (uint16_t)(plane));
-#endif
-
// prepare output
DSP4.out_count = 8 + 2 + 6 * segments;
@@ -995,13 +890,6 @@ resume2:
DSP4_WRITE_WORD(4, project_focaly);
DSP4_WRITE_WORD(6, project_y2);
DSP4_WRITE_WORD(8, segments);
-#if 0
- DSP4_WRITE_WORD(0, -1);
- DSP4_WRITE_WORD(2, -1);
- DSP4_WRITE_WORD(4, -1);
- DSP4_WRITE_WORD(6, -1);
- DSP4_WRITE_WORD(8, -1);
-#endif
index = 10;
@@ -1012,12 +900,6 @@ resume2:
y_out = project_y + ((py_dy * lcv) >> 8);
x_out = project_x + ((px_dx * lcv) >> 8);
-#if 0
- project_ptr = -1;
- //y_out=-1;
- x_out = -1;
-#endif
-
// data
DSP4_WRITE_WORD(index + 0, project_ptr);
DSP4_WRITE_WORD(index + 2, y_out);
@@ -1055,16 +937,6 @@ resume2:
DSP4.out_count = 0;
}
-#undef PRINT
-
-#if OP==0x0009
-#define PRINT
-#endif
-
-#if OP==0x0006
-#define PRINT
-#endif
-
void DSP4_Op09()
{
uint16_t command;
@@ -1107,17 +979,11 @@ void DSP4_Op09()
view_plane = PLANE_START;
center_x = DSP4_READ_WORD(0x00);
center_y = DSP4_READ_WORD(0x02);
- // 0x00 = DSP4_READ_WORD(0x04);
viewport_left = DSP4_READ_WORD(0x06);
viewport_right = DSP4_READ_WORD(0x08);
viewport_top = DSP4_READ_WORD(0x0a);
viewport_bottom = DSP4_READ_WORD(0x0c);
-#ifdef PRINT2
- printf("Window: (%04X,%04X) (%04X,%04X)\n",
- viewport_left, viewport_right, viewport_top, viewport_bottom);
-#endif
-
// expand viewport dimensions
viewport_left -= 8;
@@ -1125,12 +991,10 @@ void DSP4_Op09()
multi_index1++;
multi_index1 %= 4;
-#if 1
// convert track line to the window region
project_y2 = center_y + multi_raster[multi_index1] *
(viewport_bottom - center_y) / (0x33 - 0);
if (op09_mode == 0) project_y2 -= 2;
-#endif
goto no_sprite;
@@ -1189,9 +1053,7 @@ sprite_found:
{
int16_t plane;
int16_t car_left, car_right;
- // int16_t car_left_a;
int16_t focal_back;
-// int16_t focal_front;
// we already have 4 bytes we want
DSP4.in_count = 6 + 12;
@@ -1202,8 +1064,6 @@ DSP4_WAIT(3) resume3:
// filter inputs
project_y1 = DSP4_READ_WORD(0x00);
focal_back = DSP4_READ_WORD(0x06);
- // focal_front = DSP4_READ_WORD(0x08);
- // car_left_a = DSP4_READ_WORD(0x0a);
car_left = DSP4_READ_WORD(0x0c);
plane = DSP4_READ_WORD(0x0e);
car_right = DSP4_READ_WORD(0x10);
@@ -1259,7 +1119,6 @@ DSP4_WAIT(5) resume5:
project_y1 = DSP4_READ_WORD(0x00);
plane = DSP4_READ_WORD(0x02);
project_centerx = DSP4_READ_WORD(0x04);
- //project_y1 = DSP4_READ_WORD(0x06);
project_focalx = DSP4_READ_WORD(0x08);
project_focaly = DSP4_READ_WORD(0x0a);
sprite_offset = DSP4_READ_WORD(0x0c);
@@ -1298,9 +1157,6 @@ DSP4_WAIT(6) resume6:
if (command == 0x0000)
{
sprite_size = !sprite_size;
-#ifdef PRINT
- printf("TOGGLE=%02X\n", (uint8_t)sprite_size);
-#endif
continue;
}
@@ -1342,12 +1198,6 @@ resume7:
if (far_plane <= multi_farplane[multi_index1] &&
sp_y >= project_y2) clip = true;
-#ifdef PRINT2
- printf("(line %d) %04X, %04X, %04X / %04X %04X\n", line,
- (uint16_t)sp_x, (uint16_t)sp_y, (uint16_t)far_plane,
- (uint16_t)multi_farplane[multi_index1], (uint16_t)project_y2);
-#endif
-
// don't draw offscreen coordinates
DSP4.out_count = 0;
if (!clip)
@@ -1359,12 +1209,6 @@ resume7:
sp_oam = sprite_offset + offset;
sp_msb = (sp_x < 0 || sp_x > 255);
-#ifdef PRINT
- printf("(line %d) %04X, %04X, %04X, %04X, %04X\n", line,
- (uint16_t)sp_oam, (uint16_t)sprite_offset, (uint16_t)offset,
- (uint16_t)sp_x, (uint16_t)sp_y);
-#endif
-
// emit transparency information
if (
(sprite_offset & 0x08) &&
@@ -1404,16 +1248,6 @@ resume7:
// OAM: size,msb data
DSP4_Op06(sprite_size, (char) sp_msb);
-
-#if 0
- DSP4_WRITE_WORD(0, -1);
- DSP4_WRITE_WORD(2, -1);
- DSP4_WRITE_WORD(4, -1);
- DSP4_WRITE_WORD(6, -1);
- DSP4_WRITE_WORD(8, -1);
- DSP4_WRITE_WORD(10, -1);
- DSP4_WRITE_WORD(12, -1);
-#endif
}
// no sprite information
@@ -1461,6 +1295,3 @@ terminate:
DSP4.waiting4command = true;
DSP4.out_count = 0;
}
-
-#undef PRINT
-