summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author yz70s <yz70s@users.noreply.github.com>2015-09-09 20:48:51 +0200
committer yz70s <yz70s@users.noreply.github.com>2015-09-09 20:50:32 +0200
commit07c3b7ac13efe1c217ae6688e2e6589723afa9c6 (patch)
tree6d6384155218eebdd6bee663e9e845c0af357518 /src
parenta73522ab0f73bb5537669782eee0d4ed5db175e9 (diff)
chihiro.c/xbox.c: Various updates [Samuele Zannoli]
- support render targets different than rgb32 - support 16 bit depth buffer - support independent clearing of stencil and depth values - update rom loading - add xbox hack to avoid stalling - set xbox bios 4134 as the one used
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/chihiro.c2
-rw-r--r--src/mame/includes/chihiro.h14
-rw-r--r--src/mame/machine/xbox.c2
-rw-r--r--src/mame/video/chihiro.c291
-rw-r--r--src/mess/drivers/xbox.c22
5 files changed, 268 insertions, 63 deletions
diff --git a/src/mame/drivers/chihiro.c b/src/mame/drivers/chihiro.c
index e4e6b65e79f..aba64570b2e 100644
--- a/src/mame/drivers/chihiro.c
+++ b/src/mame/drivers/chihiro.c
@@ -896,7 +896,7 @@ MACHINE_CONFIG_END
ROMX_LOAD(name, offset, length, hash, ROM_BIOS(bios+1)) /* Note '+1' */
#define CHIHIRO_BIOS \
- ROM_REGION( 0x80000, "bios", 0) \
+ ROM_REGION( 0x100000, "bios", 0) \
ROM_SYSTEM_BIOS( 0, "bios0", "Chihiro Bios" ) \
ROM_LOAD_BIOS( 0, "chihiro_xbox_bios.bin", 0x000000, 0x80000, CRC(66232714) SHA1(b700b0041af8f84835e45d1d1250247bf7077188) ) \
ROM_REGION( 0x404080, "others", 0) \
diff --git a/src/mame/includes/chihiro.h b/src/mame/includes/chihiro.h
index 85f47d52e88..2815d1bf1d8 100644
--- a/src/mame/includes/chihiro.h
+++ b/src/mame/includes/chihiro.h
@@ -224,8 +224,10 @@ public:
dilate_rendertarget = 0;
antialiasing_rendertarget = 0;
type_rendertarget = nv2a_renderer::LINEAR;
- depth_rendertarget = nv2a_renderer::NV2A_RT_DEPTH_FORMAT_Z24S8;
- color_rendertarget = nv2a_renderer::NV2A_COLOR_FORMAT_A8R8G8B8;
+ depthformat_rendertarget = nv2a_renderer::NV2A_RT_DEPTH_FORMAT_Z24S8;
+ colorformat_rendertarget = nv2a_renderer::NV2A_COLOR_FORMAT_A8R8G8B8;
+ bytespixel_rendertarget = 4;
+ antialias_control = 0;
rendertarget = NULL;
depthbuffer = NULL;
displayedtarget = NULL;
@@ -254,6 +256,7 @@ public:
void geforce_read_dma_object(UINT32 handle, UINT32 &offset, UINT32 &size);
int geforce_exec_method(address_space &space, UINT32 channel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen);
UINT32 texture_get_texel(int number, int x, int y);
+ UINT8 *read_pixel(int x, int y, UINT32 c[4]);
void write_pixel(int x, int y, UINT32 color, UINT32 depth);
void combiner_initialize_registers(UINT32 argb8[6]);
void combiner_initialize_stage(int stage_number);
@@ -293,6 +296,7 @@ public:
int read_vertices_0x1810(address_space & space, vertex_nv *destination, int offset, int limit);
int read_vertices_0x1818(address_space & space, vertex_nv *destination, UINT32 address, int limit);
void convert_vertices_poly(vertex_nv *source, vertex_t *destination, int count);
+ void clear_depth_buffer(int what, UINT32 value);
inline UINT8 *direct_access_ptr(offs_t address);
TIMER_CALLBACK_MEMBER(puller_timer_work);
@@ -321,8 +325,10 @@ public:
int dilate_rendertarget;
int antialiasing_rendertarget;
int type_rendertarget;
- int depth_rendertarget;
- int color_rendertarget;
+ int depthformat_rendertarget;
+ int colorformat_rendertarget;
+ int bytespixel_rendertarget;
+ UINT32 antialias_control;
UINT32 *rendertarget;
UINT32 *depthbuffer;
UINT32 *displayedtarget;
diff --git a/src/mame/machine/xbox.c b/src/mame/machine/xbox.c
index 3a23b375db6..b4baaae5961 100644
--- a/src/mame/machine/xbox.c
+++ b/src/mame/machine/xbox.c
@@ -1418,7 +1418,7 @@ ADDRESS_MAP_START(xbox_base_map, AS_PROGRAM, 32, xbox_base_state)
AM_RANGE(0xfed00000, 0xfed003ff) AM_READWRITE(usbctrl_r, usbctrl_w)
AM_RANGE(0xfe800000, 0xfe85ffff) AM_READWRITE(audio_apu_r, audio_apu_w)
AM_RANGE(0xfec00000, 0xfec001ff) AM_READWRITE(audio_ac93_r, audio_ac93_w)
- AM_RANGE(0xff000000, 0xff07ffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000)
+ AM_RANGE(0xff000000, 0xff0fffff) AM_ROM AM_REGION("bios", 0) AM_MIRROR(0x00f80000)
ADDRESS_MAP_END
ADDRESS_MAP_START(xbox_base_map_io, AS_IO, 32, xbox_base_state)
diff --git a/src/mame/video/chihiro.c b/src/mame/video/chihiro.c
index 70a529ed784..f9e9e1f44a0 100644
--- a/src/mame/video/chihiro.c
+++ b/src/mame/video/chihiro.c
@@ -1240,42 +1240,99 @@ UINT32 nv2a_renderer::texture_get_texel(int number, int x, int y)
}
}
+inline UINT8 *nv2a_renderer::read_pixel(int x, int y, UINT32 c[4])
+{
+ UINT32 offset;
+ UINT32 color;
+ UINT32 *addr;
+ UINT16 *addr16;
+ UINT8 *addr8;
+
+ if (type_rendertarget == SWIZZLED)
+ offset = (dilated0[dilate_rendertarget][x] + dilated1[dilate_rendertarget][y]) * bytespixel_rendertarget;
+ else // type_rendertarget == LINEAR*/
+ offset = pitch_rendertarget * y + x * bytespixel_rendertarget;
+ switch (colorformat_rendertarget) {
+ case NV2A_COLOR_FORMAT_R5G6B5:
+ addr16 = (UINT16 *)((UINT8 *)rendertarget + offset);
+ color = *addr16;
+ c[3] = 0xff;
+ c[2] = pal5bit((color & 0xf800) >> 11);
+ c[1] = pal6bit((color & 0x07e0) >> 5);
+ c[0] = pal5bit(color & 0x1f);
+ return (UINT8 *)addr16;
+ case NV2A_COLOR_FORMAT_X8R8G8B8:
+ addr = (UINT32 *)((UINT8 *)rendertarget + offset);
+ color = *addr;
+
+ c[3] = 0xff;
+ c[2] = (color >> 16) & 255;
+ c[1] = (color >> 8) & 255;
+ c[0] = color & 255;
+ return (UINT8 *)addr;
+ case NV2A_COLOR_FORMAT_A8R8G8B8:
+ addr = (UINT32 *)((UINT8 *)rendertarget + offset);
+ color = *addr;
+ c[3] = color >> 24;
+ c[2] = (color >> 16) & 255;
+ c[1] = (color >> 8) & 255;
+ c[0] = color & 255;
+ return (UINT8 *)addr;
+ case NV2A_COLOR_FORMAT_B8:
+ addr8 = (UINT8 *)rendertarget + offset;
+ c[0] = *addr8;
+ c[1] = c[2] = 0;
+ c[3] = 0xff;
+ return addr8;
+ }
+ return NULL;
+}
+
void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth)
{
- UINT32 *addr, *daddr;
- UINT32 fbcolor, deptsten;
+ UINT8 *addr;
+ UINT32 *daddr32;
+ UINT16 *daddr16;
+ UINT32 deptsten;
UINT32 c[4], fb[4], s[4], d[4], cc[4];
UINT32 dep, sten, stenc, stenv;
bool stencil_passed;
bool depth_passed;
- if (type_rendertarget == SWIZZLED)
- addr = rendertarget + (dilated0[dilate_rendertarget][x] + dilated1[dilate_rendertarget][y]);
- else // type_rendertarget == LINEAR*/
- addr = rendertarget + (pitch_rendertarget / 4)*y + x;
- fbcolor = 0;
+ fb[3] = fb[2] = fb[1] = fb[0] = 0;
+ addr = NULL;
if (color_mask != 0)
- fbcolor = *addr;
- daddr=depthbuffer + (pitch_depthbuffer / 4)*y + x;
- deptsten = *daddr;
+ addr = read_pixel(x, y, fb);
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ daddr32 = depthbuffer + (pitch_depthbuffer / 4) * y + x;
+ deptsten = *daddr32;
+ dep = deptsten >> 8;
+ sten = deptsten & 255;
+ daddr16 = NULL;
+ }
+ else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) {
+ daddr16 = (UINT16 *)depthbuffer + (pitch_depthbuffer / 2) * y + x;
+ deptsten = *daddr16;
+ dep = (deptsten << 8) | 0xff;
+ sten = 0;
+ daddr32 = NULL;
+ }
+ else {
+ daddr32 = NULL;
+ daddr16 = NULL;
+ dep = 0xffffff;
+ sten = 0;
+ }
+ if (depth > 0xffffff)
+ depth = 0xffffff;
c[3] = color >> 24;
c[2] = (color >> 16) & 255;
c[1] = (color >> 8) & 255;
c[0] = color & 255;
- fb[3] = fbcolor >> 24;
- fb[2] = (fbcolor >> 16) & 255;
- fb[1] = (fbcolor >> 8) & 255;
- fb[0] = fbcolor & 255;
cc[3] = blend_color >> 24;
cc[2] = (blend_color >> 16) & 255;
cc[1] = (blend_color >> 8) & 255;
cc[0] = blend_color & 255;
- dep = deptsten >> 8;
- sten = deptsten & 255;
- if (depth > 0xffffff)
- depth = 0xffffff;
- if (depth & 0x80000000)
- depth = 0;
// ownership test and scissor test not done
// alpha test
if (alpha_test_enabled) {
@@ -1383,8 +1440,14 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth)
sten = 255;
break;
}
- deptsten = (dep << 8) | sten;
- *daddr = deptsten;
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ deptsten = (dep << 8) | sten;
+ *daddr32 = deptsten;
+ }
+ else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) {
+ deptsten = dep >> 8;
+ *daddr16 = (UINT16)deptsten;
+ }
return;
}
}
@@ -1458,8 +1521,14 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth)
sten = 255;
break;
}
- deptsten = (dep << 8) | sten;
- *daddr = deptsten;
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ deptsten = (dep << 8) | sten;
+ *daddr32 = deptsten;
+ }
+ else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) {
+ deptsten = dep >> 8;
+ *daddr16 = (UINT16)deptsten;
+ }
return;
}
switch (stencil_op_zpass) {
@@ -1782,15 +1851,37 @@ void nv2a_renderer::write_pixel(int x, int y, UINT32 color, UINT32 depth)
}
}
if (color_mask != 0) {
- UINT32 fbcolor_tmp;
-
- fbcolor_tmp = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
- *addr = (fbcolor & ~color_mask) | (fbcolor_tmp & color_mask);
+ UINT32 ct,ft,w;
+
+ ct = (c[3] << 24) | (c[2] << 16) | (c[1] << 8) | c[0];
+ ft = (fb[3] << 24) | (fb[2] << 16) | (fb[1] << 8) | fb[0];
+ w = (ft & ~color_mask) | (ct & color_mask);
+ switch (colorformat_rendertarget) {
+ case NV2A_COLOR_FORMAT_R5G6B5:
+ w = ((w >> 8) & 0xf800) + ((w >> 5) & 0x7e0) + ((w >> 3) & 0x1f);
+ *((UINT16 *)addr) = (UINT16)w;
+ break;
+ case NV2A_COLOR_FORMAT_X8R8G8B8:
+ *((UINT32 *)addr) = w;
+ break;
+ case NV2A_COLOR_FORMAT_A8R8G8B8:
+ *((UINT32 *)addr) = w;
+ break;
+ case NV2A_COLOR_FORMAT_B8:
+ *addr = (UINT8)w;
+ break;
+ }
}
if (depth_write_enabled)
dep = depth;
- deptsten = (dep << 8) | sten;
- *daddr = deptsten;
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ deptsten = (dep << 8) | sten;
+ *daddr32 = deptsten;
+ }
+ else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) {
+ deptsten = dep >> 8;
+ *daddr16 = (UINT16)deptsten;
+ }
}
void nv2a_renderer::render_color(INT32 scanline, const extent_t &extent, const nvidia_object_data &objectdata, int threadid)
@@ -2238,6 +2329,83 @@ void nv2a_renderer::convert_vertices_poly(vertex_nv *source, vertex_t *destinati
}
}
+void nv2a_renderer::clear_depth_buffer(int what, UINT32 value)
+{
+ int m;
+
+ m = antialias_control;
+ if (antialiasing_rendertarget != 0)
+ m = 2;
+ else
+ m = 1;
+ if (what == 3) {
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ UINT32 *p, *pl;
+ int x, y;
+
+ pl = (UINT32 *)depthbuffer;
+ for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) {
+ p = pl;
+ for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) {
+ *p = value;
+ p++;
+ }
+ pl = pl + pitch_rendertarget / 4;
+ }
+ }
+ else if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) {
+ UINT16 *p, *pl;
+ int x, y;
+
+ pl = (UINT16 *)depthbuffer;
+ for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) {
+ p = pl;
+ for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) {
+ *p = (UINT16)value;
+ p++;
+ }
+ pl = pl + pitch_rendertarget / 2;
+ }
+ }
+ }
+ else {
+ if (depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z24S8) {
+ UINT32 mask;
+ UINT32 *p, *pl;
+ int x, y;
+
+ if ((what & 0x03) == 2)
+ mask = 0x000000ff;
+ else
+ mask = 0xffffff00;
+ value = value & mask;
+ pl = depthbuffer;
+ for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) {
+ p = pl;
+ for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) {
+ *p = (*p & ~mask) | value;
+ p++;
+ }
+ pl = pl + pitch_rendertarget / 4;
+ }
+ }
+ else if ((depthformat_rendertarget == NV2A_RT_DEPTH_FORMAT_Z16) && (what == 1)) {
+ UINT16 *p, *pl;
+ int x, y;
+
+ pl = (UINT16 *)depthbuffer;
+ for (y = (limits_rendertarget.bottom() + 1) * m; y != 0; y--) {
+ p = pl;
+ for (x = (limits_rendertarget.right() + 1) * m; x != 0; x--) {
+ *p = (UINT16)value;
+ p++;
+ }
+ pl = pl + pitch_rendertarget / 2;
+ }
+ }
+ }
+}
+
int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UINT32 subchannel, UINT32 method, UINT32 address, int &countlen)
{
UINT32 maddress;
@@ -2359,6 +2527,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
convert_vertices_poly(vert, xy, 4);
render_polygon<4>(limits_rendertarget, renderspans, 4 + 4 * 2, xy); // 4 rgba, 4 texture units 2 uv
}
+ wait();
}
else if (type == nv2a_renderer::TRIANGLE_FAN) {
if ((countlen * mult + indexesleft_count) >= 3) {
@@ -2405,6 +2574,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
convert_vertices_poly(vert, xy, 3);
render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
}
+ wait();
}
else if (type == nv2a_renderer::TRIANGLE_STRIP) {
if ((countlen * mult + indexesleft_count) >= 3) {
@@ -2432,6 +2602,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
xy[(n + 2) & 3].y = xy[(n + 2) & 3].y + 1.0f;
render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[((n & 1) + n) & 3], xy[((~n & 1) + n) & 3], xy[(2 + n) & 3]);
}
+ wait();
}
}
else {
@@ -2519,6 +2690,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
address = address + c * 3;
render_triangle(limits_rendertarget, renderspans, 4 + 4 * 2, xy[0], xy[1], xy[2]); // 4 rgba, 4 texture units 2 uv
}
+ wait();
}
else if (type == nv2a_renderer::TRIANGLE_STRIP) {
vertex_nv vert[4];
@@ -2666,6 +2838,10 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
space.write_dword(base + offset, data);
countlen--;
}
+ if (maddress == 0x1d7c) {
+ antialias_control = data;
+ countlen--;
+ }
if (maddress == 0x1d98) {
countlen--;
}
@@ -2675,7 +2851,7 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
if (maddress == 0x1d94) {
int m;
- m = channel[chanel][subchannel].object.method[0x1d7c / 4];
+ m = antialias_control;
if (antialiasing_rendertarget != 0)
m = 2;
else
@@ -2683,22 +2859,29 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
// possible buffers: color, depth, stencil
// clear framebuffer
if (data & 0xf0) {
- bitmap_rgb32 bm(rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ?
- // clear colors
- UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4];
- bm.fill(color);
+ if (bytespixel_rendertarget == 4) {
+ bitmap_rgb32 bm(rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4);
+
+ UINT32 color = channel[chanel][subchannel].object.method[0x1d90 / 4];
+ bm.fill(color);
+ }
+ else if (bytespixel_rendertarget == 2) {
+ bitmap_ind16 bm((UINT16 *)rendertarget, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 2);
+
+ UINT16 color = channel[chanel][subchannel].object.method[0x1d90 / 4] & 0xffff;
+
+ bm.fill(color);
+ }
+ else if (bytespixel_rendertarget == 1) {
+ UINT8 color = channel[chanel][subchannel].object.method[0x1d90 / 4] & 0xff;
+
+ memset(rendertarget, color, pitch_rendertarget*(limits_rendertarget.bottom() + 1) * m);
+ }
#ifdef LOG_NV2A
printf("clearscreen\n\r");
#endif
}
- if ((data & 0x03) == 3) {
- bitmap_rgb32 bm(depthbuffer, (limits_rendertarget.right() + 1) * m, (limits_rendertarget.bottom() + 1) * m, pitch_rendertarget / 4); // why *2 ?
- // clear zbuffer and stencil
- UINT32 depth_stencil = channel[chanel][subchannel].object.method[0x1d8c / 4];
- bm.fill(depth_stencil);
- }
- else if (((data & 0x03) == 1) || ((data & 0x03) == 2))
- logerror("Unsupported clear method parameter %d\n\r", data & 0x03);
+ clear_depth_buffer(data & 3, channel[chanel][subchannel].object.method[0x1d8c / 4]);
countlen--;
}
if (maddress == 0x0200) {
@@ -2720,8 +2903,26 @@ int nv2a_renderer::geforce_exec_method(address_space & space, UINT32 chanel, UIN
log2width_rendertarget = (data >> 16) & 255;
antialiasing_rendertarget = (data >> 12) & 15;
type_rendertarget = (data >> 8) & 15;
- depth_rendertarget = (data >> 4) & 15;
- color_rendertarget = (data >> 0) & 15;;
+ depthformat_rendertarget = (data >> 4) & 15;
+ colorformat_rendertarget = (data >> 0) & 15;
+ switch (colorformat_rendertarget) {
+ case NV2A_COLOR_FORMAT_R5G6B5:
+ bytespixel_rendertarget = 2;
+ break;
+ case NV2A_COLOR_FORMAT_X8R8G8B8:
+ case NV2A_COLOR_FORMAT_A8R8G8B8:
+ bytespixel_rendertarget = 4;
+ break;
+ case NV2A_COLOR_FORMAT_B8:
+ bytespixel_rendertarget = 1;
+ break;
+ default:
+#ifdef LOG_NV2A
+ printf("Unknown render target color format %d\n\r", colorformat_rendertarget);
+#endif
+ bytespixel_rendertarget = 4;
+ break;
+ }
dilate_rendertarget = dilatechose[(log2width_rendertarget << 4) + log2height_rendertarget];
}
if (maddress == 0x020c) {
diff --git a/src/mess/drivers/xbox.c b/src/mess/drivers/xbox.c
index 20d2ee9382b..f6d67c621e0 100644
--- a/src/mess/drivers/xbox.c
+++ b/src/mess/drivers/xbox.c
@@ -122,11 +122,8 @@ INPUT_PORTS_END
void xbox_state::hack_eeprom()
{
- // 8003b744,3b744=0x90 0x90
- /*m_maincpu->space(0).write_byte(0x3b744, 0x90);
- m_maincpu->space(0).write_byte(0x3b745, 0x90);
- m_maincpu->space(0).write_byte(0x3b766, 0xc9);
- m_maincpu->space(0).write_byte(0x3b767, 0xc3);*/
+ // 8004e5da,4e5da=0xc3
+ m_maincpu->space(0).write_byte(0x4e5da, 0xc3);
}
/*static const struct {
@@ -196,22 +193,23 @@ MACHINE_CONFIG_END
***************************************************************************/
ROM_START( xbox )
- ROM_REGION( 0x200, "mcpx", 0 )
+ ROM_REGION( 0x400, "mcpx", 0 )
+ // mcpx_1_0.bin is bad, first byte (0x7f) sould be removed and a byte with value 0xee added at the end
ROM_LOAD( "mcpx_1_0.bin", 0, 0x200, CRC(f31429fc) SHA1(a9ecbf8896d10db81594923e485862aa3aac7b58) )
- ROM_LOAD( "mcpx_1_1.bin", 0, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) )
+ ROM_LOAD( "mcpx_1_1.bin", 0x200, 0x200, CRC(94ce376b) SHA1(6c875f17f773aaec51eb434068bb6c657c4343c0) )
- ROM_REGION( 0x80000, "bios", 0)
- ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) )
- ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) )
- ROM_COPY( "mcpx", 0, 0x7fe00, 0x200 )
+ ROM_REGION( 0x100000, "bios", 0)
+ ROM_LOAD( "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f) )
+ ROM_COPY( "mcpx", 1, 0x7fe00, 0x1ff)
ROM_REGION( 0x1000000, "tbp", 0 ) // To Be Processed, of course
ROM_LOAD( "3944_1024k.bin", 0x000000, 0x100000, CRC(32a9ecb6) SHA1(67054fc88bda94e33e86f1b19be60efec0724fb6) )
ROM_LOAD( "4034_1024k.bin", 0x000000, 0x100000, CRC(0d6fc88f) SHA1(ab676b712204fb1728bf89f9cd541a8f5a64ab97) )
- ROM_LOAD( "4134_1024k.bin", 0x000000, 0x100000, CRC(49d8055a) SHA1(d46cef771a63dc8024fe36d7ab5b959087ac999f) )
ROM_LOAD( "4817_1024k.bin", 0x000000, 0x100000, CRC(3f30863a) SHA1(dc955bd4d3ca71e01214a49e5d0aba615270c03c) )
ROM_LOAD( "5101_256k.bin", 0x000000, 0x040000, CRC(e8a9224e) SHA1(5108e1025f48071c07a6823661d708c66dee97a9) )
+ ROM_LOAD( "xbox-5530.bin", 0x000000, 0x040000, CRC(9569c4d3) SHA1(40fa73277013be3168135e1768b09623a987ff63) )
+ ROM_LOAD( "xbox-5713.bin", 0x040000, 0x040000, CRC(58fd8173) SHA1(8b7ccc4648ccd78cdb7b65cfca09621eaf2d4238) )
ROM_LOAD( "5838_256k.bin", 0x000000, 0x040000, CRC(5be2413d) SHA1(b9489e883c650b5e5fe2f83a32237dbf74f0e9f1) )
ROM_END
// See src/emu/gamedrv.h for details