mirror of
https://github.com/holub/mame
synced 2025-05-22 05:38:52 +03:00
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:
parent
98e757b219
commit
3a3c6ce354
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -321,7 +341,7 @@ WRITE64_DEVICE_HANDLER( naomibd_w )
|
||||
*************************************/
|
||||
|
||||
#define FILENAME_LENGTH 16
|
||||
|
||||
|
||||
static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||
{
|
||||
UINT32 result;
|
||||
@ -357,7 +377,7 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||
// find data of file
|
||||
start = 0;
|
||||
size = 0;
|
||||
printf("Looking for file %s\n", name);
|
||||
printf("Looking for file %s\n", name);
|
||||
for (pos = 0;pos < 2048;pos += buffer[pos])
|
||||
{
|
||||
a=0;
|
||||
@ -393,14 +413,14 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||
(buffer[pos+11] << 8) |
|
||||
(buffer[pos+12] << 16) |
|
||||
(buffer[pos+13] << 24));
|
||||
|
||||
printf("start %08x size %08x\n", start,size);
|
||||
|
||||
printf("start %08x size %08x\n", start,size);
|
||||
break;
|
||||
}
|
||||
if (buffer[pos] == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
if ((start != 0) && (size == 0x100))
|
||||
{
|
||||
// read file
|
||||
@ -408,14 +428,14 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||
// get "rom" file name
|
||||
memset(name,'\0', 128);
|
||||
memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
|
||||
|
||||
|
||||
|
||||
|
||||
// directory
|
||||
result = cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
|
||||
// find data of "rom" file
|
||||
start = 0;
|
||||
size = 0;
|
||||
|
||||
|
||||
printf("Looking for file %s\n", name);
|
||||
for (pos = 0;pos < 2048;pos += buffer[pos])
|
||||
{
|
||||
@ -452,8 +472,8 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||
(buffer[pos+11] << 8) |
|
||||
(buffer[pos+12] << 16) |
|
||||
(buffer[pos+13] << 24));
|
||||
|
||||
printf("start %08x size %08x\n", start,size);
|
||||
|
||||
printf("start %08x size %08x\n", start,size);
|
||||
break;
|
||||
}
|
||||
if (buffer[pos] == 0)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user