mirror of
https://github.com/holub/mame
synced 2025-07-01 08:18:59 +03:00
atlantis: Minor update (nw)
dcs: Fix sound num channel check for denver (nw) zeus2: Adjust fast fill. Use pointer for accessing device root. Other stuff. (nw) midzeus: Use new zeus2 video device for midzeus2 driver. More clean-up probably needed :( (nw)
This commit is contained in:
parent
2a16de421d
commit
e2bdb5ea34
@ -12,8 +12,8 @@
|
|||||||
/*************************************
|
/*************************************
|
||||||
* Constructor
|
* Constructor
|
||||||
*************************************/
|
*************************************/
|
||||||
zeus2_renderer::zeus2_renderer(zeus2_device &state)
|
zeus2_renderer::zeus2_renderer(zeus2_device *state)
|
||||||
: poly_manager<float, zeus2_poly_extra_data, 4, 10000>(state.machine())
|
: poly_manager<float, zeus2_poly_extra_data, 4, 10000>(state->machine())
|
||||||
, m_state(state)
|
, m_state(state)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@ -72,7 +72,7 @@ void zeus2_device::device_start()
|
|||||||
waveram[1] = auto_alloc_array(machine(), UINT32, WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12/4);
|
waveram[1] = auto_alloc_array(machine(), UINT32, WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12/4);
|
||||||
|
|
||||||
/* initialize polygon engine */
|
/* initialize polygon engine */
|
||||||
poly = auto_alloc(machine(), zeus2_renderer(*this));
|
poly = auto_alloc(machine(), zeus2_renderer(this));
|
||||||
|
|
||||||
//m_screen = machine().first_screen();
|
//m_screen = machine().first_screen();
|
||||||
m_screen = downcast<screen_device *>(machine().device("screen"));
|
m_screen = downcast<screen_device *>(machine().device("screen"));
|
||||||
@ -88,7 +88,7 @@ void zeus2_device::device_start()
|
|||||||
/* save states */
|
/* save states */
|
||||||
save_pointer(NAME(waveram[0]), WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8 / sizeof(waveram[0][0]));
|
save_pointer(NAME(waveram[0]), WAVERAM0_WIDTH * WAVERAM0_HEIGHT * 8 / sizeof(waveram[0][0]));
|
||||||
save_pointer(NAME(waveram[1]), WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12 / sizeof(waveram[1][0]));
|
save_pointer(NAME(waveram[1]), WAVERAM1_WIDTH * WAVERAM1_HEIGHT * 12 / sizeof(waveram[1][0]));
|
||||||
save_pointer(NAME(m_zeusbase), sizeof(m_zeusbase));
|
save_pointer(NAME(m_zeusbase), sizeof(m_zeusbase[0])*0x80);
|
||||||
save_item(NAME(zeus_fifo));
|
save_item(NAME(zeus_fifo));
|
||||||
save_item(NAME(zeus_fifo_words));
|
save_item(NAME(zeus_fifo_words));
|
||||||
save_item(NAME(zeus_cliprect.min_x));
|
save_item(NAME(zeus_cliprect.min_x));
|
||||||
@ -98,6 +98,10 @@ void zeus2_device::device_start()
|
|||||||
save_item(NAME(zeus_matrix));
|
save_item(NAME(zeus_matrix));
|
||||||
save_item(NAME(zeus_point));
|
save_item(NAME(zeus_point));
|
||||||
save_item(NAME(zeus_texbase));
|
save_item(NAME(zeus_texbase));
|
||||||
|
save_item(NAME(m_fill_dark_color));
|
||||||
|
save_item(NAME(m_fill_dark_depth));
|
||||||
|
save_item(NAME(m_fill_light_color));
|
||||||
|
save_item(NAME(m_fill_light_depth));
|
||||||
}
|
}
|
||||||
|
|
||||||
void zeus2_device::device_reset()
|
void zeus2_device::device_reset()
|
||||||
@ -109,6 +113,10 @@ void zeus2_device::device_reset()
|
|||||||
texel_width = 256;
|
texel_width = 256;
|
||||||
zeus_renderbase = waveram[1];
|
zeus_renderbase = waveram[1];
|
||||||
zeus_fifo_words = 0;
|
zeus_fifo_words = 0;
|
||||||
|
m_fill_dark_color = 0;
|
||||||
|
m_fill_dark_depth = 0;
|
||||||
|
m_fill_light_color = 0;
|
||||||
|
m_fill_light_depth = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void zeus2_device::device_stop()
|
void zeus2_device::device_stop()
|
||||||
@ -209,7 +217,7 @@ if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Z
|
|||||||
if (machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (machine().input().code_pressed(KEYCODE_RIGHT)) ; }
|
if (machine().input().code_pressed(KEYCODE_RIGHT) && texel_width < 512) { texel_width <<= 1; while (machine().input().code_pressed(KEYCODE_RIGHT)) ; }
|
||||||
|
|
||||||
if (yoffs < 0) yoffs = 0;
|
if (yoffs < 0) yoffs = 0;
|
||||||
if (1)
|
if (0)
|
||||||
base = (const UINT64 *)waveram0_ptr_from_expanded_addr(yoffs << 16);
|
base = (const UINT64 *)waveram0_ptr_from_expanded_addr(yoffs << 16);
|
||||||
else
|
else
|
||||||
base = (const UINT64 *)waveram1_ptr_from_expanded_addr(yoffs << 16);
|
base = (const UINT64 *)waveram1_ptr_from_expanded_addr(yoffs << 16);
|
||||||
@ -220,7 +228,7 @@ if (machine().input().code_pressed(KEYCODE_DOWN)) { zbase -= 1.0f; popmessage("Z
|
|||||||
UINT32 *dest = &bitmap.pix32(y);
|
UINT32 *dest = &bitmap.pix32(y);
|
||||||
for (x = cliprect.min_x; x <= cliprect.max_x; x++)
|
for (x = cliprect.min_x; x <= cliprect.max_x; x++)
|
||||||
{
|
{
|
||||||
if (1) {
|
if (0) {
|
||||||
UINT8 tex = get_texel_8bit(base, y, x, texel_width);
|
UINT8 tex = get_texel_8bit(base, y, x, texel_width);
|
||||||
dest[x] = (tex << 16) | (tex << 8) | tex;
|
dest[x] = (tex << 16) | (tex << 8) | tex;
|
||||||
}
|
}
|
||||||
@ -403,12 +411,12 @@ void zeus2_device::zeus2_register_update(offs_t offset, UINT32 oldval, int logit
|
|||||||
rectangle visarea((m_zeusbase[0x33] >> 16), htotal - 1, 0, (m_zeusbase[0x35] & 0xffff)<< m_yScale);
|
rectangle visarea((m_zeusbase[0x33] >> 16), htotal - 1, 0, (m_zeusbase[0x35] & 0xffff)<< m_yScale);
|
||||||
if (htotal > 0 && vtotal > 0 && visarea.min_x < visarea.max_x && visarea.max_y < vtotal)
|
if (htotal > 0 && vtotal > 0 && visarea.min_x < visarea.max_x && visarea.max_y < vtotal)
|
||||||
{
|
{
|
||||||
m_screen->configure(htotal, vtotal, visarea, HZ_TO_ATTOSECONDS((double)MIDZEUS_VIDEO_CLOCK / 4.0 / (htotal * vtotal)));
|
m_screen->configure(htotal, vtotal, visarea, HZ_TO_ATTOSECONDS((double)ZEUS2_VIDEO_CLOCK / 4.0 / (htotal * vtotal)));
|
||||||
zeus_cliprect = visarea;
|
zeus_cliprect = visarea;
|
||||||
zeus_cliprect.max_x -= zeus_cliprect.min_x;
|
zeus_cliprect.max_x -= zeus_cliprect.min_x;
|
||||||
zeus_cliprect.min_x = 0;
|
zeus_cliprect.min_x = 0;
|
||||||
// Startup vblank timer
|
// Startup vblank timer
|
||||||
vblank_timer->adjust(attotime::from_hz(30000000));
|
vblank_timer->adjust(attotime::from_usec(100));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -494,16 +502,37 @@ void zeus2_device::zeus2_register_update(offs_t offset, UINT32 oldval, int logit
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x50:
|
case 0x50:
|
||||||
if ((m_zeusbase[0x50] & 0xffff0000) == 0x00980000) {
|
if (m_zeusbase[0x50] == 0x00510000) {
|
||||||
|
// Set ram info???
|
||||||
|
if (m_zeusbase[0x51] == 0x00400000) {
|
||||||
|
m_fill_dark_color = m_zeusbase[0x58];
|
||||||
|
m_fill_dark_depth = m_zeusbase[0x5a] & 0xffff;
|
||||||
|
}
|
||||||
|
if (m_zeusbase[0x51] == 0x00200000) {
|
||||||
|
m_fill_light_color = m_zeusbase[0x58];
|
||||||
|
m_fill_light_depth = m_zeusbase[0x5a] & 0xffff;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (1 && (m_zeusbase[0x50] & 0x00080000) && (m_zeusbase[0x50] & 0xffff)) {
|
||||||
// Fast fill
|
// Fast fill
|
||||||
// Unknow what the exact bit fields are, this is a just a guess
|
// Unknown what the exact bit fields are, this is a just a guess
|
||||||
UINT32 lastRow = (((m_zeusbase[0x50] >> 8) & 0xff) << 3) | 0x7;
|
// Atlantis: 0x00983FFF => clear entire frame buffer, 0x00981FFF => clear one frame
|
||||||
|
// crusnexo: 0x007831FF => clear one frame
|
||||||
|
// thegrid: 0x008831FF => clear one frame
|
||||||
|
//UINT32 lastRow = (((m_zeusbase[0x50] >> 8) & 0xff) << 3) | 0x7;
|
||||||
|
UINT32 lastRow = (((m_zeusbase[0x50] >> 8) & 0xff) << 3) | 0x3;
|
||||||
UINT32 lastCol = (((m_zeusbase[0x50] >> 0) & 0xff) << 2) | 0x3;
|
UINT32 lastCol = (((m_zeusbase[0x50] >> 0) & 0xff) << 2) | 0x3;
|
||||||
UINT32 fillColor = m_zeusbase[0x5f]; // 0x004a4a4a;
|
UINT32 fillColor = m_fill_dark_color; // Not sure how to select
|
||||||
void *base = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]);
|
UINT16 fillDepth = m_fill_dark_depth; // Not sure how to select
|
||||||
|
// Not sure how to select
|
||||||
|
//void *base = waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]);
|
||||||
|
void *base = (m_zeusbase[0x50] & 0x800000) ? waveram1_ptr_from_expanded_addr(m_zeusbase[0x51]) : zeus_renderbase;
|
||||||
for (int y = 0; y <= lastRow; y++)
|
for (int y = 0; y <= lastRow; y++)
|
||||||
for (int x = 0; x <= lastCol; x++)
|
for (int x = 0; x <= lastCol; x++) {
|
||||||
WAVERAM_WRITEPIX(base, y, x, fillColor);
|
WAVERAM_WRITEPIX(base, y, x, fillColor);
|
||||||
|
WAVERAM_WRITEDEPTH(base, y, x, fillDepth);
|
||||||
|
}
|
||||||
|
//waveram_plot_depth(y, x, fillColor, fillDepth);
|
||||||
}
|
}
|
||||||
else if ((m_zeusbase[0x5e] >> 16) != 0xF208) {
|
else if ((m_zeusbase[0x5e] >> 16) != 0xF208) {
|
||||||
/* If 0x5e==0xf20a0000 (atlantis) or 0xf20d0000 (the grid) then process the read/write now */
|
/* If 0x5e==0xf20a0000 (atlantis) or 0xf20d0000 (the grid) then process the read/write now */
|
||||||
@ -713,7 +742,7 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
if (numwords < 2)
|
if (numwords < 2)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (log_fifo)
|
if (log_fifo)
|
||||||
log_fifo_command(data, numwords, " -- reg32\n");
|
log_fifo_command(data, numwords, " -- reg32");
|
||||||
if (((data[0] >> 16) & 0x7f) != 0x08)
|
if (((data[0] >> 16) & 0x7f) != 0x08)
|
||||||
zeus2_register32_w((data[0] >> 16) & 0x7f, data[1], log_fifo);
|
zeus2_register32_w((data[0] >> 16) & 0x7f, data[1], log_fifo);
|
||||||
break;
|
break;
|
||||||
@ -748,7 +777,7 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
if (log_fifo)
|
if (log_fifo)
|
||||||
{
|
{
|
||||||
log_fifo_command(data, numwords, "\n");
|
log_fifo_command(data, numwords, "\n");
|
||||||
logerror("\n\t\tmatrix ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f )\n\t\tvector %8.2f %8.2f %8.5f\n",
|
logerror("\t\tmatrix ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f ) ( %8.2f %8.2f %8.2f )\n\t\tvector %8.2f %8.2f %8.5f\n",
|
||||||
(double) zeus_matrix[0][0], (double) zeus_matrix[0][1], (double) zeus_matrix[0][2],
|
(double) zeus_matrix[0][0], (double) zeus_matrix[0][1], (double) zeus_matrix[0][2],
|
||||||
(double) zeus_matrix[1][0], (double) zeus_matrix[1][1], (double) zeus_matrix[1][2],
|
(double) zeus_matrix[1][0], (double) zeus_matrix[1][1], (double) zeus_matrix[1][2],
|
||||||
(double) zeus_matrix[2][0], (double) zeus_matrix[2][1], (double) zeus_matrix[2][2],
|
(double) zeus_matrix[2][0], (double) zeus_matrix[2][1], (double) zeus_matrix[2][2],
|
||||||
@ -758,8 +787,10 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
// 0x14: ?? atlantis
|
||||||
/* 0x15: set point only (thegrid) */
|
/* 0x15: set point only (thegrid) */
|
||||||
/* 0x16: set point only (crusnexo) */
|
/* 0x16: set point only (crusnexo) */
|
||||||
|
case 0x14:
|
||||||
case 0x15:
|
case 0x15:
|
||||||
case 0x16:
|
case 0x16:
|
||||||
if (numwords < 4)
|
if (numwords < 4)
|
||||||
@ -773,7 +804,7 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
if (log_fifo)
|
if (log_fifo)
|
||||||
{
|
{
|
||||||
log_fifo_command(data, numwords, "\n");
|
log_fifo_command(data, numwords, "\n");
|
||||||
logerror("\n\t\tvector %8.2f %8.2f %8.5f\n",
|
logerror("\t\tvector %8.2f %8.2f %8.5f\n",
|
||||||
(double) zeus_point[0],
|
(double) zeus_point[0],
|
||||||
(double) zeus_point[1],
|
(double) zeus_point[1],
|
||||||
(double) zeus_point[2]);
|
(double) zeus_point[2]);
|
||||||
@ -799,11 +830,13 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
}
|
}
|
||||||
{
|
{
|
||||||
/* not right -- just a hack */
|
/* not right -- just a hack */
|
||||||
|
if (0) {
|
||||||
int x, y;
|
int x, y;
|
||||||
for (y = zeus_cliprect.min_y; y <= zeus_cliprect.max_y; y++)
|
for (y = zeus_cliprect.min_y; y <= zeus_cliprect.max_y; y++)
|
||||||
for (x = zeus_cliprect.min_x; x <= zeus_cliprect.max_x; x++)
|
for (x = zeus_cliprect.min_x; x <= zeus_cliprect.max_x; x++)
|
||||||
waveram_plot_depth(y, x, 0, 0x7fff);
|
waveram_plot_depth(y, x, 0, 0x7fff);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* 0x23: render model in waveram (thegrid) */
|
/* 0x23: render model in waveram (thegrid) */
|
||||||
@ -815,8 +848,9 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
if (numwords < 2)
|
if (numwords < 2)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (log_fifo)
|
if (log_fifo)
|
||||||
log_fifo_command(data, numwords, "\n");
|
log_fifo_command(data, numwords, "");
|
||||||
zeus2_draw_model(data[1], data[0] & 0xffff, log_fifo);
|
//zeus2_draw_model(data[1], data[0] & 0xffff, log_fifo);
|
||||||
|
zeus2_draw_model(data[1], data[0] & 0x3fff, log_fifo);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
// 0x2d; ??? (atlantis)
|
// 0x2d; ??? (atlantis)
|
||||||
@ -840,12 +874,11 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
/* 0x38: direct render quad (crusnexo) */
|
/* 0x38: direct render quad (crusnexo) */
|
||||||
// 0x38: 3 words?? (atlantis)
|
// 0x38: ?? (atlantis)
|
||||||
case 0x38:
|
case 0x38:
|
||||||
//if (numwords < 12)
|
if (numwords < 12)
|
||||||
if (numwords < 3)
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
if (0 && log_fifo)
|
if (log_fifo)
|
||||||
log_fifo_command(data, numwords, "\n");
|
log_fifo_command(data, numwords, "\n");
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -858,7 +891,7 @@ int zeus2_device::zeus2_fifo_process(const UINT32 *data, int numwords)
|
|||||||
default:
|
default:
|
||||||
if (data[0] != 0x2c0)
|
if (data[0] != 0x2c0)
|
||||||
{
|
{
|
||||||
//printf("Unknown command %08X\n", data[0]);
|
printf("Unknown command %08X\n", data[0]);
|
||||||
if (log_fifo)
|
if (log_fifo)
|
||||||
log_fifo_command(data, numwords, "\n");
|
log_fifo_command(data, numwords, "\n");
|
||||||
}
|
}
|
||||||
@ -973,8 +1006,8 @@ void zeus2_device::zeus2_draw_model(UINT32 baseaddr, UINT16 count, int logit)
|
|||||||
*************************************/
|
*************************************/
|
||||||
void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit)
|
void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit)
|
||||||
{
|
{
|
||||||
poly_vertex clipvert[8];
|
z2_poly_vertex clipvert[8];
|
||||||
poly_vertex vert[4];
|
z2_poly_vertex vert[4];
|
||||||
// float uscale, vscale;
|
// float uscale, vscale;
|
||||||
float maxy, maxx;
|
float maxy, maxx;
|
||||||
// int val1, val2, texwshift;
|
// int val1, val2, texwshift;
|
||||||
@ -985,7 +1018,7 @@ void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, i
|
|||||||
int texmode = texoffs & 0xffff;
|
int texmode = texoffs & 0xffff;
|
||||||
|
|
||||||
if (logit)
|
if (logit)
|
||||||
m_state.logerror("quad\n");
|
m_state->logerror("quad\n");
|
||||||
|
|
||||||
if (machine().input().code_pressed(KEYCODE_Q) && (texoffs & 0xffff) == 0x119) return;
|
if (machine().input().code_pressed(KEYCODE_Q) && (texoffs & 0xffff) == 0x119) return;
|
||||||
if (machine().input().code_pressed(KEYCODE_E) && (texoffs & 0xffff) == 0x01d) return;
|
if (machine().input().code_pressed(KEYCODE_E) && (texoffs & 0xffff) == 0x01d) return;
|
||||||
@ -1094,17 +1127,17 @@ void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, i
|
|||||||
float y = vert[i].y;
|
float y = vert[i].y;
|
||||||
float z = vert[i].p[0];
|
float z = vert[i].p[0];
|
||||||
|
|
||||||
vert[i].x = x * m_state.zeus_matrix[0][0] + y * m_state.zeus_matrix[0][1] + z * m_state.zeus_matrix[0][2] + m_state.zeus_point[0];
|
vert[i].x = x * m_state->zeus_matrix[0][0] + y * m_state->zeus_matrix[0][1] + z * m_state->zeus_matrix[0][2] + m_state->zeus_point[0];
|
||||||
vert[i].y = x * m_state.zeus_matrix[1][0] + y * m_state.zeus_matrix[1][1] + z * m_state.zeus_matrix[1][2] + m_state.zeus_point[1];
|
vert[i].y = x * m_state->zeus_matrix[1][0] + y * m_state->zeus_matrix[1][1] + z * m_state->zeus_matrix[1][2] + m_state->zeus_point[1];
|
||||||
vert[i].p[0] = x * m_state.zeus_matrix[2][0] + y * m_state.zeus_matrix[2][1] + z * m_state.zeus_matrix[2][2] + m_state.zeus_point[2];
|
vert[i].p[0] = x * m_state->zeus_matrix[2][0] + y * m_state->zeus_matrix[2][1] + z * m_state->zeus_matrix[2][2] + m_state->zeus_point[2];
|
||||||
vert[i].p[0] += m_state.zbase;
|
vert[i].p[0] += m_state->zbase;
|
||||||
vert[i].p[2] += texoffs >> 16;
|
vert[i].p[2] += texoffs >> 16;
|
||||||
vert[i].p[1] *= 256.0f;
|
vert[i].p[1] *= 256.0f;
|
||||||
vert[i].p[2] *= 256.0f;
|
vert[i].p[2] *= 256.0f;
|
||||||
|
|
||||||
if (logit)
|
if (logit)
|
||||||
{
|
{
|
||||||
m_state.logerror("\t\t(%f,%f,%f) (%02X,%02X)\n",
|
m_state->logerror("\t\t(%f,%f,%f) (%02X,%02X)\n",
|
||||||
(double)vert[i].x, (double)vert[i].y, (double)vert[i].p[0],
|
(double)vert[i].x, (double)vert[i].y, (double)vert[i].p[0],
|
||||||
(int)(vert[i].p[1] / 256.0f), (int)(vert[i].p[2] / 256.0f));
|
(int)(vert[i].p[1] / 256.0f), (int)(vert[i].p[2] / 256.0f));
|
||||||
}
|
}
|
||||||
@ -1131,7 +1164,7 @@ void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, i
|
|||||||
maxx = MAX(maxx, clipvert[i].x);
|
maxx = MAX(maxx, clipvert[i].x);
|
||||||
maxy = MAX(maxy, clipvert[i].y);
|
maxy = MAX(maxy, clipvert[i].y);
|
||||||
if (logit)
|
if (logit)
|
||||||
m_state.logerror("\t\t\tTranslated=(%f,%f)\n", (double)clipvert[i].x, (double)clipvert[i].y);
|
m_state->logerror("\t\t\tTranslated=(%f,%f)\n", (double)clipvert[i].x, (double)clipvert[i].y);
|
||||||
}
|
}
|
||||||
for (i = 0; i < numverts; i++)
|
for (i = 0; i < numverts; i++)
|
||||||
{
|
{
|
||||||
@ -1168,6 +1201,11 @@ void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, i
|
|||||||
extra.texwidth = 64;
|
extra.texwidth = 64;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case 0x000: // thegrid guess
|
||||||
|
case 0x120: // thegrid guess
|
||||||
|
extra.texwidth = 32;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
static UINT8 hits[0x10000];
|
static UINT8 hits[0x10000];
|
||||||
@ -1184,19 +1222,19 @@ void zeus2_renderer::zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, i
|
|||||||
extra.zoffset = 0;//m_zeusbase[0x7e] >> 16;
|
extra.zoffset = 0;//m_zeusbase[0x7e] >> 16;
|
||||||
extra.alpha = 0;//m_zeusbase[0x4e];
|
extra.alpha = 0;//m_zeusbase[0x4e];
|
||||||
extra.transcolor = 0x100;//((databuffer[1] >> 16) & 1) ? 0 : 0x100;
|
extra.transcolor = 0x100;//((databuffer[1] >> 16) & 1) ? 0 : 0x100;
|
||||||
extra.texbase = WAVERAM_BLOCK0_EXT(m_state.zeus_texbase);
|
extra.texbase = WAVERAM_BLOCK0_EXT(m_state->zeus_texbase);
|
||||||
extra.palbase = m_state.waveram0_ptr_from_expanded_addr(m_state.m_zeusbase[0x41]);
|
extra.palbase = m_state->waveram0_ptr_from_expanded_addr(m_state->m_zeusbase[0x41]);
|
||||||
|
|
||||||
// Note: Before being converted to the "poly.h" interface, this used to call the polylgcy function
|
// Note: Before being converted to the "poly.h" interface, this used to call the polylgcy function
|
||||||
// poly_render_quad_fan. The behavior seems to be the same as it once was after a few short
|
// poly_render_quad_fan. The behavior seems to be the same as it once was after a few short
|
||||||
// tests, but the (numverts == 5) statement below may actually be a quad fan instead of a 5-sided
|
// tests, but the (numverts == 5) statement below may actually be a quad fan instead of a 5-sided
|
||||||
// polygon.
|
// polygon.
|
||||||
if (numverts == 3)
|
if (numverts == 3)
|
||||||
render_triangle(m_state.zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert[0], clipvert[1], clipvert[2]);
|
render_triangle(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert[0], clipvert[1], clipvert[2]);
|
||||||
else if (numverts == 4)
|
else if (numverts == 4)
|
||||||
render_polygon<4>(m_state.zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert);
|
render_polygon<4>(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert);
|
||||||
else if (numverts == 5)
|
else if (numverts == 5)
|
||||||
render_polygon<5>(m_state.zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert);
|
render_polygon<5>(m_state->zeus_cliprect, render_delegate(FUNC(zeus2_renderer::render_poly_8bit), this), 4, clipvert);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1223,19 +1261,20 @@ void zeus2_renderer::render_poly_8bit(INT32 scanline, const extent_t& extent, co
|
|||||||
|
|
||||||
for (x = extent.startx; x < extent.stopx; x++)
|
for (x = extent.startx; x < extent.stopx; x++)
|
||||||
{
|
{
|
||||||
UINT16 *depthptr = WAVERAM_PTRDEPTH(m_state.zeus_renderbase, scanline, x);
|
UINT16 *depthptr = WAVERAM_PTRDEPTH(m_state->zeus_renderbase, scanline, x);
|
||||||
INT32 depth = (curz >> 16) + object.zoffset;
|
INT32 depth = (curz >> 16) + object.zoffset;
|
||||||
if (depth > 0x7fff) depth = 0x7fff;
|
//if (depth > 0x7fff) depth = 0x7fff;
|
||||||
|
if (depth > 0xffff) depth = 0xffff;
|
||||||
if (depth >= 0 && depth <= *depthptr)
|
if (depth >= 0 && depth <= *depthptr)
|
||||||
{
|
{
|
||||||
int u0 = (curu >> 8);// & (texwidth - 1);
|
int u0 = (curu >> 8);// & (texwidth - 1);
|
||||||
int v0 = (curv >> 8);// & 255;
|
int v0 = (curv >> 8);// & 255;
|
||||||
int u1 = (u0 + 1);
|
int u1 = (u0 + 1);
|
||||||
int v1 = (v0 + 1);
|
int v1 = (v0 + 1);
|
||||||
UINT8 texel0 = m_state.get_texel_8bit(texbase, v0, u0, texwidth);
|
UINT8 texel0 = m_state->get_texel_8bit(texbase, v0, u0, texwidth);
|
||||||
UINT8 texel1 = m_state.get_texel_8bit(texbase, v0, u1, texwidth);
|
UINT8 texel1 = m_state->get_texel_8bit(texbase, v0, u1, texwidth);
|
||||||
UINT8 texel2 = m_state.get_texel_8bit(texbase, v1, u0, texwidth);
|
UINT8 texel2 = m_state->get_texel_8bit(texbase, v1, u0, texwidth);
|
||||||
UINT8 texel3 = m_state.get_texel_8bit(texbase, v1, u1, texwidth);
|
UINT8 texel3 = m_state->get_texel_8bit(texbase, v1, u1, texwidth);
|
||||||
if (texel0 != transcolor)
|
if (texel0 != transcolor)
|
||||||
{
|
{
|
||||||
UINT32 color0 = WAVERAM_READ16(palbase, texel0);
|
UINT32 color0 = WAVERAM_READ16(palbase, texel0);
|
||||||
@ -1247,7 +1286,7 @@ void zeus2_renderer::render_poly_8bit(INT32 scanline, const extent_t& extent, co
|
|||||||
color2 = ((color2 & 0x7c00) << 9) | ((color2 & 0x3e0) << 6) | ((color2 & 0x1f) << 3);
|
color2 = ((color2 & 0x7c00) << 9) | ((color2 & 0x3e0) << 6) | ((color2 & 0x1f) << 3);
|
||||||
color3 = ((color3 & 0x7c00) << 9) | ((color3 & 0x3e0) << 6) | ((color3 & 0x1f) << 3);
|
color3 = ((color3 & 0x7c00) << 9) | ((color3 & 0x3e0) << 6) | ((color3 & 0x1f) << 3);
|
||||||
rgb_t filtered = rgbaint_t::bilinear_filter(color0, color1, color2, color3, curu, curv);
|
rgb_t filtered = rgbaint_t::bilinear_filter(color0, color1, color2, color3, curu, curv);
|
||||||
WAVERAM_WRITEPIX(m_state.zeus_renderbase, scanline, x, filtered);
|
WAVERAM_WRITEPIX(m_state->zeus_renderbase, scanline, x, filtered);
|
||||||
*depthptr = depth;
|
*depthptr = depth;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1266,7 +1305,7 @@ void zeus2_renderer::render_poly_8bit(INT32 scanline, const extent_t& extent, co
|
|||||||
void zeus2_device::log_fifo_command(const UINT32 *data, int numwords, const char *suffix)
|
void zeus2_device::log_fifo_command(const UINT32 *data, int numwords, const char *suffix)
|
||||||
{
|
{
|
||||||
int wordnum;
|
int wordnum;
|
||||||
|
std::string errorStr;
|
||||||
logerror("Zeus cmd %02X :", data[0] >> 24);
|
logerror("Zeus cmd %02X :", data[0] >> 24);
|
||||||
for (wordnum = 0; wordnum < numwords; wordnum++)
|
for (wordnum = 0; wordnum < numwords; wordnum++)
|
||||||
logerror(" %08X", data[wordnum]);
|
logerror(" %08X", data[wordnum]);
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
/*************************************
|
/*************************************
|
||||||
* Constants
|
* Constants
|
||||||
*************************************/
|
*************************************/
|
||||||
#define MIDZEUS_VIDEO_CLOCK XTAL_66_6667MHz
|
#define ZEUS2_VIDEO_CLOCK XTAL_66_6667MHz
|
||||||
|
|
||||||
#define DUMP_WAVE_RAM 0
|
#define DUMP_WAVE_RAM 0
|
||||||
#define TRACK_REG_USAGE 0
|
#define TRACK_REG_USAGE 0
|
||||||
@ -51,8 +51,8 @@ struct zeus2_poly_extra_data
|
|||||||
|
|
||||||
#define WAVERAM_BLOCK0(blocknum) ((void *)((UINT8 *)waveram[0] + 8 * (blocknum)))
|
#define WAVERAM_BLOCK0(blocknum) ((void *)((UINT8 *)waveram[0] + 8 * (blocknum)))
|
||||||
#define WAVERAM_BLOCK1(blocknum) ((void *)((UINT8 *)waveram[1] + 12 * (blocknum)))
|
#define WAVERAM_BLOCK1(blocknum) ((void *)((UINT8 *)waveram[1] + 12 * (blocknum)))
|
||||||
#define WAVERAM_BLOCK0_EXT(blocknum) ((void *)((UINT8 *)m_state.waveram[0] + 8 * (blocknum)))
|
#define WAVERAM_BLOCK0_EXT(blocknum) ((void *)((UINT8 *)m_state->waveram[0] + 8 * (blocknum)))
|
||||||
#define WAVERAM_BLOCK1_EXT(blocknum) ((void *)((UINT8 *)m_state.waveram[1] + 12 * (blocknum)))
|
#define WAVERAM_BLOCK1_EXT(blocknum) ((void *)((UINT8 *)m_state->waveram[1] + 12 * (blocknum)))
|
||||||
|
|
||||||
#define WAVERAM_PTR8(base, bytenum) ((UINT8 *)(base) + BYTE4_XOR_LE(bytenum))
|
#define WAVERAM_PTR8(base, bytenum) ((UINT8 *)(base) + BYTE4_XOR_LE(bytenum))
|
||||||
#define WAVERAM_READ8(base, bytenum) (*WAVERAM_PTR8(base, bytenum))
|
#define WAVERAM_READ8(base, bytenum) (*WAVERAM_PTR8(base, bytenum))
|
||||||
@ -85,17 +85,17 @@ class zeus2_device;
|
|||||||
class zeus2_renderer : public poly_manager<float, zeus2_poly_extra_data, 4, 10000>
|
class zeus2_renderer : public poly_manager<float, zeus2_poly_extra_data, 4, 10000>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
zeus2_renderer(zeus2_device &state);
|
zeus2_renderer(zeus2_device *state);
|
||||||
|
|
||||||
void render_poly_8bit(INT32 scanline, const extent_t& extent, const zeus2_poly_extra_data& object, int threadid);
|
void render_poly_8bit(INT32 scanline, const extent_t& extent, const zeus2_poly_extra_data& object, int threadid);
|
||||||
|
|
||||||
void zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit);
|
void zeus2_draw_quad(const UINT32 *databuffer, UINT32 texoffs, int logit);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
zeus2_device& m_state;
|
zeus2_device* m_state;
|
||||||
};
|
};
|
||||||
typedef zeus2_renderer::vertex_t poly_vertex;
|
typedef zeus2_renderer::vertex_t z2_poly_vertex;
|
||||||
typedef zeus2_renderer::extent_t poly_extent;
|
typedef zeus2_renderer::extent_t z2_poly_extent;
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
* Zeus2 Video Device
|
* Zeus2 Video Device
|
||||||
@ -124,7 +124,7 @@ public:
|
|||||||
devcb_write_line m_vblank;
|
devcb_write_line m_vblank;
|
||||||
devcb_write_line m_irq;
|
devcb_write_line m_irq;
|
||||||
|
|
||||||
UINT32 m_zeusbase[400];
|
UINT32 m_zeusbase[0x80];
|
||||||
|
|
||||||
zeus2_renderer* poly;
|
zeus2_renderer* poly;
|
||||||
|
|
||||||
@ -171,6 +171,11 @@ private:
|
|||||||
UINT32 zeus_fifo[20];
|
UINT32 zeus_fifo[20];
|
||||||
UINT8 zeus_fifo_words;
|
UINT8 zeus_fifo_words;
|
||||||
|
|
||||||
|
UINT32 m_fill_dark_color;
|
||||||
|
UINT16 m_fill_dark_depth;
|
||||||
|
UINT32 m_fill_light_color;
|
||||||
|
UINT16 m_fill_light_depth;
|
||||||
|
|
||||||
#if TRACK_REG_USAGE
|
#if TRACK_REG_USAGE
|
||||||
struct reg_info
|
struct reg_info
|
||||||
{
|
{
|
||||||
@ -216,7 +221,7 @@ public:
|
|||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
#ifdef UNUSED_FUNCTION
|
#ifdef UNUSED_FUNCTION
|
||||||
inline void waveram_plot(int y, int x, UINT32 color)
|
inline void WAVERAM_plot(int y, int x, UINT32 color)
|
||||||
{
|
{
|
||||||
if (zeus_cliprect.contains(x, y))
|
if (zeus_cliprect.contains(x, y))
|
||||||
WAVERAM_WRITEPIX(zeus_renderbase, y, x, color);
|
WAVERAM_WRITEPIX(zeus_renderbase, y, x, color);
|
||||||
|
@ -1400,7 +1400,7 @@ WRITE16_MEMBER( dcs_audio_device::denver_w )
|
|||||||
m_dmadac[chan] = subdevice<dmadac_sound_device>(buffer);
|
m_dmadac[chan] = subdevice<dmadac_sound_device>(buffer);
|
||||||
}
|
}
|
||||||
dmadac_enable(&m_dmadac[0], m_channels, enable);
|
dmadac_enable(&m_dmadac[0], m_channels, enable);
|
||||||
if (m_channels < 6)
|
if (m_channels <= 6)
|
||||||
dmadac_enable(&m_dmadac[m_channels], 6 - m_channels, FALSE);
|
dmadac_enable(&m_dmadac[m_channels], 6 - m_channels, FALSE);
|
||||||
recompute_sample_rate();
|
recompute_sample_rate();
|
||||||
}
|
}
|
||||||
|
@ -44,8 +44,6 @@
|
|||||||
#include "machine/pci9050.h"
|
#include "machine/pci9050.h"
|
||||||
#include "machine/pci-ide.h"
|
#include "machine/pci-ide.h"
|
||||||
#include "video/zeus2.h"
|
#include "video/zeus2.h"
|
||||||
#include "includes/midzeus.h"
|
|
||||||
#include "includes/midzeus2.h"
|
|
||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
#include "coreutil.h"
|
#include "coreutil.h"
|
||||||
|
|
||||||
@ -475,7 +473,7 @@ WRITE_LINE_MEMBER(atlantis_state::vblank_irq)
|
|||||||
|
|
||||||
WRITE_LINE_MEMBER(atlantis_state::zeus_irq)
|
WRITE_LINE_MEMBER(atlantis_state::zeus_irq)
|
||||||
{
|
{
|
||||||
logerror("%s: atlantis_state::zeus_irq state = %i\n", machine().describe_context(), state);
|
//logerror("%s: atlantis_state::zeus_irq state = %i\n", machine().describe_context(), state);
|
||||||
if (state) {
|
if (state) {
|
||||||
board_ctrl[CTRL_STATUS] |= (1 << ZEUS_IRQ_SHIFT);
|
board_ctrl[CTRL_STATUS] |= (1 << ZEUS_IRQ_SHIFT);
|
||||||
update_asic_irq();
|
update_asic_irq();
|
||||||
@ -819,12 +817,12 @@ static MACHINE_CONFIG_START( mwskins, atlantis_state )
|
|||||||
MCFG_IDE_PCI_IRQ_HANDLER(DEVWRITELINE(":", atlantis_state, ide_irq))
|
MCFG_IDE_PCI_IRQ_HANDLER(DEVWRITELINE(":", atlantis_state, ide_irq))
|
||||||
|
|
||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_DEVICE_ADD("zeus2", ZEUS2, MIDZEUS_VIDEO_CLOCK)
|
MCFG_DEVICE_ADD("zeus2", ZEUS2, ZEUS2_VIDEO_CLOCK)
|
||||||
MCFG_ZEUS2_IRQ_CB(WRITELINE(atlantis_state, zeus_irq))
|
MCFG_ZEUS2_IRQ_CB(WRITELINE(atlantis_state, zeus_irq))
|
||||||
MCFG_ZEUS2_VBLANK_CB(WRITELINE(atlantis_state, vblank_irq))
|
MCFG_ZEUS2_VBLANK_CB(WRITELINE(atlantis_state, vblank_irq))
|
||||||
|
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_RAW_PARAMS(MIDZEUS_VIDEO_CLOCK / 4, 634, 0, 368, 560, 0, 512)
|
MCFG_SCREEN_RAW_PARAMS(ZEUS2_VIDEO_CLOCK / 8, 529, 0, 400, 278, 0, 256)
|
||||||
MCFG_SCREEN_UPDATE_DEVICE("zeus2", zeus2_device, screen_update)
|
MCFG_SCREEN_UPDATE_DEVICE("zeus2", zeus2_device, screen_update)
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
|
@ -37,6 +37,7 @@ The Grid v1.2 10/18/2000
|
|||||||
#include "machine/nvram.h"
|
#include "machine/nvram.h"
|
||||||
|
|
||||||
#include "crusnexo.lh"
|
#include "crusnexo.lh"
|
||||||
|
#include "video/zeus2.h"
|
||||||
|
|
||||||
|
|
||||||
#define CPU_CLOCK XTAL_60MHz
|
#define CPU_CLOCK XTAL_60MHz
|
||||||
@ -114,6 +115,10 @@ INTERRUPT_GEN_MEMBER(midzeus_state::display_irq)
|
|||||||
machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(midzeus_state::display_irq_off),this));
|
machine().scheduler().timer_set(attotime::from_hz(30000000), timer_expired_delegate(FUNC(midzeus_state::display_irq_off),this));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITE_LINE_MEMBER(midzeus2_state::zeus_irq)
|
||||||
|
{
|
||||||
|
m_maincpu->set_input_line(2, ASSERT_LINE);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
@ -575,7 +580,7 @@ static ADDRESS_MAP_START( zeus2_map, AS_PROGRAM, 32, midzeus2_state )
|
|||||||
AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_SHARE("ram_base")
|
AM_RANGE(0x000000, 0x03ffff) AM_RAM AM_SHARE("ram_base")
|
||||||
AM_RANGE(0x400000, 0x43ffff) AM_RAM
|
AM_RANGE(0x400000, 0x43ffff) AM_RAM
|
||||||
AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_SHARE("tms32031_ctl")
|
AM_RANGE(0x808000, 0x80807f) AM_READWRITE(tms32031_control_r, tms32031_control_w) AM_SHARE("tms32031_ctl")
|
||||||
AM_RANGE(0x880000, 0x88007f) AM_READWRITE(zeus2_r, zeus2_w) AM_SHARE("zeusbase")
|
AM_RANGE(0x880000, 0x88007f) AM_DEVREADWRITE("zeus2", zeus2_device, zeus2_r, zeus2_w)
|
||||||
AM_RANGE(0x8a0000, 0x8a003f) AM_READWRITE(linkram_r, linkram_w) AM_SHARE("linkram")
|
AM_RANGE(0x8a0000, 0x8a003f) AM_READWRITE(linkram_r, linkram_w) AM_SHARE("linkram")
|
||||||
AM_RANGE(0x8d0000, 0x8d000a) AM_READWRITE(bitlatches_r, bitlatches_w)
|
AM_RANGE(0x8d0000, 0x8d000a) AM_READWRITE(bitlatches_r, bitlatches_w)
|
||||||
AM_RANGE(0x900000, 0x91ffff) AM_READWRITE(zpram_r, zpram_w) AM_SHARE("nvram") AM_MIRROR(0x020000)
|
AM_RANGE(0x900000, 0x91ffff) AM_READWRITE(zpram_r, zpram_w) AM_SHARE("nvram") AM_MIRROR(0x020000)
|
||||||
@ -1143,9 +1148,10 @@ static MACHINE_CONFIG_START( midzeus2, midzeus2_state )
|
|||||||
/* video hardware */
|
/* video hardware */
|
||||||
MCFG_SCREEN_ADD("screen", RASTER)
|
MCFG_SCREEN_ADD("screen", RASTER)
|
||||||
MCFG_SCREEN_RAW_PARAMS(MIDZEUS_VIDEO_CLOCK/4, 666, 0, 512, 438, 0, 400)
|
MCFG_SCREEN_RAW_PARAMS(MIDZEUS_VIDEO_CLOCK/4, 666, 0, 512, 438, 0, 400)
|
||||||
MCFG_SCREEN_UPDATE_DRIVER(midzeus2_state, screen_update_midzeus2)
|
MCFG_SCREEN_UPDATE_DEVICE("zeus2", zeus2_device, screen_update)
|
||||||
|
|
||||||
MCFG_VIDEO_START_OVERRIDE(midzeus2_state,midzeus2)
|
MCFG_DEVICE_ADD("zeus2", ZEUS2, ZEUS2_VIDEO_CLOCK)
|
||||||
|
MCFG_ZEUS2_IRQ_CB(WRITELINE(midzeus2_state, zeus_irq))
|
||||||
|
|
||||||
/* sound hardware */
|
/* sound hardware */
|
||||||
MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_2104, 0)
|
MCFG_DEVICE_ADD("dcs", DCS2_AUDIO_2104, 0)
|
||||||
|
@ -29,7 +29,7 @@ public:
|
|||||||
required_shared_ptr<UINT32> m_ram_base;
|
required_shared_ptr<UINT32> m_ram_base;
|
||||||
optional_shared_ptr<UINT32> m_linkram;
|
optional_shared_ptr<UINT32> m_linkram;
|
||||||
required_shared_ptr<UINT32> m_tms32031_control;
|
required_shared_ptr<UINT32> m_tms32031_control;
|
||||||
required_shared_ptr<UINT32> m_zeusbase;
|
optional_shared_ptr<UINT32> m_zeusbase;
|
||||||
optional_device<timekeeper_device> m_m48t35;
|
optional_device<timekeeper_device> m_m48t35;
|
||||||
required_device<cpu_device> m_maincpu;
|
required_device<cpu_device> m_maincpu;
|
||||||
required_device<screen_device> m_screen;
|
required_device<screen_device> m_screen;
|
||||||
|
@ -5,13 +5,16 @@
|
|||||||
Driver for Midway Zeus games
|
Driver for Midway Zeus games
|
||||||
|
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
#include "video/zeus2.h"
|
||||||
|
|
||||||
class midzeus2_state : public midzeus_state
|
class midzeus2_state : public midzeus_state
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
midzeus2_state(const machine_config &mconfig, device_type type, const char *tag)
|
midzeus2_state(const machine_config &mconfig, device_type type, const char *tag)
|
||||||
: midzeus_state(mconfig, type, tag) { }
|
: midzeus_state(mconfig, type, tag), m_zeus(*this, "zeus2") { }
|
||||||
|
required_device<zeus2_device> m_zeus;
|
||||||
|
|
||||||
|
DECLARE_WRITE_LINE_MEMBER(zeus_irq);
|
||||||
DECLARE_VIDEO_START(midzeus2);
|
DECLARE_VIDEO_START(midzeus2);
|
||||||
UINT32 screen_update_midzeus2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
UINT32 screen_update_midzeus2(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
|
||||||
DECLARE_READ32_MEMBER( zeus2_r );
|
DECLARE_READ32_MEMBER( zeus2_r );
|
||||||
|
Loading…
Reference in New Issue
Block a user