mirror of
https://github.com/holub/mame
synced 2025-05-22 13:48:55 +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:
|
case SB_C2DST:
|
||||||
address=dc_sysctrl_regs[SB_C2DSTAT];
|
address=dc_sysctrl_regs[SB_C2DSTAT];
|
||||||
ddtdata.destination=address;
|
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.length=dc_sysctrl_regs[SB_C2DLEN];
|
||||||
ddtdata.size=1;
|
ddtdata.size=1;
|
||||||
ddtdata.direction=0;
|
ddtdata.direction=0;
|
||||||
@ -884,15 +886,15 @@ WRITE64_HANDLER( dc_g2_ctrl_w )
|
|||||||
case SB_ADEN: wave_dma.flag = (dat & 1); break;
|
case SB_ADEN: wave_dma.flag = (dat & 1); break;
|
||||||
case SB_ADTSEL:
|
case SB_ADTSEL:
|
||||||
mame_printf_verbose("G2CTRL: initiation mode %d\n",dat);
|
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;
|
break;
|
||||||
/*ready for dma'ing*/
|
/*ready for dma'ing*/
|
||||||
case SB_ADST:
|
case SB_ADST:
|
||||||
mame_printf_verbose("G2CTRL: AICA:G2-DMA start\n");
|
mame_printf_verbose("G2CTRL: AICA:G2-DMA start\n");
|
||||||
//printf("AICA: G2-DMA start\n");
|
//mame_printf_verbose("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("%08x %08x %08x %02x\n",wave_dma.aica_addr,wave_dma.root_addr,wave_dma.size,wave_dma.indirect);
|
||||||
wave_dma.start = dat & 1;
|
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)
|
if(wave_dma.flag && wave_dma.start)
|
||||||
{
|
{
|
||||||
UINT32 src,dst,size;
|
UINT32 src,dst,size;
|
||||||
|
@ -240,75 +240,95 @@ WRITE64_DEVICE_HANDLER( naomibd_w )
|
|||||||
{
|
{
|
||||||
naomibd_state *v = get_safe_token(device);
|
naomibd_state *v = get_safe_token(device);
|
||||||
|
|
||||||
if ((offset == 1) && (ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63))
|
switch(offset)
|
||||||
{
|
{
|
||||||
// DMA_OFFSETH
|
case 0:
|
||||||
v->dma_offset &= 0xffff;
|
{
|
||||||
v->dma_offset |= (data >> 16) & 0x1fff0000;
|
if(ACCESSING_BITS_0_15)
|
||||||
}
|
{
|
||||||
else if ((offset == 2) && ACCESSING_BITS_0_15)
|
// ROM_OFFSETH
|
||||||
{
|
v->rom_offset &= 0xffff;
|
||||||
// DMA_OFFSETL
|
v->rom_offset |= (data & 0x1fff)<<16;
|
||||||
v->dma_offset &= 0xffff0000;
|
v->rom_offset_flags = data >> 13;
|
||||||
v->dma_offset |= (data & 0xffff);
|
}
|
||||||
}
|
if(ACCESSING_BITS_32_47)
|
||||||
else if ((offset == 0) && ACCESSING_BITS_0_15)
|
{
|
||||||
{
|
// ROM_OFFSETL
|
||||||
// ROM_OFFSETH
|
v->rom_offset &= 0xffff0000;
|
||||||
v->rom_offset &= 0xffff;
|
v->rom_offset |= ((data >> 32) & 0xffff);
|
||||||
v->rom_offset |= (data & 0x1fff)<<16;
|
}
|
||||||
v->rom_offset_flags = data >> 13;
|
}
|
||||||
}
|
break;
|
||||||
else if ((offset == 0) && ACCESSING_BITS_32_47)
|
case 1:
|
||||||
{
|
{
|
||||||
// ROM_OFFSETL
|
if(ACCESSING_BITS_32_47 || ACCESSING_BITS_32_63)
|
||||||
v->rom_offset &= 0xffff0000;
|
{
|
||||||
v->rom_offset |= ((data >> 32) & 0xffff);
|
// DMA_OFFSETH
|
||||||
}
|
v->dma_offset &= 0xffff;
|
||||||
else if ((offset == 1) && ACCESSING_BITS_0_15)
|
v->dma_offset |= (data >> 16) & 0x1fff0000;
|
||||||
{
|
}
|
||||||
// ROM_DATA
|
if(ACCESSING_BITS_0_15)
|
||||||
// Doa2 writes here (16 bit decryption key ?)
|
{
|
||||||
//mame_printf_verbose("%s:ROM: write %llx to 5f7008\n", cpuexec_describe_context(machine), data);
|
// ROM_DATA
|
||||||
}
|
// Doa2 writes here (16 bit decryption key ?)
|
||||||
else if ((offset == 15) && ACCESSING_BITS_0_15)
|
//mame_printf_verbose("%s:ROM: write %llx to 5f7008\n", cpuexec_describe_context(machine), data);
|
||||||
{
|
}
|
||||||
running_machine *machine = device->machine;
|
}
|
||||||
|
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
|
// NAOMI_BOARDID_WRITE
|
||||||
x76f100_cs_write(machine, 0, (data >> 2) & 1 );
|
x76f100_cs_write(machine, 0, (data >> 2) & 1 );
|
||||||
x76f100_rst_write(machine, 0, (data >> 3) & 1 );
|
x76f100_rst_write(machine, 0, (data >> 3) & 1 );
|
||||||
x76f100_scl_write(machine, 0, (data >> 1) & 1 );
|
x76f100_scl_write(machine, 0, (data >> 1) & 1 );
|
||||||
x76f100_sda_write(machine, 0, (data >> 0) & 1 );
|
x76f100_sda_write(machine, 0, (data >> 0) & 1 );
|
||||||
}
|
}
|
||||||
else if ((offset == 2) && ACCESSING_BITS_32_63)
|
}
|
||||||
{
|
break;
|
||||||
// NAOMI_DMA_COUNT
|
default:
|
||||||
v->dma_count = data >> 32;
|
//mame_printf_verbose("%s: ROM: write %llx to %x, mask %llx\n", cpuexec_describe_context(machine), data, offset, mem_mask);
|
||||||
}
|
break;
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -321,7 +341,7 @@ WRITE64_DEVICE_HANDLER( naomibd_w )
|
|||||||
*************************************/
|
*************************************/
|
||||||
|
|
||||||
#define FILENAME_LENGTH 16
|
#define FILENAME_LENGTH 16
|
||||||
|
|
||||||
static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
||||||
{
|
{
|
||||||
UINT32 result;
|
UINT32 result;
|
||||||
@ -357,7 +377,7 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
// find data of file
|
// find data of file
|
||||||
start = 0;
|
start = 0;
|
||||||
size = 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])
|
for (pos = 0;pos < 2048;pos += buffer[pos])
|
||||||
{
|
{
|
||||||
a=0;
|
a=0;
|
||||||
@ -393,14 +413,14 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
(buffer[pos+11] << 8) |
|
(buffer[pos+11] << 8) |
|
||||||
(buffer[pos+12] << 16) |
|
(buffer[pos+12] << 16) |
|
||||||
(buffer[pos+13] << 24));
|
(buffer[pos+13] << 24));
|
||||||
|
|
||||||
printf("start %08x size %08x\n", start,size);
|
printf("start %08x size %08x\n", start,size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (buffer[pos] == 0)
|
if (buffer[pos] == 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((start != 0) && (size == 0x100))
|
if ((start != 0) && (size == 0x100))
|
||||||
{
|
{
|
||||||
// read file
|
// read file
|
||||||
@ -408,14 +428,14 @@ static void load_rom_gdrom(running_machine* machine, naomibd_state *v)
|
|||||||
// get "rom" file name
|
// get "rom" file name
|
||||||
memset(name,'\0', 128);
|
memset(name,'\0', 128);
|
||||||
memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
|
memcpy(name, buffer+0xc0, FILENAME_LENGTH-1);
|
||||||
|
|
||||||
|
|
||||||
// directory
|
// directory
|
||||||
result = cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
|
result = cdrom_read_data(gdromfile, dir, buffer, CD_TRACK_MODE1);
|
||||||
// find data of "rom" file
|
// find data of "rom" file
|
||||||
start = 0;
|
start = 0;
|
||||||
size = 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])
|
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+11] << 8) |
|
||||||
(buffer[pos+12] << 16) |
|
(buffer[pos+12] << 16) |
|
||||||
(buffer[pos+13] << 24));
|
(buffer[pos+13] << 24));
|
||||||
|
|
||||||
printf("start %08x size %08x\n", start,size);
|
printf("start %08x size %08x\n", start,size);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (buffer[pos] == 0)
|
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
|
// 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)))
|
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))
|
if (mem_mask == U64(0xffffffff00000000))
|
||||||
@ -1083,6 +1084,38 @@ static void testdrawscreen(const running_machine *machine,bitmap_t *bitmap,const
|
|||||||
case 4: // bumpmap
|
case 4: // bumpmap
|
||||||
break;
|
break;
|
||||||
case 5: // 4 bpp palette
|
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;
|
break;
|
||||||
case 6: // 8 bpp palette
|
case 6: // 8 bpp palette
|
||||||
if (state_ta.grab[rs].showsprites[cs].texturemode & 2) // vq-compressed
|
if (state_ta.grab[rs].showsprites[cs].texturemode & 2) // vq-compressed
|
||||||
|
Loading…
Reference in New Issue
Block a user