From 8ef69c8d4cab50d88809fab7af8d562f98e39af3 Mon Sep 17 00:00:00 2001 From: Wilbert Pol Date: Fri, 8 Feb 2013 22:25:26 +0000 Subject: [PATCH] (MESS) bbc.c: Some tagmap lookup reduction. (nw) --- src/mess/includes/bbc.h | 24 ++++++--- src/mess/machine/bbc.c | 116 ++++++++++++++++++++-------------------- 2 files changed, 74 insertions(+), 66 deletions(-) diff --git a/src/mess/includes/bbc.h b/src/mess/includes/bbc.h index 461f6e4f39f..da3cc032632 100644 --- a/src/mess/includes/bbc.h +++ b/src/mess/includes/bbc.h @@ -24,14 +24,17 @@ class bbc_state : public driver_device { public: bbc_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), - m_maincpu(*this, "maincpu"), - m_sn(*this, "sn76489"), - m_trom(*this, "saa505x"), - m_ACCCON_IRR(CLEAR_LINE), - m_via_system_irq(CLEAR_LINE), - m_via_user_irq(CLEAR_LINE), - m_acia_irq(CLEAR_LINE) + : driver_device(mconfig, type, tag) + , m_maincpu(*this, "maincpu") + , m_sn(*this, "sn76489") + , m_trom(*this, "saa505x") + , m_ACCCON_IRR(CLEAR_LINE) + , m_via_system_irq(CLEAR_LINE) + , m_via_user_irq(CLEAR_LINE) + , m_acia_irq(CLEAR_LINE) + , m_region_maincpu(*this, "maincpu") + , m_region_user1(*this, "user1") + , m_region_user2(*this, "user2") { } required_device m_maincpu; @@ -306,6 +309,11 @@ public: DECLARE_WRITE_LINE_MEMBER(bbc_vsync); DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart ); + +protected: + required_memory_region m_region_maincpu; + required_memory_region m_region_user1; + optional_memory_region m_region_user2; }; diff --git a/src/mess/machine/bbc.c b/src/mess/machine/bbc.c index 5e0a88bd8d8..5b86c3308a1 100644 --- a/src/mess/machine/bbc.c +++ b/src/mess/machine/bbc.c @@ -37,13 +37,13 @@ Model A memory handling functions /* for the model A just address the 4 on board ROM sockets */ WRITE8_MEMBER(bbc_state::bbc_page_selecta_w) { - membank("bank4")->set_base(machine().root_device().memregion("user1")->base()+((data&0x03)<<14)); + membank("bank4")->set_base(m_region_user1->base()+((data&0x03)<<14)); } WRITE8_MEMBER(bbc_state::bbc_memorya1_w) { - memregion("maincpu")->base()[offset]=data; + m_region_maincpu->base()[offset]=data; } /************************* @@ -57,11 +57,11 @@ WRITE8_MEMBER(bbc_state::bbc_page_selectb_w) m_rombank=data&0x0f; if (m_rombank!=1) { - membank("bank4")->set_base(machine().root_device().memregion("user1")->base() + (m_rombank << 14)); + membank("bank4")->set_base(m_region_user1->base() + (m_rombank << 14)); } else { - membank("bank4")->set_base(machine().root_device().memregion("user2")->base() + ((m_DFSType) << 14)); + membank("bank4")->set_base(m_region_user2->base() + ((m_DFSType) << 14)); } } @@ -70,11 +70,11 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb3_w) { if (m_RAMSize) { - memregion("maincpu")->base()[offset + 0x4000] = data; + m_region_maincpu->base()[offset + 0x4000] = data; } else { - memregion("maincpu")->base()[offset] = data; + m_region_maincpu->base()[offset] = data; } } @@ -94,14 +94,14 @@ WRITE8_MEMBER(bbc_state::bbc_memoryb4_w) if (m_rombank == 1) { // special DFS case for Acorn DFS E00 Hack that can write to the DFS RAM Bank; - if (m_DFSType == 3) memregion("user2")->base()[((m_DFSType) << 14) + offset] = data; + if (m_DFSType == 3) m_region_user2->base()[((m_DFSType) << 14) + offset] = data; } else { switch (m_SWRAMtype) { - case 1: if (bbc_SWRAMtype1[m_userport]) memregion("user1")->base()[(m_userport << 14) + offset] = data; - case 2: if (bbc_SWRAMtype2[m_rombank]) memregion("user1")->base()[(m_rombank << 14) + offset] = data; - case 3: if (bbc_SWRAMtype3[m_rombank]) memregion("user1")->base()[(m_rombank << 14) + offset] = data; + case 1: if (bbc_SWRAMtype1[m_userport]) m_region_user1->base()[(m_userport << 14) + offset] = data; + case 2: if (bbc_SWRAMtype2[m_rombank]) m_region_user1->base()[(m_rombank << 14) + offset] = data; + case 3: if (bbc_SWRAMtype3[m_rombank]) m_region_user1->base()[(m_rombank << 14) + offset] = data; } } } @@ -138,12 +138,12 @@ WRITE8_MEMBER(bbc_state::bbc_page_selectbp_w) if (m_pagedRAM) { /* if paged ram then set 8000 to afff to read from the ram 8000 to afff */ - membank("bank4")->set_base(machine().root_device().memregion("maincpu")->base() + 0x8000); + membank("bank4")->set_base(m_region_maincpu->base() + 0x8000); } else { /* if paged rom then set the rom to be read from 8000 to afff */ - membank("bank4")->set_base(machine().root_device().memregion("user1")->base() + (m_rombank << 14)); + membank("bank4")->set_base(m_region_user1->base() + (m_rombank << 14)); }; /* set the rom to be read from b000 to bfff */ @@ -155,7 +155,7 @@ WRITE8_MEMBER(bbc_state::bbc_page_selectbp_w) m_vdusel=(data>>7)&0x01; bbcbp_setvideoshadow(machine(), m_vdusel); //need to make the video display do a full screen refresh for the new memory area - membank("bank2")->set_base(machine().root_device().memregion("maincpu")->base()+0x3000); + membank("bank2")->set_base(m_region_maincpu->base()+0x3000); } } @@ -166,7 +166,7 @@ WRITE8_MEMBER(bbc_state::bbc_page_selectbp_w) WRITE8_MEMBER(bbc_state::bbc_memorybp1_w) { - memregion("maincpu")->base()[offset]=data; + m_region_maincpu->base()[offset]=data; } @@ -182,7 +182,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybp1_w) DIRECT_UPDATE_MEMBER(bbc_state::bbcbp_direct_handler) { - UINT8 *ram = memregion("maincpu")->base(); + UINT8 *ram = m_region_maincpu->base(); if (m_vdusel == 0) { // not in shadow ram mode so just read normal ram @@ -207,7 +207,7 @@ DIRECT_UPDATE_MEMBER(bbc_state::bbcbp_direct_handler) WRITE8_MEMBER(bbc_state::bbc_memorybp2_w) { - UINT8 *ram = memregion("maincpu")->base(); + UINT8 *ram = m_region_maincpu->base(); if (m_vdusel==0) { // not in shadow ram mode so just write to normal ram @@ -235,7 +235,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybp4_w) { if (m_pagedRAM) { - memregion("maincpu")->base()[offset+0x8000]=data; + m_region_maincpu->base()[offset+0x8000]=data; } } @@ -255,13 +255,13 @@ WRITE8_MEMBER(bbc_state::bbc_memorybp4_128_w) { if (m_pagedRAM) { - memregion("maincpu")->base()[offset+0x8000]=data; + m_region_maincpu->base()[offset+0x8000]=data; } else { if (bbc_b_plus_sideways_ram_banks[m_rombank]) { - memregion("user1")->base()[offset+(m_rombank<<14)]=data; + m_region_user1->base()[offset+(m_rombank<<14)]=data; } } } @@ -270,7 +270,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybp6_128_w) { if (bbc_b_plus_sideways_ram_banks[m_rombank]) { - memregion("user1")->base()[offset+(m_rombank<<14)+0x3000]=data; + m_region_user1->base()[offset+(m_rombank<<14)+0x3000]=data; } } @@ -360,11 +360,11 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write) if (m_ACCCON_Y) { - membank("bank7")->set_base(machine().root_device().memregion("maincpu")->base() + 0x9000); + membank("bank7")->set_base(m_region_maincpu->base() + 0x9000); } else { - membank("bank7")->set_base(machine().root_device().memregion("user1")->base() + 0x40000); + membank("bank7")->set_base(m_region_user1->base() + 0x40000); } bbcbp_setvideoshadow(machine(), m_ACCCON_D); @@ -372,11 +372,11 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write) if (m_ACCCON_X) { - membank("bank2")->set_base(machine().root_device().memregion( "maincpu" )->base() + 0xb000 ); + membank("bank2")->set_base(m_region_maincpu->base() + 0xb000 ); } else { - membank("bank2")->set_base(machine().root_device().memregion( "maincpu" )->base() + 0x3000 ); + membank("bank2")->set_base(m_region_maincpu->base() + 0x3000 ); } /* ACCCON_TST controls paging of rom reads in the 0xFC00-0xFEFF reigon */ @@ -384,7 +384,7 @@ WRITE8_MEMBER(bbc_state::bbcm_ACCCON_write) /* if 1 the the ROM is paged in for reads but writes still go to I/O */ if (m_ACCCON_TST) { - membank("bank8")->set_base(machine().root_device().memregion("user1")->base()+0x43c00); + membank("bank8")->set_base(m_region_user1->base()+0x43c00); space.install_read_bank(0xFC00,0xFEFF,"bank8"); } else @@ -410,12 +410,12 @@ WRITE8_MEMBER(bbc_state::page_selectbm_w) if (m_pagedRAM) { - membank("bank4")->set_base(machine().root_device().memregion("maincpu")->base() + 0x8000); + membank("bank4")->set_base(m_region_maincpu->base() + 0x8000); membank("bank5")->set_entry(m_rombank); } else { - membank("bank4")->set_base(machine().root_device().memregion("user1")->base() + ((m_rombank) << 14)); + membank("bank4")->set_base(m_region_user1->base() + ((m_rombank) << 14)); membank("bank5")->set_entry(m_rombank); } } @@ -424,7 +424,7 @@ WRITE8_MEMBER(bbc_state::page_selectbm_w) WRITE8_MEMBER(bbc_state::bbc_memorybm1_w) { - memregion("maincpu")->base()[offset] = data; + m_region_maincpu->base()[offset] = data; } @@ -432,17 +432,17 @@ DIRECT_UPDATE_MEMBER(bbc_state::bbcm_direct_handler) { if (m_ACCCON_X) { - membank( "bank2" )->set_base( memregion( "maincpu" )->base() + 0xb000 ); + membank( "bank2" )->set_base( m_region_maincpu->base() + 0xb000 ); } else { if (m_ACCCON_E && bbcm_vdudriverset(machine())) { - membank( "bank2" )->set_base( machine().root_device().memregion( "maincpu" )->base() + 0xb000 ); + membank( "bank2" )->set_base( m_region_maincpu->base() + 0xb000 ); } else { - membank( "bank2" )->set_base( machine().root_device().memregion( "maincpu" )->base() + 0x3000 ); + membank( "bank2" )->set_base( m_region_maincpu->base() + 0x3000 ); } } @@ -453,7 +453,7 @@ DIRECT_UPDATE_MEMBER(bbc_state::bbcm_direct_handler) WRITE8_MEMBER(bbc_state::bbc_memorybm2_w) { - UINT8 *ram = memregion("maincpu")->base(); + UINT8 *ram = m_region_maincpu->base(); if (m_ACCCON_X) { ram[offset + 0xb000] = data; @@ -481,13 +481,13 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm4_w) { if (m_pagedRAM) { - memregion("maincpu")->base()[offset+0x8000]=data; + m_region_maincpu->base()[offset+0x8000]=data; } else { if (bbc_master_sideways_ram_banks[m_rombank]) { - memregion("user1")->base()[offset+(m_rombank<<14)]=data; + m_region_user1->base()[offset+(m_rombank<<14)]=data; } } } @@ -497,7 +497,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm5_w) { if (bbc_master_sideways_ram_banks[m_rombank]) { - memregion("user1")->base()[offset+(m_rombank<<14)+0x1000]=data; + m_region_user1->base()[offset+(m_rombank<<14)+0x1000]=data; } } @@ -506,7 +506,7 @@ WRITE8_MEMBER(bbc_state::bbc_memorybm7_w) { if (m_ACCCON_Y) { - memregion("maincpu")->base()[offset+0x9000]=data; + m_region_maincpu->base()[offset+0x9000]=data; } } @@ -541,7 +541,7 @@ long myo; /* Now handled in bbcm_ACCCON_write PHS - 2008-10-11 */ // if ( m_ACCCON_TST ) // { -// return memregion("user1")->base()[offset+0x43c00]; +// return m_region_user1->base()[offset+0x43c00]; // }; if (offset<=0x0ff) /* FRED */ @@ -1915,7 +1915,7 @@ WRITE8_MEMBER(bbc_state::bbc_disc_w) ***************************************/ DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart ) { - UINT8 *mem = machine().root_device().memregion("user1")->base(); + UINT8 *mem = m_region_user1->base(); int size, read_; int addr = 0; int index = 0; @@ -1991,13 +1991,13 @@ MACHINE_START_MEMBER(bbc_state,bbca) MACHINE_RESET_MEMBER(bbc_state,bbca) { - UINT8 *ram = machine().root_device().memregion("maincpu")->base(); + UINT8 *ram = m_region_maincpu->base(); m_RAMSize = 1; membank("bank1")->set_base(ram); membank("bank3")->set_base(ram); - membank("bank4")->set_base(machine().root_device().memregion("user1")->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ - membank("bank7")->set_base(memregion("user1")->base()+0x10000); /* bank 7 points at the OS rom from c000 to ffff */ + membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ + membank("bank7")->set_base(m_region_user1->base()+0x10000); /* bank 7 points at the OS rom from c000 to ffff */ bbcb_IC32_initialise(this); } @@ -2024,7 +2024,7 @@ MACHINE_START_MEMBER(bbc_state,bbcb) MACHINE_RESET_MEMBER(bbc_state,bbcb) { - UINT8 *ram = memregion("maincpu")->base(); + UINT8 *ram = m_region_maincpu->base(); m_DFSType= (machine().root_device().ioport("BBCCONFIG")->read() >> 0) & 0x07; m_SWRAMtype = (machine().root_device().ioport("BBCCONFIG")->read() >> 3) & 0x03; m_RAMSize= (machine().root_device().ioport("BBCCONFIG")->read() >> 5) & 0x01; @@ -2043,8 +2043,8 @@ MACHINE_RESET_MEMBER(bbc_state,bbcb) m_memorySize=16; } - membank("bank4")->set_base(machine().root_device().memregion("user1")->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ - membank("bank7")->set_base(machine().root_device().memregion("user1")->base() + 0x40000); /* bank 7 points at the OS rom from c000 to ffff */ + membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is the paged ROMs from 8000 to bfff */ + membank("bank7")->set_base(m_region_user1->base() + 0x40000); /* bank 7 points at the OS rom from c000 to ffff */ bbcb_IC32_initialise(this); @@ -2064,19 +2064,19 @@ MACHINE_START_MEMBER(bbc_state,bbcbp) { m_mc6850_clock = 0; - machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this)); + m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcbp_direct_handler), this)); /* bank 6 is the paged ROMs from b000 to bfff */ - membank("bank6")->configure_entries(0, 16, memregion("user1")->base() + 0x3000, 1<<14); + membank("bank6")->configure_entries(0, 16, m_region_user1->base() + 0x3000, 1<<14); } MACHINE_RESET_MEMBER(bbc_state,bbcbp) { - membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base()); - membank("bank2")->set_base(machine().root_device().memregion("maincpu")->base()+0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ - membank("bank4")->set_base(machine().root_device().memregion("user1")->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */ + membank("bank1")->set_base(m_region_maincpu->base()); + membank("bank2")->set_base(m_region_maincpu->base()+0x03000); /* bank 2 screen/shadow ram from 3000 to 7fff */ + membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to afff */ membank("bank6")->set_entry(0); - membank("bank7")->set_base(memregion("user1")->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */ + membank("bank7")->set_base(m_region_user1->base()+0x40000); /* bank 7 points at the OS rom from c000 to ffff */ bbcb_IC32_initialise(this); @@ -2090,23 +2090,23 @@ MACHINE_START_MEMBER(bbc_state,bbcm) { m_mc6850_clock = 0; - machine().device("maincpu")->memory().space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this)); + m_maincpu->space(AS_PROGRAM).set_direct_update_handler(direct_update_delegate(FUNC(bbc_state::bbcm_direct_handler), this)); /* bank 5 is the paged ROMs from 9000 to bfff */ - membank("bank5")->configure_entries(0, 16, machine().root_device().memregion("user1")->base()+0x01000, 1<<14); + membank("bank5")->configure_entries(0, 16, m_region_user1->base()+0x01000, 1<<14); /* Set ROM/IO bank to point to rom */ - membank( "bank8" )->set_base( memregion("user1")->base()+0x43c00); - machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xFC00, 0xFEFF, "bank8"); + membank( "bank8" )->set_base( m_region_user1->base()+0x43c00); + m_maincpu->space(AS_PROGRAM).install_read_bank(0xFC00, 0xFEFF, "bank8"); } MACHINE_RESET_MEMBER(bbc_state,bbcm) { - membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base()); /* bank 1 regular lower ram from 0000 to 2fff */ - membank("bank2")->set_base(machine().root_device().memregion("maincpu")->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ - membank("bank4")->set_base(machine().root_device().memregion("user1")->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */ + membank("bank1")->set_base(m_region_maincpu->base()); /* bank 1 regular lower ram from 0000 to 2fff */ + membank("bank2")->set_base(m_region_maincpu->base() + 0x3000); /* bank 2 screen/shadow ram from 3000 to 7fff */ + membank("bank4")->set_base(m_region_user1->base()); /* bank 4 is paged ROM or RAM from 8000 to 8fff */ membank("bank5")->set_entry(0); - membank("bank7")->set_base(memregion("user1")->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */ + membank("bank7")->set_base(m_region_user1->base() + 0x40000); /* bank 6 OS rom of RAM from c000 to dfff */ bbcb_IC32_initialise(this);