From ebbba570ca6b5b07f12154196947716121386408 Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Thu, 11 Jul 2024 21:41:39 -0400 Subject: [PATCH 1/9] namcos21_3d.cpp: Some cleanup & modernization Removed duplicate code and modernized it to current MAME standards --- src/mame/namco/namcos21_3d.cpp | 275 +++++++++++++++------------------ src/mame/namco/namcos21_3d.h | 15 +- 2 files changed, 127 insertions(+), 163 deletions(-) diff --git a/src/mame/namco/namcos21_3d.cpp b/src/mame/namco/namcos21_3d.cpp index 7e0d17dcc9464..fe0115c7d6bad 100644 --- a/src/mame/namco/namcos21_3d.cpp +++ b/src/mame/namco/namcos21_3d.cpp @@ -4,6 +4,9 @@ #include "emu.h" #include "namcos21_3d.h" +#include <algorithm> +#include <utility> + DEFINE_DEVICE_TYPE(NAMCOS21_3D, namcos21_3d_device, "namcos21_3d", "Namco System 21 3D Rasterizer") namcos21_3d_device::namcos21_3d_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : @@ -13,8 +16,7 @@ namcos21_3d_device::namcos21_3d_device(const machine_config &mconfig, const char m_zzmult(0x100), m_depth_reverse(false), m_poly_frame_width(0), - m_poly_frame_height(0), - m_framebuffer_size_in_bytes(0) + m_poly_frame_height(0) { } @@ -29,23 +31,25 @@ void namcos21_3d_device::device_reset() void namcos21_3d_device::allocate_poly_framebuffer() { - if (m_framebuffer_size_in_bytes == 0) - fatalerror("m_framebuffer_size_in_bytes == 0\n"); + unsigned framebuffer_size = m_poly_frame_width*m_poly_frame_height; + + if (framebuffer_size == 0) + fatalerror("framebuffer_size == 0\n"); - m_mpPolyFrameBufferZ = std::make_unique<uint16_t[]>(m_framebuffer_size_in_bytes / 2); - m_mpPolyFrameBufferPens = std::make_unique<uint16_t[]>(m_framebuffer_size_in_bytes / 2); + m_mpPolyFrameBufferZ = std::make_unique<uint16_t[]>(framebuffer_size); + m_mpPolyFrameBufferPens = std::make_unique<uint16_t[]>(framebuffer_size); - m_mpPolyFrameBufferZ2 = std::make_unique<uint16_t[]>(m_framebuffer_size_in_bytes / 2); - m_mpPolyFrameBufferPens2 = std::make_unique<uint16_t[]>(m_framebuffer_size_in_bytes / 2); + m_mpPolyFrameBufferZ2 = std::make_unique<uint16_t[]>(framebuffer_size); + m_mpPolyFrameBufferPens2 = std::make_unique<uint16_t[]>(framebuffer_size); swap_and_clear_poly_framebuffer(); swap_and_clear_poly_framebuffer(); - save_pointer(NAME(m_mpPolyFrameBufferZ), m_framebuffer_size_in_bytes / 2); - save_pointer(NAME(m_mpPolyFrameBufferPens), m_framebuffer_size_in_bytes / 2); + save_pointer(NAME(m_mpPolyFrameBufferZ), framebuffer_size); + save_pointer(NAME(m_mpPolyFrameBufferPens), framebuffer_size); - save_pointer(NAME(m_mpPolyFrameBufferZ2), m_framebuffer_size_in_bytes / 2); - save_pointer(NAME(m_mpPolyFrameBufferPens2), m_framebuffer_size_in_bytes / 2); + save_pointer(NAME(m_mpPolyFrameBufferZ2), framebuffer_size); + save_pointer(NAME(m_mpPolyFrameBufferPens2), framebuffer_size); } void namcos21_3d_device::swap_and_clear_poly_framebuffer() @@ -56,10 +60,7 @@ void namcos21_3d_device::swap_and_clear_poly_framebuffer() m_mpPolyFrameBufferPens.swap(m_mpPolyFrameBufferPens2); /* wipe work zbuffer */ - for (int i = 0; i < m_poly_frame_width*m_poly_frame_height; i++) - { - m_mpPolyFrameBufferZ[i] = 0x7fff; - } + std::fill_n(m_mpPolyFrameBufferZ.get(), m_poly_frame_width*m_poly_frame_height, 0x7fff); } void namcos21_3d_device::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, const rectangle &clip, int zlo, int zhi) @@ -70,6 +71,7 @@ void namcos21_3d_device::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, con uint16_t *const dest = &bitmap.pix(sy); uint16_t const *const pPen = m_mpPolyFrameBufferPens2.get() + m_poly_frame_width * sy; uint16_t const *const pZ = m_mpPolyFrameBufferZ2.get() + m_poly_frame_width * sy; + for (int sx = clip.left(); sx <= clip.right(); sx++) { int z = pZ[sx]; @@ -84,93 +86,79 @@ void namcos21_3d_device::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, con /*********************************************************************************************/ -#define SWAP(T,A,B) { const T *temp = A; A = B; B = temp; } - -void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, int sy, unsigned color, int depthcueenable) +void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, unsigned color, bool depthcueenable) { if (e1->x > e2->x) + std::swap(e1, e2); + + int x0 = (int)e1->x; + int x1 = (int)e2->x; + int w = x1 - x0; + + if (!w) + return; + + double z = e1->z; + double dz = (e2->z - e1->z) / w; + + if (x0 < 0) { - SWAP(edge, e1, e2); + z += -x0 * dz; + x0 = 0; } + if (x1 > m_poly_frame_width - 1) + x1 = m_poly_frame_width - 1; + + uint16_t *pDest = m_mpPolyFrameBufferPens.get() + sy * m_poly_frame_width; + uint16_t *pZBuf = m_mpPolyFrameBufferZ.get() + sy * m_poly_frame_width; + + for (int x = x0; x < x1; x++) { - uint16_t *pDest = m_mpPolyFrameBufferPens.get() + sy * m_poly_frame_width; - uint16_t *pZBuf = m_mpPolyFrameBufferZ.get() + sy * m_poly_frame_width; - int x0 = (int)e1->x; - int x1 = (int)e2->x; - int w = x1 - x0; - if (w) + uint16_t zz = (uint16_t)z; + + if (zz < pZBuf[x]) { - double z = e1->z; - double dz = (e2->z - e1->z) / w; - int x, crop; - crop = -x0; - if (crop > 0) - { - z += crop * dz; - x0 = 0; - } - if (x1 > m_poly_frame_width - 1) - { - x1 = m_poly_frame_width - 1; - } + unsigned pen = color; - for (x = x0; x < x1; x++) + if (depthcueenable && zz > 0) { - uint16_t zz = (uint16_t)z; - if (zz < pZBuf[x]) - { - int pen = color; - if (depthcueenable && zz > 0) - { - int depth = 0; - if (m_depth_reverse) - { - depth = (zz >> m_zz_shift)*m_zzmult; - pen += depth; - } - else - { - depth = (zz >> m_zz_shift)*m_zzmult; - pen -= depth; - } - } - pDest[x] = pen; - pZBuf[x] = zz; - } - z += dz; + const unsigned depth = (zz >> m_zz_shift)*m_zzmult; + + if (m_depth_reverse) + pen += depth; + else + pen -= depth; } + + pDest[x] = pen; + pZBuf[x] = zz; } + + z += dz; } } -void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, int depthcueenable) +void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, bool depthcueenable) { - int dy, ystart, yend, crop; - /* first, sort so that v0->y <= v1->y <= v2->y */ - for (;;) { if (v0->y > v1->y) - { - SWAP(n21_vertex, v0, v1); - } - else if (v1->y > v2->y) - { - SWAP(n21_vertex, v1, v2); - } - else - { - break; - } + std::swap(v0, v1); + + if (v1->y > v2->y) + std::swap(v1, v2); + + if (v0->y > v1->y) + std::swap(v0, v1); } - ystart = v0->y; - yend = v2->y; - dy = yend - ystart; + int ystart = v0->y; + int yend = v2->y; + int dy = yend - ystart; + if (dy) { - int y; edge e1; /* short edge (top and bottom) */ edge e2; /* long (common) edge */ @@ -182,68 +170,40 @@ void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, c e2.x = v0->x; e2.z = v0->z; - crop = -ystart; - if (crop > 0) + + if (ystart < 0) { - e2.x += dx2dy * crop; - e2.z += dz2dy * crop; + e2.x += dx2dy * -ystart; + e2.z += dz2dy * -ystart; } - ystart = v0->y; - yend = v1->y; - dy = yend - ystart; - if (dy) + for (const auto& v_pair : {std::make_pair(v0, v1), std::make_pair(v1, v2)}) { - e1.x = v0->x; - e1.z = v0->z; - dx1dy = (v1->x - v0->x) / dy; - dz1dy = (v1->z - v0->z) / dy; + e1.x = v_pair.first->x; + e1.z = v_pair.first->z; - crop = -ystart; - if (crop > 0) - { - e1.x += dx1dy * crop; - e1.z += dz1dy * crop; - ystart = 0; - } - if (yend > m_poly_frame_height - 1) yend = m_poly_frame_height - 1; + ystart = v_pair.first->y; + yend = v_pair.second->y; + dy = yend - ystart; - for (y = ystart; y < yend; y++) - { - renderscanline_flat(&e1, &e2, y, color, depthcueenable); + if (!dy) + continue; - e2.x += dx2dy; - e2.z += dz2dy; - - e1.x += dx1dy; - e1.z += dz1dy; - } - } + dx1dy = (v_pair.second->x - v_pair.first->x) / dy; + dz1dy = (v_pair.second->z - v_pair.first->z) / dy; - ystart = v1->y; - yend = v2->y; - dy = yend - ystart; - if (dy) - { - e1.x = v1->x; - e1.z = v1->z; - - dx1dy = (v2->x - v1->x) / dy; - dz1dy = (v2->z - v1->z) / dy; - - crop = -ystart; - if (crop > 0) + if (ystart < 0) { - e1.x += dx1dy * crop; - e1.z += dz1dy * crop; + e1.x += dx1dy * -ystart; + e1.z += dz1dy * -ystart; ystart = 0; } + if (yend > m_poly_frame_height - 1) - { yend = m_poly_frame_height - 1; - } - for (y = ystart; y < yend; y++) + + for (int y = ystart; y < yend; y++) { renderscanline_flat(&e1, &e2, y, color, depthcueenable); @@ -253,14 +213,15 @@ void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, c e1.x += dx1dy; e1.z += dz1dy; } + } + } } -void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], int color) +void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], unsigned color) { - n21_vertex a, b, c, d; - int depthcueenable = 1; + bool depthcueenable = true; /* 0x0000..0x1fff sprite palettes (0x20 sets of 0x100 colors) 0x2000..0x3fff polygon palette bank0 (0x10 sets of 0x200 colors or 0x20 sets of 0x100 colors) @@ -276,39 +237,45 @@ void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], int color } else { /* map color code to hardware pen */ - int code = color >> 8; + unsigned code = color >> 8; if (code & 0x80) { - color = color & 0xff; + color = 0x2100 | (color & 0xff); // color = 0x3e00|color; - color = 0x2100 | color; - depthcueenable = 0; + depthcueenable = false; } else { - color &= 0xff; - color = 0x3e00 | color; + color = 0x3e00 | (color & 0xff); + if ((code & 0x02) == 0) - { color |= 0x100; - } } } - a.x = sx[0]; - a.y = sy[0]; - a.z = zcode[0]; - - b.x = sx[1]; - b.y = sy[1]; - b.z = zcode[1]; - - c.x = sx[2]; - c.y = sy[2]; - c.z = zcode[2]; - d.x = sx[3]; - d.y = sy[3]; - d.z = zcode[3]; + n21_vertex a = { + .x = (double)sx[0], + .y = (double)sy[0], + .z = (double)zcode[0] + }; + + n21_vertex b = { + .x = (double)sx[1], + .y = (double)sy[1], + .z = (double)zcode[1] + }; + + n21_vertex c = { + .x = (double)sx[2], + .y = (double)sy[2], + .z = (double)zcode[2] + }; + + n21_vertex d = { + .x = (double)sx[3], + .y = (double)sy[3], + .z = (double)zcode[3] + }; rendertri(&a, &b, &c, color, depthcueenable); rendertri(&c, &d, &a, color, depthcueenable); diff --git a/src/mame/namco/namcos21_3d.h b/src/mame/namco/namcos21_3d.h index 0920c40a36698..b3400b9a10bec 100644 --- a/src/mame/namco/namcos21_3d.h +++ b/src/mame/namco/namcos21_3d.h @@ -12,14 +12,13 @@ class namcos21_3d_device : public device_t // config void set_fixed_palbase(int base) { m_fixed_palbase = base; } - void set_zz_shift_mult(int shift, int mult) { m_zz_shift = shift; m_zzmult = mult; } + void set_zz_shift_mult(unsigned shift, unsigned mult) { m_zz_shift = shift; m_zzmult = mult; } void set_depth_reverse(bool reverse) { m_depth_reverse = reverse; } void set_framebuffer_size(int width, int height) { m_poly_frame_width = width; m_poly_frame_height = height; - m_framebuffer_size_in_bytes = (sizeof(uint16_t)*m_poly_frame_width*m_poly_frame_height); } int get_width() { return m_poly_frame_width; } @@ -28,7 +27,7 @@ class namcos21_3d_device : public device_t void copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, const rectangle &clip, int zlo, int zhi); void swap_and_clear_poly_framebuffer(); - void draw_quad(int sx[4], int sy[4], int zcode[4], int color); + void draw_quad(int sx[4], int sy[4], int zcode[4], unsigned color); protected: // device-level overrides @@ -48,8 +47,8 @@ class namcos21_3d_device : public device_t double z; }; - void renderscanline_flat(const edge *e1, const edge *e2, int sy, unsigned color, int depthcueenable); - void rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, int depthcueenable); + void renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, unsigned color, bool depthcueenable); + void rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, bool depthcueenable); void allocate_poly_framebuffer(); std::unique_ptr<uint16_t[]> m_mpPolyFrameBufferPens; @@ -58,12 +57,10 @@ class namcos21_3d_device : public device_t std::unique_ptr<uint16_t[]> m_mpPolyFrameBufferZ2; int m_fixed_palbase; - int m_zz_shift, m_zzmult; + unsigned m_zz_shift, m_zzmult; bool m_depth_reverse; - int m_poly_frame_width; - int m_poly_frame_height; - int m_framebuffer_size_in_bytes; + int m_poly_frame_width, m_poly_frame_height; }; DECLARE_DEVICE_TYPE(NAMCOS21_3D, namcos21_3d_device) From 64d75fa23f1c217504aa80e1755419074020fde6 Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 11:53:42 -0400 Subject: [PATCH 2/9] namcos21_dsp.cpp: tidy --- src/mame/namco/namcos21_dsp.cpp | 106 ++++++++++++++++---------------- src/mame/namco/namcos21_dsp.h | 2 +- 2 files changed, 55 insertions(+), 53 deletions(-) diff --git a/src/mame/namco/namcos21_dsp.cpp b/src/mame/namco/namcos21_dsp.cpp index 49ee6e38777af..9bd2832a8f961 100644 --- a/src/mame/namco/namcos21_dsp.cpp +++ b/src/mame/namco/namcos21_dsp.cpp @@ -65,21 +65,22 @@ void namcos21_dsp_device::device_reset() uint16_t namcos21_dsp_device::winrun_dspcomram_r(offs_t offset) { - int bank = 1-(m_winrun_dspcomram_control[0x4/2]&1); - uint16_t *mem = &m_winrun_dspcomram[0x1000*bank]; + unsigned bank = !BIT(m_winrun_dspcomram_control[0x4/2], 0); + uint16_t *mem = &m_winrun_dspcomram[0x1000 * bank]; + return mem[offset]; } void namcos21_dsp_device::winrun_dspcomram_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - int bank = 1-(m_winrun_dspcomram_control[0x4/2]&1); - uint16_t *mem = &m_winrun_dspcomram[0x1000*bank]; + unsigned bank = !BIT(m_winrun_dspcomram_control[0x4/2], 0); + uint16_t *mem = &m_winrun_dspcomram[0x1000 * bank]; + COMBINE_DATA( &mem[offset] ); } uint16_t namcos21_dsp_device::winrun_cuskey_r() { - int pc = m_dsp->pc(); - switch( pc ) + switch (m_dsp->pc()) { case 0x0064: /* winrun91 */ return 0xFEBB; @@ -94,6 +95,7 @@ uint16_t namcos21_dsp_device::winrun_cuskey_r() default: break; } + return 0; } @@ -103,47 +105,47 @@ void namcos21_dsp_device::winrun_cuskey_w(uint16_t data) void namcos21_dsp_device::winrun_flush_poly() { - if( m_winrun_poly_index>0 ) - { - const uint16_t *pSource = m_winrun_poly_buf; - uint16_t color; - int sx[4], sy[4], zcode[4]; - int j; - color = *pSource++; - if( color&0x8000 ) - { /* direct-draw */ - for( j=0; j<4; j++ ) - { - sx[j] = m_poly_frame_width/2 + (int16_t)*pSource++; - sy[j] = m_poly_frame_height/2 + (int16_t)*pSource++; - zcode[j] = *pSource++; - } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + if (m_winrun_poly_index == 0) + return; + + const uint16_t *pSource = m_winrun_poly_buf; + uint16_t color = *pSource++; + int sx[4], sy[4], zcode[4]; + + if (BIT(color, 15)) + { /* direct-draw */ + for (int j=0; j<4; j++) + { + sx[j] = m_poly_frame_width/2 + (int16_t)*pSource++; + sy[j] = m_poly_frame_height/2 + (int16_t)*pSource++; + zcode[j] = *pSource++; } - else + + m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + } + else + { + uint8_t code; + unsigned quad_idx = color*6; + do { - int quad_idx = color*6; - for(;;) + code = m_pointram[quad_idx++]; + color = m_pointram[quad_idx++]; + + for (int j=0; j<4; j++) { - uint8_t code = m_pointram[quad_idx++]; - color = m_pointram[quad_idx++]; - for( j=0; j<4; j++ ) - { - uint8_t vi = m_pointram[quad_idx++]; - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; - zcode[j] = pSource[vi*3+2]; - } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); - if( code&0x80 ) - { /* end-of-quadlist marker */ - break; - } + uint8_t vi = m_pointram[quad_idx++]; + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; + zcode[j] = pSource[vi*3+2]; } - } - m_winrun_poly_index = 0; + + m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + } while (!BIT(code, 7)); //Reached end-of-quadlist marker? } -} /* winrun_flushpoly */ + + m_winrun_poly_index = 0; +} uint16_t namcos21_dsp_device::winrun_poly_reset_r() { @@ -153,14 +155,10 @@ uint16_t namcos21_dsp_device::winrun_poly_reset_r() void namcos21_dsp_device::winrun_dsp_render_w(uint16_t data) { - if( m_winrun_poly_index<WINRUN_MAX_POLY_PARAM ) - { + if (m_winrun_poly_index<WINRUN_MAX_POLY_PARAM) m_winrun_poly_buf[m_winrun_poly_index++] = data; - } else - { logerror( "WINRUN_POLY_OVERFLOW\n" ); - } } void namcos21_dsp_device::winrun_dsp_pointrom_addr_w(offs_t offset, uint16_t data) @@ -182,7 +180,7 @@ uint16_t namcos21_dsp_device::winrun_dsp_pointrom_data_r() void namcos21_dsp_device::winrun_dsp_complete_w(uint16_t data) { - if( data ) + if (data) { winrun_flush_poly(); m_dsp->pulse_input_line(INPUT_LINE_RESET, attotime::zero); @@ -198,7 +196,8 @@ uint16_t namcos21_dsp_device::winrun_table_r(offs_t offset) void namcos21_dsp_device::winrun_dspbios_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA( &m_winrun_dspbios[offset] ); - if( offset==0xfff ) // is this the real trigger? + + if (offset==0xfff) // is this the real trigger? { m_winrun_dsp_alive = 1; m_dsp->resume(SUSPEND_REASON_HALT); @@ -212,15 +211,17 @@ void namcos21_dsp_device::winrun_dspbios_w(offs_t offset, uint16_t data, uint16_ uint16_t namcos21_dsp_device::winrun_68k_dspcomram_r(offs_t offset) { - int bank = m_winrun_dspcomram_control[0x4/2]&1; + unsigned bank = BIT(m_winrun_dspcomram_control[0x4/2], 0); uint16_t *mem = &m_winrun_dspcomram[0x1000*bank]; + return mem[offset]; } void namcos21_dsp_device::winrun_68k_dspcomram_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - int bank = m_winrun_dspcomram_control[0x4/2]&1; + unsigned bank = BIT(m_winrun_dspcomram_control[0x4/2], 0); uint16_t *mem = &m_winrun_dspcomram[0x1000*bank]; + COMBINE_DATA( &mem[offset] ); } @@ -260,6 +261,7 @@ void namcos21_dsp_device::winrun_dsp_io(address_map &map) void namcos21_dsp_device::device_add_mconfig(machine_config &config) { tms32025_device& dsp(TMS32025(config, m_dsp, 24000000*2)); /* 48 MHz? overclocked */ + dsp.set_addrmap(AS_PROGRAM, &namcos21_dsp_device::winrun_dsp_program); dsp.set_addrmap(AS_DATA, &namcos21_dsp_device::winrun_dsp_data); dsp.set_addrmap(AS_IO, &namcos21_dsp_device::winrun_dsp_io); @@ -282,7 +284,7 @@ uint16_t namcos21_dsp_device::pointram_data_r() void namcos21_dsp_device::pointram_data_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7) { m_pointram[m_pointram_idx++] = data; m_pointram_idx &= (PTRAM_SIZE-1); diff --git a/src/mame/namco/namcos21_dsp.h b/src/mame/namco/namcos21_dsp.h index 5d6dfebfa1d13..7028f3cc09585 100644 --- a/src/mame/namco/namcos21_dsp.h +++ b/src/mame/namco/namcos21_dsp.h @@ -55,7 +55,7 @@ class namcos21_dsp_device : public device_t uint16_t m_winrun_dspcomram_control[8]{}; std::unique_ptr<uint16_t[]> m_winrun_dspcomram; uint16_t m_winrun_poly_buf[WINRUN_MAX_POLY_PARAM]{}; - int m_winrun_poly_index = 0; + unsigned m_winrun_poly_index = 0; uint32_t m_winrun_pointrom_addr = 0; int m_winrun_dsp_alive = 0; From ad1545c737b5f531acfec9aca9abba7427a8c32b Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 11:55:51 -0400 Subject: [PATCH 3/9] namcos21.cpp: tidy --- src/mame/namco/namcos21.cpp | 45 ++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/src/mame/namco/namcos21.cpp b/src/mame/namco/namcos21.cpp index f54550b1d2809..9f28c95aa5564 100644 --- a/src/mame/namco/namcos21.cpp +++ b/src/mame/namco/namcos21.cpp @@ -432,11 +432,12 @@ void namcos21_state::winrun_gpu_register_w(offs_t offset, uint16_t data, uint16_ void namcos21_state::winrun_gpu_videoram_w(offs_t offset, uint16_t data) { - int color = data>>8; - int mask = data&0xff; - for( int i=0; i<8; i++ ) + uint8_t color = data>>8; + uint8_t mask = data&0xff; + + for (int i=0; i<8; i++) { - if( mask&(0x01<<i) ) + if (BIT(mask, i)) { m_gpu_videoram[(offset+i)&0x7ffff] = color; m_gpu_maskram[(offset+i)&0x7ffff] = mask; @@ -454,29 +455,32 @@ void namcos21_state::winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &c uint8_t const *const videoram = m_gpu_videoram.get(); //printf("%d %d (%d %d) - %04x %04x %04x|%04x %04x\n",cliprect.top(),cliprect.bottom(),m_screen->vpos(),m_gpu_intc->get_posirq_line(),m_winrun_gpu_register[0],m_winrun_gpu_register[2/2],m_winrun_gpu_register[4/2],m_winrun_gpu_register[0xa/2],m_winrun_gpu_register[0xc/2]); - int const yscroll = -cliprect.top()+(int16_t)m_winrun_gpu_register[0x2/2]; - int const xscroll = 0;//m_winrun_gpu_register[0xc/2] >> 7; - int const base = 0x1000+0x100*(m_winrun_color&0xf); - for( int sy=cliprect.top(); sy<=cliprect.bottom(); sy++ ) + int const yscroll = -cliprect.top() + (int16_t)m_winrun_gpu_register[0x2/2]; + int const xscroll = 0; //m_winrun_gpu_register[0xc/2] >> 7; + int const base = 0x1000 + 0x100 * (m_winrun_color&0xf); + + for (int sy=cliprect.top(); sy<=cliprect.bottom(); sy++) { - uint8_t const *const pSource = &videoram[((yscroll+sy)&0x3ff)*0x200]; + uint8_t const *const pSource = &videoram[((yscroll+sy) & 0x3ff) * 0x200]; uint16_t *const pDest = &bitmap.pix(sy); - for( int sx=cliprect.left(); sx<=cliprect.right(); sx++ ) + + for (int sx=cliprect.left(); sx<=cliprect.right(); sx++) { int const pen = pSource[(sx+xscroll) & 0x1ff]; + switch( pen ) { case 0xff: break; // TODO: additive blending? winrun car select uses register [0xc] for a xscroll value case 0x00: - pDest[sx] = (pDest[sx]&0x1fff)+0x4000; + pDest[sx] = (pDest[sx] & 0x1fff) + 0x4000; break; case 0x01: - pDest[sx] = (pDest[sx]&0x1fff)+0x6000; + pDest[sx] = (pDest[sx] & 0x1fff) + 0x6000; break; default: - pDest[sx] = base|pen; + pDest[sx] = base | pen; break; } } @@ -490,6 +494,7 @@ uint32_t namcos21_state::screen_update(screen_device &screen, bitmap_ind16 &bitm m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0x7fc0, 0x7ffe); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); + winrun_bitmap_draw(bitmap,cliprect); //popmessage("%04x %04x %04x|%04x %04x",m_winrun_gpu_register[0],m_winrun_gpu_register[2/2],m_winrun_gpu_register[4/2],m_winrun_gpu_register[0xa/2],m_winrun_gpu_register[0xc/2]); @@ -507,10 +512,9 @@ uint32_t namcos21_state::screen_update(screen_device &screen, bitmap_ind16 &bitm [[maybe_unused]] void namcos21_state::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ - if( m_video_enable!=0 && m_video_enable!=0x40 ) - { + + if (m_video_enable!=0 && m_video_enable!=0x40) logerror( "unexpected video_enable_w=0x%x\n", m_video_enable ); - } } /***********************************************************/ @@ -631,6 +635,7 @@ void namcos21_state::c140_map(address_map &map) void namcos21_state::configure_c65_namcos21(machine_config &config) { NAMCOC65(config, m_c65, 2048000); + m_c65->in_pb_callback().set_ioport("MCUB"); m_c65->in_pc_callback().set_ioport("MCUC"); m_c65->in_ph_callback().set_ioport("MCUH"); @@ -788,7 +793,7 @@ void namcos21_state::sound_bankselect_w(uint8_t data) void namcos21_state::sound_reset_w(uint8_t data) { - if (data & 0x01) + if (BIT(data, 0)) { /* Resume execution */ m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); @@ -803,9 +808,9 @@ void namcos21_state::sound_reset_w(uint8_t data) void namcos21_state::system_reset_w(uint8_t data) { - reset_all_subcpus(data & 1 ? CLEAR_LINE : ASSERT_LINE); + reset_all_subcpus(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE); - if (data & 0x01) + if (BIT(data, 0)) m_maincpu->yield(); } @@ -857,7 +862,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos21_state::screen_scanline) int scanline = param; // int cur_posirq = get_posirq_scanline()*2; - if (scanline == 240 * 2) + if (scanline == (240 * 2)) { m_master_intc->vblank_irq_trigger(); m_slave_intc->vblank_irq_trigger(); From a61fa3d86a7d50ed4439b943bf7f67a63ac1355f Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 11:56:58 -0400 Subject: [PATCH 4/9] namcos21_de.cpp: tidy --- src/mame/namco/namcos21_de.cpp | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp index 6012310ab866d..5c36c817b3b93 100644 --- a/src/mame/namco/namcos21_de.cpp +++ b/src/mame/namco/namcos21_de.cpp @@ -217,28 +217,26 @@ void namco_de_pcbstack_device::device_add_mconfig(machine_config &config) uint32_t namco_de_pcbstack_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { //uint8_t *videoram = m_gpu_videoram.get(); - int pivot = 3; - int pri; + const int pivot = 3; + bitmap.fill(0xff, cliprect ); screen.priority().fill(0, cliprect); - m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered? + m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered? m_c355spr->draw(screen, bitmap, cliprect, 2 ); - m_c355spr->draw(screen, bitmap, cliprect, 14 ); //driver's eyes + m_c355spr->draw(screen, bitmap, cliprect, 14); //driver's eyes m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0x7fc0, 0x7ffe); - m_c355spr->draw(screen, bitmap, cliprect, 0 ); - m_c355spr->draw(screen, bitmap, cliprect, 1 ); + m_c355spr->draw(screen, bitmap, cliprect, 0); + m_c355spr->draw(screen, bitmap, cliprect, 1); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); - for (pri = pivot; pri < 8; pri++) - { + for (int pri = pivot; pri < 8; pri++) m_c355spr->draw(screen, bitmap, cliprect, pri); - } - m_c355spr->draw(screen, bitmap, cliprect, 15 ); //driver's eyes + m_c355spr->draw(screen, bitmap, cliprect, 15); //driver's eyes return 0; @@ -252,10 +250,9 @@ uint16_t namco_de_pcbstack_device::video_enable_r() void namco_de_pcbstack_device::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ - if( m_video_enable!=0 && m_video_enable!=0x40 ) - { - logerror( "unexpected video_enable_w=0x%x\n", m_video_enable ); - } + + if (m_video_enable!=0 && m_video_enable!=0x40) + logerror( "unexpected video_enable_w=0x%x\n", m_video_enable); } /***********************************************************/ @@ -390,7 +387,7 @@ void namco_de_pcbstack_device::sound_bankselect_w(uint8_t data) void namco_de_pcbstack_device::sound_reset_w(uint8_t data) { - if (data & 0x01) + if (BIT(data, 0)) { /* Resume execution */ m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); @@ -405,9 +402,9 @@ void namco_de_pcbstack_device::sound_reset_w(uint8_t data) void namco_de_pcbstack_device::system_reset_w(uint8_t data) { - reset_all_subcpus(data & 1 ? CLEAR_LINE : ASSERT_LINE); + reset_all_subcpus(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE); - if (data & 0x01) + if (BIT(data, 0)) m_maincpu->yield(); } @@ -433,7 +430,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namco_de_pcbstack_device::screen_scanline) int scanline = param; // int cur_posirq = get_posirq_scanline()*2; - if(scanline == 240*2) + if (scanline == (240*2)) { m_master_intc->vblank_irq_trigger(); m_slave_intc->vblank_irq_trigger(); From 1bf894f89eee5bf526750a9a05280f18308998ca Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 11:59:13 -0400 Subject: [PATCH 5/9] namcos21_dsp_c67.cpp: Some cleanup & better formatting --- src/mame/namco/namcos21_c67.cpp | 40 ++- src/mame/namco/namcos21_dsp_c67.cpp | 399 +++++++++++++++------------- src/mame/namco/namcos21_dsp_c67.h | 2 +- 3 files changed, 240 insertions(+), 201 deletions(-) diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 927cb1fef69b7..87ecdc204eca9 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -371,26 +371,25 @@ class namcos21_c67_state : public driver_device uint32_t namcos21_c67_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { //uint8_t *videoram = m_gpu_videoram.get(); - int pivot = 3; - int pri; - bitmap.fill(0xff, cliprect ); + const int pivot = 3; + + bitmap.fill(0xff, cliprect); screen.priority().fill(0, cliprect); - m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered? - m_c355spr->draw(screen, bitmap, cliprect, 2 ); + m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered? + m_c355spr->draw(screen, bitmap, cliprect, 2); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0x7fc0, 0x7ffe); - m_c355spr->draw(screen, bitmap, cliprect, 0 ); - m_c355spr->draw(screen, bitmap, cliprect, 1 ); + m_c355spr->draw(screen, bitmap, cliprect, 0); + m_c355spr->draw(screen, bitmap, cliprect, 1); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); /* draw high priority 2d sprites */ - for( pri=pivot; pri<8; pri++ ) - { - m_c355spr->draw(screen, bitmap, cliprect, pri ); - } + for (int pri=pivot; pri<8; pri++) + m_c355spr->draw(screen, bitmap, cliprect, pri); + return 0; } @@ -402,10 +401,9 @@ uint16_t namcos21_c67_state::video_enable_r() void namcos21_c67_state::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ - if( m_video_enable!=0 && m_video_enable!=0x40 ) - { + + if (m_video_enable!=0 && m_video_enable!=0x40) logerror( "unexpected video_enable_w=0x%x\n", m_video_enable ); - } } /***********************************************************/ @@ -700,7 +698,7 @@ void namcos21_c67_state::sound_bankselect_w(uint8_t data) void namcos21_c67_state::sound_reset_w(uint8_t data) { - if (data & 0x01) + if (BIT(data, 0)) { /* Resume execution */ m_audiocpu->set_input_line(INPUT_LINE_RESET, CLEAR_LINE); @@ -712,17 +710,15 @@ void namcos21_c67_state::sound_reset_w(uint8_t data) m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); } - if (data & 0x04) - { + if (BIT(data, 2)) m_namcos21_dsp_c67->reset_kickstart(); - } } void namcos21_c67_state::system_reset_w(uint8_t data) { - reset_all_subcpus(data & 1 ? CLEAR_LINE : ASSERT_LINE); + reset_all_subcpus(BIT(data, 0) ? CLEAR_LINE : ASSERT_LINE); - if (data & 0x01) + if (BIT(data, 0)) m_maincpu->yield(); } @@ -748,7 +744,7 @@ void namcos21_c67_state::machine_reset() /* Initialise the bank select in the sound CPU */ m_audiobank->set_entry(0); /* Page in bank 0 */ - m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE ); + m_audiocpu->set_input_line(INPUT_LINE_RESET, ASSERT_LINE); /* Place CPU2 & CPU3 into the reset condition */ reset_all_subcpus(ASSERT_LINE); @@ -773,7 +769,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(namcos21_c67_state::screen_scanline) int scanline = param; // int cur_posirq = get_posirq_scanline()*2; - if(scanline == 240*2) + if(scanline == (240*2)) { m_master_intc->vblank_irq_trigger(); m_slave_intc->vblank_irq_trigger(); diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp index 6e4b5567f62e3..d10980e995ca5 100644 --- a/src/mame/namco/namcos21_dsp_c67.cpp +++ b/src/mame/namco/namcos21_dsp_c67.cpp @@ -71,11 +71,7 @@ void namcos21_dsp_c67_device::device_reset() m_poly_frame_height = m_renderer->get_height(); /* DSP startup hacks */ - m_mbNeedsKickstart = 20; - if (m_gametype == NAMCOS21_CYBERSLED) - { - m_mbNeedsKickstart = 200; - } + m_mbNeedsKickstart = (m_gametype == NAMCOS21_CYBERSLED) ? 200 : 20; /* Wipe the framebuffers */ m_renderer->swap_and_clear_poly_framebuffer(); @@ -120,12 +116,12 @@ void namcos21_dsp_c67_device::reset_dsps(int state) void namcos21_dsp_c67_device::reset_kickstart() { //printf( "dspkick=0x%x\n", data ); - namcos21_kickstart_hacks(1); + namcos21_kickstart_hacks(true); } void namcos21_dsp_c67_device::device_add_mconfig(machine_config &config) { - namco_c67_device& dspmaster(NAMCO_C67(config, m_c67master, 24000000)); /* 24 MHz? overclocked */ + namco_c67_device& dspmaster(NAMCO_C67(config, m_c67master, 24'000'000)); /* 24 MHz? overclocked */ dspmaster.set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::master_dsp_program); dspmaster.set_addrmap(AS_DATA, &namcos21_dsp_c67_device::master_dsp_data); dspmaster.set_addrmap(AS_IO, &namcos21_dsp_c67_device::master_dsp_io); @@ -135,7 +131,7 @@ void namcos21_dsp_c67_device::device_add_mconfig(machine_config &config) for (int i = 0; i < 4; i++) { - namco_c67_device& dspslave(NAMCO_C67(config, m_c67slave[i], 24000000)); /* 24 MHz? overclocked */ + namco_c67_device& dspslave(NAMCO_C67(config, m_c67slave[i], 24'000'000)); /* 24 MHz? overclocked */ dspslave.set_addrmap(AS_PROGRAM, &namcos21_dsp_c67_device::slave_dsp_program); dspslave.set_addrmap(AS_DATA, &namcos21_dsp_c67_device::slave_dsp_data); dspslave.set_addrmap(AS_IO, &namcos21_dsp_c67_device::slave_dsp_io); @@ -144,10 +140,10 @@ void namcos21_dsp_c67_device::device_add_mconfig(machine_config &config) dspslave.xf_out_cb().set(FUNC(namcos21_dsp_c67_device::slave_XF_output_w)); // the emulation currently only uses one slave DSP clocked at 4x the normal rate instead of the master splitting the workload across the 4 slaves - if (i!=0) + if (i != 0) dspslave.set_disable(); else - dspslave.set_clock(24000000*4); + dspslave.set_clock(24'000'000*4); } } @@ -159,9 +155,10 @@ void namcos21_dsp_c67_device::dspcuskey_w(uint16_t data) uint16_t namcos21_dsp_c67_device::dspcuskey_r() { uint16_t result = 0; - if( m_gametype == NAMCOS21_SOLVALOU ) + + if (m_gametype == NAMCOS21_SOLVALOU) { - switch( m_c67master->pc() ) + switch (m_c67master->pc()) { case 0x805e: result = 0x0000; break; case 0x805f: result = 0xfeba; break; @@ -172,9 +169,9 @@ uint16_t namcos21_dsp_c67_device::dspcuskey_r() break; } } - else if( m_gametype == NAMCOS21_CYBERSLED ) + else if (m_gametype == NAMCOS21_CYBERSLED) { - switch( m_c67master->pc() ) + switch (m_c67master->pc()) { case 0x8061: result = 0xfe95; break; case 0x8069: result = 0xffff; break; @@ -183,9 +180,9 @@ uint16_t namcos21_dsp_c67_device::dspcuskey_r() break; } } - else if( m_gametype == NAMCOS21_AIRCOMBAT ) + else if (m_gametype == NAMCOS21_AIRCOMBAT) { - switch( m_c67master->pc() ) + switch (m_c67master->pc()) { case 0x8062: result = 0xfeb9; break; case 0x806a: result = 0xffff; break; @@ -194,121 +191,138 @@ uint16_t namcos21_dsp_c67_device::dspcuskey_r() break; } } + return result; } void namcos21_dsp_c67_device::transmit_word_to_slave(uint16_t data) { unsigned offs = m_mpDspState->slaveInputStart+m_mpDspState->slaveBytesAvailable++; + m_mpDspState->slaveInputBuffer[offs%DSP_BUF_MAX] = data; - if (ENABLE_LOGGING) logerror( "+%04x(#%04x)\n", data, m_mpDspState->slaveBytesAvailable ); + + if (ENABLE_LOGGING) + logerror("+%04x(#%04x)\n", data, m_mpDspState->slaveBytesAvailable); + m_mpDspState->slaveActive = 1; - if( m_mpDspState->slaveBytesAvailable >= DSP_BUF_MAX ) - { + + if (m_mpDspState->slaveBytesAvailable >= DSP_BUF_MAX) fatalerror( "IDC overflow\n" ); - } } void namcos21_dsp_c67_device::transfer_dsp_data() { uint16_t addr = m_mpDspState->masterSourceAddr; bool const mode = BIT(addr, 15); + addr &= 0x7fff; - if (addr) + if (!addr) + return; + + while (true) { - for (;;) + uint16_t const old = addr; + uint16_t const code = m_dspram16[addr++]; + + if (code == 0xffff) { - uint16_t const old = addr; - uint16_t const code = m_dspram16[addr++]; - if (code == 0xffff) + if (mode) { - if (mode) - { - addr = m_dspram16[addr]; - m_mpDspState->masterSourceAddr = addr; - if (ENABLE_LOGGING) logerror("LOOP:0x%04x\n", addr); - addr &= 0x7fff; - if (old == addr) - { - return; - } - } - else - { - m_mpDspState->masterSourceAddr = 0; + addr = m_dspram16[addr]; + m_mpDspState->masterSourceAddr = addr; + + if (ENABLE_LOGGING) + logerror("LOOP:0x%04x\n", addr); + + addr &= 0x7fff; + if (old == addr) return; - } } - else if (!mode) + else { - // direct data transfer - if (ENABLE_LOGGING) logerror("DATA TFR(0x%x)\n", code); - transmit_word_to_slave(code); - for (int i = 0; i < code; i++) - { - uint16_t const data = m_dspram16[addr++]; - transmit_word_to_slave(data); - } + m_mpDspState->masterSourceAddr = 0; + return; + } + } + else if (!mode) + { + // direct data transfer + if (ENABLE_LOGGING) + logerror("DATA TFR(0x%x)\n", code); + + transmit_word_to_slave(code); + + for (int i = 0; i < code; i++) + { + uint16_t const data = m_dspram16[addr++]; + transmit_word_to_slave(data); } - else if (code == 0x18 || code == 0x1a) + } + else if (code == 0x18 || code == 0x1a) + { + if (ENABLE_LOGGING) + logerror("HEADER TFR(0x%x)\n", code); + + transmit_word_to_slave(code + 1); + + for (int i = 0; i < code; i++) { - if (ENABLE_LOGGING) logerror("HEADER TFR(0x%x)\n", code); - transmit_word_to_slave(code + 1); - for (int i = 0; i < code; i++) - { - uint16_t const data = m_dspram16[addr++]; - transmit_word_to_slave(data); - } + uint16_t const data = m_dspram16[addr++]; + transmit_word_to_slave(data); } - else + } + else + { + if (ENABLE_LOGGING) + logerror("OBJ TFR(0x%x)\n", code); + + int32_t masterAddr = read_pointrom_data(code); + uint16_t const len = m_dspram16[addr++]; + + while (true) { - if (ENABLE_LOGGING) logerror("OBJ TFR(0x%x)\n", code); - int32_t masterAddr = read_pointrom_data(code); - uint16_t const len = m_dspram16[addr++]; - for (;;) + int subAddr = read_pointrom_data(masterAddr++); + + if (subAddr == 0xffffff) + break; + + uint16_t const primWords = (uint16_t)read_pointrom_data(subAddr++); + // TODO: this function causes an IDC overflow in Solvalou, something else failed prior to that? + // In Header TFR when bad parameters happens there's a suspicious 0x000f 0x0003 as first two words, + // maybe it's supposed to have a different length there ... + // cfr: object code 0x17 in service mode + if (primWords > 2) { - int subAddr = read_pointrom_data(masterAddr++); - if (subAddr == 0xffffff) - { - break; + transmit_word_to_slave(0); // pad1 + transmit_word_to_slave(len + 1); + + for (int i = 0; i < len; i++) + { // transform + transmit_word_to_slave(m_dspram16[addr + i]); } - else + + transmit_word_to_slave(0); // pad2 + transmit_word_to_slave(primWords + 1); + + for (int i = 0; i < primWords; i++) { - int const primWords = (uint16_t)read_pointrom_data(subAddr++); - // TODO: this function causes an IDC overflow in Solvalou, something else failed prior to that? - // In Header TFR when bad parameters happens there's a suspicious 0x000f 0x0003 as first two words, - // maybe it's supposed to have a different length there ... - // cfr: object code 0x17 in service mode - if (primWords > 2) - { - transmit_word_to_slave(0); // pad1 - transmit_word_to_slave(len + 1); - for (int i = 0; i < len; i++) - { // transform - transmit_word_to_slave(m_dspram16[addr + i]); - } - transmit_word_to_slave(0); // pad2 - transmit_word_to_slave(primWords + 1); - for (int i = 0; i < primWords; i++) - { - transmit_word_to_slave((uint16_t)read_pointrom_data(subAddr + i)); - } - } - else - { - if (ENABLE_LOGGING) logerror("TFR NOP?\n"); - } + transmit_word_to_slave((uint16_t)read_pointrom_data(subAddr + i)); } - } // for (;;) - addr += len; + } + else if (ENABLE_LOGGING) + { + logerror("TFR NOP?\n"); + } } - } // for(;;) + + addr += len; + } } } -void namcos21_dsp_c67_device::namcos21_kickstart_hacks(int internal) +void namcos21_dsp_c67_device::namcos21_kickstart_hacks(bool internal) { /* patch dsp watchdog */ switch (m_gametype) @@ -316,24 +330,33 @@ void namcos21_dsp_c67_device::namcos21_kickstart_hacks(int internal) case namcos21_dsp_c67_device::NAMCOS21_AIRCOMBAT: m_master_dsp_ram[0x008e] = 0x808f; break; + case namcos21_dsp_c67_device::NAMCOS21_SOLVALOU: m_master_dsp_ram[0x008b] = 0x808c; break; + default: break; } + if (internal) { - if (m_mbNeedsKickstart == 0) return; + if (m_mbNeedsKickstart == 0) + return; + m_mbNeedsKickstart--; - if (m_mbNeedsKickstart) return; + + if (m_mbNeedsKickstart) + return; } m_renderer->swap_and_clear_poly_framebuffer(); + m_mpDspState->masterSourceAddr = 0; m_mpDspState->slaveOutputSize = 0; m_mpDspState->masterFinished = 0; m_mpDspState->slaveActive = 0; + m_c67master->set_input_line(0, HOLD_LINE); m_c67slave[0]->pulse_input_line(INPUT_LINE_RESET, attotime::zero); } @@ -341,30 +364,35 @@ void namcos21_dsp_c67_device::namcos21_kickstart_hacks(int internal) uint16_t namcos21_dsp_c67_device::read_word_from_slave_input() { uint16_t data = 0; - if( m_mpDspState->slaveBytesAvailable>0 ) + + if (m_mpDspState->slaveBytesAvailable > 0) { data = m_mpDspState->slaveInputBuffer[m_mpDspState->slaveInputStart++]; + m_mpDspState->slaveInputStart %= DSP_BUF_MAX; m_mpDspState->slaveBytesAvailable--; - if( m_mpDspState->slaveBytesAdvertised>0 ) - { + + if (m_mpDspState->slaveBytesAdvertised > 0) m_mpDspState->slaveBytesAdvertised--; - } - if (ENABLE_LOGGING) logerror( "%s:-%04x(0x%04x)\n", machine().describe_context(), data, m_mpDspState->slaveBytesAvailable ); + + if (ENABLE_LOGGING) + logerror( "%s:-%04x(0x%04x)\n", machine().describe_context(), data, m_mpDspState->slaveBytesAvailable ); } + return data; } uint16_t namcos21_dsp_c67_device::get_input_bytes_advertised_for_slave() { - if( m_mpDspState->slaveBytesAdvertised < m_mpDspState->slaveBytesAvailable ) + if (m_mpDspState->slaveBytesAdvertised < m_mpDspState->slaveBytesAvailable) { m_mpDspState->slaveBytesAdvertised++; } - else if( m_mpDspState->slaveActive && m_mpDspState->masterFinished && m_mpDspState->masterSourceAddr ) + else if(m_mpDspState->slaveActive && m_mpDspState->masterFinished && m_mpDspState->masterSourceAddr) { - namcos21_kickstart_hacks(0); + namcos21_kickstart_hacks(false); } + return m_mpDspState->slaveBytesAdvertised; } @@ -379,7 +407,9 @@ void namcos21_dsp_c67_device::dspram16_hack_w(offs_t offset, uint16_t data, uint if (m_mpDspState->masterSourceAddr && offset == 1 + (m_mpDspState->masterSourceAddr & 0x7fff)) { - if (ENABLE_LOGGING) logerror("IDC-CONTINUE\n"); + if (ENABLE_LOGGING) + logerror("IDC-CONTINUE\n"); + transfer_dsp_data(); } else if (m_gametype == NAMCOS21_SOLVALOU && offset == 0x103) @@ -395,7 +425,9 @@ void namcos21_dsp_c67_device::dspram16_w(offs_t offset, uint16_t data, uint16_t if (m_mpDspState->masterSourceAddr && offset == 1 + (m_mpDspState->masterSourceAddr & 0x7fff)) { - if (ENABLE_LOGGING) logerror("IDC-CONTINUE\n"); + if (ENABLE_LOGGING) + logerror("IDC-CONTINUE\n"); + transfer_dsp_data(); } } @@ -411,29 +443,34 @@ int32_t namcos21_dsp_c67_device::read_pointrom_data(unsigned offset) uint16_t namcos21_dsp_c67_device::dsp_port0_r() { int32_t data = read_pointrom_data(m_pointrom_idx++); + m_mPointRomMSB = (uint8_t)(data>>16); m_mbPointRomDataAvailable = 1; + return (uint16_t)data; } void namcos21_dsp_c67_device::dsp_port0_w(uint16_t data) { /* unused? */ - if (ENABLE_LOGGING) logerror( "PTRAM_LO(0x%04x)\n", data ); + if (ENABLE_LOGGING) + logerror("PTRAM_LO(0x%04x)\n", data); } uint16_t namcos21_dsp_c67_device::dsp_port1_r() { - if( m_mbPointRomDataAvailable ) + if (m_mbPointRomDataAvailable) { m_mbPointRomDataAvailable = 0; return m_mPointRomMSB; } + return 0x8000; /* IDC ack? */ } void namcos21_dsp_c67_device::dsp_port1_w(uint16_t data) { /* unused? */ - if (ENABLE_LOGGING) logerror( "PTRAM_HI(0x%04x)\n", data ); + if (ENABLE_LOGGING) + logerror("PTRAM_HI(0x%04x)\n", data); } uint16_t namcos21_dsp_c67_device::dsp_port2_r() @@ -443,7 +480,9 @@ uint16_t namcos21_dsp_c67_device::dsp_port2_r() void namcos21_dsp_c67_device::dsp_port2_w(uint16_t data) { - if (ENABLE_LOGGING) logerror( "IDC ADDR INIT(0x%04x)\n", data ); + if (ENABLE_LOGGING) + logerror("IDC ADDR INIT(0x%04x)\n", data); + m_mpDspState->masterSourceAddr = data; transfer_dsp_data(); } @@ -455,8 +494,8 @@ uint16_t namcos21_dsp_c67_device::dsp_port3_idc_rcv_enable_r() void namcos21_dsp_c67_device::dsp_port3_w(uint16_t data) { - m_pointrom_idx<<=16; - m_pointrom_idx|=data; + m_pointrom_idx <<= 16; + m_pointrom_idx |= data; } void namcos21_dsp_c67_device::dsp_port4_w(uint16_t data) @@ -471,11 +510,12 @@ uint16_t namcos21_dsp_c67_device::dsp_port8_r() void namcos21_dsp_c67_device::dsp_port8_w(uint16_t data) { - if (ENABLE_LOGGING) logerror( "port8_w(%d)\n", data ); - if( data ) - { + if (ENABLE_LOGGING) + logerror("port8_w(%d)\n", data); + + if (data) m_mpDspState->masterFinished = 1; - } + m_irq_enable = data; } @@ -506,40 +546,39 @@ uint16_t namcos21_dsp_c67_device::dsp_portb_r() void namcos21_dsp_c67_device::dsp_portb_w(uint16_t data) { - if( data==0 ) + if (data==0) { /* only 0->1 transition triggers */ return; } - if( m_mpDspState->masterDirectDrawSize == 13 ) + + if (m_mpDspState->masterDirectDrawSize == 13) { - int i; int sx[4], sy[4], zcode[4]; - int color = m_mpDspState->masterDirectDrawBuffer[0]; - for( i=0; i<4; i++ ) + uint16_t color = m_mpDspState->masterDirectDrawBuffer[0]; + + for (int i=0; i<4; i++) { sx[i] = m_poly_frame_width/2 + (int16_t)m_mpDspState->masterDirectDrawBuffer[i*3+1]; sy[i] = m_poly_frame_height/2 + (int16_t)m_mpDspState->masterDirectDrawBuffer[i*3+2]; zcode[i] = m_mpDspState->masterDirectDrawBuffer[i*3+3]; } - if( color&0x8000 ) - { + + if (BIT(color, 15)) m_renderer->draw_quad(sx, sy, zcode, color); - } else - { - logerror( "indirection used w/ direct draw?\n" ); - } + logerror("indirection used w/ direct draw?\n"); } - else if( m_mpDspState->masterDirectDrawSize ) + else if (m_mpDspState->masterDirectDrawSize) { - logerror( "unexpected masterDirectDrawSize=%d!\n",m_mpDspState->masterDirectDrawSize ); + logerror("unexpected masterDirectDrawSize=%d!\n", m_mpDspState->masterDirectDrawSize); } + m_mpDspState->masterDirectDrawSize = 0; } void namcos21_dsp_c67_device::dsp_portc_w(uint16_t data) { - if( m_mpDspState->masterDirectDrawSize < DSP_BUF_MAX ) + if (m_mpDspState->masterDirectDrawSize < DSP_BUF_MAX) { m_mpDspState->masterDirectDrawBuffer[m_mpDspState->masterDirectDrawSize++] = data; } @@ -556,7 +595,8 @@ uint16_t namcos21_dsp_c67_device::dsp_portf_r() void namcos21_dsp_c67_device::dsp_xf_w(uint16_t data) { - if (ENABLE_LOGGING) logerror("xf(%d)\n",data); + if (ENABLE_LOGGING) + logerror("xf(%d)\n",data); } void namcos21_dsp_c67_device::master_dsp_program(address_map &map) @@ -589,60 +629,62 @@ void namcos21_dsp_c67_device::master_dsp_io(address_map &map) void namcos21_dsp_c67_device::render_slave_output(uint16_t data) { - if( m_mpDspState->slaveOutputSize >= 4096 ) - { - fatalerror( "SLAVE OVERFLOW (0x%x)\n",m_mpDspState->slaveOutputBuffer[0] ); - } + if (m_mpDspState->slaveOutputSize >= 4096) + fatalerror("SLAVE OVERFLOW (0x%x)\n", m_mpDspState->slaveOutputBuffer[0]); /* append word to slave output buffer */ m_mpDspState->slaveOutputBuffer[m_mpDspState->slaveOutputSize++] = data; + uint16_t *pSource = m_mpDspState->slaveOutputBuffer; + uint16_t count = *pSource++; + + if (count && m_mpDspState->slaveOutputSize > count) { - uint16_t *pSource = m_mpDspState->slaveOutputBuffer; - uint16_t count = *pSource++; - if( count && m_mpDspState->slaveOutputSize > count ) + uint16_t color = *pSource++; + int sx[4], sy[4], zcode[4]; + + if (BIT(color, 15)) { - uint16_t color = *pSource++; - int sx[4], sy[4],zcode[4]; - int j; - if( color&0x8000 ) + if (count != 13) + logerror("?!direct-draw(%d)\n", count); + + for(int j=0; j<4; j++) { - if( count!=13 ) logerror( "?!direct-draw(%d)\n", count ); - for( j=0; j<4; j++ ) - { - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[3*j+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[3*j+1]; - zcode[j] = pSource[3*j+2]; - } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[3*j+0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[3*j+1]; + zcode[j] = pSource[3*j+2]; } - else + + m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + } + else + { + uint8_t code; + int quad_idx = color*6; + + do { - int quad_idx = color*6; - for(;;) + code = m_pointram[quad_idx++]; + color = m_pointram[quad_idx++] | (code<<8); + + for(int j=0; j<4; j++) { - uint8_t code = m_pointram[quad_idx++]; - color = m_pointram[quad_idx++]|(code<<8); - for( j=0; j<4; j++ ) - { - uint8_t vi = m_pointram[quad_idx++]; - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; - zcode[j] = pSource[vi*3+2]; - } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); - if( code&0x80 ) - { /* end-of-quadlist marker */ - break; - } + uint8_t vi = m_pointram[quad_idx++]; + + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; + zcode[j] = pSource[vi*3+2]; } - } - m_mpDspState->slaveOutputSize = 0; - } - else if( count==0 ) - { - fatalerror( "RenderSlaveOutput\n" ); + + m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + } while (!BIT(code, 7)); //Reached end-of-quadlist marker? } + + m_mpDspState->slaveOutputSize = 0; + } + else if (count == 0) + { + fatalerror( "RenderSlaveOutput\n" ); } } @@ -675,7 +717,8 @@ void namcos21_dsp_c67_device::slave_port3_w(uint16_t data) void namcos21_dsp_c67_device::slave_XF_output_w(uint16_t data) { - if (ENABLE_LOGGING) logerror( "%s :slaveXF(%d)\n", machine().describe_context(), data ); + if (ENABLE_LOGGING) + logerror("%s :slaveXF(%d)\n", machine().describe_context(), data); } uint16_t namcos21_dsp_c67_device::slave_portf_r() @@ -773,14 +816,14 @@ void namcos21_dsp_c67_device::pointram_data_w(offs_t offset, uint16_t data, uint uint16_t namcos21_dsp_c67_device::namcos21_depthcue_r(offs_t offset) { - int bank = (m_pointram_control&0x20)?1:0; + unsigned bank = BIT(m_pointram_control, 5); return m_depthcue[bank][offset]; } void namcos21_dsp_c67_device::namcos21_depthcue_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7) { - int bank = (m_pointram_control&0x20)?1:0; + unsigned bank = BIT(m_pointram_control, 5); m_depthcue[bank][offset] = data; // if( (offset&0xf)==0 ) logerror( "\n depthcue: " ); // logerror( " %02x", data ); diff --git a/src/mame/namco/namcos21_dsp_c67.h b/src/mame/namco/namcos21_dsp_c67.h index b52a78c056080..9ab8a19e9065a 100644 --- a/src/mame/namco/namcos21_dsp_c67.h +++ b/src/mame/namco/namcos21_dsp_c67.h @@ -112,7 +112,7 @@ class namcos21_dsp_c67_device : public device_t uint16_t get_input_bytes_advertised_for_slave(); void render_slave_output(uint16_t data); - void namcos21_kickstart_hacks(int internal); + void namcos21_kickstart_hacks(bool internal); void dspcuskey_w(uint16_t data); uint16_t dspcuskey_r(); From 486326f86ecea4f6536b2247cea30f70f9cf9378 Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 18:37:28 -0400 Subject: [PATCH 6/9] More consistency & address PR feedback --- src/mame/namco/namcos21.cpp | 35 ++++++++++++--------------- src/mame/namco/namcos21_3d.cpp | 15 ++++-------- src/mame/namco/namcos21_c67.cpp | 6 ++--- src/mame/namco/namcos21_de.cpp | 6 ++--- src/mame/namco/namcos21_dsp.cpp | 32 ++++++++++++------------- src/mame/namco/namcos21_dsp_c67.cpp | 37 ++++++++++++++--------------- 6 files changed, 59 insertions(+), 72 deletions(-) diff --git a/src/mame/namco/namcos21.cpp b/src/mame/namco/namcos21.cpp index 9f28c95aa5564..427ab67529a60 100644 --- a/src/mame/namco/namcos21.cpp +++ b/src/mame/namco/namcos21.cpp @@ -416,7 +416,7 @@ uint16_t namcos21_state::winrun_gpu_color_r() void namcos21_state::winrun_gpu_color_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_winrun_color ); + COMBINE_DATA(&m_winrun_color); } uint16_t namcos21_state::winrun_gpu_register_r(offs_t offset) @@ -426,28 +426,28 @@ uint16_t namcos21_state::winrun_gpu_register_r(offs_t offset) void namcos21_state::winrun_gpu_register_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_winrun_gpu_register[offset] ); + COMBINE_DATA(&m_winrun_gpu_register[offset]); m_screen->update_partial(m_screen->vpos()); } void namcos21_state::winrun_gpu_videoram_w(offs_t offset, uint16_t data) { - uint8_t color = data>>8; - uint8_t mask = data&0xff; + uint8_t color = data >> 8; + uint8_t mask = data & 0xff; for (int i=0; i<8; i++) { if (BIT(mask, i)) { - m_gpu_videoram[(offset+i)&0x7ffff] = color; - m_gpu_maskram[(offset+i)&0x7ffff] = mask; + m_gpu_videoram[(offset+i) & 0x7ffff] = color; + m_gpu_maskram[(offset+i) & 0x7ffff] = mask; } } } uint16_t namcos21_state::winrun_gpu_videoram_r(offs_t offset) { - return (m_gpu_videoram[offset]<<8) | m_gpu_maskram[offset]; + return (m_gpu_videoram[offset] << 8) | m_gpu_maskram[offset]; } void namcos21_state::winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect) @@ -457,18 +457,15 @@ void namcos21_state::winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &c int const yscroll = -cliprect.top() + (int16_t)m_winrun_gpu_register[0x2/2]; int const xscroll = 0; //m_winrun_gpu_register[0xc/2] >> 7; - int const base = 0x1000 + 0x100 * (m_winrun_color&0xf); - + int const base = 0x1000 + 0x100 * (m_winrun_color & 0xf); for (int sy=cliprect.top(); sy<=cliprect.bottom(); sy++) { uint8_t const *const pSource = &videoram[((yscroll+sy) & 0x3ff) * 0x200]; uint16_t *const pDest = &bitmap.pix(sy); - for (int sx=cliprect.left(); sx<=cliprect.right(); sx++) { int const pen = pSource[(sx+xscroll) & 0x1ff]; - - switch( pen ) + switch (pen) { case 0xff: break; @@ -490,12 +487,11 @@ void namcos21_state::winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &c uint32_t namcos21_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { - bitmap.fill(0xff, cliprect ); + bitmap.fill(0xff, cliprect); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0x7fc0, 0x7ffe); m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); - - winrun_bitmap_draw(bitmap,cliprect); + winrun_bitmap_draw(bitmap, cliprect); //popmessage("%04x %04x %04x|%04x %04x",m_winrun_gpu_register[0],m_winrun_gpu_register[2/2],m_winrun_gpu_register[4/2],m_winrun_gpu_register[0xa/2],m_winrun_gpu_register[0xc/2]); @@ -511,10 +507,10 @@ uint32_t namcos21_state::screen_update(screen_device &screen, bitmap_ind16 &bitm [[maybe_unused]] void namcos21_state::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ + COMBINE_DATA(&m_video_enable); /* 0x40 = enable */ if (m_video_enable!=0 && m_video_enable!=0x40) - logerror( "unexpected video_enable_w=0x%x\n", m_video_enable ); + logerror("unexpected video_enable_w=0x%x\n", m_video_enable); } /***********************************************************/ @@ -528,9 +524,9 @@ uint16_t namcos21_state::dpram_word_r(offs_t offset) void namcos21_state::dpram_word_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7) { - m_dpram[offset] = data&0xff; + m_dpram[offset] = data & 0xff; } } @@ -635,7 +631,6 @@ void namcos21_state::c140_map(address_map &map) void namcos21_state::configure_c65_namcos21(machine_config &config) { NAMCOC65(config, m_c65, 2048000); - m_c65->in_pb_callback().set_ioport("MCUB"); m_c65->in_pc_callback().set_ioport("MCUC"); m_c65->in_ph_callback().set_ioport("MCUH"); diff --git a/src/mame/namco/namcos21_3d.cpp b/src/mame/namco/namcos21_3d.cpp index fe0115c7d6bad..d45df7191cb61 100644 --- a/src/mame/namco/namcos21_3d.cpp +++ b/src/mame/namco/namcos21_3d.cpp @@ -31,7 +31,7 @@ void namcos21_3d_device::device_reset() void namcos21_3d_device::allocate_poly_framebuffer() { - unsigned framebuffer_size = m_poly_frame_width*m_poly_frame_height; + unsigned framebuffer_size = m_poly_frame_width * m_poly_frame_height; if (framebuffer_size == 0) fatalerror("framebuffer_size == 0\n"); @@ -71,15 +71,12 @@ void namcos21_3d_device::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, con uint16_t *const dest = &bitmap.pix(sy); uint16_t const *const pPen = m_mpPolyFrameBufferPens2.get() + m_poly_frame_width * sy; uint16_t const *const pZ = m_mpPolyFrameBufferZ2.get() + m_poly_frame_width * sy; - for (int sx = clip.left(); sx <= clip.right(); sx++) { int z = pZ[sx]; //if( pZ[sx]!=0x7fff ) if (z >= zlo && z <= zhi) - { dest[sx] = pPen[sx]; - } } } } @@ -112,7 +109,6 @@ void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, uns uint16_t *pDest = m_mpPolyFrameBufferPens.get() + sy * m_poly_frame_width; uint16_t *pZBuf = m_mpPolyFrameBufferZ.get() + sy * m_poly_frame_width; - for (int x = x0; x < x1; x++) { uint16_t zz = (uint16_t)z; @@ -123,7 +119,7 @@ void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, uns if (depthcueenable && zz > 0) { - const unsigned depth = (zz >> m_zz_shift)*m_zzmult; + const unsigned depth = (zz >> m_zz_shift) * m_zzmult; if (m_depth_reverse) pen += depth; @@ -170,7 +166,6 @@ void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, c e2.x = v0->x; e2.z = v0->z; - if (ystart < 0) { e2.x += dx2dy * -ystart; @@ -213,9 +208,7 @@ void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, c e1.x += dx1dy; e1.z += dz1dy; } - } - } } @@ -238,7 +231,7 @@ void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], unsigned else { /* map color code to hardware pen */ unsigned code = color >> 8; - if (code & 0x80) + if (BIT(code, 7)) { color = 0x2100 | (color & 0xff); // color = 0x3e00|color; @@ -248,7 +241,7 @@ void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], unsigned { color = 0x3e00 | (color & 0xff); - if ((code & 0x02) == 0) + if (!BIT(code, 1)) color |= 0x100; } } diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 87ecdc204eca9..5fcce0f743dd4 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -400,10 +400,10 @@ uint16_t namcos21_c67_state::video_enable_r() void namcos21_c67_state::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ + COMBINE_DATA(&m_video_enable); /* 0x40 = enable */ if (m_video_enable!=0 && m_video_enable!=0x40) - logerror( "unexpected video_enable_w=0x%x\n", m_video_enable ); + logerror("unexpected video_enable_w=0x%x\n", m_video_enable); } /***********************************************************/ @@ -417,7 +417,7 @@ uint16_t namcos21_c67_state::dpram_word_r(offs_t offset) void namcos21_c67_state::dpram_word_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7 ) { m_dpram[offset] = data&0xff; } diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp index 5c36c817b3b93..a0cacbecdc2ad 100644 --- a/src/mame/namco/namcos21_de.cpp +++ b/src/mame/namco/namcos21_de.cpp @@ -249,10 +249,10 @@ uint16_t namco_de_pcbstack_device::video_enable_r() void namco_de_pcbstack_device::video_enable_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_video_enable ); /* 0x40 = enable */ + COMBINE_DATA(&m_video_enable); /* 0x40 = enable */ if (m_video_enable!=0 && m_video_enable!=0x40) - logerror( "unexpected video_enable_w=0x%x\n", m_video_enable); + logerror("unexpected video_enable_w=0x%x\n", m_video_enable); } /***********************************************************/ @@ -382,7 +382,7 @@ void namco_de_pcbstack_device::driveyes_slave_map(address_map &map) void namco_de_pcbstack_device::sound_bankselect_w(uint8_t data) { - m_audiobank->set_entry(data>>4); + m_audiobank->set_entry(data >> 4); } void namco_de_pcbstack_device::sound_reset_w(uint8_t data) diff --git a/src/mame/namco/namcos21_dsp.cpp b/src/mame/namco/namcos21_dsp.cpp index 9bd2832a8f961..c5efe3b968eb9 100644 --- a/src/mame/namco/namcos21_dsp.cpp +++ b/src/mame/namco/namcos21_dsp.cpp @@ -62,20 +62,20 @@ void namcos21_dsp_device::device_reset() m_suspend_timer->adjust(attotime::zero); } - uint16_t namcos21_dsp_device::winrun_dspcomram_r(offs_t offset) { - unsigned bank = !BIT(m_winrun_dspcomram_control[0x4/2], 0); + unsigned bank = BIT(~m_winrun_dspcomram_control[0x4/2], 0); uint16_t *mem = &m_winrun_dspcomram[0x1000 * bank]; return mem[offset]; } + void namcos21_dsp_device::winrun_dspcomram_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - unsigned bank = !BIT(m_winrun_dspcomram_control[0x4/2], 0); + unsigned bank = BIT(~m_winrun_dspcomram_control[0x4/2], 0); uint16_t *mem = &m_winrun_dspcomram[0x1000 * bank]; - COMBINE_DATA( &mem[offset] ); + COMBINE_DATA(&mem[offset]); } uint16_t namcos21_dsp_device::winrun_cuskey_r() @@ -121,7 +121,7 @@ void namcos21_dsp_device::winrun_flush_poly() zcode[j] = *pSource++; } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + m_renderer->draw_quad(sx, sy, zcode, color & 0x7fff); } else { @@ -135,12 +135,12 @@ void namcos21_dsp_device::winrun_flush_poly() for (int j=0; j<4; j++) { uint8_t vi = m_pointram[quad_idx++]; - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; - zcode[j] = pSource[vi*3+2]; + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3 + 0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3 + 1]; + zcode[j] = pSource[vi*3 + 2]; } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + m_renderer->draw_quad(sx, sy, zcode, color & 0x7fff); } while (!BIT(code, 7)); //Reached end-of-quadlist marker? } @@ -158,12 +158,12 @@ void namcos21_dsp_device::winrun_dsp_render_w(uint16_t data) if (m_winrun_poly_index<WINRUN_MAX_POLY_PARAM) m_winrun_poly_buf[m_winrun_poly_index++] = data; else - logerror( "WINRUN_POLY_OVERFLOW\n" ); + logerror("WINRUN_POLY_OVERFLOW\n"); } void namcos21_dsp_device::winrun_dsp_pointrom_addr_w(offs_t offset, uint16_t data) { - if( offset==0 ) + if(offset==0) { /* port 8 */ m_winrun_pointrom_addr = data; } @@ -195,7 +195,7 @@ uint16_t namcos21_dsp_device::winrun_table_r(offs_t offset) void namcos21_dsp_device::winrun_dspbios_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_winrun_dspbios[offset] ); + COMBINE_DATA(&m_winrun_dspbios[offset]); if (offset==0xfff) // is this the real trigger? { @@ -222,7 +222,7 @@ void namcos21_dsp_device::winrun_68k_dspcomram_w(offs_t offset, uint16_t data, u unsigned bank = BIT(m_winrun_dspcomram_control[0x4/2], 0); uint16_t *mem = &m_winrun_dspcomram[0x1000*bank]; - COMBINE_DATA( &mem[offset] ); + COMBINE_DATA(&mem[offset]); } uint16_t namcos21_dsp_device::winrun_dspcomram_control_r(offs_t offset) @@ -232,7 +232,7 @@ uint16_t namcos21_dsp_device::winrun_dspcomram_control_r(offs_t offset) void namcos21_dsp_device::winrun_dspcomram_control_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_winrun_dspcomram_control[offset] ); + COMBINE_DATA(&m_winrun_dspcomram_control[offset]); } @@ -273,7 +273,7 @@ void namcos21_dsp_device::device_add_mconfig(machine_config &config) void namcos21_dsp_device::pointram_control_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - COMBINE_DATA( &m_pointram_control ); + COMBINE_DATA(&m_pointram_control); m_pointram_idx = 0; /* HACK */ } @@ -287,6 +287,6 @@ void namcos21_dsp_device::pointram_data_w(offs_t offset, uint16_t data, uint16_t if (ACCESSING_BITS_0_7) { m_pointram[m_pointram_idx++] = data; - m_pointram_idx &= (PTRAM_SIZE-1); + m_pointram_idx &= (PTRAM_SIZE - 1); } } diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp index d10980e995ca5..45063cefbf940 100644 --- a/src/mame/namco/namcos21_dsp_c67.cpp +++ b/src/mame/namco/namcos21_dsp_c67.cpp @@ -165,7 +165,7 @@ uint16_t namcos21_dsp_c67_device::dspcuskey_r() case 0x8067: result = 0xffff; break; case 0x806e: result = 0x0145; break; default: - logerror( "unk cuskey_r; pc=0x%x\n", m_c67master->pc() ); + logerror("unk cuskey_r; pc=0x%x\n", m_c67master->pc()); break; } } @@ -207,7 +207,7 @@ void namcos21_dsp_c67_device::transmit_word_to_slave(uint16_t data) m_mpDspState->slaveActive = 1; if (m_mpDspState->slaveBytesAvailable >= DSP_BUF_MAX) - fatalerror( "IDC overflow\n" ); + fatalerror("IDC overflow\n"); } void namcos21_dsp_c67_device::transfer_dsp_data() @@ -376,7 +376,7 @@ uint16_t namcos21_dsp_c67_device::read_word_from_slave_input() m_mpDspState->slaveBytesAdvertised--; if (ENABLE_LOGGING) - logerror( "%s:-%04x(0x%04x)\n", machine().describe_context(), data, m_mpDspState->slaveBytesAvailable ); + logerror("%s:-%04x(0x%04x)\n", machine().describe_context(), data, m_mpDspState->slaveBytesAvailable); } return data; @@ -584,7 +584,7 @@ void namcos21_dsp_c67_device::dsp_portc_w(uint16_t data) } else { - logerror( "portc overflow\n" ); + logerror("portc overflow\n"); } } @@ -650,33 +650,32 @@ void namcos21_dsp_c67_device::render_slave_output(uint16_t data) for(int j=0; j<4; j++) { - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[3*j+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[3*j+1]; - zcode[j] = pSource[3*j+2]; + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[j*3 + 0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[j*3 + 1]; + zcode[j] = pSource[j*3 + 2]; } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + m_renderer->draw_quad(sx, sy, zcode, color & 0x7fff); } else { uint8_t code; - int quad_idx = color*6; + int quad_idx = color * 6; do { code = m_pointram[quad_idx++]; - color = m_pointram[quad_idx++] | (code<<8); + color = m_pointram[quad_idx++] | (code << 8); for(int j=0; j<4; j++) { uint8_t vi = m_pointram[quad_idx++]; - - sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3+0]; - sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3+1]; - zcode[j] = pSource[vi*3+2]; + sx[j] = m_poly_frame_width/2 + (int16_t)pSource[vi*3 + 0]; + sy[j] = m_poly_frame_height/2 + (int16_t)pSource[vi*3 + 1]; + zcode[j] = pSource[vi*3 + 2]; } - m_renderer->draw_quad(sx, sy, zcode, color&0x7fff); + m_renderer->draw_quad(sx, sy, zcode, color & 0x7fff); } while (!BIT(code, 7)); //Reached end-of-quadlist marker? } @@ -684,7 +683,7 @@ void namcos21_dsp_c67_device::render_slave_output(uint16_t data) } else if (count == 0) { - fatalerror( "RenderSlaveOutput\n" ); + fatalerror("RenderSlaveOutput\n"); } } @@ -766,7 +765,7 @@ void namcos21_dsp_c67_device::slave_dsp_io(address_map &map) void namcos21_dsp_c67_device::pointram_control_w(offs_t offset, uint16_t data, uint16_t mem_mask) { // uint16_t prev = m_pointram_control; - COMBINE_DATA( &m_pointram_control ); + COMBINE_DATA(&m_pointram_control); /* m_pointram_control&0x20 : bank for depthcue data */ #if 0 @@ -804,12 +803,12 @@ uint16_t namcos21_dsp_c67_device::pointram_data_r() void namcos21_dsp_c67_device::pointram_data_w(offs_t offset, uint16_t data, uint16_t mem_mask) { - if( ACCESSING_BITS_0_7 ) + if (ACCESSING_BITS_0_7) { // if( (m_pointram_idx%6)==0 ) logerror("\n" ); // logerror( " %02x", data ); m_pointram[m_pointram_idx++] = data; - m_pointram_idx &= (PTRAM_SIZE-1); + m_pointram_idx &= (PTRAM_SIZE - 1); } } From 1b340f3973d3419bf0605f16791b0336c017cb66 Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Fri, 12 Jul 2024 19:41:09 -0400 Subject: [PATCH 7/9] Oops, missed a few spots --- src/mame/namco/namcos21_dsp.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/mame/namco/namcos21_dsp.cpp b/src/mame/namco/namcos21_dsp.cpp index c5efe3b968eb9..e7cb2d34de908 100644 --- a/src/mame/namco/namcos21_dsp.cpp +++ b/src/mame/namco/namcos21_dsp.cpp @@ -163,7 +163,7 @@ void namcos21_dsp_device::winrun_dsp_render_w(uint16_t data) void namcos21_dsp_device::winrun_dsp_pointrom_addr_w(offs_t offset, uint16_t data) { - if(offset==0) + if (offset==0) { /* port 8 */ m_winrun_pointrom_addr = data; } @@ -261,7 +261,6 @@ void namcos21_dsp_device::winrun_dsp_io(address_map &map) void namcos21_dsp_device::device_add_mconfig(machine_config &config) { tms32025_device& dsp(TMS32025(config, m_dsp, 24000000*2)); /* 48 MHz? overclocked */ - dsp.set_addrmap(AS_PROGRAM, &namcos21_dsp_device::winrun_dsp_program); dsp.set_addrmap(AS_DATA, &namcos21_dsp_device::winrun_dsp_data); dsp.set_addrmap(AS_IO, &namcos21_dsp_device::winrun_dsp_io); From 94c1c88c4b4e6cdcc603b3860f292a40310181cc Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Mon, 12 Aug 2024 23:42:58 -0400 Subject: [PATCH 8/9] Tidbits --- src/mame/namco/namcos21_c67.cpp | 2 +- src/mame/namco/namcos21_de.cpp | 2 +- src/mame/namco/namcos21_dsp_c67.cpp | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 5fcce0f743dd4..99e4c7a6a94f4 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -371,7 +371,6 @@ class namcos21_c67_state : public driver_device uint32_t namcos21_c67_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { //uint8_t *videoram = m_gpu_videoram.get(); - const int pivot = 3; bitmap.fill(0xff, cliprect); screen.priority().fill(0, cliprect); @@ -387,6 +386,7 @@ uint32_t namcos21_c67_state::screen_update(screen_device &screen, bitmap_ind16 & m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); /* draw high priority 2d sprites */ + const int pivot = 3; for (int pri=pivot; pri<8; pri++) m_c355spr->draw(screen, bitmap, cliprect, pri); diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp index a0cacbecdc2ad..40c13d61aae5e 100644 --- a/src/mame/namco/namcos21_de.cpp +++ b/src/mame/namco/namcos21_de.cpp @@ -217,7 +217,6 @@ void namco_de_pcbstack_device::device_add_mconfig(machine_config &config) uint32_t namco_de_pcbstack_device::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { //uint8_t *videoram = m_gpu_videoram.get(); - const int pivot = 3; bitmap.fill(0xff, cliprect ); screen.priority().fill(0, cliprect); @@ -233,6 +232,7 @@ uint32_t namco_de_pcbstack_device::screen_update(screen_device &screen, bitmap_i m_namcos21_3d->copy_visible_poly_framebuffer(bitmap, cliprect, 0, 0x7fbf); + const int pivot = 3; for (int pri = pivot; pri < 8; pri++) m_c355spr->draw(screen, bitmap, cliprect, pri); diff --git a/src/mame/namco/namcos21_dsp_c67.cpp b/src/mame/namco/namcos21_dsp_c67.cpp index 45063cefbf940..be9058ff305ec 100644 --- a/src/mame/namco/namcos21_dsp_c67.cpp +++ b/src/mame/namco/namcos21_dsp_c67.cpp @@ -278,11 +278,9 @@ void namcos21_dsp_c67_device::transfer_dsp_data() int32_t masterAddr = read_pointrom_data(code); uint16_t const len = m_dspram16[addr++]; - while (true) { int subAddr = read_pointrom_data(masterAddr++); - if (subAddr == 0xffffff) break; From 3a5fc98af2851952d30ae0ad0fbd3f0d80905cc8 Mon Sep 17 00:00:00 2001 From: FlykeSpice <flykespice@gmail.com> Date: Wed, 20 Nov 2024 21:59:32 -0400 Subject: [PATCH 9/9] Add missing ATTR_COLD to cold startup functions & more tidy --- src/mame/namco/namcos21.cpp | 8 ++++---- src/mame/namco/namcos21_3d.cpp | 12 ++++++------ src/mame/namco/namcos21_3d.h | 8 ++++---- src/mame/namco/namcos21_c67.cpp | 16 ++++++++-------- src/mame/namco/namcos21_de.cpp | 10 +++++----- src/mame/namco/namcos21_dsp.cpp | 2 +- src/mame/namco/namcos21_dsp.h | 6 +++--- 7 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/mame/namco/namcos21.cpp b/src/mame/namco/namcos21.cpp index 427ab67529a60..f5dc191915c24 100644 --- a/src/mame/namco/namcos21.cpp +++ b/src/mame/namco/namcos21.cpp @@ -325,8 +325,7 @@ class namcos21_state : public driver_device m_namcos21_dsp(*this, "namcos21dsp") { } - void configure_c148_standard(machine_config &config); - void winrun(machine_config &config); + void winrun(machine_config &config) ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -390,7 +389,8 @@ class namcos21_state : public driver_device void winrun_bitmap_draw(bitmap_ind16 &bitmap, const rectangle &cliprect); - void configure_c65_namcos21(machine_config &config); + void configure_c65_namcos21(machine_config &config) ATTR_COLD; + void configure_c148_standard(machine_config &config) ATTR_COLD; void winrun_master_map(address_map &map) ATTR_COLD; void winrun_slave_map(address_map &map) ATTR_COLD; @@ -630,7 +630,7 @@ void namcos21_state::c140_map(address_map &map) void namcos21_state::configure_c65_namcos21(machine_config &config) { - NAMCOC65(config, m_c65, 2048000); + NAMCOC65(config, m_c65, 2'048'000); m_c65->in_pb_callback().set_ioport("MCUB"); m_c65->in_pc_callback().set_ioport("MCUC"); m_c65->in_ph_callback().set_ioport("MCUH"); diff --git a/src/mame/namco/namcos21_3d.cpp b/src/mame/namco/namcos21_3d.cpp index d45df7191cb61..6f98e2c81f1ea 100644 --- a/src/mame/namco/namcos21_3d.cpp +++ b/src/mame/namco/namcos21_3d.cpp @@ -83,7 +83,7 @@ void namcos21_3d_device::copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, con /*********************************************************************************************/ -void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, unsigned color, bool depthcueenable) +void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, uint16_t color, bool depthcueenable) { if (e1->x > e2->x) std::swap(e1, e2); @@ -115,11 +115,11 @@ void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, uns if (zz < pZBuf[x]) { - unsigned pen = color; + uint16_t pen = color; if (depthcueenable && zz > 0) { - const unsigned depth = (zz >> m_zz_shift) * m_zzmult; + const uint16_t depth = (zz >> m_zz_shift) * m_zzmult; if (m_depth_reverse) pen += depth; @@ -135,7 +135,7 @@ void namcos21_3d_device::renderscanline_flat(const edge *e1, const edge *e2, uns } } -void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, bool depthcueenable) +void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, uint16_t color, bool depthcueenable) { /* first, sort so that v0->y <= v1->y <= v2->y */ { @@ -212,7 +212,7 @@ void namcos21_3d_device::rendertri(const n21_vertex *v0, const n21_vertex *v1, c } } -void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], unsigned color) +void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], uint16_t color) { bool depthcueenable = true; /* @@ -230,7 +230,7 @@ void namcos21_3d_device::draw_quad(int sx[4], int sy[4], int zcode[4], unsigned } else { /* map color code to hardware pen */ - unsigned code = color >> 8; + uint8_t code = color >> 8; if (BIT(code, 7)) { color = 0x2100 | (color & 0xff); diff --git a/src/mame/namco/namcos21_3d.h b/src/mame/namco/namcos21_3d.h index b3400b9a10bec..53f6b7bad1b46 100644 --- a/src/mame/namco/namcos21_3d.h +++ b/src/mame/namco/namcos21_3d.h @@ -27,7 +27,7 @@ class namcos21_3d_device : public device_t void copy_visible_poly_framebuffer(bitmap_ind16 &bitmap, const rectangle &clip, int zlo, int zhi); void swap_and_clear_poly_framebuffer(); - void draw_quad(int sx[4], int sy[4], int zcode[4], unsigned color); + void draw_quad(int sx[4], int sy[4], int zcode[4], uint16_t color); protected: // device-level overrides @@ -47,9 +47,9 @@ class namcos21_3d_device : public device_t double z; }; - void renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, unsigned color, bool depthcueenable); - void rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, unsigned color, bool depthcueenable); - void allocate_poly_framebuffer(); + void renderscanline_flat(const edge *e1, const edge *e2, unsigned sy, uint16_t color, bool depthcueenable); + void rendertri(const n21_vertex *v0, const n21_vertex *v1, const n21_vertex *v2, uint16_t color, bool depthcueenable); + void allocate_poly_framebuffer() ATTR_COLD; std::unique_ptr<uint16_t[]> m_mpPolyFrameBufferPens; std::unique_ptr<uint16_t[]> m_mpPolyFrameBufferZ; diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 99e4c7a6a94f4..cbb4f494ed24d 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -299,14 +299,13 @@ class namcos21_c67_state : public driver_device m_namcos21_dsp_c67(*this, "namcos21dsp_c67") { } - void configure_c148_standard(machine_config &config); - void namcos21(machine_config &config); - void cybsled(machine_config &config); - void solvalou(machine_config &config); - void aircomb(machine_config &config); - void starblad(machine_config &config); + void namcos21(machine_config &config) ATTR_COLD; + void cybsled(machine_config &config) ATTR_COLD; + void solvalou(machine_config &config) ATTR_COLD; + void aircomb(machine_config &config) ATTR_COLD; + void starblad(machine_config &config) ATTR_COLD; - void init_solvalou(); + void init_solvalou() ATTR_COLD; protected: virtual void machine_start() override ATTR_COLD; @@ -357,7 +356,8 @@ class namcos21_c67_state : public driver_device uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void configure_c68_namcos21(machine_config &config); + void configure_c68_namcos21(machine_config &config) ATTR_COLD; + void configure_c148_standard(machine_config &config) ATTR_COLD; void common_map(address_map &map) ATTR_COLD; void master_map(address_map &map) ATTR_COLD; diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp index 40c13d61aae5e..004dfa237b6b2 100644 --- a/src/mame/namco/namcos21_de.cpp +++ b/src/mame/namco/namcos21_de.cpp @@ -60,7 +60,6 @@ class namco_de_pcbstack_device : public device_t // construction/destruction namco_de_pcbstack_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - void configure_c148_standard(machine_config &config); protected: virtual void device_add_mconfig(machine_config &config) override ATTR_COLD; @@ -114,7 +113,8 @@ class namco_de_pcbstack_device : public device_t uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void configure_c68_namcos21(machine_config &config); + void configure_c68_namcos21(machine_config &config) ATTR_COLD; + void configure_c148_standard(machine_config &config) ATTR_COLD; void driveyes_common_map(address_map &map) ATTR_COLD; void driveyes_master_map(address_map &map) ATTR_COLD; @@ -162,7 +162,7 @@ void namco_de_pcbstack_device::device_add_mconfig(machine_config &config) M68000(config, m_slave, 49.152_MHz_XTAL / 4); /* Slave */ m_slave->set_addrmap(AS_PROGRAM, &namco_de_pcbstack_device::driveyes_slave_map); - MC6809E(config, m_audiocpu, 3072000); /* Sound */ + MC6809E(config, m_audiocpu, 3'072'000); /* Sound */ m_audiocpu->set_addrmap(AS_PROGRAM, &namco_de_pcbstack_device::sound_map); m_audiocpu->set_periodic_int(FUNC(namco_de_pcbstack_device::irq0_line_hold), attotime::from_hz(2*60)); @@ -218,7 +218,7 @@ uint32_t namco_de_pcbstack_device::screen_update(screen_device &screen, bitmap_i { //uint8_t *videoram = m_gpu_videoram.get(); - bitmap.fill(0xff, cliprect ); + bitmap.fill(0xff, cliprect); screen.priority().fill(0, cliprect); m_c355spr->build_sprite_list_and_render_sprites(cliprect); // TODO : buffered? @@ -315,7 +315,7 @@ void namco_de_pcbstack_device::c140_map(address_map &map) void namco_de_pcbstack_device::configure_c68_namcos21(machine_config &config) { - NAMCOC68(config, m_c68, 8000000); + NAMCOC68(config, m_c68, 8'000'000); m_c68->in_pb_callback().set_ioport("MCUB"); m_c68->in_pc_callback().set_ioport("MCUC"); m_c68->in_ph_callback().set_ioport("MCUH"); diff --git a/src/mame/namco/namcos21_dsp.cpp b/src/mame/namco/namcos21_dsp.cpp index e7cb2d34de908..414433bb026a0 100644 --- a/src/mame/namco/namcos21_dsp.cpp +++ b/src/mame/namco/namcos21_dsp.cpp @@ -260,7 +260,7 @@ void namcos21_dsp_device::winrun_dsp_io(address_map &map) void namcos21_dsp_device::device_add_mconfig(machine_config &config) { - tms32025_device& dsp(TMS32025(config, m_dsp, 24000000*2)); /* 48 MHz? overclocked */ + tms32025_device& dsp(TMS32025(config, m_dsp, 24'000'000*2)); /* 48 MHz? overclocked */ dsp.set_addrmap(AS_PROGRAM, &namcos21_dsp_device::winrun_dsp_program); dsp.set_addrmap(AS_DATA, &namcos21_dsp_device::winrun_dsp_data); dsp.set_addrmap(AS_IO, &namcos21_dsp_device::winrun_dsp_io); diff --git a/src/mame/namco/namcos21_dsp.h b/src/mame/namco/namcos21_dsp.h index 7028f3cc09585..7cc176ae14043 100644 --- a/src/mame/namco/namcos21_dsp.h +++ b/src/mame/namco/namcos21_dsp.h @@ -8,13 +8,13 @@ #include "cpu/tms32025/tms32025.h" #include "namcos21_3d.h" -#define WINRUN_MAX_POLY_PARAM (1+256*3) - -#define PTRAM_SIZE 0x20000 class namcos21_dsp_device : public device_t { public: + static constexpr unsigned PTRAM_SIZE = 0x20000; + static constexpr unsigned WINRUN_MAX_POLY_PARAM = 1*256*3; + namcos21_dsp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); // config