summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Angelo Salese <angelosa@users.noreply.github.com>2009-04-07 19:46:28 +0000
committer Angelo Salese <angelosa@users.noreply.github.com>2009-04-07 19:46:28 +0000
commit3a3c6ce354dc0bd1e11a9376879d35fc1a635251 (patch)
treeb1a9989d74f1585a97c7de4434483f0a6a934bde
parent98e757b219dc10a3b9a45ebfa9bd1c0bb37d650e (diff)
Various fixes with Naomi, mainly get rid of the annoying assert on the video file, now even more games boots (tested Melty Blood)
-rw-r--r--src/mame/machine/dc.c10
-rw-r--r--src/mame/machine/naomibd.c174
-rw-r--r--src/mame/video/dc.c35
3 files changed, 137 insertions, 82 deletions
diff --git a/src/mame/machine/dc.c b/src/mame/machine/dc.c
index 031a7422037..3ce6b94898c 100644
--- a/src/mame/machine/dc.c
+++ b/src/mame/machine/dc.c
@@ -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;
diff --git a/src/mame/machine/naomibd.c b/src/mame/machine/naomibd.c
index 4ab94ceab21..ae19321dd29 100644
--- a/src/mame/machine/naomibd.c
+++ b/src/mame/machine/naomibd.c
@@ -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)
diff --git a/src/mame/video/dc.c b/src/mame/video/dc.c
index 48ddfed0c38..78ef37d53a8 100644
--- a/src/mame/video/dc.c
+++ b/src/mame/video/dc.c
@@ -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