From 65d51ffd4c36ca22a5d8a4b8c64bfb4ea582492a Mon Sep 17 00:00:00 2001 From: MooglyGuy Date: Sun, 24 Feb 2019 10:56:21 +0100 Subject: -newport: Added a few more command configs, nw --- src/mame/video/newport.cpp | 54 +++++++++++++++++++++++++--------------------- src/mame/video/newport.h | 16 +++++++------- 2 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/mame/video/newport.cpp b/src/mame/video/newport.cpp index f1dd9cb004b..72715b628db 100644 --- a/src/mame/video/newport.cpp +++ b/src/mame/video/newport.cpp @@ -40,7 +40,7 @@ #define LOG_REJECTS (1 << 8) #define LOG_ALL (LOG_UNKNOWN | LOG_VC2 | LOG_CMAP0 | LOG_CMAP1 | LOG_XMAP0 | LOG_XMAP1 | LOG_REX3) -#define VERBOSE (0)//(LOG_UNKNOWN | LOG_VC2 | LOG_XMAP0 | LOG_CMAP0 | LOG_REX3 | LOG_COMMANDS | LOG_REJECTS) +#define VERBOSE (0)//(LOG_UNKNOWN | LOG_REX3 | LOG_COMMANDS | LOG_REJECTS) #include "logmacro.h" DEFINE_DEVICE_TYPE(NEWPORT_VIDEO, newport_video_device, "newport_video", "SGI Newport graphics board") @@ -1459,7 +1459,7 @@ void newport_video_device::do_v_iline(uint8_t color, bool skip_last, bool shade) y1 += incy; if (shade) - m_rex3.m_color_red += m_rex3.m_slope_red; + m_rex3.m_color_red += (m_rex3.m_slope_red << 8) >> 8; } while (y1 != y2); if (!skip_last) @@ -1492,7 +1492,7 @@ void newport_video_device::do_h_iline(uint8_t color, bool skip_last, bool shade) x1 += incx; if (shade) - m_rex3.m_color_red += m_rex3.m_slope_red; + m_rex3.m_color_red += (m_rex3.m_slope_red << 8) >> 8; } while (x1 != x2); if (!skip_last) { @@ -1577,7 +1577,7 @@ void newport_video_device::do_iline(uint8_t color, bool skip_last, bool shade) x1++; if (shade) - m_rex3.m_color_red += m_rex3.m_slope_red; + m_rex3.m_color_red += (m_rex3.m_slope_red << 8) >> 8; } while (x1 != x2); if (!skip_last) @@ -1609,7 +1609,7 @@ void newport_video_device::do_iline(uint8_t color, bool skip_last, bool shade) x1++; if (shade) - m_rex3.m_color_red += m_rex3.m_slope_red; + m_rex3.m_color_red += (m_rex3.m_slope_red << 8) >> 8; } while (x1 != x2); if (!skip_last) @@ -1743,33 +1743,38 @@ void newport_video_device::do_rex3_command() m_rex3.m_read_active = true; break; } + case 0x00000022: // DoSetup, Span, Draw case 0x00000102: // StopOnX, Span, Draw case 0x00000122: // StopOnX, DoSetup, Span, Draw case 0x00022102: // LSOpaque, EnLSPattern, StopOnX, Span, Draw case 0x00080122: // LROnly, StopOnX, DoSetup, Span, Draw - case 0x000c0122: // Shade, LROnly, StopOnX, DoSetup, Span, Draw + case 0x000c0122: // LROnly, Shade, StopOnX, DoSetup, Span, Draw + case 0x000c9102: // LROnly, Shade, Length32, EnZPattern, StopOnX, Span, Draw { if (BIT(mode0, 19) && dx < 0) // LROnly break; + if (!BIT(mode0, 8)) + end_x = start_x; + end_x += dx; end_y += dy; - //bool shade = BIT(mode0, 18); + bool shade = BIT(mode0, 18); uint32_t color = m_rex3.m_color_i & 0xff; LOGMASKED(LOG_COMMANDS, "%04x, %04x to %04x, %04x = %08x\n", start_x, start_y, end_x, end_y, color); for (; start_x != end_x; start_x += dx) { - //if (shade) - //{ - // write_pixel(start_x, start_y, (uint8_t)(m_rex3.m_color_red >> 11)); - // m_rex3.m_color_red += m_rex3.m_slope_red; - //} - //else - //{ + if (shade) + { + write_pixel(start_x, start_y, (uint8_t)(m_rex3.m_color_red >> 11)); + m_rex3.m_color_red += (m_rex3.m_slope_red << 8) >> 8; + } + else + { write_pixel(start_x, start_y, color); - //} + } } start_y++; @@ -1823,6 +1828,7 @@ void newport_video_device::do_rex3_command() case 0x00000b2a: // SkipLast, StopOnX, StopOnY, DoSetup, I_Line, Draw case 0x0000232e: // EnLSPattern, StopOnX, StopOnY, DoSetup, F_Line, Draw case 0x0004232e: // Shade, EnLSPattern, StopOnX, StopOnY, DoSetup, F_Line, Draw + case 0x00442332: // EndFilter, Shade, EnLSPattern, StopOnX, StopOnY, DoSetp, A_Line, Draw { const bool skip_last = BIT(mode0, 11); const bool shade = BIT(mode0, 18); @@ -2427,25 +2433,25 @@ WRITE64_MEMBER(newport_video_device::rex3_w) if (ACCESSING_BITS_32_63) { LOGMASKED(LOG_REX3, "REX3 Red/CI Full State Write: %08x\n", (uint32_t)(data >> 32)); - m_rex3.m_color_red = (uint32_t)((data >> 32) & 0xffffff); - m_rex3.m_color_i = (m_rex3.m_color_red >> 11) & 0x000000ff; + m_rex3.m_color_red = (int32_t)((data >> 32) & 0xffffff); + m_rex3.m_color_i = (uint32_t)(m_rex3.m_color_red >> 11) & 0x000000ff; } if (ACCESSING_BITS_0_31) { LOGMASKED(LOG_REX3, "REX3 Alpha Full State Write: %08x\n", (uint32_t)data); - m_rex3.m_color_alpha = data & 0xfffff; + m_rex3.m_color_alpha = (int32_t)(data & 0xfffff); } break; case 0x0208/8: if (ACCESSING_BITS_32_63) { LOGMASKED(LOG_REX3, "REX3 Green Full State Write: %08x\n", (uint32_t)(data >> 32)); - m_rex3.m_color_green = (uint32_t)((data >> 32) & 0xfffff); + m_rex3.m_color_green = (int32_t)((data >> 32) & 0xfffff); } if (ACCESSING_BITS_0_31) { LOGMASKED(LOG_REX3, "REX3 Blue Full State Write: %08x\n", (uint32_t)data); - m_rex3.m_color_blue = data & 0xfffff; + m_rex3.m_color_blue = (int32_t)(data & 0xfffff); } break; case 0x0210/8: @@ -2455,7 +2461,7 @@ WRITE64_MEMBER(newport_video_device::rex3_w) uint32_t data32 = (uint32_t)(data >> 32); LOGMASKED(LOG_REX3, "REX3 Red/CI Slope Write: %08x\n", data32); data32 &= 0x807fffff; - uint32_t temp = 0; + int32_t temp = 0; if (BIT(data32, 31)) { temp = 0x00800000 - (data32 & 0x7fffff); @@ -2471,7 +2477,7 @@ WRITE64_MEMBER(newport_video_device::rex3_w) { LOGMASKED(LOG_REX3, "REX3 Alpha Slope Write: %08x\n", (uint32_t)data); data &= 0x8007ffff; - uint32_t temp = 0; + int32_t temp = 0; if (BIT(data, 31)) { temp = 0x00080000 - (data & 0x7ffff); @@ -2492,7 +2498,7 @@ WRITE64_MEMBER(newport_video_device::rex3_w) uint32_t data32 = (uint32_t)(data >> 32); LOGMASKED(LOG_REX3, "REX3 Green Slope Write: %08x\n", data32); data32 &= 0x8007ffff; - uint32_t temp = 0; + int32_t temp = 0; if (BIT(data32, 31)) { temp = 0x00080000 - (data32 & 0x7ffff); @@ -2508,7 +2514,7 @@ WRITE64_MEMBER(newport_video_device::rex3_w) { LOGMASKED(LOG_REX3, "REX3 Blue Slope Write: %08x\n", (uint32_t)data); data &= 0x8007ffff; - uint32_t temp = 0; + int32_t temp = 0; if (BIT(data, 31)) { temp = 0x00080000 - (data & 0x7ffff); diff --git a/src/mame/video/newport.h b/src/mame/video/newport.h index 4d87237d0e2..8e050eeff5b 100644 --- a/src/mame/video/newport.h +++ b/src/mame/video/newport.h @@ -131,14 +131,14 @@ private: int16_t m_x_end_i; int16_t m_y_end_i; uint32_t m_x_start_end_i; - uint32_t m_color_red; - uint32_t m_color_alpha; - uint32_t m_color_green; - uint32_t m_color_blue; - uint32_t m_slope_red; - uint32_t m_slope_alpha; - uint32_t m_slope_green; - uint32_t m_slope_blue; + int32_t m_color_red; + int32_t m_color_alpha; + int32_t m_color_green; + int32_t m_color_blue; + int32_t m_slope_red; + int32_t m_slope_alpha; + int32_t m_slope_green; + int32_t m_slope_blue; uint32_t m_write_mask; uint32_t m_color_i; uint32_t m_zero_overflow; -- cgit v1.2.3