From 4f0b3c83db9fff6407edba424a0c9e4c26c6eb80 Mon Sep 17 00:00:00 2001 From: Zsolt Vasvari Date: Sat, 22 Mar 2008 06:43:29 +0000 Subject: [PATCH] eolith.c: Same modifications as dgpix -- almost identical hardware dgpix.c: fixed video RAM masking I screwed up with the last update --- src/mame/drivers/dgpix.c | 16 ++++++-- src/mame/drivers/eolith.c | 5 ++- src/mame/video/eolith.c | 81 ++++++++++++++++----------------------- 3 files changed, 48 insertions(+), 54 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) + UINT32 *dest = &vram[offset+(0x40000/4)*eolith_buffer]; + + if (mem_mask == 0) { - case 0: - eolith_vram_w(machine,offset,data,0x0000ffff); - eolith_vram_w(machine,offset,data,0xffff0000); - return; - - case 0xffff: - if(data & 0x80000000) - return; - break; - - 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) - { - 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; }