diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2013-01-09 20:59:50 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2013-01-09 20:59:50 +0000 |
commit | 4913e929d1b294273423da7ed3ee3f607d68eb9d (patch) | |
tree | 5662fea14031b768badc9a006935cf37f1148e0b | |
parent | f62bbc548f5e99fee24b370ba6eb01ddcb69ad83 (diff) |
Fixed Panasonic 3do logo colors
-rw-r--r-- | src/mame/includes/3do.h | 2 | ||||
-rw-r--r-- | src/mame/machine/3do.c | 70 |
2 files changed, 42 insertions, 30 deletions
diff --git a/src/mame/includes/3do.h b/src/mame/includes/3do.h index 47e4d42db52..f39ddc8ecbb 100644 --- a/src/mame/includes/3do.h +++ b/src/mame/includes/3do.h @@ -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); diff --git a/src/mame/machine/3do.c b/src/mame/machine/3do.c index 46e1f91763e..c07c17af7d5 100644 --- a/src/mame/machine/3do.c +++ b/src/mame/machine/3do.c @@ -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; - - 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 ); - - dest_p0[0] = rgb; - dest_p0[1] = rgb; - dest_p0[2] = rgb; - dest_p0[3] = rgb; - - 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 ); - - dest_p1[0] = rgb; - dest_p1[1] = rgb; - dest_p1[2] = rgb; - dest_p1[3] = rgb; + UINT32 lower = *source_p & 0xffff; + UINT32 upper = ( *source_p >> 16 ) & 0xffff; + int r, g, b; + + 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] = 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; + + 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] = 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; |