diff options
Diffstat (limited to 'src/mame/video/eolith.c')
-rw-r--r-- | src/mame/video/eolith.c | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/src/mame/video/eolith.c b/src/mame/video/eolith.c new file mode 100644 index 00000000000..ad55b32611b --- /dev/null +++ b/src/mame/video/eolith.c @@ -0,0 +1,74 @@ +#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; +} |