mirror of
https://github.com/holub/mame
synced 2025-04-24 17:30:55 +03:00
eolith.c: Same modifications as dgpix -- almost identical hardware
dgpix.c: fixed video RAM masking I screwed up with the last update
This commit is contained in:
parent
d2b44c842f
commit
4f0b3c83db
@ -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 )
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user