diff options
Diffstat (limited to 'src/mame/machine')
-rw-r--r-- | src/mame/machine/kaneko16.c | 112 | ||||
-rw-r--r-- | src/mame/machine/naomibd.c | 6 | ||||
-rw-r--r-- | src/mame/machine/snes.c | 22 |
3 files changed, 70 insertions, 70 deletions
diff --git a/src/mame/machine/kaneko16.c b/src/mame/machine/kaneko16.c index afc6fdf907d..8c20b0548a4 100644 --- a/src/mame/machine/kaneko16.c +++ b/src/mame/machine/kaneko16.c @@ -405,7 +405,7 @@ Blocks marked ** are decrypted and verified ** Block 11 Found Base 0136 - Inline Encryption (size 13) - Mode? 00 Unknown 3f Key (unused?) 53 Length 00fe ** Block 12 Found Base 024d - Mode? 02 Unknown 38 Key 00 Length 0050 | just a shift ** Block 13 Found Base 02a3 - Mode? 02 Unknown 6f Key bc Length 09e0 | shift 2 places - (test mode code / data!) -** Block 14 Found Base 0c89 - Mode? 03 Unknown 01 Key 31 Length 1880 | just a table +** Block 14 Found Base 0c89 - Mode? 03 Unknown 01 Key 31 Length 1880 | just a table ** Block 15 Found Base 250f - Mode? 02 Unknown 3f Key 24 Length 03b8 | shift 3 places + table, contains GAME OVER, CONTINUE ** Block 16 Found Base 28cd - Mode? 01 Unknown 03 Key 80 Length 018a ** Block 17 Found Base 2a5d - Mode? 01 Unknown 1f Key 15 Length 018a @@ -477,28 +477,28 @@ static UINT8 calc3_key04[64] = { 0x4e,0x7b,0x0e,0x87,0x79,0x3c,0xd1,0x8f,0x8b,0xa4,0x5a,0x61,0x68,0xac,0x87,0x6b, 0xc4,0xc4,0x98,0x36,0xb3,0x75,0x16,0x33,0xf2,0x45,0x84,0xb8,0xf2,0xdb,0xc7,0x46, }; - + static UINT8 calc3_key19[64] = { 0x30,0x72,0xe0,0xca,0xa4,0xe5,0x41,0x44,0xd4,0xfe,0xe6,0x82,0x3e,0x85,0x18,0x30, 0x50,0x17,0x9f,0x77,0xf8,0xcb,0xb0,0xc4,0xed,0x16,0x96,0xca,0xba,0xec,0x22,0xca, 0x8f,0x28,0xd3,0x12,0xc6,0x2e,0xc4,0xc3,0x36,0xcf,0x59,0xd8,0x3a,0x6c,0xa7,0x64, 0x7f,0x5f,0xa6,0x1b,0x90,0x96,0x19,0x14,0x22,0x81,0x38,0xcd,0x20,0x2f,0x22,0x70, }; - + static UINT8 calc3_key24[64] = { 0x75,0x49,0x7a,0xd6,0x84,0xbd,0x70,0xbe,0x10,0x19,0x6c,0xb2,0xa9,0x5f,0x6b,0x78, 0x14,0x29,0x2a,0x15,0xd0,0x4a,0x10,0x93,0x69,0xb2,0xdf,0x02,0x7f,0x92,0x19,0xbd, 0x95,0xc1,0x32,0xee,0x99,0x5e,0x7a,0x55,0x37,0xb7,0xc8,0x45,0xdc,0x6a,0xe6,0xef, 0x8b,0xca,0xbe,0xe2,0x63,0x85,0x49,0xd3,0xeb,0x83,0x32,0x9a,0x23,0x11,0x4c,0x7e, }; - + static UINT8 calc3_key31[64] = { 0x02,0x21,0x0f,0xf2,0x98,0xc6,0xa7,0x51,0xbd,0x50,0xe6,0xc6,0x8d,0x15,0xb4,0xc5, 0x18,0x99,0x78,0x45,0xeb,0xe4,0x09,0xfa,0x5c,0xa4,0x51,0x4f,0x98,0x02,0xc0,0x24, 0x6d,0x44,0x77,0x4b,0xd7,0x26,0x2f,0xc3,0x4c,0xf8,0xee,0xb1,0xc7,0x76,0x68,0x22, 0x94,0x6a,0x35,0x82,0xe0,0x02,0xb7,0xda,0xff,0xf2,0xc7,0xcc,0x7b,0x48,0x25,0x4f, }; - + static UINT8 calc3_key39[64] = { 0x7d,0xf8,0x54,0xc5,0x74,0xf6,0x54,0x1d,0x40,0xe1,0x71,0xc2,0xdd,0x03,0x72,0xdf, 0x3b,0x77,0xa1,0x1c,0xc7,0xd6,0xb1,0x67,0xb7,0x13,0x6f,0xf4,0x18,0xa4,0x2a,0x82, @@ -526,7 +526,7 @@ static UINT8 calc3_keybc[64] = { 0xd5,0xf9,0x42,0x57,0x7a,0xf8,0x30,0x2e,0xea,0x49,0xe5,0xd5,0x34,0x6a,0xcd,0x5b, 0xfa,0x8e,0x71,0x32,0xfa,0x42,0x69,0xec,0x5d,0x50,0x02,0x42,0xc2,0xe4,0xae,0x5a, }; - + // global so we can use them in the filename when we save out the data (debug..) static UINT8 calc3_decryption_key_byte; static UINT8 calc3_unknown; @@ -546,7 +546,7 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, int isbrap = ( !strcmp(machine->gamedrv->name,"brapboysj") || !strcmp(machine->gamedrv->name,"brapboys")); numregions = rom[offset+0]; - + if (tabnum > numregions) { printf("CALC3 error, requested table > num tables!\n"); @@ -642,7 +642,7 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, 0x00, 0x08, 0x4E, 0x75, 0xFF, 0xFF, 0x00, 0x3F, 0xE8, 0xC0, 0x42, 0x00, 0x03, 0xC0, 0x00, 0x00, 0x57, 0x00, 0x7E, 0x00, 0xFC, 0x00, 0x03, 0x03 }; - + if ( ((i / 19)&1)==0) { if (((i%inline_table_size)&1)==1) @@ -651,7 +651,7 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, dat = rom[offset+i]; //printf("%02x, ",inlinet); dat -= inlinet; - + dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5); if (dat != rawData[i]) printf("ERROR %d x %02x %02x\n", (i / 19)&1, dat, rawData[i]); } @@ -663,11 +663,11 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, dat -= inlinet; dat -= extra[(i%inline_table_size)>>1]; dat = BITSWAP8(dat, 2,1,0,7,6,5,4,3); - + if (dat != rawData[i]) printf("ERROR %d y %02x %02x\n", (i / 19)&1, dat, rawData[i]); - + //dat = rawData[i]; - + } } else @@ -677,22 +677,22 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, UINT8 inlinet = rom[inline_table_base + (i%inline_table_size)]; dat = rom[offset+i]; dat -= inlinet; - + dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5); if (dat != rawData[i]) printf("ERROR %d x %02x %02x\n", (i / 19)&1, dat, rawData[i]); } else { - // shhould probably use the inline table somehow? - + // shhould probably use the inline table somehow? + UINT8 extra[] = { 0x2f, 0x04, 0xd1, 0x69, 0xad, 0xeb, 0x10, 0x95,0xb0 };; dat = rom[offset+i]; - + dat -= extra[(i%inline_table_size)>>1]; dat = BITSWAP8(dat, 2,1,0,7,6,5,4,3); - + if (dat != rawData[i]) printf("ERROR %d y %02x %02x\n", (i / 19)&1, dat, rawData[i]); - } + } } } else if (tabnum==0x40) // fjbuster / shogun warriors japanese character select (what enables this extra?) @@ -701,7 +701,7 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, dat = rom[offset+i]; //printf("%02x, ",inlinet); dat -= inlinet; - + // note the original, table is an odd number of words, so we can't just check if i is odd / even because the additional overlay // is relative to the start of the original table, and has a size of 0x11 (17) bytes which loop. if (((i%inline_table_size)&1)==0) @@ -733,10 +733,10 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, if (calc3_decryption_key_byte == 0x17) key = calc3_key17; if (calc3_decryption_key_byte == 0x19) key = calc3_key19; if (calc3_decryption_key_byte == 0x24) key = calc3_key24; - if (calc3_decryption_key_byte == 0x31) key = calc3_key31; + if (calc3_decryption_key_byte == 0x31) key = calc3_key31; if (calc3_decryption_key_byte == 0x39) key = calc3_key39; - if (calc3_decryption_key_byte == 0x80) key = calc3_key80; - if (calc3_decryption_key_byte == 0x89) key = calc3_key89; + if (calc3_decryption_key_byte == 0x80) key = calc3_key80; + if (calc3_decryption_key_byte == 0x89) key = calc3_key89; if (calc3_decryption_key_byte == 0xbc) key = calc3_keybc; @@ -748,15 +748,15 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, if (tabnum==0x12 && isbrap) { - dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5); + dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5); } else if (tabnum==0x13 && isbrap) { dat -= key[i&0x3f]; - - if ((i&1)==0) dat = BITSWAP8(dat, 5,4,3,2,1,0,7,6); + + if ((i&1)==0) dat = BITSWAP8(dat, 5,4,3,2,1,0,7,6); else dat = BITSWAP8(dat, 1,0,7,6,5,4,3,2); - + } else if (tabnum==0x14 && isbrap) { @@ -765,11 +765,11 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, else if (tabnum==0x15 && isbrap) { dat -= key[i&0x3f]; - + if ((i&1)==0) dat = BITSWAP8(dat, 2,1,0,7,6,5,4,3); else dat = BITSWAP8(dat, 4,3,2,1,0,7,6,5); - - //error 264 35 36 (typo, ignore) + + //error 264 35 36 (typo, ignore) } else if (tabnum==0x16 && isbrap) { @@ -777,14 +777,14 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, // error 1 02 should be 00 (the usual) } else if (tabnum==0x17 && isbrap) - { + { // note we've seen this key (0x15) before, but again, here we have to add sometimes.. obviously a bit to control this.. if ((i&1)==0) dat += key[i&0x3f]; else dat -= key[i&0x3f]; - + if ((i&1)==0) dat = BITSWAP8(dat, 0,7,6,5,4,3,2,1); - else dat = BITSWAP8(dat, 6,5,4,3,2,1,0,7); - + else dat = BITSWAP8(dat, 6,5,4,3,2,1,0,7); + //error 1 02 should be 00 (the usual) //error 390 02 should be 00 (typo, ignore) //error 391 c6 should be 2c (typo, ignore) @@ -792,70 +792,70 @@ int calc3_decompress_table(running_machine* machine, int tabnum, UINT8* dstram, //error 393 60 should be 36 (typo, ignore) } else if (tabnum==0x19 && isbrap) - { - dat -= key[i&0x3f]; + { + dat -= key[i&0x3f]; // first 2 bytes were 00 in the returned data.. - //if (i==1) dat=0x00; + //if (i==1) dat=0x00; } else if (tabnum==0x1f && isbrap) { dat -= key[i&0x3f]; - + if ((i&1)==0) dat = BITSWAP8(dat, 0,7,6,5,4,3,2,1); - else dat = BITSWAP8(dat, 6,5,4,3,2,1,0,7); + else dat = BITSWAP8(dat, 6,5,4,3,2,1,0,7); } else if (tabnum==0x22 && isbrap) { - + #if 0 { UINT8 test; UINT8 xxx; - + if ((i&1)==1) xxx = BITSWAP8(rawData[i], 0,7,6,5,4,3,2,1); - else xxx = BITSWAP8(rawData[i], 6,5,4,3,2,1,0,7); - + else xxx = BITSWAP8(rawData[i], 6,5,4,3,2,1,0,7); + test= dat-xxx; - + printf("%02x,%02x,%02x ",dat, rawData[i], test); if ((i%0x40)==0x3f) printf("\n"); - + //if (dat!=rawData[i]) printf("error %d %02x should be %02x\n",i, dat, rawData[i]); } #endif { dat -= key[i&0x3f]; - + if ((i&1)==0) dat = BITSWAP8(dat, 0,7,6,5,4,3,2,1); else dat = BITSWAP8(dat, 6,5,4,3,2,1,0,7); // first 2 bytes were 00 in the returned data.. - //if (i==1) dat=0x00; - } - - + //if (i==1) dat=0x00; + } + + } else if (tabnum==0x23 && isbrap) { dat -= key[i&0x3f]; // error 1 18 should be 00 (usual byte 1 'issue) // error 384 98 should be 38 (typo, ignore) - + } else if (tabnum==0x80 && !isbrap) // shogwarr table 80 (irq code) { if ((i&1)==0) { dat -= key[i&0x3f]; - dat = BITSWAP8(dat,2,1,0,7,6,5,4,3); + dat = BITSWAP8(dat,2,1,0,7,6,5,4,3); } else { // note + , not - (!!) dat += key[i&0x3f]; dat = BITSWAP8(dat,4,3,2,1,0,7,6,5); - } + } } else if (tabnum==0x41 && !isbrap) // shogwarr table 41 -- note fjbuster uses table 40, which looks like (almost) the same data but with better encryption... { @@ -1014,7 +1014,7 @@ static void calc3_mcu_run(running_machine *machine) calc3_writeaddress = (kaneko16_mcu_ram[(0>>1) + 6] << 16) | (kaneko16_mcu_ram[(0>>1) + 7]); - printf("Calc 3 Init Command - %04x DSW addr\n", calc3_dsw_addr); + printf("Calc 3 Init Command - %04x DSW addr\n", calc3_dsw_addr); printf("Calc 3 Init Command - %04x Eeprom Address\n", calc3_eeprom_addr); printf("Calc 3 Init Command - %04x Future Commands Base\n", calc3_mcu_command_offset); printf("Calc 3 Init Command - %04x Poll / Busy Address\n", calc3_poll_addr); @@ -1094,9 +1094,9 @@ static void calc3_mcu_run(running_machine *machine) kaneko16_mcu_ram[(commandaddr>>1)+0] = (calc3_writeaddress>>16)&0xffff; kaneko16_mcu_ram[(commandaddr>>1)+1] = (calc3_writeaddress&0xffff); calc3_writeaddress += length; - } - - + } + + else { calc3_decompress_table(machine, commandtabl, (UINT8*)kaneko16_calc3_fakeram, fakeoffs&0xfffff); diff --git a/src/mame/machine/naomibd.c b/src/mame/machine/naomibd.c index 25d67c43655..d8633bdfc7f 100644 --- a/src/mame/machine/naomibd.c +++ b/src/mame/machine/naomibd.c @@ -593,7 +593,7 @@ WRITE64_DEVICE_HANDLER( naomibd_w ) case 0x1fffc: // decryption key v->prot_key = data; -// printf("Protection: set up read @ %x, key %x (PIO %x DMA %x) [%s]\n", v->prot_offset, v->prot_key, v->rom_offset, v->dma_offset, cpuexec_describe_context(device->machine)); +// printf("Protection: set up read @ %x, key %x (PIO %x DMA %x) [%s]\n", v->prot_offset, v->prot_key, v->rom_offset, v->dma_offset, cpuexec_describe_context(device->machine)); // translate address if necessary if (v->prot_translate != NULL) @@ -1030,7 +1030,7 @@ DEVICE_GET_INFO( naomibd ) case DEVINFO_INT_INLINE_CONFIG_BYTES: info->i = sizeof(naomibd_config); break; case DEVINFO_INT_CLASS: info->i = DEVICE_CLASS_PERIPHERAL; break; case DEVINFO_INT_DMAOFFSET: -// printf("DMA source %x, flags %x\n", get_safe_token(device)->dma_offset, get_safe_token(device)->dma_offset_flags); +// printf("DMA source %x, flags %x\n", get_safe_token(device)->dma_offset, get_safe_token(device)->dma_offset_flags); // if the flag is cleared that lets the protection chip go, // we need to handle this specially. @@ -1041,7 +1041,7 @@ DEVICE_GET_INFO( naomibd ) info->i = 0x9000000; break; } - else if (!strcmp(device->machine->gamedrv->name, "mvsc2")) + else if (!strcmp(device->machine->gamedrv->name, "mvsc2")) { switch (get_safe_token(device)->dma_offset) { diff --git a/src/mame/machine/snes.c b/src/mame/machine/snes.c index a4611987e2d..d3f3e22730f 100644 --- a/src/mame/machine/snes.c +++ b/src/mame/machine/snes.c @@ -72,7 +72,7 @@ static void snes_latch_counters(running_machine *machine) snes_ppu.beam.latch_vert = video_screen_get_vpos(machine->primary_screen); snes_ppu.beam.latch_horz = snes_ppu.beam.current_horz; snes_ram[STAT78] |= 0x40; // indicate we latched -// read_ophct = read_opvct = 0; // clear read flags - 2009-08: I think we must clear these when STAT78 is read... +// read_ophct = read_opvct = 0; // clear read flags - 2009-08: I think we must clear these when STAT78 is read... // printf("latched @ H %d V %d\n", snes_ppu.beam.latch_horz, snes_ppu.beam.latch_vert); } @@ -372,12 +372,12 @@ READ8_HANDLER( snes_r_io ) return snes_ppu.ppu1_open_bus; // According to BSNES, these should return snes_open_bus_r! -// case OAMADDL: -// case OAMADDH: -// case VMADDH: -// case CGADD: -// case CGDATA: -// return snes_ram[offset]; +// case OAMADDL: +// case OAMADDH: +// case VMADDH: +// case CGADD: +// case CGDATA: +// return snes_ram[offset]; case MPYL: /* Multiplication result (low) */ { /* Perform 16bit * 8bit multiply */ @@ -577,7 +577,7 @@ READ8_HANDLER( snes_r_io ) joypad[1].oldrol&=0xf; if( !(joypad[1].oldrol % 17) ) value = 0x1; - //value |= 0x1c; // bits 4, 3, and 2 are always set + //value |= 0x1c; // bits 4, 3, and 2 are always set return value | 0x1c | (snes_open_bus_r(space,0) & 0xe0); //correct? } case HTIMEL: @@ -666,7 +666,7 @@ READ8_HANDLER( snes_r_io ) } /* Unsupported reads returns open bus */ -// printf("%02x %02x\n",offset,snes_open_bus_r(space,0)); +// printf("%02x %02x\n",offset,snes_open_bus_r(space,0)); return snes_open_bus_r(space,0); } @@ -681,7 +681,7 @@ WRITE8_HANDLER( snes_w_io ) // APU is mirrored from 2140 to 217f if (offset >= APU00 && offset < WMDATA) { -// printf("816: %02x to APU @ %d\n", data, offset&3); +// printf("816: %02x to APU @ %d\n", data, offset&3); spc_port_in[offset & 0x3] = data; cpuexec_boost_interleave(space->machine, attotime_zero, ATTOTIME_IN_USEC(20)); return; @@ -2193,7 +2193,7 @@ void snes_gdma( const address_space *space, UINT8 channels ) if( !length ) length = 0x10000; /* 0x0000 really means 0x10000 */ -// printf( "GDMA-Ch %d: len: %X, abus: %X, bbus: %X, incr: %d, dir: %s, type: %d\n", i, length, abus, bbus, increment, snes_ram[SNES_DMA_BASE + dma] & 0x80 ? "PPU->CPU" : "CPU->PPU", snes_ram[SNES_DMA_BASE + dma] & 0x7 ); +// printf( "GDMA-Ch %d: len: %X, abus: %X, bbus: %X, incr: %d, dir: %s, type: %d\n", i, length, abus, bbus, increment, snes_ram[SNES_DMA_BASE + dma] & 0x80 ? "PPU->CPU" : "CPU->PPU", snes_ram[SNES_DMA_BASE + dma] & 0x7 ); #ifdef SNES_DBG_GDMA mame_printf_debug( "GDMA-Ch %d: len: %X, abus: %X, bbus: %X, incr: %d, dir: %s, type: %d\n", i, length, abus, bbus, increment, snes_ram[SNES_DMA_BASE + dma] & 0x80 ? "PPU->CPU" : "CPU->PPU", snes_ram[SNES_DMA_BASE + dma] & 0x7 ); |