#include "driver.h"
int eolith_buffer = 0;
static mame_bitmap *bitmaps[2];
static UINT32 *eo_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(offset,data,0x0000ffff);
eolith_vram_w(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);
}
}
READ32_HANDLER( eolith_vram_r )
{
return eo_vram[offset+(0x40000/4)*eolith_buffer];
}
VIDEO_START( eolith )
{
eo_vram = auto_malloc(0x40000*2);
bitmaps[0] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
bitmaps[1] = auto_bitmap_alloc(machine->screen[0].width,machine->screen[0].height,machine->screen[0].format);
}
VIDEO_UPDATE( eolith )
{
copybitmap(bitmap,bitmaps[eolith_buffer ^ 1],0,0,0,0,cliprect,TRANSPARENCY_NONE, 0);
return 0;
}