summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Zsolt Vasvari <zsoltvas@mamedev.org>2008-03-22 06:43:29 +0000
committer Zsolt Vasvari <zsoltvas@mamedev.org>2008-03-22 06:43:29 +0000
commit4f0b3c83db9fff6407edba424a0c9e4c26c6eb80 (patch)
treeef3d070baa3f6d0cee861eb1211e521d6996ca5b
parentd2b44c842f9e106db38fe9536ea52539381bd60c (diff)
eolith.c: Same modifications as dgpix -- almost identical hardware
dgpix.c: fixed video RAM masking I screwed up with the last update
-rw-r--r--src/mame/drivers/dgpix.c16
-rw-r--r--src/mame/drivers/eolith.c5
-rw-r--r--src/mame/video/eolith.c79
3 files changed, 47 insertions, 53 deletions
diff --git a/src/mame/drivers/dgpix.c b/src/mame/drivers/dgpix.c
index 9f1b1bb7f21..0d82c929cfb 100644
--- a/src/mame/drivers/dgpix.c
+++ b/src/mame/drivers/dgpix.c
@@ -140,11 +140,19 @@ static WRITE32_HANDLER( flash_w )
static WRITE32_HANDLER( vram_w )
{
- if ((((mem_mask & 0x0000ffff) == 0x0000ffff) && (data & 0x80000000)) ||
- (((mem_mask & 0xffff0000) == 0xffff0000) && (data & 0x00008000)))
- return;
+ UINT32 *dest = &vram[offset+(0x40000/4)*vbuffer];
- COMBINE_DATA(&vram[offset+(0x40000/4)*vbuffer]);
+ if (mem_mask == 0)
+ {
+ if (~data & 0x80000000)
+ *dest = (*dest & 0x0000ffff) | (data & 0xffff0000);
+
+ if (~data & 0x00008000)
+ *dest = (*dest & 0xffff0000) | (data & 0x0000ffff);
+ }
+ else if (((mem_mask == 0x0000ffff) && (~data & 0x80000000)) ||
+ ((mem_mask == 0xffff0000) && (~data & 0x00008000)))
+ COMBINE_DATA(dest);
}
static READ32_HANDLER( vram_r )
diff --git a/src/mame/drivers/eolith.c b/src/mame/drivers/eolith.c
index 4143a28d198..345913bd682 100644
--- a/src/mame/drivers/eolith.c
+++ b/src/mame/drivers/eolith.c
@@ -268,10 +268,13 @@ static MACHINE_DRIVER_START( eolith45 )
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
- MDRV_SCREEN_FORMAT(BITMAP_FORMAT_RGB15)
+ MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(512, 512)
MDRV_SCREEN_VISIBLE_AREA(0, 319, 0, 239)
+ MDRV_PALETTE_INIT(BBBBB_GGGGG_RRRRR)
+ MDRV_PALETTE_LENGTH(32768)
+
MDRV_VIDEO_START(eolith)
MDRV_VIDEO_UPDATE(eolith)
diff --git a/src/mame/video/eolith.c b/src/mame/video/eolith.c
index 9ee022a5696..7a5f64725a7 100644
--- a/src/mame/video/eolith.c
+++ b/src/mame/video/eolith.c
@@ -1,74 +1,57 @@
#include "driver.h"
int eolith_buffer = 0;
-static bitmap_t *bitmaps[2];
-static UINT32 *eo_vram;
+static UINT32 *vram;
+
-static void plot_pixel_rgb(int x, int y, int color)
-{
- if (bitmaps[eolith_buffer]->bpp == 32)
- {
- UINT32 r = (color & 0x001f) << 3;
- UINT32 g = (color & 0x03e0) >> 2;
- UINT32 b = (color & 0x7c00) >> 7;
- *BITMAP_ADDR32(bitmaps[eolith_buffer], y, x) = b | (g<<8) | (r<<16);
- }
- else
- {
- *BITMAP_ADDR16(bitmaps[eolith_buffer], y, x) = color;
- }
-}
WRITE32_HANDLER( eolith_vram_w )
{
- int x,y;
- switch(mem_mask)
- {
- case 0:
- eolith_vram_w(machine,offset,data,0x0000ffff);
- eolith_vram_w(machine,offset,data,0xffff0000);
- return;
-
- case 0xffff:
- if(data & 0x80000000)
- return;
- break;
+ UINT32 *dest = &vram[offset+(0x40000/4)*eolith_buffer];
- case 0xffff0000:
- if(data & 0x8000)
- return;
- break;
- }
-
- COMBINE_DATA(&eo_vram[offset+(0x40000/4)*eolith_buffer]);
-
- //logical line width = 336;
- x = offset % (336/2);
- y = offset / (336/2);
-
- if(x < 320/2 && y < 240)
+ if (mem_mask == 0)
{
- plot_pixel_rgb(x*2, y,(eo_vram[offset+(0x40000/4)*eolith_buffer]>>16) & 0x7fff);
- plot_pixel_rgb(x*2+1,y, eo_vram[offset+(0x40000/4)*eolith_buffer] & 0x7fff);
+ if (~data & 0x80000000)
+ *dest = (*dest & 0x0000ffff) | (data & 0xffff0000);
+ if (~data & 0x00008000)
+ *dest = (*dest & 0xffff0000) | (data & 0x0000ffff);
}
+ else if (((mem_mask == 0x0000ffff) && (~data & 0x80000000)) ||
+ ((mem_mask == 0xffff0000) && (~data & 0x00008000)))
+ COMBINE_DATA(dest);
}
READ32_HANDLER( eolith_vram_r )
{
- return eo_vram[offset+(0x40000/4)*eolith_buffer];
+ return vram[offset+(0x40000/4)*eolith_buffer];
}
VIDEO_START( eolith )
{
- eo_vram = auto_malloc(0x40000*2);
- bitmaps[0] = video_screen_auto_bitmap_alloc(machine->primary_screen);
- bitmaps[1] = video_screen_auto_bitmap_alloc(machine->primary_screen);
+ vram = auto_malloc(0x40000*2);
}
VIDEO_UPDATE( eolith )
{
- copybitmap(bitmap,bitmaps[eolith_buffer ^ 1],0,0,0,0,cliprect);
+ int y;
+
+ for (y = 0; y < 240; y++)
+ {
+ int x;
+ UINT32 *src = &vram[(eolith_buffer ? 0 : 0x10000) | (y * (336 / 2))];
+ UINT16 *dest = BITMAP_ADDR16(bitmap, y, 0);
+
+ for (x = 0; x < 320; x += 2)
+ {
+ dest[0] = (*src >> 16) & 0x7fff;
+ dest[1] = (*src >> 0) & 0x7fff;
+
+ src++;
+ dest += 2;
+ }
+ }
+
return 0;
}