Fixed colors in Cultures (Jibun wo Migaku Culture School Mahjong Hen) [Tomasz Slanina]

This commit is contained in:
Tomasz Slanina 2009-03-08 19:34:23 +00:00
parent 4db6733054
commit 5d67007d0b

View File

@ -18,7 +18,7 @@ static UINT8 *bg0_videoram;
static UINT8 *bg0_regs_x, *bg0_regs_y, *bg1_regs_x, *bg1_regs_y, *bg2_regs_x, *bg2_regs_y;
static tilemap *bg0_tilemap, *bg1_tilemap, *bg2_tilemap;
static int video_enable = 0;
static int video_bank = 0;
static int irq_enable = 0;
static int bg1_bank = 0, bg2_bank = 0;
static int old_bank;
@ -27,20 +27,20 @@ static TILE_GET_INFO( get_bg1_tile_info )
{
UINT8 *region = memory_region(machine, "gfx3") + 0x200000 + 0x80000 * bg1_bank;
int code = region[tile_index*2] + (region[tile_index*2+1] << 8);
SET_TILE_INFO(2, code, 0, 0);
SET_TILE_INFO(2, code, code>>12, 0);
}
static TILE_GET_INFO( get_bg2_tile_info )
{
UINT8 *region = memory_region(machine, "gfx2") + 0x200000 + 0x80000 * bg2_bank;
int code = region[tile_index*2] + (region[tile_index*2+1] << 8);
SET_TILE_INFO(1, code, 0, 0);
SET_TILE_INFO(1, code, code>>12, 0);
}
static TILE_GET_INFO( get_bg0_tile_info )
{
int code = bg0_videoram[tile_index*2] + (bg0_videoram[tile_index*2+1] << 8);
SET_TILE_INFO(0, code, 0, 0);
SET_TILE_INFO(0, code, code>>12, 0);
}
static VIDEO_START( cultures )
@ -86,14 +86,9 @@ static VIDEO_UPDATE( cultures )
tilemap_set_scrolly(bg1_tilemap, 0, (bg1_regs_y[2] << 8) + bg1_regs_y[0]);
tilemap_set_scrolly(bg2_tilemap, 0, (bg2_regs_y[2] << 8) + bg2_regs_y[0]);
if (video_enable)
{
tilemap_draw(bitmap, cliprect, bg2_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, bg0_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, bg1_tilemap, 0, 0);
}
else
bitmap_fill(bitmap, cliprect, get_black_pen(screen->machine));
tilemap_draw(bitmap, cliprect, bg2_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, bg0_tilemap, 0, 0);
tilemap_draw(bitmap, cliprect, bg1_tilemap, 0, 0);
return 0;
}
@ -101,13 +96,30 @@ static VIDEO_UPDATE( cultures )
static WRITE8_HANDLER( cpu_bankswitch_w )
{
memory_set_bankptr(space->machine, 1, memory_region(space->machine, "maincpu") + 0x4000 * (data & 0xf));
video_enable = ~data & 0x20;
video_bank = ~data & 0x20;
}
static WRITE8_HANDLER( bg0_videoram_w )
{
bg0_videoram[offset] = data;
tilemap_mark_tile_dirty(bg0_tilemap, offset >> 1);
if(video_bank==0)
{
int r,g,b,datax;
paletteram[offset] = data;
offset>>=1;
datax=paletteram[offset*2]+256*paletteram[offset*2+1];
r=((datax>>7)&0x1e)|((datax&0x4000)?0x1:0);
g=((datax>>3)&0x1e)|((datax&0x2000)?0x1:0);
b=((datax<<1)&0x1e)|((datax&0x1000)?0x1:0);
palette_set_color_rgb(space->machine, offset, pal5bit(r), pal5bit(g), pal5bit(b));
}
else
{
bg0_videoram[offset] = data;
tilemap_mark_tile_dirty(bg0_tilemap, offset >> 1);
}
}
static WRITE8_HANDLER( misc_w )
@ -140,7 +152,6 @@ static WRITE8_HANDLER( bg_bank_w )
bg2_bank = (data & 0xc) >> 2;
tilemap_mark_all_tiles_dirty(bg2_tilemap);
}
coin_counter_w(0,data & 0x10);
}
@ -154,8 +165,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( cultures_io_map, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK(0xff)
AM_RANGE(0x00, 0x03) AM_RAM //?
AM_RANGE(0x10, 0x13) AM_RAM //?
AM_RANGE(0x00, 0x03) AM_RAM
AM_RANGE(0x10, 0x13) AM_RAM
AM_RANGE(0x20, 0x23) AM_RAM AM_BASE(&bg0_regs_x)
AM_RANGE(0x30, 0x33) AM_RAM AM_BASE(&bg0_regs_y)
AM_RANGE(0x40, 0x43) AM_RAM AM_BASE(&bg1_regs_x)
@ -312,42 +323,16 @@ static const gfx_layout gfxlayout =
};
static GFXDECODE_START( culture )
GFXDECODE_ENTRY("gfx1", 0, gfxlayout, 0x000, 1 )
GFXDECODE_ENTRY("gfx2", 0, gfxlayout, 0x100, 1 )
GFXDECODE_ENTRY("gfx3", 0, gfxlayout, 0x200, 1 )
GFXDECODE_ENTRY("gfx1", 0, gfxlayout, 0x0000, 0x10 )
GFXDECODE_ENTRY("gfx2", 0, gfxlayout, 0x1000, 0x10 )
GFXDECODE_ENTRY("gfx3", 0, gfxlayout, 0x1000, 0x10 )
GFXDECODE_END
//WRONG!
static PALETTE_INIT( cultures )
{
int c,x,plane;
/*every plane appears to use his dedicated color table*/
for(plane = 0;plane < 0x300;plane+=0x100)
{
for (c = 0; c < 256; c++)
{
int r,g,b,i;
i = c & 0x03;
r = ((c & 0x04) >> 0) | ((c & 0x10) >> 1) | i;
g = ((c & 0x20) >> 3) | ((c & 0x40) >> 3) | i;
b = ((c & 0x08) >> 1) | ((c & 0x80) >> 4) | i;
/*
r = ((c & 0x0c) >> 0) | i;
g = ((c & 0x30) >> 2) | i;
b = ((c & 0xc0) >> 4) | i;
*/
x = ((c >> 4) & 0x0f);
x = ((x & 4) << 1) | ((x & 8) >> 1) | (x & 1);
palette_set_color_rgb(machine, plane+(x | (((c << 4) & 0xf0) ^ 0)), pal4bit(r), pal4bit(g), pal4bit(b));
}
}
}
@ -382,7 +367,7 @@ static MACHINE_DRIVER_START( cultures )
MDRV_SCREEN_VISIBLE_AREA(0*8, 48*8-1, 0*8, 30*8-1)
MDRV_GFXDECODE(culture)
MDRV_PALETTE_LENGTH(0x300)
MDRV_PALETTE_LENGTH(0x2000)
MDRV_PALETTE_INIT(cultures)
@ -460,4 +445,9 @@ ROM_START( cultures )
ROM_RELOAD( 0x000000, 0x020000 )
ROM_END
GAME( 1994, cultures, 0, cultures, cultures, 0, ROT0, "Face", "Jibun wo Migaku Culture School Mahjong Hen", GAME_WRONG_COLORS )
static DRIVER_INIT(cultures)
{
paletteram=auto_malloc(0x4000);
}
GAME( 1994, cultures, 0, cultures, cultures, cultures, ROT0, "Face", "Jibun wo Migaku Culture School Mahjong Hen", 0 )