summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/machine
diff options
context:
space:
mode:
author cam900 <dbtlrchl@naver.com>2018-05-17 12:59:46 +0900
committer Vas Crabb <cuavas@users.noreply.github.com>2018-05-17 13:59:46 +1000
commitf7b6bb6bbb9007aebfe9a4748c8a08e58d1614ec (patch)
tree03a589dbb95b142321cb2a3a5fc557a18b378593 /src/mame/machine
parent2da9fd50a611b0b6c3a9fea54ad46a3377e5284c (diff)
leland.cpp cleanups (#3519)
* leland.cpp : Cleanup duplicates, Add generic_latch_16_device for maincpu to soundcpu comms, Improve tags, Reduce runtime tag lookups, Make drawing function relate to cliprect * leland.cpp : Fix compile * leland.cpp : Fix compile(again) * leland.cpp : Fix sound command * leland.cpp : Fix error * leland.cpp : Background is tilemap; Accurate this and reduce unnecessary things
Diffstat (limited to 'src/mame/machine')
-rw-r--r--src/mame/machine/leland.cpp74
1 files changed, 32 insertions, 42 deletions
diff --git a/src/mame/machine/leland.cpp b/src/mame/machine/leland.cpp
index 05a33177fa0..d7873d0cb6f 100644
--- a/src/mame/machine/leland.cpp
+++ b/src/mame/machine/leland.cpp
@@ -317,9 +317,6 @@ WRITE8_MEMBER(leland_state::indyheat_analog_w)
MACHINE_START_MEMBER(leland_state,leland)
{
- /* allocate extra stuff */
- m_battery_ram = reinterpret_cast<uint8_t *>(memshare("battery")->ptr());
-
/* start scanline interrupts going */
m_master_int_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(leland_state::leland_interrupt_callback),this));
@@ -367,22 +364,17 @@ MACHINE_RESET_MEMBER(leland_state,leland)
m_alternate_bank = 0;
/* initialize the master banks */
- m_master_length = memregion("master")->bytes();
- m_master_base = memregion("master")->base();
(this->*m_update_master_bank)();
/* initialize the slave banks */
- m_slave_length = memregion("slave")->bytes();
- m_slave_base = memregion("slave")->base();
- if (m_slave_length > 0x10000)
- membank("bank3")->set_base(&m_slave_base[0x10000]);
+ if (m_slave_base.length() > 0x10000)
+ m_slave_bankslot->set_base(&m_slave_base[0x10000]);
}
MACHINE_START_MEMBER(leland_state,ataxx)
{
/* set the odd data banks */
- m_battery_ram = reinterpret_cast<uint8_t *>(memshare("battery")->ptr());
m_extra_tram = std::make_unique<uint8_t[]>(ATAXX_EXTRA_TRAM_SIZE);
/* start scanline interrupts going */
@@ -405,7 +397,6 @@ MACHINE_RESET_MEMBER(leland_state,ataxx)
m_master_int_timer->adjust(m_screen->time_until_pos(8), 8);
/* initialize the XROM */
- m_xrom_base = memregion("user1")->base();
m_xrom1_addr = 0;
m_xrom2_addr = 0;
@@ -419,15 +410,11 @@ MACHINE_RESET_MEMBER(leland_state,ataxx)
m_master_bank = 0;
/* initialize the master banks */
- m_master_length = memregion("master")->bytes();
- m_master_base = memregion("master")->base();
ataxx_bankswitch();
/* initialize the slave banks */
- m_slave_length = memregion("slave")->bytes();
- m_slave_base = memregion("slave")->base();
- if (m_slave_length > 0x10000)
- membank("bank3")->set_base(&m_slave_base[0x10000]);
+ if (m_slave_base.length() > 0x10000)
+ m_slave_bankslot->set_base(&m_slave_base[0x10000]);
}
@@ -511,10 +498,10 @@ void leland_state::mayhem_bankswitch()
m_battery_ram_enable = ((m_sound_port_bank & 0x24) == 0);
address = (!(m_sound_port_bank & 0x04)) ? &m_master_base[0x10000] : &m_master_base[0x1c000];
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &address[0x8000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -526,10 +513,10 @@ void leland_state::dangerz_bankswitch()
m_battery_ram_enable = ((m_top_board_bank & 0x80) != 0);
address = (!(m_alternate_bank & 1)) ? &m_master_base[0x02000] : &m_master_base[0x12000];
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &address[0x8000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -544,10 +531,10 @@ void leland_state::basebal2_bankswitch()
address = (!(m_sound_port_bank & 0x04)) ? &m_master_base[0x10000] : &m_master_base[0x1c000];
else
address = (!(m_top_board_bank & 0x40)) ? &m_master_base[0x28000] : &m_master_base[0x30000];
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &address[0x8000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -560,10 +547,10 @@ void leland_state::redline_bankswitch()
m_battery_ram_enable = ((m_alternate_bank & 3) == 1);
address = &m_master_base[bank_list[m_alternate_bank & 3]];
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &m_master_base[0xa000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -576,15 +563,15 @@ void leland_state::viper_bankswitch()
m_battery_ram_enable = ((m_alternate_bank & 0x04) != 0);
address = &m_master_base[bank_list[m_alternate_bank & 3]];
- if (bank_list[m_alternate_bank & 3] >= m_master_length)
+ if (bank_list[m_alternate_bank & 3] >= m_master_base.length())
{
logerror("%s:Master bank %02X out of range!\n", machine().describe_context(), m_alternate_bank & 3);
address = &m_master_base[bank_list[0]];
}
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &m_master_base[0xa000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -597,15 +584,15 @@ void leland_state::offroad_bankswitch()
m_battery_ram_enable = ((m_alternate_bank & 7) == 1);
address = &m_master_base[bank_list[m_alternate_bank & 7]];
- if (bank_list[m_alternate_bank & 7] >= m_master_length)
+ if (bank_list[m_alternate_bank & 7] >= m_master_base.length())
{
logerror("%s:Master bank %02X out of range!\n", machine().describe_context(), m_alternate_bank & 7);
address = &m_master_base[bank_list[0]];
}
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
address = m_battery_ram_enable ? m_battery_ram : &m_master_base[0xa000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
}
@@ -622,12 +609,12 @@ void leland_state::ataxx_bankswitch()
m_battery_ram_enable = ((m_master_bank & 0x30) == 0x10);
address = &m_master_base[bank_list[m_master_bank & 15]];
- if (bank_list[m_master_bank & 15] >= m_master_length)
+ if (bank_list[m_master_bank & 15] >= m_master_base.length())
{
logerror("%s:Master bank %02X out of range!\n", machine().describe_context(), m_master_bank & 15);
address = &m_master_base[bank_list[0]];
}
- membank("bank1")->set_base(address);
+ m_master_bankslot[0]->set_base(address);
if (m_battery_ram_enable)
address = m_battery_ram;
@@ -635,7 +622,7 @@ void leland_state::ataxx_bankswitch()
address = &m_ataxx_qram[(m_master_bank & 0xc0) << 8];
else
address = &m_master_base[0xa000];
- membank("bank2")->set_base(address);
+ m_master_bankslot[1]->set_base(address);
m_wcol_enable = ((m_master_bank & 0x30) == 0x30);
}
@@ -878,7 +865,10 @@ WRITE8_MEMBER(leland_state::ataxx_battery_ram_w)
m_battery_ram[offset] = data;
}
else if ((m_master_bank & 0x30) == 0x20)
- m_ataxx_qram[((m_master_bank & 0xc0) << 8) + offset] = data;
+ {
+ m_ataxx_qram[((m_master_bank & 0xc0) << 8) | offset] = data;
+ m_tilemap->mark_tile_dirty(((m_master_bank & 0x80) << 8) | offset);
+ }
else
logerror("%04X:BatteryW@%04X (invalid!)\n", m_master->pc(), offset);
}
@@ -1355,12 +1345,12 @@ WRITE8_MEMBER(leland_state::leland_slave_small_banksw_w)
{
int bankaddress = 0x10000 + 0xc000 * (data & 1);
- if (bankaddress >= m_slave_length)
+ if (bankaddress >= m_slave_base.length())
{
logerror("%04X:Slave bank %02X out of range!", m_slave->pc(), data & 1);
bankaddress = 0x10000;
}
- membank("bank3")->set_base(&m_slave_base[bankaddress]);
+ m_slave_bankslot->set_base(&m_slave_base[bankaddress]);
if (LOG_BANKSWITCHING_S) logerror("%04X:Slave bank = %02X (%05X)\n", m_slave->pc(), data & 1, bankaddress);
}
@@ -1370,12 +1360,12 @@ WRITE8_MEMBER(leland_state::leland_slave_large_banksw_w)
{
int bankaddress = 0x10000 + 0x8000 * (data & 15);
- if (bankaddress >= m_slave_length)
+ if (bankaddress >= m_slave_base.length())
{
logerror("%04X:Slave bank %02X out of range!", m_slave->pc(), data & 15);
bankaddress = 0x10000;
}
- membank("bank3")->set_base(&m_slave_base[bankaddress]);
+ m_slave_bankslot->set_base(&m_slave_base[bankaddress]);
if (LOG_BANKSWITCHING_S) logerror("%04X:Slave bank = %02X (%05X)\n", m_slave->pc(), data & 15, bankaddress);
}
@@ -1390,16 +1380,16 @@ WRITE8_MEMBER(leland_state::ataxx_slave_banksw_w)
else
{
bankaddress = 0x10000 * bank + 0x8000 * ((data >> 4) & 1);
- if (m_slave_length > 0x100000)
+ if (m_slave_base.length() > 0x100000)
bankaddress += 0x100000 * ((data >> 5) & 1);
}
- if (bankaddress >= m_slave_length)
+ if (bankaddress >= m_slave_base.length())
{
logerror("%04X:Slave bank %02X out of range!", m_slave->pc(), data & 0x3f);
bankaddress = 0x2000;
}
- membank("bank3")->set_base(&m_slave_base[bankaddress]);
+ m_slave_bankslot->set_base(&m_slave_base[bankaddress]);
if (LOG_BANKSWITCHING_S) logerror("%04X:Slave bank = %02X (%05X)\n", m_slave->pc(), data, bankaddress);
}