mirror of
https://github.com/holub/mame
synced 2025-04-23 00:39:36 +03:00
kill some old code (nw)
This commit is contained in:
parent
e5541cf61b
commit
f84fff614e
@ -215,7 +215,7 @@ WRITE16_MEMBER( cninja_state::sshangha_protection_region_8_146_w )
|
||||
|
||||
READ16_MEMBER( cninja_state::sshangha_protection_region_6_146_r )
|
||||
{
|
||||
UINT16 realdat = deco16_60_prot_r(space,offset&0x3ff,mem_mask);
|
||||
// UINT16 realdat = deco16_60_prot_r(space,offset&0x3ff,mem_mask);
|
||||
|
||||
int real_address = 0x198000 + (offset *2);
|
||||
int deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
|
||||
@ -223,18 +223,15 @@ READ16_MEMBER( cninja_state::sshangha_protection_region_6_146_r )
|
||||
UINT16 data = m_deco146->read_data( deco146_addr, mem_mask, cs );
|
||||
|
||||
|
||||
if ((realdat & mem_mask) != (data & mem_mask))
|
||||
printf("returned %04x instead of %04x (real address %08x)\n", data, realdat, real_address);
|
||||
// if ((realdat & mem_mask) != (data & mem_mask))
|
||||
// printf("returned %04x instead of %04x (real address %08x)\n", data, realdat, real_address);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( cninja_state::sshangha_protection_region_6_146_w )
|
||||
{
|
||||
|
||||
|
||||
|
||||
deco16_60_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
// deco16_60_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
|
||||
|
||||
int real_address = 0x198000 + (offset *2);
|
||||
@ -307,7 +304,7 @@ ADDRESS_MAP_END
|
||||
|
||||
READ16_MEMBER( cninja_state::mutantf_protection_region_0_146_r )
|
||||
{
|
||||
UINT16 realdat = deco16_66_prot_r(space,offset&0x3ff,mem_mask);
|
||||
// UINT16 realdat = deco16_66_prot_r(space,offset&0x3ff,mem_mask);
|
||||
|
||||
int real_address = 0 + (offset *2);
|
||||
int deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
|
||||
@ -315,16 +312,15 @@ READ16_MEMBER( cninja_state::mutantf_protection_region_0_146_r )
|
||||
UINT16 data = m_deco146->read_data( deco146_addr, mem_mask, cs );
|
||||
|
||||
|
||||
if ((realdat & mem_mask) != (data & mem_mask))
|
||||
logerror("returned %04x instead of %04x (real address %08x)\n", data, realdat, real_address);
|
||||
// if ((realdat & mem_mask) != (data & mem_mask))
|
||||
// logerror("returned %04x instead of %04x (real address %08x)\n", data, realdat, real_address);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( cninja_state::mutantf_protection_region_0_146_w )
|
||||
{
|
||||
deco16_66_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
|
||||
// deco16_66_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
|
||||
int real_address = 0 + (offset *2);
|
||||
int deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, 10,9,8, 7,6,5,4, 3,2,1,0) & 0x7fff;
|
||||
|
@ -101,24 +101,22 @@ Notes:
|
||||
|
||||
READ16_MEMBER( funkyjet_state::funkyjet_protection_region_0_146_r )
|
||||
{
|
||||
UINT16 realdat = deco16_146_funkyjet_prot_r(space,offset&0x3ff,mem_mask);
|
||||
// UINT16 realdat = deco16_146_funkyjet_prot_r(space,offset&0x3ff,mem_mask);
|
||||
|
||||
int real_address = 0 + (offset *2);
|
||||
int deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, /* note, same bitswap as fghthist */ 5, 6, 4, 7, 3, 8, 2, 9, 1, 10, 0) & 0x7fff;
|
||||
UINT8 cs = 0;
|
||||
UINT16 data = m_deco146->read_data( deco146_addr, mem_mask, cs );
|
||||
|
||||
|
||||
if ((realdat & mem_mask) != (data & mem_mask))
|
||||
printf("returned %04x instead of %04x (real address %08x swapped addr %08x)\n", data, realdat, real_address, deco146_addr);
|
||||
// if ((realdat & mem_mask) != (data & mem_mask))
|
||||
// printf("returned %04x instead of %04x (real address %08x swapped addr %08x)\n", data, realdat, real_address, deco146_addr);
|
||||
|
||||
return data;
|
||||
}
|
||||
|
||||
WRITE16_MEMBER( funkyjet_state::funkyjet_protection_region_0_146_w )
|
||||
{
|
||||
deco16_146_funkyjet_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
|
||||
// deco16_146_funkyjet_prot_w(space,offset&0x3ff,data,mem_mask);
|
||||
|
||||
int real_address = 0 + (offset *2);
|
||||
int deco146_addr = BITSWAP32(real_address, /* NC */31,30,29,28,27,26,25,24,23,22,21,20,19,18, 13,12,11,/**/ 17,16,15,14, /* note, same bitswap as fghthist */ 5, 6, 4, 7, 3, 8, 2, 9, 1, 10, 0) & 0x7fff;
|
||||
|
@ -58,33 +58,10 @@ Stephh's notes (based on the games M68000 code and some tests) :
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
WRITE16_MEMBER(sshangha_state::sshangha_protection16_w)
|
||||
{
|
||||
COMBINE_DATA(&m_prot_data[offset]);
|
||||
|
||||
logerror("CPU #0 PC %06x: warning - write unmapped control address %06x %04x\n",space.device().safe_pc(),offset<<1,data);
|
||||
}
|
||||
|
||||
/* Protection/IO chip 146 */
|
||||
READ16_MEMBER(sshangha_state::sshangha_protection16_r)
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x050 >> 1:
|
||||
return ioport("INPUTS")->read();
|
||||
case 0x76a >> 1:
|
||||
return ioport("SYSTEM")->read();
|
||||
case 0x0ac >> 1:
|
||||
return ioport("DSW")->read();
|
||||
|
||||
// Protection TODO
|
||||
}
|
||||
|
||||
logerror("CPU #0 PC %06x: warning - read unmapped control address %06x\n",space.device().safe_pc(),offset<<1);
|
||||
return m_prot_data[offset];
|
||||
}
|
||||
|
||||
READ16_MEMBER(sshangha_state::sshanghb_protection16_r)
|
||||
READ16_MEMBER(sshangha_state::sshanghb_protection16_r) // bootleg inputs
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
|
@ -51,8 +51,6 @@ public:
|
||||
DECLARE_WRITE16_MEMBER( sshangha_protection_region_d_146_w );
|
||||
|
||||
|
||||
DECLARE_WRITE16_MEMBER(sshangha_protection16_w);
|
||||
DECLARE_READ16_MEMBER(sshangha_protection16_r);
|
||||
DECLARE_READ16_MEMBER(sshanghb_protection16_r);
|
||||
DECLARE_READ16_MEMBER(deco_71_r);
|
||||
DECLARE_READ8_MEMBER(sshangha_sound_shared_r);
|
||||
|
@ -1807,499 +1807,3 @@ READ16_HANDLER( deco16_146_nitroball_prot_r )
|
||||
|
||||
return deco16_146_core_prot_r(space, addr, mem_mask);
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
Legacy protection handlers below, these are to be removed after we've ensured nothing is broken
|
||||
by the new code
|
||||
|
||||
these were for
|
||||
Edward Randy
|
||||
Mutant Fighter
|
||||
Funky Jet
|
||||
*****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
*****************************************************************************************************
|
||||
****************************************************************************************************/
|
||||
|
||||
|
||||
WRITE16_HANDLER( deco16_146_funkyjet_prot_w )
|
||||
{
|
||||
driver_device *state = space.machine().driver_data<driver_device>();
|
||||
COMBINE_DATA(&deco16_prot_ram[offset]);
|
||||
|
||||
if (offset == (0x10a >> 1))
|
||||
{
|
||||
state->soundlatch_byte_w(space, 0, data & 0xff);
|
||||
space.machine().device("audiocpu")->execute().set_input_line(0, HOLD_LINE);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
READ16_HANDLER( deco16_146_funkyjet_prot_r )
|
||||
{
|
||||
switch (offset)
|
||||
{
|
||||
case 0x0be >> 1:
|
||||
return deco16_prot_ram[0x106>>1];
|
||||
case 0x11e >> 1:
|
||||
return deco16_prot_ram[0x500>>1];
|
||||
|
||||
case 0x148 >> 1: /* EOR mask for joysticks */
|
||||
return deco16_prot_ram[0x70e>>1];
|
||||
|
||||
case 0x1da >> 1:
|
||||
return deco16_prot_ram[0x100>>1];
|
||||
case 0x21c >> 1:
|
||||
return deco16_prot_ram[0x504>>1];
|
||||
case 0x226 >> 1:
|
||||
return deco16_prot_ram[0x58c>>1];
|
||||
case 0x24c >> 1:
|
||||
return deco16_prot_ram[0x78e>>1];
|
||||
case 0x250 >> 1:
|
||||
return deco16_prot_ram[0x304>>1];
|
||||
case 0x2d4 >> 1:
|
||||
return deco16_prot_ram[0x102>>1];
|
||||
case 0x2d8 >> 1: /* EOR mask for credits */
|
||||
return deco16_prot_ram[0x502>>1];
|
||||
|
||||
case 0x3a6 >> 1:
|
||||
return deco16_prot_ram[0x104>>1];
|
||||
case 0x3a8 >> 1: /* See 93e4/9376 */
|
||||
return deco16_prot_ram[0x500>>1];
|
||||
|
||||
// The top byte of 0x50c is used as a bitmask of completed levels,
|
||||
// checked at end of each (0x0100 = level 1 completed,
|
||||
// 0x3000 = levels 5 & 6 completed, 0x3f00 = levels 1-6 completed, etc)
|
||||
case 0x56c >> 1:
|
||||
return deco16_prot_ram[0x50c>>1];
|
||||
|
||||
// The game compares $ffc0 to check for all 6 basic levels
|
||||
// being completed. (which is 0x3f00 inverted and shifted)
|
||||
// If wrong value is returned here the level select screen is
|
||||
// incorrectly shown and leads to a crash as that screen
|
||||
// cannot cope with all levels being already completed.
|
||||
case 0x3e8 >> 1:
|
||||
return (deco16_prot_ram[0x50c>>1] >> 8) ^ 0xffff;
|
||||
|
||||
case 0x4e4 >> 1:
|
||||
return deco16_prot_ram[0x702>>1];
|
||||
case 0x562 >> 1:
|
||||
return deco16_prot_ram[0x18e>>1];
|
||||
|
||||
case 0x688 >> 1:
|
||||
return deco16_prot_ram[0x300>>1];
|
||||
case 0x788 >> 1:
|
||||
return deco16_prot_ram[0x700>>1];
|
||||
|
||||
case 0x7d4 >> 1: /* !? On the bootleg these address checks are NOP'd, so a BEQ is never taken */
|
||||
return 0x10; //deco16_prot_ram[0x7da>>1];
|
||||
|
||||
case 0x27c >>1: /* From bootleg code at 0x400 */
|
||||
return ((deco16_prot_ram[0x70e>>1]>>4)&0x0fff) | ((deco16_prot_ram[0x70e>>1]&0x0001)<<15) | ((deco16_prot_ram[0x70e>>1]&0x000e)<<11);
|
||||
case 0x192 >>1: /* From bootleg code at 0x400 */
|
||||
return ((deco16_prot_ram[0x78e>>1]<<0)&0xf000);
|
||||
|
||||
case 0x5be >> 1: /* Confirmed from bootleg code at 0xc07c */
|
||||
return ((deco16_prot_ram[0x70e>>1]<<4)&0xff00) | (deco16_prot_ram[0x70e>>1]&0x000f);
|
||||
case 0x5ca >> 1: /* Confirmed from bootleg code at 0xc05e */
|
||||
return ((deco16_prot_ram[0x78e>>1]>>4)&0xff00) | (deco16_prot_ram[0x78e>>1]&0x000f) | ((deco16_prot_ram[0x78e>>1]<<8)&0xf000);
|
||||
|
||||
case 0x00c >> 1: /* Player 1 & Player 2 joysticks & fire buttons */
|
||||
return space.machine().root_device().ioport("INPUTS")->read();
|
||||
case 0x778 >> 1: /* Credits */
|
||||
return space.machine().root_device().ioport("SYSTEM")->read();
|
||||
case 0x382 >> 1: /* DIPS */
|
||||
return space.machine().root_device().ioport("DSW")->read();
|
||||
}
|
||||
|
||||
if (space.device().safe_pc()!=0xc0ea)
|
||||
logerror("CPU #0 PC %06x: warning - read unmapped control address %06x (ctrl %04x)\n", space.device().safe_pc(), offset<<1, space.machine().root_device().ioport("INPUTS")->read());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
WRITE16_HANDLER( deco16_60_prot_w ) /* Edward Randy */
|
||||
{
|
||||
driver_device *state = space.machine().driver_data<driver_device>();
|
||||
if (offset == (0x64 / 2))
|
||||
{
|
||||
state->soundlatch_byte_w(space, 0, data & 0xff);
|
||||
space.machine().device("audiocpu")->execute().set_input_line(0, HOLD_LINE);
|
||||
}
|
||||
|
||||
COMBINE_DATA(&deco16_prot_ram[offset]);
|
||||
|
||||
// 0 4 2c 32 34 36 3c 3e 40 54 56 58 6a 76 80 84 88 8a 8c 8e 90 92 94 96 9e a0 a2 a4 a6 a8 aa ac ae b0
|
||||
|
||||
if (offset!=0x32 && offset!=0x36/2 && offset!=0x9e/2 && offset!=0x76/2
|
||||
&& offset!=4/2 && offset!=0x2c/2 && offset!=0x3c/2 && offset!=0x3e/2
|
||||
&& offset!=0x80/2 && offset!=0x84/2 &&offset!=0x88/2 && offset!=0x8c/2 && offset!=0x90/2 && offset!=0x94/2
|
||||
&& offset!=0xa0/2 &&offset!=0xa2/2 && offset!=0xa4/2 && offset!=0xa6/2 && offset!=0xa8/2
|
||||
&& offset!=0xaa/2 && offset!=0xac/2 && offset!=0xae/2 && offset!=0xb0/2
|
||||
&& (offset<0xd0/2 || offset>0xe0/2)
|
||||
&& (offset<4 || offset>17)
|
||||
&& offset!=0x40/2 && offset!=0x54/2 && offset!=0x56/2 && offset!=0x58/2 && offset!=0x6a/2 && offset!=0x2c/2
|
||||
&& offset!=0 && offset!=0x34 && offset!=0x8a && offset!=0x8e && offset!=0x92 && offset!=0x96
|
||||
)
|
||||
logerror("Protection PC %06x: warning - write %04x to %04x\n",space.device().safe_pc(),data,offset<<1);
|
||||
|
||||
}
|
||||
|
||||
READ16_HANDLER( deco16_60_prot_r ) /* Edward Randy */
|
||||
{
|
||||
switch (offset<<1) {
|
||||
/* Video registers */
|
||||
case 0x32a: /* Moved to 0x140006 on int */
|
||||
return deco16_prot_ram[0x80/2];
|
||||
case 0x380: /* Moved to 0x140008 on int */
|
||||
return deco16_prot_ram[0x84/2];
|
||||
case 0x63a: /* Moved to 0x150002 on int */
|
||||
return deco16_prot_ram[0x88/2];
|
||||
case 0x42a: /* Moved to 0x150004 on int */
|
||||
return deco16_prot_ram[0x8c/2];
|
||||
case 0x030: /* Moved to 0x150006 on int */
|
||||
return deco16_prot_ram[0x90/2];
|
||||
case 0x6b2: /* Moved to 0x150008 on int */
|
||||
return deco16_prot_ram[0x94/2];
|
||||
|
||||
case 0x6fa:
|
||||
return deco16_prot_ram[0x4/2];
|
||||
case 0xe4:
|
||||
return (deco16_prot_ram[0x4/2]&0xf000)|((deco16_prot_ram[0x4/2]&0x00ff)<<4)|((deco16_prot_ram[0x4/2]&0x0f00)>>8);
|
||||
|
||||
case 0x390:
|
||||
return deco16_prot_ram[0x2c/2];
|
||||
case 0x3b2:
|
||||
return deco16_prot_ram[0x3c/2];
|
||||
case 0x440:
|
||||
return deco16_prot_ram[0x3e/2];
|
||||
|
||||
case 0x6fc:
|
||||
return deco16_prot_ram[0x66/2];
|
||||
|
||||
case 0x15a:
|
||||
return deco16_prot_ram[0xa0/2];
|
||||
case 0x102:
|
||||
return deco16_prot_ram[0xa2/2];
|
||||
case 0x566:
|
||||
return deco16_prot_ram[0xa4/2];
|
||||
case 0xd2:
|
||||
return deco16_prot_ram[0xa6/2];
|
||||
case 0x4a6:
|
||||
return deco16_prot_ram[0xa8/2];
|
||||
case 0x3dc:
|
||||
return deco16_prot_ram[0xaa/2];
|
||||
case 0x2a0:
|
||||
return deco16_prot_ram[0xac/2];
|
||||
case 0x392:
|
||||
return deco16_prot_ram[0xae/2];
|
||||
case 0x444:
|
||||
return deco16_prot_ram[0xb0/2];
|
||||
|
||||
case 0x5ea:
|
||||
return deco16_prot_ram[0xb8/2];
|
||||
case 0x358:
|
||||
return deco16_prot_ram[0xba/2];
|
||||
case 0x342:
|
||||
return deco16_prot_ram[0xbc/2];
|
||||
case 0x3c:
|
||||
return deco16_prot_ram[0xbe/2];
|
||||
case 0x656:
|
||||
return deco16_prot_ram[0xc0/2];
|
||||
case 0x18c:
|
||||
return deco16_prot_ram[0xc2/2];
|
||||
case 0x370:
|
||||
return deco16_prot_ram[0xc4/2];
|
||||
case 0x5c6:
|
||||
return deco16_prot_ram[0xc6/2];
|
||||
|
||||
/* C8 written but not read */
|
||||
|
||||
case 0x248:
|
||||
return deco16_prot_ram[0xd0/2];
|
||||
case 0x1ea:
|
||||
return deco16_prot_ram[0xd2/2];
|
||||
case 0x4cc:
|
||||
return deco16_prot_ram[0xd4/2];
|
||||
case 0x724:
|
||||
return deco16_prot_ram[0xd6/2];
|
||||
case 0x578:
|
||||
return deco16_prot_ram[0xd8/2];
|
||||
case 0x63e:
|
||||
return deco16_prot_ram[0xda/2];
|
||||
case 0x4ba:
|
||||
return deco16_prot_ram[0xdc/2];
|
||||
case 0x1a:
|
||||
return deco16_prot_ram[0xde/2];
|
||||
case 0x120:
|
||||
return deco16_prot_ram[0xe0/2];
|
||||
case 0x7c2: /* (Not checked for mask/xor but seems standard) */
|
||||
return deco16_prot_ram[0x50/2];
|
||||
|
||||
/* memcpy selectors, transfer occurs in interrupt */
|
||||
case 0x32e: return deco16_prot_ram[4]; /* src msb */
|
||||
case 0x6d8: return deco16_prot_ram[5]; /* src lsb */
|
||||
case 0x010: return deco16_prot_ram[6]; /* dst msb */
|
||||
case 0x07a: return deco16_prot_ram[7]; /* src lsb */
|
||||
|
||||
case 0x37c: return deco16_prot_ram[8]; /* src msb */
|
||||
case 0x250: return deco16_prot_ram[9];
|
||||
case 0x04e: return deco16_prot_ram[10];
|
||||
case 0x5ba: return deco16_prot_ram[11];
|
||||
case 0x5f4: return deco16_prot_ram[12]; /* length */
|
||||
|
||||
case 0x38c: return deco16_prot_ram[13]; /* src msb */
|
||||
case 0x02c: return deco16_prot_ram[14];
|
||||
case 0x1e6: return deco16_prot_ram[15];
|
||||
case 0x3e4: return deco16_prot_ram[16];
|
||||
case 0x174: return deco16_prot_ram[17]; /* length */
|
||||
|
||||
/* Player 1 & 2 controls, read in IRQ then written *back* to protection device */
|
||||
case 0x50: /* written to 9e byte */
|
||||
return space.machine().root_device().ioport("INPUTS")->read();
|
||||
case 0x6f8: /* written to 76 byte */
|
||||
return (space.machine().root_device().ioport("INPUTS")->read()>>8)|(space.machine().root_device().ioport("INPUTS")->read()<<8); /* byte swap IN0 */
|
||||
|
||||
case 0x5c: /* After coin insert, high 0x8000 bit set starts game */
|
||||
return deco16_prot_ram[0x3b];
|
||||
case 0x3a6: /* Top byte OR'd with above, masked to 7 */
|
||||
return deco16_prot_ram[0x9e/2];
|
||||
case 0xc6:
|
||||
return ((deco16_prot_ram[0x9e/2]&0xff00)>>8) | ((deco16_prot_ram[0x9e/2]&0x00ff)<<8);
|
||||
|
||||
case 0xac: /* Dip switches */
|
||||
return space.machine().root_device().ioport("DSW")->read();
|
||||
case 0xc2:
|
||||
return space.machine().root_device().ioport("DSW")->read() ^ deco16_prot_ram[0x2c/2];
|
||||
|
||||
case 0x5d4: /* The state of the dips last frame */
|
||||
return deco16_prot_ram[0x34/2];
|
||||
|
||||
case 0x7bc:
|
||||
return ((deco16_prot_ram[0x76/2]&0xff00)>>8) | ((deco16_prot_ram[0x76/2]&0x00ff)<<8);
|
||||
|
||||
case 0x2f6: /* Stage clear flag */
|
||||
return (((deco16_prot_ram[0]&0xfff0)>>0) | ((deco16_prot_ram[0]&0x000c)>>2) | ((deco16_prot_ram[0]&0x0003)<<2)) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0x76a: /* Coins */
|
||||
return space.machine().root_device().ioport("SYSTEM")->read();
|
||||
|
||||
case 0x284: /* Bit shifting with inverted mask register */
|
||||
return (((deco16_prot_ram[0x40/2]&0xfff0)>>0) | ((deco16_prot_ram[0x40/2]&0x0007)<<1) | ((deco16_prot_ram[0x40/2]&0x0008)>>3)) & (~deco16_prot_ram[0x36/2]);
|
||||
case 0x6c4: /* Bit shifting with inverted mask register */
|
||||
return (((deco16_prot_ram[0x54/2]&0xf000)>>4) | ((deco16_prot_ram[0x54/2]&0x0f00)>>4) | ((deco16_prot_ram[0x54/2]&0x00f0)>>4) | ((deco16_prot_ram[0x54/2]&0x0003)<<14) | ((deco16_prot_ram[0x54/2]&0x000c)<<10)) & (~deco16_prot_ram[0x36/2]);
|
||||
case 0x33e: /* Bit shifting with inverted mask register */
|
||||
return (((deco16_prot_ram[0x56/2]&0xff00)>>0) | ((deco16_prot_ram[0x56/2]&0x00f0)>>4) | ((deco16_prot_ram[0x56/2]&0x000f)<<4)) & (~deco16_prot_ram[0x36/2]);
|
||||
case 0x156: /* Bit shifting with inverted mask register */
|
||||
return (((deco16_prot_ram[0x58/2]&0xfff0)>>4) | ((deco16_prot_ram[0x58/2]&0x000e)<<11) | ((deco16_prot_ram[0x58/2]&0x0001)<<15)) & (~deco16_prot_ram[0x36/2]);
|
||||
case 0x286: /* Bit shifting with inverted mask register */
|
||||
return (((deco16_prot_ram[0x6a/2]&0x00f0)<<4) | ((deco16_prot_ram[0x6a/2]&0x0f00)<<4) | ((deco16_prot_ram[0x6a/2]&0x0007)<<5) | ((deco16_prot_ram[0x6a/2]&0x0008)<<1)) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0x7d6: /* XOR IN0 */
|
||||
return space.machine().root_device().ioport("INPUTS")->read() ^ deco16_prot_ram[0x2c/2];
|
||||
case 0x4b4:
|
||||
return ((deco16_prot_ram[0x32/2]&0x00f0)<<8) | ((deco16_prot_ram[0x32/2]&0x000e)<<7) | ((deco16_prot_ram[0x32/2]&0x0001)<<11);
|
||||
}
|
||||
|
||||
logerror("Protection PC %06x: warning - read unmapped memory address %04x\n",space.device().safe_pc(),offset*2);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/***************************************************************************/
|
||||
|
||||
static int mutantf_port_0e_hack=0, mutantf_port_6a_hack=0,mutantf_port_e8_hack=0;
|
||||
|
||||
WRITE16_HANDLER( deco16_66_prot_w ) /* Mutant Fighter */
|
||||
{
|
||||
driver_device *state = space.machine().driver_data<driver_device>();
|
||||
if (offset == (0x64 / 2))
|
||||
{
|
||||
state->soundlatch_byte_w(space, 0, data & 0xff);
|
||||
space.machine().device("audiocpu")->execute().set_input_line(0, HOLD_LINE);
|
||||
return;
|
||||
}
|
||||
|
||||
COMBINE_DATA(&deco16_prot_ram[offset]);
|
||||
|
||||
/* See below */
|
||||
if (offset==(0xe/2))
|
||||
mutantf_port_0e_hack=data;
|
||||
else
|
||||
mutantf_port_0e_hack=0x800;
|
||||
|
||||
if (offset==(0x6a/2))
|
||||
mutantf_port_6a_hack=data;
|
||||
else
|
||||
mutantf_port_6a_hack=0x2866;
|
||||
|
||||
if (offset==(0xe8/2))
|
||||
mutantf_port_e8_hack=data;
|
||||
else
|
||||
mutantf_port_e8_hack=0x2401;
|
||||
|
||||
// 2 4 c e 18 1e 22 2c 2e 34 36 38 3a 42 48 58 6a 72 7a 82 88 92 a2 a4 aa b0 b6 b8 dc e4 e8 f4 fa 1c8 308 7e8 40e
|
||||
offset=offset<<1;
|
||||
if (offset!=0x02 && offset!=0xc && offset!=0xe && offset!=0x18 && offset!=0x2c && offset!=0x2e && offset!=0x34
|
||||
&& offset!=0x42 && offset!=0x58 && offset!=0x6a && offset!=0x72 && offset!=0x7a && offset!=0xb8
|
||||
&& offset!=0xdc && offset!=0xe8 && offset!=0xf4 && offset!=0x1c8 && offset!=0x7e8
|
||||
&& offset!=0xe && offset!=0x48 && offset!=0xaa && offset!=0xb0 && offset!=0x36
|
||||
&& offset!=0xa4 && offset!=0x4 && offset!=0x82 && offset!=0x88 && offset!=0x22
|
||||
&& offset!=0xb6 && offset!=0xfa && offset!=0xe4 && offset!=0x3a && offset!=0x1e
|
||||
&& offset!=0x38 && offset!=0x92 && offset!=0xa2 && offset!=0x308 && offset!=0x40e
|
||||
)
|
||||
logerror("Protection PC %06x: warning - write %04x to %04x\n",space.device().safe_pc(),data,offset);
|
||||
}
|
||||
|
||||
READ16_HANDLER( deco16_66_prot_r ) /* Mutant Fighter */
|
||||
{
|
||||
if (offset!=0xe/2)
|
||||
mutantf_port_0e_hack=0x0800;
|
||||
if (offset!=0x6a/2)
|
||||
mutantf_port_6a_hack=0x2866;
|
||||
|
||||
switch (offset*2) {
|
||||
case 0xac: /* Dip switches */
|
||||
return space.machine().root_device().ioport("DSW")->read();
|
||||
case 0xc2: /* Dip switches */
|
||||
return space.machine().root_device().ioport("DSW")->read() ^ deco16_prot_ram[0x2c/2];
|
||||
case 0x46: /* Coins */
|
||||
return space.machine().root_device().ioport("SYSTEM")->read() ^ deco16_prot_ram[0x2c/2];
|
||||
case 0x50: /* Player 1 & 2 input ports */
|
||||
return space.machine().root_device().ioport("INPUTS")->read();
|
||||
case 0x63c: /* Player 1 & 2 input ports */
|
||||
return space.machine().root_device().ioport("INPUTS")->read() ^ deco16_prot_ram[0x2c/2];
|
||||
|
||||
case 0x5f4:
|
||||
return deco16_prot_ram[0x18/2];
|
||||
case 0x7e8:
|
||||
return deco16_prot_ram[0x58/2];
|
||||
case 0x1c8:
|
||||
return deco16_prot_ram[0x6a/2];
|
||||
case 0x10:
|
||||
return deco16_prot_ram[0xc/2];
|
||||
case 0x672:
|
||||
return deco16_prot_ram[0x72/2];
|
||||
case 0x5ea:
|
||||
return deco16_prot_ram[0xb8/2];
|
||||
case 0x1e8:
|
||||
return deco16_prot_ram[0x2/2];
|
||||
case 0xf6:
|
||||
return deco16_prot_ram[0x42/2];
|
||||
case 0x692:
|
||||
return deco16_prot_ram[0x2e/2];
|
||||
case 0x63a:
|
||||
return deco16_prot_ram[0x88/2];
|
||||
case 0x7a:
|
||||
return deco16_prot_ram[0xe/2];
|
||||
case 0x40e:
|
||||
return deco16_prot_ram[0x7a/2];
|
||||
case 0x602:
|
||||
return deco16_prot_ram[0x92/2];
|
||||
case 0x5d4:
|
||||
return deco16_prot_ram[0x34/2];
|
||||
case 0x6fa:
|
||||
return deco16_prot_ram[0x4/2];
|
||||
case 0x3dc:
|
||||
return deco16_prot_ram[0xaa/2];
|
||||
case 0x444:
|
||||
return deco16_prot_ram[0xb0/2];
|
||||
case 0x102:
|
||||
return deco16_prot_ram[0xa2/2];
|
||||
case 0x458:
|
||||
return deco16_prot_ram[0xb6/2];
|
||||
case 0x2a6:
|
||||
return deco16_prot_ram[0xe8/2];
|
||||
case 0x626:
|
||||
return deco16_prot_ram[0xf4/2];
|
||||
case 0x762:
|
||||
return deco16_prot_ram[0x82/2];
|
||||
case 0x308:
|
||||
return deco16_prot_ram[0x38/2];
|
||||
case 0x1e6:
|
||||
return deco16_prot_ram[0x1e/2];
|
||||
case 0x566:
|
||||
return deco16_prot_ram[0xa4/2];
|
||||
case 0x5b6:
|
||||
return deco16_prot_ram[0xe4/2];
|
||||
case 0x77c:
|
||||
return deco16_prot_ram[0xfa/2];
|
||||
case 0x4ba:
|
||||
return deco16_prot_ram[0xdc/2];
|
||||
|
||||
case 0x1e:
|
||||
return deco16_prot_ram[0xf4/2] ^ deco16_prot_ram[0x2c/2];
|
||||
case 0x18e:
|
||||
return ((deco16_prot_ram[0x1e/2]&0x000f)<<12) | ((deco16_prot_ram[0x1e/2]&0x0ff0)>>0) | ((deco16_prot_ram[0x1e/2]&0xf000)>>12);
|
||||
case 0x636:
|
||||
return ((deco16_prot_ram[0x18/2]&0x00ff)<<8) | ((deco16_prot_ram[0x18/2]&0x0f00)>>4) | ((deco16_prot_ram[0x18/2]&0xf000)>>12);
|
||||
case 0x7d4:
|
||||
return ((deco16_prot_ram[0xc/2]&0x0ff0)<<4) | ((deco16_prot_ram[0xc/2]&0x000c)<<2) | ((deco16_prot_ram[0xc/2]&0x0003)<<6);
|
||||
case 0x542:
|
||||
return ((deco16_prot_ram[0x92/2]&0x00ff)<<8) ^ deco16_prot_ram[0x2c/2];
|
||||
case 0xb0:
|
||||
return (((deco16_prot_ram[0xc/2]&0x000f)<<12) | ((deco16_prot_ram[0xc/2]&0x00f0)<<4) | ((deco16_prot_ram[0xc/2]&0xff00)>>8)) ^ deco16_prot_ram[0x2c/2];
|
||||
case 0x4:
|
||||
return (((deco16_prot_ram[0x18/2]&0x00f0)<<8) | ((deco16_prot_ram[0x18/2]&0x0003)<<10) | ((deco16_prot_ram[0x18/2]&0x000c)<<6)) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0xe: /* On real hardware this value only seems to persist for 1 read or write, then reverts to 0800. Hmm */
|
||||
{
|
||||
int ret=mutantf_port_0e_hack;
|
||||
mutantf_port_0e_hack=0x800;
|
||||
//logerror("Protection PC %06x: warning - read unknown memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
case 0x6a: /* On real hardware this value only seems to persist for 1 read or write, then reverts to 0x2866. Hmm */
|
||||
{
|
||||
int ret=mutantf_port_6a_hack;
|
||||
mutantf_port_6a_hack=0x2866;
|
||||
//logerror("Protection PC %06x: warning - read unknown memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
case 0xe8: /* On real hardware this value only seems to persist for 1 read or write, then reverts to 0x2401. Hmm */
|
||||
{
|
||||
int ret=mutantf_port_e8_hack;
|
||||
mutantf_port_e8_hack=0x2401;
|
||||
//logerror("Protection PC %06x: warning - read unknown memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
case 0xaa: /* ??? */
|
||||
//logerror("Protection PC %06x: warning - read unknown memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return 0xc080;
|
||||
|
||||
case 0x42: /* Strange, but consistent */
|
||||
//logerror("Protection PC %06x: warning - read unknown memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return deco16_prot_ram[0x2c/2]^0x5302;
|
||||
|
||||
case 0x48: /* Correct for test data, but I wonder if the 0x1800 is from an address, not a constant */
|
||||
//logerror("Protection PC %06x: warning - read unmapped memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return (0x1800) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0x52:
|
||||
return (0x2188) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0x82:
|
||||
return ((0x0022 ^ deco16_prot_ram[0x2c/2])) & (~deco16_prot_ram[0x36/2]);
|
||||
|
||||
case 0xc:
|
||||
return 0x2000;
|
||||
}
|
||||
|
||||
#ifdef MAME_DEBUG
|
||||
popmessage("Deco66: Read unmapped port %04x\n",offset*2);
|
||||
#endif
|
||||
|
||||
logerror("Protection PC %06x: warning - read unmapped memory address %04x\n",space.device().safe_pc(),offset<<1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user