Fixed Panasonic 3do logo colors

This commit is contained in:
Angelo Salese 2013-01-09 20:59:50 +00:00
parent f62bbc548f
commit 4913e929d1
2 changed files with 38 additions and 26 deletions

View File

@ -174,7 +174,7 @@ public:
MADAM m_madam;
CLIO m_clio;
SVF m_svf;
UINT8 m_video_bits[512];
// UINT8 m_video_bits[512];
DECLARE_READ32_MEMBER(_3do_nvarea_r);
DECLARE_WRITE32_MEMBER(_3do_nvarea_w);
DECLARE_READ32_MEMBER(_3do_slow2_r);

View File

@ -579,6 +579,12 @@ READ32_MEMBER(_3do_state::_3do_clio_r)
return m_clio.seed;
case 0x003c/4:
return m_clio.random;
case 0x0040/4:
case 0x0044/4:
return m_clio.irq0;
case 0x0048/4:
case 0x004c/4:
return m_clio.irq0_enable;
case 0x0080/4:
return m_clio.hdelay;
case 0x0084/4:
@ -968,10 +974,10 @@ void _3do_clio_init( running_machine &machine, screen_device *screen )
VIDEO_START_MEMBER(_3do_state,_3do)
{
/* We only keep the odd bits and get rid of the even bits */
for ( int i = 0; i < 512; i++ )
{
m_video_bits[i] = ( i & 1 ) | ( ( i & 4 ) >> 1 ) | ( ( i & 0x10 ) >> 2 ) | ( ( i & 0x40 ) >> 3 ) | ( ( i & 0x100 ) >> 4 );
}
// for ( int i = 0; i < 512; i++ )
// {
// m_video_bits[i] = ( i & 1 ) | ( ( i & 4 ) >> 1 ) | ( ( i & 0x10 ) >> 2 ) | ( ( i & 0x40 ) >> 3 ) | ( ( i & 0x100 ) >> 4 );
// }
}
@ -980,35 +986,41 @@ UINT32 _3do_state::screen_update__3do(screen_device &screen, bitmap_rgb32 &bitma
{
UINT32 *source_p = m_vram + 0x1c0000 / 4;
for ( int i = 0; i < 120; i++ )
for ( int y = 0; y < 120; y++ )
{
UINT32 *dest_p0 = &bitmap.pix32(22 + i * 2, 254 );
UINT32 *dest_p1 = &bitmap.pix32(22 + i * 2 + 1, 254 );
UINT32 *dest_p0 = &bitmap.pix32(22 + y * 2, 254 );
UINT32 *dest_p1 = &bitmap.pix32(22 + y * 2 + 1, 254 );
for ( int j = 0; j < 320; j++ )
for ( int x = 0; x < 320; x++ )
{
/* Odd numbered bits go to lower half, even numbered bits to upper half */
UINT32 lower = *source_p & 0x55555555;
UINT32 upper = ( *source_p >> 1 ) & 0x55555555;
UINT32 rgb = 0;
UINT32 lower = *source_p & 0xffff;
UINT32 upper = ( *source_p >> 16 ) & 0xffff;
int r, g, b;
rgb = ( ( m_video_bits[upper & 0x1ff] << 3 ) << 8 );
rgb |= ( ( m_video_bits[ ( upper >> 10 ) & 0x1ff ] << 3 ) << 0 );
rgb |= ( ( m_video_bits[ ( upper >> 20 ) & 0x1ff ] << 3 ) << 16 );
r = (upper & 0x7c00) >> 10;
g = (upper & 0x03e0) >> 5;
b = (upper & 0x001f) >> 0;
r = (r << 3) | (r & 7);
g = (g << 3) | (g & 7);
b = (b << 3) | (b & 7);
dest_p0[0] = rgb;
dest_p0[1] = rgb;
dest_p0[2] = rgb;
dest_p0[3] = rgb;
dest_p0[0] = r << 16 | g << 8 | b;
dest_p0[1] = r << 16 | g << 8 | b;
dest_p0[2] = r << 16 | g << 8 | b;
dest_p0[3] = r << 16 | g << 8 | b;
rgb = ( ( m_video_bits[lower & 0x1ff] << 3 ) << 8 );
rgb |= ( ( m_video_bits[ ( lower >> 10 ) & 0x1ff ] << 3 ) << 0 );
rgb |= ( ( m_video_bits[ ( lower >> 20 ) & 0x1ff ] << 3 ) << 16 );
r = (lower & 0x7c00) >> 10;
g = (lower & 0x03e0) >> 5;
b = (lower & 0x001f) >> 0;
r = (r << 3) | (r & 7);
g = (g << 3) | (g & 7);
b = (b << 3) | (b & 7);
dest_p1[0] = rgb;
dest_p1[1] = rgb;
dest_p1[2] = rgb;
dest_p1[3] = rgb;
dest_p1[0] = r << 16 | g << 8 | b;
dest_p1[1] = r << 16 | g << 8 | b;
dest_p1[2] = r << 16 | g << 8 | b;
dest_p1[3] = r << 16 | g << 8 | b;
source_p++;
dest_p0 += 4;