diff --git a/src/devices/cpu/mips/mips3.c b/src/devices/cpu/mips/mips3.c index 00e3d7bc1c0..ffed0db99c2 100644 --- a/src/devices/cpu/mips/mips3.c +++ b/src/devices/cpu/mips/mips3.c @@ -1517,7 +1517,7 @@ void mips3_device::handle_cop0(UINT32 op) break; case 0x10: /* RFE */ invalid_instruction(op); break; - case 0x18: /* ERET */ logerror("ERET\n"); m_core->pc = m_core->cpr[0][COP0_EPC]; SR &= ~SR_EXL; check_irqs(); m_lld_value ^= 0xffffffff; m_ll_value ^= 0xffffffff; break; + case 0x18: /* ERET logerror("ERET\n"); */ m_core->pc = m_core->cpr[0][COP0_EPC]; SR &= ~SR_EXL; check_irqs(); m_lld_value ^= 0xffffffff; m_ll_value ^= 0xffffffff; break; case 0x20: /* WAIT */ break; default: invalid_instruction(op); break; } diff --git a/src/mame/machine/n64.c b/src/mame/machine/n64.c index 85a6aedb90d..cfdcb914117 100644 --- a/src/mame/machine/n64.c +++ b/src/mame/machine/n64.c @@ -1434,10 +1434,6 @@ void n64_periphs::pi_dma_tick() { UINT32 dma_length = pi_wr_len + 1; //logerror("PI Write, %X, %X, %X\n", pi_cart_addr, pi_dram_addr, pi_wr_len); - if (dma_length & 1) - { - dma_length = (dma_length + 1) & ~1; - } if (pi_dram_addr != 0xffffffff) { @@ -1454,10 +1450,6 @@ void n64_periphs::pi_dma_tick() { UINT32 dma_length = pi_rd_len + 1; //logerror("PI Read, %X, %X, %X\n", pi_cart_addr, pi_dram_addr, pi_rd_len); - if (dma_length & 1) - { - dma_length = (dma_length + 1) & ~1; - } if (pi_dram_addr != 0xffffffff) { @@ -2093,6 +2085,7 @@ TIMER_CALLBACK_MEMBER(n64_periphs::si_dma_callback) void n64_periphs::si_dma_tick() { si_dma_timer->adjust(attotime::never); + si_status = 0; si_status |= 0x1000; signal_rcp_interrupt(SI_INTERRUPT); } @@ -2136,8 +2129,8 @@ void n64_periphs::pif_dma(int direction) *dst++ = d; } } - - si_dma_timer->adjust(attotime::from_hz(500)); + si_status |= 1; + si_dma_timer->adjust(attotime::from_hz(1000)); //si_status |= 0x1000; //signal_rcp_interrupt(SI_INTERRUPT); } @@ -2180,7 +2173,7 @@ WRITE32_MEMBER( n64_periphs::si_reg_w ) break; case 0x18/4: // SI_STATUS_REG - si_status &= ~0x1000; + si_status = 0; clear_rcp_interrupt(SI_INTERRUPT); break; diff --git a/src/mame/video/n64.c b/src/mame/video/n64.c index 6bac63f5745..e11de1b95b7 100644 --- a/src/mame/video/n64.c +++ b/src/mame/video/n64.c @@ -2114,7 +2114,7 @@ void n64_rdp::draw_triangle(bool shade, bool texture, bool zbuffer, bool rect) { render_spans(yh >> 2, yl >> 2, tilenum, flip ? true : false, spans, rect, object); } - + m_aux_buf_ptr = 0; // Spans can be reused once render completes //wait("draw_triangle"); } @@ -3142,14 +3142,9 @@ void n64_state::video_start() } } -void screen_eof_n64(screen_device &screen, bool state) -{ -} - UINT32 n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { n64_periphs* n64 = machine().device("rcp"); - m_rdp->m_visarea = screen.visible_area(); //UINT16* frame_buffer = (UINT16*)&rdram[(n64->vi_origin & 0xffffff) >> 2]; //UINT8* cvg_buffer = &m_rdp.m_hidden_bits[((n64->vi_origin & 0xffffff) >> 2) >> 1]; @@ -3189,12 +3184,9 @@ UINT32 n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, } */ - m_rdp->wait(); - m_rdp->m_aux_buf_ptr = 0; - if (n64->vi_blank) { - bitmap.fill(0, m_rdp->m_visarea); + bitmap.fill(0, screen.visible_area()); return 0; } @@ -3205,14 +3197,14 @@ UINT32 n64_state::screen_update_n64(screen_device &screen, bitmap_rgb32 &bitmap, void n64_state::screen_eof_n64(screen_device &screen, bool state) { - m_rdp->wait(); - m_rdp->m_aux_buf_ptr = 0; } void n64_rdp::render_spans(INT32 start, INT32 end, INT32 tilenum, bool flip, extent_t* spans, bool rect, rdp_poly_state* object) { const INT32 clipy1 = m_scissor.m_yh; const INT32 clipy2 = m_scissor.m_yl; + const rectangle clip(m_scissor.m_xh, m_scissor.m_xl, m_scissor.m_yh, m_scissor.m_yl); + INT32 offset = 0; if (clipy2 <= 0) @@ -3253,22 +3245,22 @@ void n64_rdp::render_spans(INT32 start, INT32 end, INT32 tilenum, bool flip, ext switch(m_other_modes.cycle_type) { case CYCLE_TYPE_1: - render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_1cycle), this), start, (end - start) + 1, spans + offset); + render_triangle_custom(clip, render_delegate(FUNC(n64_rdp::span_draw_1cycle), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_2: - render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_2cycle), this), start, (end - start) + 1, spans + offset); + render_triangle_custom(clip, render_delegate(FUNC(n64_rdp::span_draw_2cycle), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_COPY: - render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_copy), this), start, (end - start) + 1, spans + offset); + render_triangle_custom(clip, render_delegate(FUNC(n64_rdp::span_draw_copy), this), start, (end - start) + 1, spans + offset); break; case CYCLE_TYPE_FILL: - render_triangle_custom(m_visarea, render_delegate(FUNC(n64_rdp::span_draw_fill), this), start, (end - start) + 1, spans + offset); + render_triangle_custom(clip, render_delegate(FUNC(n64_rdp::span_draw_fill), this), start, (end - start) + 1, spans + offset); break; } - //wait(); + wait("render spans"); } void n64_rdp::rgbaz_clip(INT32 sr, INT32 sg, INT32 sb, INT32 sa, INT32* sz, rdp_span_aux* userdata) diff --git a/src/mame/video/n64.h b/src/mame/video/n64.h index 3900bc72048..25238d9b881 100644 --- a/src/mame/video/n64.h +++ b/src/mame/video/n64.h @@ -308,11 +308,9 @@ public: UINT16 m_dzpix_normalize[0x10000]; - rectangle_t m_scissor; + rectangle_t m_scissor; span_base_t m_span_base; - rectangle m_visarea; - void draw_triangle(bool shade, bool texture, bool zbuffer, bool rect); void* m_aux_buf; diff --git a/src/mess/drivers/n64.c b/src/mess/drivers/n64.c index 0557e200d4c..91c6f4632c0 100644 --- a/src/mess/drivers/n64.c +++ b/src/mess/drivers/n64.c @@ -412,7 +412,7 @@ static MACHINE_CONFIG_START( n64, n64_mess_state ) /* video hardware */ MCFG_SCREEN_ADD("screen", RASTER) MCFG_SCREEN_REFRESH_RATE(60) - MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) + //MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) MCFG_SCREEN_SIZE(640, 525) MCFG_SCREEN_VISIBLE_AREA(0, 639, 0, 479) MCFG_SCREEN_UPDATE_DRIVER(n64_state, screen_update_n64)