From af270a58f3b397e89b73fd0aa45f94c31dd58c81 Mon Sep 17 00:00:00 2001 From: Ville Linde Date: Sat, 17 Jul 2021 15:01:41 +0300 Subject: cobra: Restore to somewhat working state. Adjust visible area to match the K001604. --- src/mame/drivers/cobra.cpp | 44 +++++++++++++++++++++----------------------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/src/mame/drivers/cobra.cpp b/src/mame/drivers/cobra.cpp index da5141650af..f9fa280a0d8 100644 --- a/src/mame/drivers/cobra.cpp +++ b/src/mame/drivers/cobra.cpp @@ -362,6 +362,7 @@ public: cobra_renderer(screen_device &screen) : poly_manager(screen.machine()) , m_screen(screen) + , m_framebuffer_size(0, 511, 0, 399) { m_texture_ram = std::make_unique(0x100000); @@ -423,6 +424,8 @@ private: uint32_t m_texram_ptr; + rectangle m_framebuffer_size; + enum { RE_STATUS_IDLE = 0, @@ -1134,13 +1137,13 @@ void cobra_state::video_start() uint32_t cobra_state::screen_update_cobra(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - if (m_has_psac) - { + if (m_has_psac) m_k001604->draw_back_layer(screen, bitmap, cliprect); - m_k001604->draw_front_layer(screen, bitmap, cliprect); - } - + m_renderer->display(&bitmap, cliprect); + + if (m_has_psac) + m_k001604->draw_front_layer(screen, bitmap, cliprect); return 0; } @@ -2089,25 +2092,23 @@ void cobra_renderer::display(bitmap_rgb32 *bitmap, const rectangle &cliprect) { if (m_gfx_register[0] & 0x4) { - copybitmap_trans(*bitmap, *m_framebuffer, 0, 0, 0, 0, cliprect, 0); + copybitmap_trans(*bitmap, *m_framebuffer, 0, 0, cliprect.min_x, cliprect.min_y, cliprect, 0); } else { - copybitmap_trans(*bitmap, *m_backbuffer, 0, 0, 0, 0, cliprect, 0); + copybitmap_trans(*bitmap, *m_backbuffer, 0, 0, cliprect.min_x, cliprect.min_y, cliprect, 0); } } void cobra_renderer::gfx_init() { - const rectangle& visarea = screen().visible_area(); - m_gfx_gram = std::make_unique(0x40000); m_gfx_register = std::make_unique(0x3000); m_gfx_register_select = 0; float zvalue = 10000000.0f; - m_zbuffer->fill(*(int*)&zvalue, visarea); + m_zbuffer->fill(*(int*)&zvalue, m_framebuffer_size); } void cobra_renderer::gfx_exit() @@ -2214,13 +2215,11 @@ void cobra_renderer::gfx_write_reg(uint64_t data) { case 0x0000: { - const rectangle& visarea = screen().visible_area(); - - copybitmap_trans(*m_framebuffer, *m_backbuffer, 0, 0, 0, 0, visarea, 0); - m_backbuffer->fill(0xff000000, visarea); + copybitmap_trans(*m_framebuffer, *m_backbuffer, 0, 0, 0, 0, m_framebuffer_size, 0); + m_backbuffer->fill(0xff000000, m_framebuffer_size); float zvalue = 10000000.0f; - m_zbuffer->fill(*(int*)&zvalue, visarea); + m_zbuffer->fill(*(int*)&zvalue, m_framebuffer_size); break; } } @@ -2235,7 +2234,6 @@ void cobra_renderer::gfx_fifo_exec() if (cobra->m_gfx_fifo_loopback != 0) return; - const rectangle& visarea = screen().visible_area(); vertex_t vert[32]; cobra_fifo *fifo_in = cobra->m_gfxfifo_in.get(); @@ -2537,7 +2535,7 @@ void cobra_renderer::gfx_fifo_exec() render_delegate rd = render_delegate(&cobra_renderer::render_texture_scan, this); for (int i=2; i < units; i++) { - render_triangle<8>(visarea, rd, vert[i-2], vert[i-1], vert[i]); + render_triangle<8>(m_framebuffer_size, rd, vert[i-2], vert[i-1], vert[i]); } } else @@ -2545,7 +2543,7 @@ void cobra_renderer::gfx_fifo_exec() render_delegate rd = render_delegate(&cobra_renderer::render_color_scan, this); for (int i=2; i < units; i++) { - render_triangle<5>(visarea, rd, vert[i-2], vert[i-1], vert[i]); + render_triangle<5>(m_framebuffer_size, rd, vert[i-2], vert[i-1], vert[i]); } } break; @@ -2555,7 +2553,7 @@ void cobra_renderer::gfx_fifo_exec() { for (int i=0; i < units; i++) { - draw_point(visarea, vert[i], 0xffffffff); + draw_point(m_framebuffer_size, vert[i], 0xffffffff); } break; } @@ -2566,7 +2564,7 @@ void cobra_renderer::gfx_fifo_exec() { for (i=0; i < units; i+=2) { - draw_line(visarea, vert[i], vert[i+1]); + draw_line(m_framebuffer_size, vert[i], vert[i+1]); } } else // line strip @@ -3287,7 +3285,7 @@ void cobra_state::cobra(machine_config &config) m_gfxcpu->set_bus_frequency(XTAL(66'666'700)); /* Multiplier 1.5, Bus = 66MHz, Core = 100MHz */ m_gfxcpu->set_addrmap(AS_PROGRAM, &cobra_state::cobra_gfx_map); - config.set_maximum_quantum(attotime::from_hz(15005)); + config.set_maximum_quantum(attotime::from_hz(55005)); PCI_BUS_LEGACY(config, m_legacy_pci, 0, 0); m_legacy_pci->set_device(0, FUNC(cobra_state::mpc106_pci_r), FUNC(cobra_state::mpc106_pci_w)); @@ -3299,8 +3297,8 @@ void cobra_state::cobra(machine_config &config) SCREEN(config, m_screen, SCREEN_TYPE_RASTER); m_screen->set_refresh_hz(60); - m_screen->set_size(512, 400); - m_screen->set_visarea_full(); + m_screen->set_size(1024, 1024); + m_screen->set_visarea(40, 511+40, 31, 399+31); m_screen->set_screen_update(FUNC(cobra_state::screen_update_cobra)); PALETTE(config, m_palette).set_entries(65536); -- cgit v1.2.3