diff options
author | 2009-04-07 19:46:28 +0000 | |
---|---|---|
committer | 2009-04-07 19:46:28 +0000 | |
commit | 3a3c6ce354dc0bd1e11a9376879d35fc1a635251 (patch) | |
tree | b1a9989d74f1585a97c7de4434483f0a6a934bde | |
parent | 98e757b219dc10a3b9a45ebfa9bd1c0bb37d650e (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.c | 10 | ||||
-rw-r--r-- | src/mame/machine/naomibd.c | 174 | ||||
-rw-r--r-- | src/mame/video/dc.c | 35 |
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 |