3do.c: Reduce tagmap lookups (nw)

This commit is contained in:
Wilbert Pol 2013-02-08 19:38:29 +00:00
parent 2c45ab5199
commit cb294f862b
3 changed files with 30 additions and 23 deletions

View File

@ -131,11 +131,11 @@ INPUT_PORTS_END
void _3do_state::machine_start()
{
membank("bank2")->set_base(memregion("user1")->base());
m_bank2->set_base(memregion("user1")->base());
/* configure overlay */
membank("bank1")->configure_entry(0, m_dram);
membank("bank1")->configure_entry(1, memregion("user1")->base());
m_bank1->configure_entry(0, m_dram);
m_bank1->configure_entry(1, memregion("user1")->base());
m_3do_slow2_init();
m_3do_madam_init();
@ -145,7 +145,7 @@ void _3do_state::machine_start()
void _3do_state::machine_reset()
{
/* start with overlay enabled */
membank("bank1")->set_entry(1);
m_bank1->set_entry(1);
m_clio.cstatbits = 0x01; /* bit 0 = reset of clio caused by power on */
}

View File

@ -135,10 +135,13 @@ class _3do_state : public driver_device
{
public:
_3do_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag) ,
m_maincpu(*this, "maincpu"),
m_dram(*this, "dram"),
m_vram(*this, "vram"){ }
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_dram(*this, "dram")
, m_vram(*this, "vram")
, m_bank1(*this, "bank1")
, m_bank2(*this, "bank2")
{ }
required_device<cpu_device> m_maincpu;
required_shared_ptr<UINT32> m_dram;
@ -168,6 +171,10 @@ public:
TIMER_DEVICE_CALLBACK_MEMBER( timer_x16_cb );
protected:
required_memory_bank m_bank1;
required_memory_bank m_bank2;
private:
void m_3do_slow2_init( void );
void m_3do_madam_init( void );

View File

@ -197,7 +197,7 @@ WRITE8_MEMBER(_3do_state::_3do_nvarea_w) { m_nvram[offset] = data; }
READ32_MEMBER(_3do_state::_3do_slow2_r){
UINT32 data = 0;
logerror( "%08X: UNK_318 read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset );
logerror( "%08X: UNK_318 read offset = %08X\n", m_maincpu->pc(), offset );
switch( offset ) {
case 0: /* Boot ROM checks here and expects to read 1, 0, 1, 0 in the lowest bit */
@ -211,14 +211,14 @@ READ32_MEMBER(_3do_state::_3do_slow2_r){
WRITE32_MEMBER(_3do_state::_3do_slow2_w)
{
logerror( "%08X: UNK_318 write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset, data, mem_mask );
logerror( "%08X: UNK_318 write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset, data, mem_mask );
switch( offset )
{
case 0: /* Boot ROM writes 03180000 here and then starts reading some things */
{
/* disable ROM overlay */
membank("bank1")->set_entry(0);
m_bank1->set_entry(0);
}
m_slow2.cg_input = m_slow2.cg_input << 1 | ( data & 0x00000001 );
m_slow2.cg_w_count ++;
@ -236,7 +236,7 @@ READ32_MEMBER(_3do_state::_3do_svf_r)
UINT32 addr = ( offset & ( 0x07fc / 4 ) ) << 9;
UINT32 *p = m_vram + addr;
logerror( "%08X: SVF read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset*4 );
logerror( "%08X: SVF read offset = %08X\n", m_maincpu->pc(), offset*4 );
switch( offset & ( 0xE000 / 4 ) )
{
@ -261,7 +261,7 @@ WRITE32_MEMBER(_3do_state::_3do_svf_w)
UINT32 addr = ( offset & ( 0x07fc / 4 ) ) << 9;
UINT32 *p = m_vram + addr;
logerror( "%08X: SVF write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: SVF write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
switch( offset & ( 0xe000 / 4 ) )
{
@ -297,7 +297,7 @@ WRITE32_MEMBER(_3do_state::_3do_svf_w)
READ32_MEMBER(_3do_state::_3do_madam_r){
logerror( "%08X: MADAM read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset*4 );
logerror( "%08X: MADAM read offset = %08X\n", m_maincpu->pc(), offset*4 );
switch( offset ) {
case 0x0000/4: /* 03300000 - Revision */
@ -448,7 +448,7 @@ READ32_MEMBER(_3do_state::_3do_madam_r){
case 0x07f8/4:
return m_madam.mult_status;
default:
logerror( "%08X: unhandled MADAM read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset*4 );
logerror( "%08X: unhandled MADAM read offset = %08X\n", m_maincpu->pc(), offset*4 );
break;
}
return 0;
@ -459,12 +459,12 @@ WRITE32_MEMBER(_3do_state::_3do_madam_w){
if(offset == 0)
{
if(data == 0x0a)
logerror( "%08X: MADAM write offset = %08X, data = %08X (\\n), mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: MADAM write offset = %08X, data = %08X (\\n), mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
else
logerror( "%08X: MADAM write offset = %08X, data = %08X (%c), mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, data, mem_mask );
logerror( "%08X: MADAM write offset = %08X, data = %08X (%c), mask = %08X\n", m_maincpu->pc(), offset*4, data, data, mem_mask );
}
else
logerror( "%08X: MADAM write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: MADAM write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
switch( offset ) {
case 0x0000/4:
@ -641,7 +641,7 @@ WRITE32_MEMBER(_3do_state::_3do_madam_w){
break;
default:
logerror( "%08X: unhandled MADAM write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: unhandled MADAM write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
break;
}
}
@ -655,7 +655,7 @@ READ32_MEMBER(_3do_state::_3do_clio_r)
{
if(offset != 0x200/4 && offset != 0x40/4 && offset != 0x44/4 && offset != 0x48/4 && offset != 0x4c/4 &&
offset != 0x118/4 && offset != 0x11c/4)
logerror( "%08X: CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
logerror( "%08X: CLIO read offset = %08X\n", m_maincpu->pc(), offset * 4 );
}
/* TODO: for debug, to be removed once that we write the CPU core */
@ -770,7 +770,7 @@ READ32_MEMBER(_3do_state::_3do_clio_r)
default:
if (!space.debugger_access())
logerror( "%08X: unhandled CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
logerror( "%08X: unhandled CLIO read offset = %08X\n", m_maincpu->pc(), offset * 4 );
break;
}
return 0;
@ -780,7 +780,7 @@ WRITE32_MEMBER(_3do_state::_3do_clio_w)
{
if(offset != 0x200/4 && offset != 0x40/4 && offset != 0x44/4 && offset != 0x48/4 && offset != 0x4c/4 &&
offset != 0x118/4 && offset != 0x11c/4)
logerror( "%08X: CLIO write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: CLIO write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
/* TODO: for debug, to be removed once that we write the CPU core */
if(offset >= 0x1800/4 && offset <= 0x1fff/4)
@ -1016,7 +1016,7 @@ WRITE32_MEMBER(_3do_state::_3do_clio_w)
break;
default:
logerror( "%08X: unhandled CLIO write offset = %08X, data = %08X, mask = %08X\n", machine().device("maincpu")->safe_pc(), offset*4, data, mem_mask );
logerror( "%08X: unhandled CLIO write offset = %08X, data = %08X, mask = %08X\n", m_maincpu->pc(), offset*4, data, mem_mask );
break;
}
}