summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit4913e929d1b294273423da7ed3ee3f607d68eb9d (patch)
tree5662fea14031b768badc9a006935cf37f1148e0b
parentf62bbc548f5e99fee24b370ba6eb01ddcb69ad83 (diff)
Fixed Panasonic 3do logo colors
-rw-r--r--src/mame/includes/3do.h2
-rw-r--r--src/mame/machine/3do.c70
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;