From 44a653c01ab09bae8164df050a7d44062058a4cc Mon Sep 17 00:00:00 2001 From: cam900 Date: Sun, 14 Apr 2019 01:44:05 +0900 Subject: [PATCH] deco146.cpp : Updates Reduce unnecessary arguments, Duplicates, Unnecessary lines, Fix spacings, Debugger issues, Use shorter type values deco104.cpp : Reduce unnecessary line, Use shorter type values --- src/mame/drivers/boogwing.cpp | 2 +- src/mame/drivers/cninja.cpp | 8 +-- src/mame/drivers/dblewing.cpp | 2 +- src/mame/drivers/deco32.cpp | 2 +- src/mame/drivers/deco_mlc.cpp | 2 +- src/mame/drivers/dietgo.cpp | 2 +- src/mame/drivers/dreambal.cpp | 2 +- src/mame/drivers/funkyjet.cpp | 2 +- src/mame/drivers/lemmings.cpp | 2 +- src/mame/drivers/pktgaldx.cpp | 2 +- src/mame/drivers/rohga.cpp | 2 +- src/mame/drivers/sshangha.cpp | 4 +- src/mame/machine/deco104.cpp | 8 +-- src/mame/machine/deco104.h | 2 +- src/mame/machine/deco146.cpp | 112 ++++++++++++++++------------------ src/mame/machine/deco146.h | 48 +++++++-------- 16 files changed, 93 insertions(+), 109 deletions(-) diff --git a/src/mame/drivers/boogwing.cpp b/src/mame/drivers/boogwing.cpp index 9e6b2a8f006..4b2de301bab 100644 --- a/src/mame/drivers/boogwing.cpp +++ b/src/mame/drivers/boogwing.cpp @@ -103,7 +103,7 @@ READ16_MEMBER( boogwing_state::boogwing_protection_region_0_104_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco104->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco104->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/cninja.cpp b/src/mame/drivers/cninja.cpp index dc44e2c2415..0e1fb38a8fd 100644 --- a/src/mame/drivers/cninja.cpp +++ b/src/mame/drivers/cninja.cpp @@ -68,7 +68,7 @@ READ16_MEMBER( cninja_state::cninja_protection_region_0_104_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_ioprot->read_data( deco146_addr, cs ); return data; } @@ -150,7 +150,7 @@ READ16_MEMBER( cninja_state::edrandy_protection_region_8_146_r ) int real_address = 0x1a0000 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_ioprot->read_data( deco146_addr, cs ); return data; } @@ -169,7 +169,7 @@ READ16_MEMBER( cninja_state::edrandy_protection_region_6_146_r ) int real_address = 0x198000 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_ioprot->read_data( deco146_addr, cs ); // if ((realdat & mem_mask) != (data & mem_mask)) @@ -259,7 +259,7 @@ READ16_MEMBER( cninja_state::mutantf_protection_region_0_146_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_ioprot->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/dblewing.cpp b/src/mame/drivers/dblewing.cpp index 9dca38e1d10..377bad7496a 100644 --- a/src/mame/drivers/dblewing.cpp +++ b/src/mame/drivers/dblewing.cpp @@ -158,7 +158,7 @@ READ16_MEMBER( dblewing_state::wf_protection_region_0_104_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco104->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco104->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/deco32.cpp b/src/mame/drivers/deco32.cpp index 22147ec5fbf..43e862d83ac 100644 --- a/src/mame/drivers/deco32.cpp +++ b/src/mame/drivers/deco32.cpp @@ -700,7 +700,7 @@ READ16_MEMBER( deco32_state::ioprot_r ) offs_t deco146_addr = bitswap<32>(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; uint8_t cs = 0; - return m_ioprot->read_data( deco146_addr, mem_mask, cs ); + return m_ioprot->read_data( deco146_addr, cs ); } WRITE16_MEMBER( deco32_state::ioprot_w ) diff --git a/src/mame/drivers/deco_mlc.cpp b/src/mame/drivers/deco_mlc.cpp index d8801dc5e11..687d233f865 100644 --- a/src/mame/drivers/deco_mlc.cpp +++ b/src/mame/drivers/deco_mlc.cpp @@ -279,7 +279,7 @@ READ16_MEMBER( deco_mlc_state::sh96_protection_region_0_146_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco146->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/dietgo.cpp b/src/mame/drivers/dietgo.cpp index 5b2d2167a51..ba7b6eaabd3 100644 --- a/src/mame/drivers/dietgo.cpp +++ b/src/mame/drivers/dietgo.cpp @@ -39,7 +39,7 @@ READ16_MEMBER( dietgo_state::dietgo_protection_region_0_104_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco104->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco104->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/dreambal.cpp b/src/mame/drivers/dreambal.cpp index ebb65adf9f4..8e248ffce42 100644 --- a/src/mame/drivers/dreambal.cpp +++ b/src/mame/drivers/dreambal.cpp @@ -102,7 +102,7 @@ READ16_MEMBER( dreambal_state::dreambal_protection_region_0_104_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco104->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco104->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/funkyjet.cpp b/src/mame/drivers/funkyjet.cpp index 3a538d9c7d9..95ce63c39fb 100644 --- a/src/mame/drivers/funkyjet.cpp +++ b/src/mame/drivers/funkyjet.cpp @@ -110,7 +110,7 @@ READ16_MEMBER( funkyjet_state::funkyjet_protection_region_0_146_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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 */ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0) & 0x7fff; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco146->read_data( deco146_addr, 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); diff --git a/src/mame/drivers/lemmings.cpp b/src/mame/drivers/lemmings.cpp index 27bfeec5d5f..40ae0d3fcae 100644 --- a/src/mame/drivers/lemmings.cpp +++ b/src/mame/drivers/lemmings.cpp @@ -48,7 +48,7 @@ READ16_MEMBER( lemmings_state::lem_protection_region_0_146_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco146->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/pktgaldx.cpp b/src/mame/drivers/pktgaldx.cpp index 00e244d5ee2..81873d4577f 100644 --- a/src/mame/drivers/pktgaldx.cpp +++ b/src/mame/drivers/pktgaldx.cpp @@ -80,7 +80,7 @@ READ16_MEMBER( pktgaldx_state::pktgaldx_protection_region_f_104_r ) { int real_address = 0 + (offset *2); uint8_t cs = 0; - uint16_t data = m_deco104->read_data( real_address&0x7fff, mem_mask, cs ); + uint16_t data = m_deco104->read_data( real_address&0x7fff, cs ); return data; } diff --git a/src/mame/drivers/rohga.cpp b/src/mame/drivers/rohga.cpp index 4667d3e6e50..c6d7bc47dcd 100644 --- a/src/mame/drivers/rohga.cpp +++ b/src/mame/drivers/rohga.cpp @@ -146,7 +146,7 @@ READ16_MEMBER( rohga_state::ioprot_r ) int real_address = 0 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_ioprot->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_ioprot->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/drivers/sshangha.cpp b/src/mame/drivers/sshangha.cpp index 3550995dc79..b8b2d485cad 100644 --- a/src/mame/drivers/sshangha.cpp +++ b/src/mame/drivers/sshangha.cpp @@ -125,7 +125,7 @@ READ16_MEMBER( sshangha_state::sshangha_protection_region_d_146_r ) int real_address = 0x3f4000 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco146->read_data( deco146_addr, cs ); return data; } @@ -142,7 +142,7 @@ READ16_MEMBER( sshangha_state::sshangha_protection_region_8_146_r ) int real_address = 0x3e0000 + (offset *2); int deco146_addr = bitswap<32>(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; uint8_t cs = 0; - uint16_t data = m_deco146->read_data( deco146_addr, mem_mask, cs ); + uint16_t data = m_deco146->read_data( deco146_addr, cs ); return data; } diff --git a/src/mame/machine/deco104.cpp b/src/mame/machine/deco104.cpp index 36fffd62e70..673e3cef383 100644 --- a/src/mame/machine/deco104.cpp +++ b/src/mame/machine/deco104.cpp @@ -3,7 +3,7 @@ /**************************************************************************** Data East 104 based protection/IO chips - (a variation on the Deco 146 protection, see deco146.c for notes) + (a variation on the Deco 146 protection, see deco146.cpp for notes) Emulation by David Haywood based on findings by Charles MacDonald @@ -1048,12 +1048,10 @@ static deco146port_xx const port104_table[] = { }; - DEFINE_DEVICE_TYPE(DECO104PROT, deco104_device, "deco104", "DECO 104 Protection") - -deco104_device::deco104_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +deco104_device::deco104_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : deco_146_base_device(mconfig, DECO104PROT, tag, owner, clock) { m_bankswitch_swap_read_address = 0x66; @@ -1067,8 +1065,6 @@ deco104_device::deco104_device(const machine_config &mconfig, const char *tag, d } - - void deco104_device::device_start() { deco_146_base_device::device_start(); diff --git a/src/mame/machine/deco104.h b/src/mame/machine/deco104.h index aa2957437b9..f2649f71601 100644 --- a/src/mame/machine/deco104.h +++ b/src/mame/machine/deco104.h @@ -13,7 +13,7 @@ class deco104_device : public deco_146_base_device { public: - deco104_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + deco104_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); protected: virtual void device_start() override; diff --git a/src/mame/machine/deco146.cpp b/src/mame/machine/deco146.cpp index 5a8afab01c9..6d4368171be 100644 --- a/src/mame/machine/deco146.cpp +++ b/src/mame/machine/deco146.cpp @@ -1119,14 +1119,14 @@ static deco146port_xx const port_table[] = { /* 0x7fe */ { 0x04c, { NIB1__, NIB2__, NIB0__, NIB3__ }, 0, 1 } }; -inline uint16_t reorder(uint16_t input, uint8_t const *weights) +inline u16 reorder(u16 input, u8 const *weights) { - uint16_t temp = 0; - for(int i = 0; i < 16; i++) + u16 temp = 0; + for (int i = 0; i < 16; i++) { - if(input & (1 << i)) // if input bit is set + if (input & (1 << i)) // if input bit is set { - if(weights[i] != 0xFF) // and weight exists for output bit + if (weights[i] != 0xFF) // and weight exists for output bit { temp |= 1 << weights[i]; // set that bit } @@ -1139,9 +1139,9 @@ inline uint16_t reorder(uint16_t input, uint8_t const *weights) /* there are probably less dumb ways of doing the CS logic, it could be hooked up more like the system16 mapper chips */ -void deco_146_base_device::write_data(uint16_t address, uint16_t data, uint16_t mem_mask, uint8_t &csflags) +void deco_146_base_device::write_data(u16 address, u16 data, u16 mem_mask, u8 &csflags) { - address = bitswap<16>(address>>1, 15,14,13,12,11,10, m_external_addrswap[9],m_external_addrswap[8] ,m_external_addrswap[7],m_external_addrswap[6],m_external_addrswap[5],m_external_addrswap[4],m_external_addrswap[3],m_external_addrswap[2],m_external_addrswap[1],m_external_addrswap[0]) << 1; + address = bitswap<16>(address >> 1, 15,14,13,12,11,10, m_external_addrswap[9],m_external_addrswap[8] ,m_external_addrswap[7],m_external_addrswap[6],m_external_addrswap[5],m_external_addrswap[4],m_external_addrswap[3],m_external_addrswap[2],m_external_addrswap[1],m_external_addrswap[0]) << 1; csflags = 0; int upper_addr_bits = (address & 0x7800) >> 11; @@ -1151,9 +1151,9 @@ void deco_146_base_device::write_data(uint16_t address, uint16_t data, uint16_t int real_address = address & 0xf; logerror("write to config regs %04x %04x %04x\n", real_address, data, mem_mask); - if ((real_address>=0x2) && (real_address<=0x0c)) + if ((real_address >= 0x2) && (real_address <= 0x0c)) { - region_selects[(real_address-2)/2] = data &0xf; + region_selects[(real_address - 2) / 2] = data & 0xf; return; } else @@ -1164,16 +1164,16 @@ void deco_146_base_device::write_data(uint16_t address, uint16_t data, uint16_t return; // or fall through? } - for (int i=0;i<6;i++) + for (int i = 0; i < 6; i++) { int cs = region_selects[i]; - if (cs==upper_addr_bits) + if (cs == upper_addr_bits) { int real_address = address & 0x7ff; csflags |= (1 << i); - if (i==0) // the first cs is our internal protection area + if (i == 0) // the first cs is our internal protection area { // logerror("write matches cs table (protection) %01x %04x %04x %04x\n", i, real_address, data, mem_mask); write_protport(real_address, data, mem_mask); @@ -1185,17 +1185,17 @@ void deco_146_base_device::write_data(uint16_t address, uint16_t data, uint16_t } } - if (csflags==0) + if (csflags == 0) { logerror("write not in cs table\n"); } } -uint16_t deco_146_base_device::read_protport(uint16_t address, uint16_t mem_mask) +u16 deco_146_base_device::read_protport(u16 address) { // if we read the last written address immediately after then ignore all other logic and just return what was written unmodified - if ((address==m_latchaddr) && (m_latchflag==1)) + if (((address == m_latchaddr) && (m_latchflag == 1)) && (!machine().side_effects_disabled())) { logerror("returning latched data %04x\n", m_latchdata); m_latchflag = 0; @@ -1207,19 +1207,15 @@ uint16_t deco_146_base_device::read_protport(uint16_t address, uint16_t mem_mask if (m_magic_read_address_xor_enabled) address ^= m_magic_read_address_xor; int location = 0; - uint16_t realret = read_data_getloc(address, location); + u16 realret = read_data_getloc(address, location); - if (location == m_bankswitch_swap_read_address) // this has a special meaning + if ((location == m_bankswitch_swap_read_address) && (!machine().side_effects_disabled())) // this has a special meaning { - // logerror("(bankswitch) %04x %04x\n", address, mem_mask); + // logerror("(bankswitch) %04x %04x\n", address); - if (m_current_rambank==0) - m_current_rambank = 1; - else - m_current_rambank = 0; + m_current_rambank ^= 1; } - return realret; } @@ -1229,75 +1225,73 @@ TIMER_CALLBACK_MEMBER(deco_146_base_device::write_soundlatch) m_soundlatch_irq_cb(ASSERT_LINE); } -void deco_146_base_device::write_protport(uint16_t address, uint16_t data, uint16_t mem_mask) +void deco_146_base_device::write_protport(u16 address, u16 data, u16 mem_mask) { m_latchaddr = address; m_latchdata = data; m_latchflag = 1; - if ((address&0xff) == m_xor_port) + if ((address & 0xff) == m_xor_port) { logerror("LOAD XOR REGISTER %04x %04x\n", data, mem_mask); COMBINE_DATA(&m_xor); } - else if ((address&0xff) == m_mask_port) + else if ((address & 0xff) == m_mask_port) { // logerror("LOAD NAND REGISTER %04x %04x\n", data, mem_mask); COMBINE_DATA(&m_nand); } - else if ((address&0xff) == m_soundlatch_port) + else if ((address & 0xff) == m_soundlatch_port) { logerror("LOAD SOUND LATCH: %04x\n", data); machine().scheduler().synchronize(timer_expired_delegate(FUNC(deco_146_base_device::write_soundlatch), this), data & 0xff); } // always store - if (m_current_rambank==0) - COMBINE_DATA(&m_rambank0[(address&0xff)>>1]); - else - COMBINE_DATA(&m_rambank1[(address&0xff)>>1]); - + COMBINE_DATA(&m_rambank[m_current_rambank][(address & 0xff) >> 1]); } -uint16_t deco_146_base_device::read_data(uint16_t address, uint16_t mem_mask, uint8_t &csflags) +u16 deco_146_base_device::read_data(u16 address, u8 &csflags) { - address = bitswap<16>(address>>1, 15,14,13,12,11,10, m_external_addrswap[9],m_external_addrswap[8] ,m_external_addrswap[7],m_external_addrswap[6],m_external_addrswap[5],m_external_addrswap[4],m_external_addrswap[3],m_external_addrswap[2],m_external_addrswap[1],m_external_addrswap[0]) << 1; + address = bitswap<16>(address >> 1, 15,14,13,12,11,10, m_external_addrswap[9],m_external_addrswap[8] ,m_external_addrswap[7],m_external_addrswap[6],m_external_addrswap[5],m_external_addrswap[4],m_external_addrswap[3],m_external_addrswap[2],m_external_addrswap[1],m_external_addrswap[0]) << 1; - uint16_t retdata = 0; + u16 retdata = 0; csflags = 0; int upper_addr_bits = (address & 0x7800) >> 11; if (upper_addr_bits == 0x8) // configuration registers are hardcoded to this area { int real_address = address & 0xf; - logerror("read config regs? %04x %04x\n", real_address, mem_mask); + if (!machine().side_effects_disabled()) + logerror("read config regs? %04x\n", real_address); + return 0x0000; } // what gets priority? - for (int i=0;i<6;i++) + for (int i = 0; i < 6; i++) { int cs = region_selects[i]; - if (cs==upper_addr_bits) + if (cs == upper_addr_bits) { int real_address = address & 0x7ff; csflags |= (1 << i); - if (i==0) // the first cs is our internal protection area + if (i == 0) // the first cs is our internal protection area { - //logerror("read matches cs table (protection) %01x %04x %04x\n", i, real_address, mem_mask); - return read_protport( real_address, mem_mask); + //logerror("read matches cs table (protection) %01x %04x\n", i, real_address); + return read_protport(real_address); } - else + else if (!machine().side_effects_disabled()) { - logerror("read matches cs table (external connection) %01x %04x %04x\n", i, real_address, mem_mask); + logerror("read matches cs table (external connection) %01x %04x\n", i, real_address); } } } - if (csflags==0) + if ((csflags == 0) && (!machine().side_effects_disabled())) { logerror("read not in cs table\n"); } @@ -1311,7 +1305,7 @@ u8 deco_146_base_device::soundlatch_r() return m_soundlatch; } -deco_146_base_device::deco_146_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) +deco_146_base_device::deco_146_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, type, tag, owner, clock), m_port_a_r(*this), m_port_b_r(*this), @@ -1332,11 +1326,12 @@ deco_146_base_device::deco_146_base_device(const machine_config &mconfig, device void deco_146_base_device::device_start() { - for (int i=0;i<0x80;i++) + for (int bank = 0; bank < 2; bank++) { + m_rambank[bank] = std::make_unique(0x80); // the mutant fighter old sim assumes 0x0000 - m_rambank0[i] = 0xffff; - m_rambank1[i] = 0xffff; + std::fill_n(&m_rambank[bank][0], 0x80, 0xffff); + save_pointer(NAME(m_rambank[bank]), 0x80, bank); } // bind our handler @@ -1348,8 +1343,6 @@ void deco_146_base_device::device_start() save_item(NAME(m_xor)); save_item(NAME(m_nand)); - save_item(NAME(m_rambank0)); - save_item(NAME(m_rambank1)); save_item(NAME(m_current_rambank)); save_item(NAME(region_selects)); @@ -1384,11 +1377,11 @@ void deco_146_base_device::device_reset() } -uint16_t deco_146_base_device::read_data_getloc(uint16_t address, int& location) +u16 deco_146_base_device::read_data_getloc(u16 address, int& location) { - uint16_t retdata = 0; + u16 retdata = 0; - location = m_lookup_table[address>>1].write_offset; + location = m_lookup_table[address >> 1].write_offset; if (location==INPUT_PORT_A) { @@ -1404,16 +1397,13 @@ uint16_t deco_146_base_device::read_data_getloc(uint16_t address, int& location) } else { - if (m_current_rambank==0) - retdata = m_rambank0[location>>1]; - else - retdata = m_rambank1[location>>1]; + retdata = m_rambank[m_current_rambank][location >> 1]; } - uint16_t realret = reorder(retdata, &m_lookup_table[address>>1].mapping[0] ); + u16 realret = reorder(retdata, &m_lookup_table[address >> 1].mapping[0] ); - if (m_lookup_table[address>>1].use_xor) realret ^= m_xor; - if (m_lookup_table[address>>1].use_nand) realret = (realret & ~m_nand); + if (m_lookup_table[address >> 1].use_xor) realret ^= m_xor; + if (m_lookup_table[address >> 1].use_nand) realret = (realret & ~m_nand); return realret; } @@ -1422,7 +1412,7 @@ uint16_t deco_146_base_device::read_data_getloc(uint16_t address, int& location) DEFINE_DEVICE_TYPE(DECO146PROT, deco146_device, "deco146", "DECO 146 Protection") -deco146_device::deco146_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) +deco146_device::deco146_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : deco_146_base_device(mconfig, DECO146PROT, tag, owner, clock) { m_bankswitch_swap_read_address = 0x78; diff --git a/src/mame/machine/deco146.h b/src/mame/machine/deco146.h index 64bdaf9c2f5..31a4b5a4af5 100644 --- a/src/mame/machine/deco146.h +++ b/src/mame/machine/deco146.h @@ -38,27 +38,26 @@ struct deco146port_xx { int write_offset; - uint8_t mapping[16]; + u8 mapping[16]; int use_xor; int use_nand; }; - /* Data East 146 protection chip */ class deco_146_base_device : public device_t { public: - void write_data(uint16_t address, uint16_t data, uint16_t mem_mask, uint8_t &csflags); - uint16_t read_data(uint16_t address, uint16_t mem_mask, uint8_t &csflags); + void write_data(u16 address, u16 data, u16 mem_mask, u8 &csflags); + u16 read_data(u16 address, u8 &csflags); auto port_a_cb() { return m_port_a_r.bind(); } auto port_b_cb() { return m_port_b_r.bind(); } auto port_c_cb() { return m_port_c_r.bind(); } // there are some standard ways the chip gets hooked up, so have them here ready to use - void set_interface_scramble(uint8_t a9, uint8_t a8, uint8_t a7, uint8_t a6, uint8_t a5, uint8_t a4, uint8_t a3,uint8_t a2,uint8_t a1,uint8_t a0) + void set_interface_scramble(u8 a9, u8 a8, u8 a7, u8 a6, u8 a5, u8 a4, u8 a3,u8 a2,u8 a1,u8 a0) { m_external_addrswap[9] = a9; m_external_addrswap[8] = a8; @@ -83,54 +82,53 @@ public: devcb_read16 m_port_b_r; devcb_read16 m_port_c_r; - uint8_t m_bankswitch_swap_read_address; - uint16_t m_magic_read_address_xor; + u8 m_bankswitch_swap_read_address; + u16 m_magic_read_address_xor; bool m_magic_read_address_xor_enabled; - uint8_t m_xor_port; - uint8_t m_mask_port; - uint8_t m_soundlatch_port; + u8 m_xor_port; + u8 m_mask_port; + u8 m_soundlatch_port; - uint8_t m_external_addrswap[10]; + u8 m_external_addrswap[10]; deco146port_xx const *m_lookup_table; protected: - deco_146_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + deco_146_base_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); virtual void device_start() override; virtual void device_reset() override; - uint16_t read_protport(uint16_t address, uint16_t mem_mask); - virtual void write_protport(uint16_t address, uint16_t data, uint16_t mem_mask); - virtual uint16_t read_data_getloc(uint16_t address, int& location); + u16 read_protport(u16 address); + virtual void write_protport(u16 address, u16 data, u16 mem_mask); + virtual u16 read_data_getloc(u16 address, int& location); - uint16_t m_rambank0[0x80]; - uint16_t m_rambank1[0x80]; + std::unique_ptr m_rambank[2]; int m_current_rambank; - uint16_t m_nand; - uint16_t m_xor; + u16 m_nand; + u16 m_xor; - uint16_t m_latchaddr; - uint16_t m_latchdata; + u16 m_latchaddr; + u16 m_latchdata; - uint8_t m_configregion; // which value of upper 4 address lines accesses the config region + u8 m_configregion; // which value of upper 4 address lines accesses the config region int m_latchflag; private: TIMER_CALLBACK_MEMBER(write_soundlatch); - uint8_t region_selects[6]; + u8 region_selects[6]; - uint8_t m_soundlatch; + u8 m_soundlatch; devcb_write_line m_soundlatch_irq_cb; }; class deco146_device : public deco_146_base_device { public: - deco146_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + deco146_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; DECLARE_DEVICE_TYPE(DECO146PROT, deco146_device)