summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/seta.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/seta.cpp')
-rw-r--r--src/mame/drivers/seta.cpp24
1 files changed, 17 insertions, 7 deletions
diff --git a/src/mame/drivers/seta.cpp b/src/mame/drivers/seta.cpp
index 31b4306a1ea..f3c12ed44b7 100644
--- a/src/mame/drivers/seta.cpp
+++ b/src/mame/drivers/seta.cpp
@@ -4572,7 +4572,8 @@ static INPUT_PORTS_START( downtown )
PORT_DIPSETTING( 0x0080, DEF_STR( 1C_3C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0040, DEF_STR( 1C_4C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
PORT_DIPSETTING( 0x0000, DEF_STR( 1C_6C ) ) PORT_CONDITION("DSW",0x8000,NOTEQUALS,0x8000)
- PORT_DIPNAME( 0x0300, 0x0100, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
+ // default "Normal" on Romstar manual, and matches ALL OFF scheme
+ PORT_DIPNAME( 0x0300, 0x0300, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("SW2:1,2")
PORT_DIPSETTING( 0x0200, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x0300, DEF_STR( Normal ) )
PORT_DIPSETTING( 0x0100, DEF_STR( Hard ) )
@@ -4582,6 +4583,8 @@ static INPUT_PORTS_START( downtown )
PORT_DIPSETTING( 0x0800, "50K Only" )
PORT_DIPSETTING( 0x0400, "100K Only" )
PORT_DIPSETTING( 0x0000, "50K, Every 150K" )
+ // TODO: defaults to 2 lives in the Romstar manual, contradicts with DIPSW ALL OFF convention.
+ // Is it a regional difference? Verify with a Mokugeki Jp manual.
PORT_DIPNAME( 0x3000, 0x3000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:5,6")
PORT_DIPSETTING( 0x1000, "2" )
PORT_DIPSETTING( 0x3000, "3" )
@@ -12138,12 +12141,15 @@ u16 downtown_state::downtown_protection_r(offs_t offset)
case 0xa3:
{
static const u8 word[] = "WALTZ0";
- if (offset >= 0x100/2 && offset <= 0x10a/2) return word[offset - 0x100/2];
- else return 0;
+ if (offset >= 0x100/2 && offset <= 0x10a/2)
+ return word[offset - 0x100/2];
+
+ // definitely wants to read-back hi-score table from 0x110-0x15f
+ [[fallthrough]];
}
- default:
- return m_downtown_protection[offset] & 0xff;
}
+
+ return m_downtown_protection[offset] & 0xff;
}
void downtown_state::downtown_protection_w(offs_t offset, u16 data, u16 mem_mask)
@@ -12155,8 +12161,12 @@ void downtown_state::init_downtown()
{
init_bank6502();
- m_downtown_protection = make_unique_clear<u16[]>(0x200/2);
- save_pointer(NAME(m_downtown_protection),0x200/2);
+ m_downtown_protection = make_unique_clear<u8[]>(0x100);
+ // TODO: protection RAM area is user clearable from service mode, most likely has some sort of battery backed RAM
+ // initializing with 0xff is enough for host CPU to catch up and default it with sensible defaults.
+ for (int i = 0; i < 0x100; i++)
+ m_downtown_protection[i] = 0xff;
+ save_pointer(NAME(m_downtown_protection), 0x200/2);
m_maincpu->space(AS_PROGRAM).install_read_handler(0x200000, 0x2001ff, read16sm_delegate(*this, FUNC(downtown_state::downtown_protection_r)));
m_maincpu->space(AS_PROGRAM).install_write_handler(0x200000, 0x2001ff, write16s_delegate(*this, FUNC(downtown_state::downtown_protection_w)));