kongambl: Support unpaged 056832 VRAM access [R. Belmont]

This commit is contained in:
R. Belmont 2010-05-30 20:19:48 +00:00
parent dbf67e6b00
commit 99117186d9
3 changed files with 51 additions and 10 deletions

View File

@ -20,20 +20,24 @@
static VIDEO_START(kongambl)
{
int i;
running_device *k056832 = devtag_get_device(machine, "k056832");
for (i=0;i<256;i++)
{
palette_set_color(machine,i,MAKE_RGB(i,i,i));
}
k056832_set_layer_association(k056832, 0);
k056832_set_layer_offs(k056832, 0, -2, 0);
k056832_set_layer_offs(k056832, 1, 2, 0);
k056832_set_layer_offs(k056832, 2, 4, 0);
k056832_set_layer_offs(k056832, 3, 6, 0);
}
static VIDEO_UPDATE(kongambl)
{
running_device *k056832 = devtag_get_device(screen->machine, "k056832");
k056832_tilemap_draw(k056832, bitmap, cliprect, 3, 0, 0);
k056832_tilemap_draw(k056832, bitmap, cliprect, 2, 0, 0);
bitmap_fill(bitmap, cliprect, 0);
bitmap_fill(screen->machine->priority_bitmap, cliprect, 0);
// k056832_tilemap_draw(k056832, bitmap, cliprect, 3, 0, 0);
// k056832_tilemap_draw(k056832, bitmap, cliprect, 2, 0, 0);
k056832_tilemap_draw(k056832, bitmap, cliprect, 1, 0, 0);
k056832_tilemap_draw(k056832, bitmap, cliprect, 0, 0, 0);
return 0;
@ -66,7 +70,8 @@ static ADDRESS_MAP_START( kongambl_map, ADDRESS_SPACE_PROGRAM, 32 )
AM_RANGE(0x400000, 0x401fff) AM_DEVREADWRITE("k056832", k056832_ram_long_r, k056832_ram_long_w)
AM_RANGE(0x420000, 0x43ffff) AM_RAM
AM_RANGE(0x420000, 0x43ffff) AM_DEVREADWRITE("k056832", k056832_unpaged_ram_long_r, k056832_unpaged_ram_long_w)
AM_RANGE(0x440000, 0x443fff) AM_RAM
AM_RANGE(0x460000, 0x47ffff) AM_RAM_WRITE(konamigx_palette_w) AM_BASE_GENERIC(paletteram)
@ -196,5 +201,5 @@ ROM_START( moneybnk )
ROM_END
GAME( 199?, kingtut, 0, kongambl, kongambl, 0, ROT0, "Konami", "King Tut (Australia)", GAME_NOT_WORKING | GAME_NO_SOUND )
GAME( 199?, moneybnk, 0, kongambl, kongambl, 0, ROT0, "Konami", "Money Bank (Australia)", GAME_NOT_WORKING | GAME_NO_SOUND )
GAME( 199?, kingtut, 0, kongambl, kongambl, 0, ROT0, "Konami", "King Tut (NSW)", GAME_NOT_WORKING | GAME_NO_SOUND )
GAME( 199?, moneybnk, 0, kongambl, kongambl, 0, ROT0, "Konami", "Money In The Bank (NSW)", GAME_NOT_WORKING | GAME_NO_SOUND )

View File

@ -6644,6 +6644,17 @@ READ32_DEVICE_HANDLER( k056832_ram_long_r )
return (pMem[0]<<16 | pMem[1]);
}
READ32_DEVICE_HANDLER( k056832_unpaged_ram_long_r )
{
k056832_state *k056832 = k056832_get_safe_token(device);
UINT16 *pMem = &k056832->videoram[offset * 2];
// reading from tile RAM resets the ROM readback "half" offset
k056832->rom_half = 0;
return (pMem[0]<<16 | pMem[1]);
}
/* special 8-bit handlers for Lethal Enforcers */
READ8_DEVICE_HANDLER( k056832_ram_code_lo_r )
{
@ -6811,6 +6822,29 @@ WRITE32_DEVICE_HANDLER( k056832_ram_long_w )
}
}
WRITE32_DEVICE_HANDLER( k056832_unpaged_ram_long_w )
{
k056832_state *k056832 = k056832_get_safe_token(device);
UINT16 *tile_ptr;
UINT32 old_mask, old_data;
tile_ptr = &k056832->videoram[offset * 2];
old_mask = ~mem_mask;
old_data = (UINT32)tile_ptr[0] << 16 | (UINT32)tile_ptr[1];
data = (data & mem_mask) | (old_data & old_mask);
if (data != old_data)
{
tile_ptr[0] = data >> 16;
tile_ptr[1] = data;
if (k056832->page_tile_mode[offset/0x800])
tilemap_mark_tile_dirty(k056832->tilemap[offset/0x800], offset&0x7ff);
else
k056832_mark_line_dirty(offset/0x800, (offset&0x7ff));
}
}
WRITE16_DEVICE_HANDLER( k056832_word_w )
{
k056832_state *k056832 = k056832_get_safe_token(device);

View File

@ -662,6 +662,8 @@ void k056832_set_tile_bank(running_device *device, int bank); /* Asterix */
READ32_DEVICE_HANDLER( k056832_ram_long_r );
READ32_DEVICE_HANDLER( k056832_rom_long_r );
WRITE32_DEVICE_HANDLER( k056832_ram_long_w );
READ32_DEVICE_HANDLER( k056832_unpaged_ram_long_r );
WRITE32_DEVICE_HANDLER( k056832_unpaged_ram_long_w );
WRITE32_DEVICE_HANDLER( k056832_long_w );
WRITE32_DEVICE_HANDLER( k056832_b_long_w );