Added 4bpp/8bpp switch

This commit is contained in:
Angelo Salese 2009-07-04 17:07:49 +00:00
parent 84aa885368
commit dac2c281e0

View File

@ -130,6 +130,7 @@ TODO: check this register,doesn't seem to be 100% correct.
#define SCC_DCR_VREG (pcab_vregs[0x02/2] & 0xffff) #define SCC_DCR_VREG (pcab_vregs[0x02/2] & 0xffff)
#define SCC_DE_VREG ((SCC_DCR_VREG & 0x8000)>>15) #define SCC_DE_VREG ((SCC_DCR_VREG & 0x8000)>>15)
#define SCC_FG_VREG ((SCC_DCR_VREG & 0x0080)>>7)
#define SCC_VSR_VREG_H ((SCC_DCR_VREG & 0xf)>>0) #define SCC_VSR_VREG_H ((SCC_DCR_VREG & 0xf)>>0)
/* /*
@ -275,6 +276,40 @@ static VIDEO_UPDATE(magicard)
count = ((SCC_VSR_VREG)/2); count = ((SCC_VSR_VREG)/2);
if(SCC_FG_VREG) //4bpp gfx
{
for(y=0;y<300;y++)
{
for(x=0;x<84;x++)
{
UINT32 color;
color = ((magicram[count]) & 0x000f)>>0;
if(((x*4)+3)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*4)+3) = screen->machine->pens[color];
color = ((magicram[count]) & 0x00f0)>>4;
if(((x*4)+2)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*4)+2) = screen->machine->pens[color];
color = ((magicram[count]) & 0x0f00)>>8;
if(((x*4)+1)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*4)+1) = screen->machine->pens[color];
color = ((magicram[count]) & 0xf000)>>12;
if(((x*4)+0)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*4)+0) = screen->machine->pens[color];
count++;
}
}
}
else //8bpp gfx
{
for(y=0;y<300;y++) for(y=0;y<300;y++)
{ {
for(x=0;x<168;x++) for(x=0;x<168;x++)
@ -283,17 +318,18 @@ static VIDEO_UPDATE(magicard)
color = ((magicram[count]) & 0x00ff)>>0; color = ((magicram[count]) & 0x00ff)>>0;
if((x*2)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y) if(((x*2)+1)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*2)+1) = screen->machine->pens[color]; *BITMAP_ADDR32(bitmap, y, (x*2)+1) = screen->machine->pens[color];
color = ((magicram[count]) & 0xff00)>>8; color = ((magicram[count]) & 0xff00)>>8;
if(((x*2)+1)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y) if(((x*2)+0)<video_screen_get_visible_area(screen)->max_x && ((y)+0)<video_screen_get_visible_area(screen)->max_y)
*BITMAP_ADDR32(bitmap, y, (x*2)+0) = screen->machine->pens[color]; *BITMAP_ADDR32(bitmap, y, (x*2)+0) = screen->machine->pens[color];
count++; count++;
} }
} }
}
return 0; return 0;
} }
@ -316,9 +352,9 @@ static WRITE16_HANDLER( paletteram_io_w )
{ {
case 0: case 0:
pal_offs = data; pal_offs = data;
internal_pal_offs = 0;
break; break;
case 4: case 4:
internal_pal_offs = 0;
break; break;
case 2: case 2:
switch(internal_pal_offs) switch(internal_pal_offs)