Various fixes with Naomi, mainly get rid of the annoying assert on the video file, now even more games boots (tested Melty Blood)

This commit is contained in:
Angelo Salese 2009-04-07 19:46:28 +00:00
parent 98e757b219
commit 3a3c6ce354
3 changed files with 137 additions and 82 deletions

View File

@ -275,6 +275,8 @@ WRITE64_HANDLER( dc_sysctrl_w )
case SB_C2DST:
address=dc_sysctrl_regs[SB_C2DSTAT];
ddtdata.destination=address;
/* 0 rounding size = 16 Mbytes */
if(dc_sysctrl_regs[SB_C2DLEN] == 0) { dc_sysctrl_regs[SB_C2DLEN] = 0x1000000; }
ddtdata.length=dc_sysctrl_regs[SB_C2DLEN];
ddtdata.size=1;
ddtdata.direction=0;
@ -884,15 +886,15 @@ WRITE64_HANDLER( dc_g2_ctrl_w )
case SB_ADEN: wave_dma.flag = (dat & 1); break;
case SB_ADTSEL:
mame_printf_verbose("G2CTRL: initiation mode %d\n",dat);
//printf("SB_ADTSEL data %08x\n",dat);
//mame_printf_verbose("SB_ADTSEL data %08x\n",dat);
break;
/*ready for dma'ing*/
case SB_ADST:
mame_printf_verbose("G2CTRL: AICA:G2-DMA start\n");
//printf("AICA: G2-DMA start\n");
//printf("%08x %08x %08x %02x\n",wave_dma.aica_addr,wave_dma.root_addr,wave_dma.size,wave_dma.indirect);
//mame_printf_verbose("AICA: G2-DMA start\n");
//mame_printf_verbose("%08x %08x %08x %02x\n",wave_dma.aica_addr,wave_dma.root_addr,wave_dma.size,wave_dma.indirect);
wave_dma.start = dat & 1;
//printf("SB_ADST data %08x\n",dat);
//mame_printf_verbose("SB_ADST data %08x\n",dat);
if(wave_dma.flag && wave_dma.start)
{
UINT32 src,dst,size;

View File

@ -240,75 +240,95 @@ WRITE64_DEVICE_HANDLER( naomibd_w )
{
naomibd_state *v = get_safe_token(device);
if ((offset == 1) && (ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63))
switch(offset)
{
// DMA_OFFSETH
v->dma_offset &= 0xffff;
v->dma_offset |= (data >> 16) & 0x1fff0000;
}
else if ((offset == 2) && ACCESSING_BITS_0_15)
{
// DMA_OFFSETL
v->dma_offset &= 0xffff0000;
v->dma_offset |= (data & 0xffff);
}
else if ((offset == 0) && ACCESSING_BITS_0_15)
{
// ROM_OFFSETH
v->rom_offset &= 0xffff;
v->rom_offset |= (data & 0x1fff)<<16;
v->rom_offset_flags = data >> 13;
}
else if ((offset == 0) && ACCESSING_BITS_32_47)
{
// ROM_OFFSETL
v->rom_offset &= 0xffff0000;
v->rom_offset |= ((data >> 32) & 0xffff);
}
else if ((offset == 1) && ACCESSING_BITS_0_15)
{
// ROM_DATA
// Doa2 writes here (16 bit decryption key ?)
//mame_printf_verbose("%s:ROM: write %llx to 5f7008\n", cpuexec_describe_context(machine), data);
}
else if ((offset == 15) && ACCESSING_BITS_0_15)
{
running_machine *machine = device->machine;
case 0:
{
if(ACCESSING_BITS_0_15)
{
// ROM_OFFSETH
v->rom_offset &= 0xffff;
v->rom_offset |= (data & 0x1fff)<<16;
v->rom_offset_flags = data >> 13;
}
if(ACCESSING_BITS_32_47)
{
// ROM_OFFSETL
v->rom_offset &= 0xffff0000;
v->rom_offset |= ((data >> 32) & 0xffff);
}
}
break;
case 1:
{
if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
{
// DMA_OFFSETH
v->dma_offset &= 0xffff;
v->dma_offset |= (data >> 16) & 0x1fff0000;
}
if(ACCESSING_BITS_0_15)
{
// ROM_DATA
// Doa2 writes here (16 bit decryption key ?)
//mame_printf_verbose("%s:ROM: write %llx to 5f7008\n", cpuexec_describe_context(machine), data);
}
}
break;
case 2:
{
if(ACCESSING_BITS_0_15)
{
// DMA_OFFSETL
v->dma_offset &= 0xffff0000;
v->dma_offset |= (data & 0xffff);
}
if(ACCESSING_BITS_32_63)
{
// NAOMI_DMA_COUNT
v->dma_count = data >> 32;
}
}
break;
case 7:
{
if(ACCESSING_BITS_32_47)
mame_printf_verbose("ROM: write 5f703c\n");
}
break;
case 8:
{
if(ACCESSING_BITS_0_15)
mame_printf_verbose("ROM: write 5f7040\n");
if(ACCESSING_BITS_32_47)
mame_printf_verbose("ROM: write 5f7044\n");
}
break;
case 9:
{
if(ACCESSING_BITS_0_15)
mame_printf_verbose("ROM: write 5f7048\n");
if(ACCESSING_BITS_32_47)
mame_printf_verbose("ROM: write 5f704c\n");
}
break;
case 15:
{
if(ACCESSING_BITS_0_15)
{
running_machine *machine = device->machine;
// NAOMI_BOARDID_WRITE
x76f100_cs_write(machine, 0, (data >> 2) & 1 );
x76f100_rst_write(machine, 0, (data >> 3) & 1 );
x76f100_scl_write(machine, 0, (data >> 1) & 1 );
x76f100_sda_write(machine, 0, (data >> 0) & 1 );
}
else if ((offset == 2) && ACCESSING_BITS_32_63)
{
// NAOMI_DMA_COUNT
v->dma_count = data >> 32;
}
else if ((offset == 7) && ACCESSING_BITS_32_47)
{
mame_printf_verbose("ROM: write 5f703c\n");
}
else if ((offset == 8) && ACCESSING_BITS_0_15)
{
mame_printf_verbose("ROM: write 5f7040\n");
}
else if ((offset == 8) && ACCESSING_BITS_32_47)
{
mame_printf_verbose("ROM: write 5f7044\n");
}
else if ((offset == 9) && ACCESSING_BITS_0_15)
{
mame_printf_verbose("ROM: write 5f7048\n");
}
else if ((offset == 9) && ACCESSING_BITS_32_47)
{
mame_printf_verbose("ROM: write 5f704c\n");
}
else
{
//mame_printf_verbose("%s: ROM: write %llx to %x, mask %llx\n", cpuexec_describe_context(machine), data, offset, mem_mask);
// NAOMI_BOARDID_WRITE
x76f100_cs_write(machine, 0, (data >> 2) & 1 );
x76f100_rst_write(machine, 0, (data >> 3) & 1 );
x76f100_scl_write(machine, 0, (data >> 1) & 1 );
x76f100_sda_write(machine, 0, (data >> 0) & 1 );
}
}
break;
default:
//mame_printf_verbose("%s: ROM: write %llx to %x, mask %llx\n", cpuexec_describe_context(machine), data, offset, mem_mask);
break;
}
}

View File

@ -113,7 +113,8 @@ INLINE int decode_reg_64(UINT32 offset, UINT64 mem_mask, UINT64 *shift)
// non 32-bit accesses have not yet been seen here, we need to know when they are
if ((mem_mask != U64(0xffffffff00000000)) && (mem_mask != U64(0x00000000ffffffff)))
{
assert_always(0, "Wrong mask!\n");
/*assume to return the lower 32-bits ONLY*/
return reg & 0xffffffff;
}
if (mem_mask == U64(0xffffffff00000000))
@ -1083,6 +1084,38 @@ static void testdrawscreen(const running_machine *machine,bitmap_t *bitmap,const
case 4: // bumpmap
break;
case 5: // 4 bpp palette
if (state_ta.grab[rs].showsprites[cs].texturemode & 2) // vq-compressed
{
c=0x800+(dilated1[cd][xt >> 1] + dilated0[cd][yt >> 2]);
c=*(((UINT8 *)dc_texture_ram) + BYTE_XOR_LE(state_ta.grab[rs].showsprites[cs].textureaddress+c));
addrp=state_ta.grab[rs].showsprites[cs].textureaddress+c*8+(dilated1[cd][xt & 1] + dilated0[cd][yt & 3]);
}
else
{
addrp=state_ta.grab[rs].showsprites[cs].textureaddress+(dilated1[cd][xt] + dilated0[cd][yt]);
}
c=*(((UINT8 *)dc_texture_ram) + BYTE_XOR_LE(addrp));
c=((state_ta.grab[rs].showsprites[cs].texturepalette & 0x3f) << 4) + (c & 0xf);
c=pvrta_regs[0x1000/4+c];
switch (pvrta_regs[PAL_RAM_CTRL])
{
case 0: // argb1555
a=(((c & 0x8000) >> 8)*255)/0x80;
c=MAKE_RGB((c&0x7c00) >> 7, (c&0x3e0) >> 2, (c&0x1f) << 3);
break;
case 1: // rgb565
a=255;
c=MAKE_RGB((c&0xf800) >> 8, (c&0x7e0) >> 3, (c&0x1f) << 3);
break;
case 2: // argb4444
a=(((c & 0xf000) >> 8)*255)/0xf0;
c=MAKE_RGB((c&0xf00) >> 4, c&0xf0, (c&0xf) << 4);
break;
case 3: // argb8888
a=(c & 0xff000000) >> 24;
c=MAKE_RGB((c&0xff0000) >> 16, (c&0xff00) >> 8, c&0xff);
break;
}
break;
case 6: // 8 bpp palette
if (state_ta.grab[rs].showsprites[cs].texturemode & 2) // vq-compressed