summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cobra.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cobra.cpp')
-rw-r--r--src/mame/drivers/cobra.cpp44
1 files 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<float, cobra_polydata, 8>(screen.machine())
, m_screen(screen)
+ , m_framebuffer_size(0, 511, 0, 399)
{
m_texture_ram = std::make_unique<uint32_t[]>(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<uint32_t[]>(0x40000);
m_gfx_register = std::make_unique<uint64_t[]>(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);