summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Alex W. Jackson <alex.w.jackson@gmail.com>2014-02-03 15:43:44 +0000
committer Alex W. Jackson <alex.w.jackson@gmail.com>2014-02-03 15:43:44 +0000
commit44add8d8efd1fe139ae490ccd2c91b1a86dad65a (patch)
tree410d2e15ecb21c47e12507cf234c961eb1b6778c
parent4114303fe62707e0113edef69bb52124b461ab3c (diff)
nemesis.c [Alex Jackson]:
* Hooked up RC filters to AY8910s * Fixed konamigt layout aspect ratio * Some corrections to address maps and inputs
-rw-r--r--src/mame/drivers/nemesis.c143
-rw-r--r--src/mame/includes/nemesis.h12
-rw-r--r--src/mame/layout/konamigt.lay8
-rw-r--r--src/mame/video/nemesis.c4
4 files changed, 128 insertions, 39 deletions
diff --git a/src/mame/drivers/nemesis.c b/src/mame/drivers/nemesis.c
index 40d997c34a3..11deb5666be 100644
--- a/src/mame/drivers/nemesis.c
+++ b/src/mame/drivers/nemesis.c
@@ -208,10 +208,20 @@ READ16_MEMBER(nemesis_state::selected_ip_word_r)
}
+WRITE8_MEMBER(nemesis_state::nemesis_filter_w)
+{
+ int C1 = /* offset & 0x1000 ? 4700 : */ 0; // is this right? 4.7uF seems too large
+ int C2 = offset & 0x0800 ? 33 : 0; // 0.033uF = 33 nF
+ m_filter1->filter_rc_set_RC(FLT_RC_LOWPASS, (AY8910_INTERNAL_RESISTANCE + 12000) / 3, 0, 0, CAP_N(C1)); // unused?
+ m_filter2->filter_rc_set_RC(FLT_RC_LOWPASS, AY8910_INTERNAL_RESISTANCE + 1000, 10000, 0, CAP_N(C2));
+ m_filter3->filter_rc_set_RC(FLT_RC_LOWPASS, AY8910_INTERNAL_RESISTANCE + 1000, 10000, 0, CAP_N(C2));
+ m_filter4->filter_rc_set_RC(FLT_RC_LOWPASS, AY8910_INTERNAL_RESISTANCE + 1000, 10000, 0, CAP_N(C2));
+
+ // konamigt also uses bits 0x0018, what are they for?
+}
+
WRITE8_MEMBER(nemesis_state::gx400_speech_start_w)
{
- /* the voice data is not in a rom but in sound RAM at $8000 */
- m_vlm->set_rom(m_gx400_shared_ram + 0x4000);
m_vlm->st(1);
m_vlm->st(0);
}
@@ -282,7 +292,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x000000, 0x00ffff) AM_ROM /* ROM BIOS */
AM_RANGE(0x010000, 0x01ffff) AM_RAM
- AM_RANGE(0x020000, 0x0287ff) AM_READWRITE(gx400_sharedram_word_r, gx400_sharedram_word_w)
+ AM_RANGE(0x020000, 0x027fff) AM_READWRITE(gx400_sharedram_word_r, gx400_sharedram_word_w)
AM_RANGE(0x030000, 0x03ffff) AM_RAM_WRITE(nemesis_charram_word_w) AM_SHARE("charram")
AM_RANGE(0x050000, 0x051fff) AM_RAM
AM_RANGE(0x050000, 0x0503ff) AM_SHARE("xscroll1")
@@ -349,7 +359,7 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( rf2_gx400_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x000000, 0x00ffff) AM_ROM /* ROM BIOS */
AM_RANGE(0x010000, 0x01ffff) AM_RAM
- AM_RANGE(0x020000, 0x0287ff) AM_READWRITE(gx400_sharedram_word_r, gx400_sharedram_word_w)
+ AM_RANGE(0x020000, 0x027fff) AM_READWRITE(gx400_sharedram_word_r, gx400_sharedram_word_w)
AM_RANGE(0x030000, 0x03ffff) AM_RAM_WRITE(nemesis_charram_word_w) AM_SHARE("charram")
AM_RANGE(0x050000, 0x051fff) AM_RAM
AM_RANGE(0x050000, 0x0503ff) AM_SHARE("xscroll1")
@@ -392,6 +402,7 @@ static ADDRESS_MAP_START( sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w)
AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w)
AM_RANGE(0xe006, 0xe006) AM_DEVWRITE("ay1", ay8910_device, address_w)
+ AM_RANGE(0xe007, 0xe007) AM_MIRROR(0x1ff8) AM_MASK(0x1ff8) AM_WRITE(nemesis_filter_w)
AM_RANGE(0xe086, 0xe086) AM_DEVREAD("ay1", ay8910_device, data_r)
AM_RANGE(0xe106, 0xe106) AM_DEVWRITE("ay1", ay8910_device, data_w)
AM_RANGE(0xe205, 0xe205) AM_DEVREAD("ay2", ay8910_device, data_r)
@@ -400,7 +411,8 @@ ADDRESS_MAP_END
static ADDRESS_MAP_START( gx400_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0x0000, 0x1fff) AM_ROM
- AM_RANGE(0x4000, 0x87ff) AM_RAM AM_SHARE("gx400_shared")
+ AM_RANGE(0x4000, 0x7fff) AM_RAM AM_SHARE("gx400_shared")
+ AM_RANGE(0x8000, 0x87ff) AM_RAM AM_SHARE("voiceram")
AM_RANGE(0xa000, 0xafff) AM_DEVWRITE("k005289", k005289_device, ld1_w)
AM_RANGE(0xc000, 0xcfff) AM_DEVWRITE("k005289", k005289_device, ld2_w)
AM_RANGE(0xe000, 0xe000) AM_DEVWRITE("vlm", vlm5030_device, data_w)
@@ -409,6 +421,7 @@ static ADDRESS_MAP_START( gx400_sound_map, AS_PROGRAM, 8, nemesis_state )
AM_RANGE(0xe004, 0xe004) AM_DEVWRITE("k005289", k005289_device, tg2_w)
AM_RANGE(0xe005, 0xe005) AM_DEVWRITE("ay2", ay8910_device, address_w)
AM_RANGE(0xe006, 0xe006) AM_DEVWRITE("ay1", ay8910_device, address_w)
+ AM_RANGE(0xe007, 0xe007) AM_MIRROR(0x1ff8) AM_MASK(0x1ff8) AM_WRITE(nemesis_filter_w)
AM_RANGE(0xe030, 0xe030) AM_WRITE(gx400_speech_start_w)
AM_RANGE(0xe086, 0xe086) AM_DEVREAD("ay1", ay8910_device, data_r)
AM_RANGE(0xe106, 0xe106) AM_DEVWRITE("ay1", ay8910_device, data_w)
@@ -499,7 +512,6 @@ static ADDRESS_MAP_START( nyanpani_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x000000, 0x01ffff) AM_ROM
AM_RANGE(0x040000, 0x047fff) AM_RAM
AM_RANGE(0x060000, 0x061fff) AM_RAM_WRITE(salamander_palette_word_w) AM_SHARE("paletteram")
- AM_RANGE(0x100000, 0x13ffff) AM_ROM
AM_RANGE(0x070000, 0x070001) AM_READ_PORT("DSW1")
AM_RANGE(0x070002, 0x070003) AM_READ_PORT("IN2")
AM_RANGE(0x070004, 0x070005) AM_READ_PORT("IN1")
@@ -508,6 +520,7 @@ static ADDRESS_MAP_START( nyanpani_map, AS_PROGRAM, 16, nemesis_state )
AM_RANGE(0x070010, 0x070011) AM_WRITE8(soundlatch_byte_w, 0x00ff)
AM_RANGE(0x070018, 0x070019) AM_WRITE(watchdog_reset16_w) /* probably */
AM_RANGE(0x078000, 0x078001) AM_WRITE(salamand_control_port_word_w) /* irq enable, flipscreen, etc. */
+ AM_RANGE(0x100000, 0x13ffff) AM_ROM
AM_RANGE(0x200000, 0x200fff) AM_RAM_WRITE(nemesis_videoram1_word_w) AM_SHARE("videoram1") /* VRAM */
AM_RANGE(0x201000, 0x201fff) AM_RAM_WRITE(nemesis_videoram2_word_w) AM_SHARE("videoram2")
AM_RANGE(0x202000, 0x202fff) AM_RAM_WRITE(nemesis_colorram1_word_w) AM_SHARE("colorram1")
@@ -791,11 +804,11 @@ static INPUT_PORTS_START( gwarrior )
KONAMI8_SYSTEM_UNK
PORT_START("IN1")
- KONAMI8_B321(1)
+ KONAMI8_B123(1)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("IN2")
- KONAMI8_B321(2)
+ KONAMI8_B123(2)
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START("DSW0")
@@ -1455,7 +1468,7 @@ GFXDECODE_END
static const ay8910_interface ay8910_interface_1 =
{
- AY8910_LEGACY_OUTPUT,
+ AY8910_LEGACY_OUTPUT | AY8910_SINGLE_OUTPUT,
AY8910_DEFAULT_LOADS,
DEVCB_DRIVER_MEMBER(nemesis_state,nemesis_portA_r),
DEVCB_NULL,
@@ -1506,6 +1519,10 @@ void nemesis_state::machine_start()
save_item(NAME(m_tilemap_flip));
save_item(NAME(m_flipscreen));
save_item(NAME(m_irq_port_last));
+
+ /* gx400 voice data is not in a ROM but in sound RAM at $8000 */
+ if (m_vlm != NULL && memregion("vlm")->bytes() == 0x800)
+ m_vlm->set_rom(m_voiceram);
}
void nemesis_state::machine_reset()
@@ -1552,17 +1569,25 @@ static MACHINE_CONFIG_START( nemesis, nemesis_state )
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) /* verified with OST */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.20)
MCFG_SOUND_ADD("ay2", AY8910, 14318180/8)
- MCFG_SOUND_CONFIG(ay8910_interface_2) /* fixed */
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
+ MCFG_SOUND_CONFIG(ay8910_interface_2)
+ MCFG_SOUND_ROUTE(0, "filter2", 1.00)
+ MCFG_SOUND_ROUTE(1, "filter3", 1.00)
+ MCFG_SOUND_ROUTE(2, "filter4", 1.00)
+
+ MCFG_FILTER_RC_ADD("filter1", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter2", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter3", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter4", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_K005289_ADD("k005289", 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
-
- MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) /* unused */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35)
MACHINE_CONFIG_END
@@ -1595,17 +1620,28 @@ static MACHINE_CONFIG_START( gx400, nemesis_state )
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) /* verified with OST */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.20)
MCFG_SOUND_ADD("ay2", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
+ MCFG_SOUND_ROUTE(0, "filter2", 1.00)
+ MCFG_SOUND_ROUTE(1, "filter3", 1.00)
+ MCFG_SOUND_ROUTE(2, "filter4", 1.00)
+
+ MCFG_FILTER_RC_ADD("filter1", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter2", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter3", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter4", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_K005289_ADD("k005289", 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35)
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) /* unused */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70)
MACHINE_CONFIG_END
@@ -1637,11 +1673,22 @@ static MACHINE_CONFIG_START( konamigt, nemesis_state )
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.20)
MCFG_SOUND_ADD("ay2", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ MCFG_SOUND_ROUTE(0, "filter2", 1.00)
+ MCFG_SOUND_ROUTE(1, "filter3", 1.00)
+ MCFG_SOUND_ROUTE(2, "filter4", 1.00)
+
+ MCFG_FILTER_RC_ADD("filter1", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter2", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter3", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter4", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_K005289_ADD("k005289", 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
@@ -1677,11 +1724,22 @@ static MACHINE_CONFIG_START( rf2_gx400, nemesis_state )
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.85)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.20)
MCFG_SOUND_ADD("ay2", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.80)
+ MCFG_SOUND_ROUTE(0, "filter2", 1.00)
+ MCFG_SOUND_ROUTE(1, "filter3", 1.00)
+ MCFG_SOUND_ROUTE(2, "filter4", 1.00)
+
+ MCFG_FILTER_RC_ADD("filter1", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter2", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter3", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter4", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_K005289_ADD("k005289", 3579545)
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.60)
@@ -1990,6 +2048,8 @@ ROM_START( rf2 )
ROM_REGION( 0x0200, "k005289", 0 ) /* 2x 256 byte for 0005289 wavetable data */
ROM_LOAD( "400-a01.fse", 0x00000, 0x0100, CRC(5827b1e8) SHA1(fa8cf5f868cfb08bce203baaebb6c4055ee2a000) )
ROM_LOAD( "400-a02.fse", 0x00100, 0x0100, CRC(2f44f970) SHA1(7ab46f9d5d587665782cefc623b8de0124a6d38a) )
+
+ ROM_REGION( 0x800, "vlm", ROMREGION_ERASE00 ) /* dummy region to set the correct vlm address mask */
ROM_END
ROM_START( twinbee )
@@ -2005,6 +2065,8 @@ ROM_START( twinbee )
ROM_REGION( 0x0200, "k005289", 0 ) /* 2x 256 byte for 0005289 wavetable data */
ROM_LOAD( "400-a01.fse", 0x00000, 0x0100, CRC(5827b1e8) SHA1(fa8cf5f868cfb08bce203baaebb6c4055ee2a000) )
ROM_LOAD( "400-a02.fse", 0x00100, 0x0100, CRC(2f44f970) SHA1(7ab46f9d5d587665782cefc623b8de0124a6d38a) )
+
+ ROM_REGION( 0x800, "vlm", ROMREGION_ERASE00 ) /* dummy region to set the correct vlm address mask */
ROM_END
ROM_START( gradius )
@@ -2020,6 +2082,8 @@ ROM_START( gradius )
ROM_REGION( 0x0200, "k005289", 0 ) /* 2x 256 byte for 0005289 wavetable data */
ROM_LOAD( "400-a01.fse", 0x00000, 0x0100, CRC(5827b1e8) SHA1(fa8cf5f868cfb08bce203baaebb6c4055ee2a000) )
ROM_LOAD( "400-a02.fse", 0x00100, 0x0100, CRC(2f44f970) SHA1(7ab46f9d5d587665782cefc623b8de0124a6d38a) )
+
+ ROM_REGION( 0x800, "vlm", ROMREGION_ERASE00 ) /* dummy region to set the correct vlm address mask */
ROM_END
ROM_START( gwarrior )
@@ -2035,6 +2099,8 @@ ROM_START( gwarrior )
ROM_REGION( 0x0200, "k005289", 0 ) /* 2x 256 byte for 0005289 wavetable data */
ROM_LOAD( "400-a01.fse", 0x00000, 0x0100, CRC(5827b1e8) SHA1(fa8cf5f868cfb08bce203baaebb6c4055ee2a000) )
ROM_LOAD( "400-a02.fse", 0x00100, 0x0100, CRC(2f44f970) SHA1(7ab46f9d5d587665782cefc623b8de0124a6d38a) )
+
+ ROM_REGION( 0x800, "vlm", ROMREGION_ERASE00 ) /* dummy region to set the correct vlm address mask */
ROM_END
ROM_START( salamand )
@@ -2047,7 +2113,7 @@ ROM_START( salamand )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound */
ROM_LOAD( "587-d09.11j", 0x00000, 0x08000, CRC(5020972c) SHA1(04c752c3b7fd850a8a51ecd230b39e6edde9dd7e) )
- ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data? */
+ ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data */
ROM_LOAD( "587-d08.8g", 0x00000, 0x04000, CRC(f9ac6b82) SHA1(3370fc3a7f82e922e19d54afb3bca7b07fa4aa9a) )
ROM_REGION( 0x20000, "k007232", 0 ) /* 007232 data */
@@ -2064,7 +2130,7 @@ ROM_START( salamandj )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound */
ROM_LOAD( "587-d09.11j", 0x00000, 0x08000, CRC(5020972c) SHA1(04c752c3b7fd850a8a51ecd230b39e6edde9dd7e) )
- ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data? */
+ ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data */
ROM_LOAD( "587-d08.8g", 0x00000, 0x04000, CRC(f9ac6b82) SHA1(3370fc3a7f82e922e19d54afb3bca7b07fa4aa9a) )
ROM_REGION( 0x20000, "k007232", 0 ) /* 007232 data */
@@ -2081,7 +2147,7 @@ ROM_START( lifefrce )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound */
ROM_LOAD( "587-k09.11j", 0x00000, 0x08000, CRC(2255fe8c) SHA1(6ee35575a15f593642b29020857ec466094ef495) )
- ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data? */
+ ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data */
ROM_LOAD( "587-k08.8g", 0x00000, 0x04000, CRC(7f0e9b41) SHA1(c9fc2723fac55691dfbb4cf9b3c472a42efa97c9) )
ROM_REGION( 0x20000, "k007232", 0 ) /* 007232 data */
@@ -2098,7 +2164,7 @@ ROM_START( lifefrcej )
ROM_REGION( 0x10000, "audiocpu", 0 ) /* 64k for sound */
ROM_LOAD( "587-n09.11j", 0x00000, 0x08000, CRC(e8496150) SHA1(c7d40b6dc56849dfd8d080f1aaebad36c88d93df) )
- ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data? */
+ ROM_REGION( 0x04000, "vlm", 0 ) /* VLM5030 data */
ROM_LOAD( "587-k08.8g", 0x00000, 0x04000, CRC(7f0e9b41) SHA1(c9fc2723fac55691dfbb4cf9b3c472a42efa97c9) )
ROM_REGION( 0x20000, "k007232", 0 ) /* 007232 data */
@@ -2623,7 +2689,7 @@ static MACHINE_CONFIG_START( bubsys, nemesis_state )
MCFG_CPU_ADD("audiocpu", Z80,14318180/4) /* 3.579545 MHz */
MCFG_CPU_PROGRAM_MAP(gx400_sound_map)
- MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
+ MCFG_CPU_VBLANK_INT_DRIVER("screen", nemesis_state, nmi_line_pulse) /* interrupts are triggered by the main CPU */
/* video hardware */
@@ -2643,17 +2709,28 @@ static MACHINE_CONFIG_START( bubsys, nemesis_state )
MCFG_SOUND_ADD("ay1", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_1)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.40) /* verified with OST */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "filter1", 0.20)
MCFG_SOUND_ADD("ay2", AY8910, 14318180/8)
MCFG_SOUND_CONFIG(ay8910_interface_2)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.00) /* verified with OST */
+ MCFG_SOUND_ROUTE(0, "filter2", 1.00)
+ MCFG_SOUND_ROUTE(1, "filter3", 1.00)
+ MCFG_SOUND_ROUTE(2, "filter4", 1.00)
+
+ MCFG_FILTER_RC_ADD("filter1", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter2", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter3", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
+ MCFG_FILTER_RC_ADD("filter4", 0)
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 1.0)
MCFG_K005289_ADD("k005289", 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35) /* verified with OST */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.35)
MCFG_SOUND_ADD("vlm", VLM5030, 3579545)
- MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70) /* unused */
+ MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70)
MACHINE_CONFIG_END
diff --git a/src/mame/includes/nemesis.h b/src/mame/includes/nemesis.h
index f328d5411a5..645cb9cc1d3 100644
--- a/src/mame/includes/nemesis.h
+++ b/src/mame/includes/nemesis.h
@@ -1,3 +1,4 @@
+#include "sound/flt_rc.h"
#include "sound/k007232.h"
#include "sound/k005289.h"
#include "sound/vlm5030.h"
@@ -19,8 +20,13 @@ public:
m_spriteram(*this, "spriteram"),
m_paletteram(*this, "paletteram"),
m_gx400_shared_ram(*this, "gx400_shared"),
+ m_voiceram(*this, "voiceram"),
m_maincpu(*this, "maincpu"),
m_audiocpu(*this, "audiocpu"),
+ m_filter1(*this, "filter1"),
+ m_filter2(*this, "filter2"),
+ m_filter3(*this, "filter3"),
+ m_filter4(*this, "filter4"),
m_k007232(*this, "k007232"),
m_k005289(*this, "k005289"),
m_vlm(*this, "vlm") { }
@@ -38,6 +44,7 @@ public:
required_shared_ptr<UINT16> m_spriteram;
required_shared_ptr<UINT16> m_paletteram;
optional_shared_ptr<UINT8> m_gx400_shared_ram;
+ optional_shared_ptr<UINT8> m_voiceram;
/* video-related */
tilemap_t *m_background;
@@ -60,6 +67,10 @@ public:
/* devices */
required_device<cpu_device> m_maincpu;
required_device<cpu_device> m_audiocpu;
+ optional_device<filter_rc_device> m_filter1;
+ optional_device<filter_rc_device> m_filter2;
+ optional_device<filter_rc_device> m_filter3;
+ optional_device<filter_rc_device> m_filter4;
optional_device<k007232_device> m_k007232;
optional_device<k005289_device> m_k005289;
optional_device<vlm5030_device> m_vlm;
@@ -85,6 +96,7 @@ public:
DECLARE_WRITE16_MEMBER(nemesis_colorram1_word_w);
DECLARE_WRITE16_MEMBER(nemesis_colorram2_word_w);
DECLARE_WRITE16_MEMBER(nemesis_charram_word_w);
+ DECLARE_WRITE8_MEMBER(nemesis_filter_w);
DECLARE_WRITE8_MEMBER(gx400_speech_start_w);
DECLARE_WRITE8_MEMBER(salamand_speech_start_w);
DECLARE_READ8_MEMBER(nemesis_portA_r);
diff --git a/src/mame/layout/konamigt.lay b/src/mame/layout/konamigt.lay
index af76c363659..df590f1fe95 100644
--- a/src/mame/layout/konamigt.lay
+++ b/src/mame/layout/konamigt.lay
@@ -50,19 +50,19 @@
<view name="Shifter-R">
<screen index="0">
- <bounds x="0" y="0" width="480" height="640" />
+ <bounds x="0" y="0" width="640" height="480" />
</screen>
<bezel element="shifter" inputtag="IN1" inputmask="0x10">
- <bounds x="446" y="574" width="32" height="64" />
+ <bounds x="606" y="414" width="32" height="64" />
<color alpha="0.6" />
</bezel>
</view>
<view name="Shifter-L">
<screen index="0">
- <bounds x="0" y="0" width="480" height="640" />
+ <bounds x="0" y="0" width="640" height="480" />
</screen>
<bezel element="shifter" inputtag="IN1" inputmask="0x10">
- <bounds x="2" y="574" width="32" height="64" />
+ <bounds x="2" y="414" width="32" height="64" />
<color alpha="0.6" />
</bezel>
</view>
diff --git a/src/mame/video/nemesis.c b/src/mame/video/nemesis.c
index bd7294e598d..80387251d57 100644
--- a/src/mame/video/nemesis.c
+++ b/src/mame/video/nemesis.c
@@ -180,10 +180,10 @@ WRITE16_MEMBER(nemesis_state::nemesis_palette_word_w)
2400 Ohms
4700 Ohms
- So the correct weights per bit are 8, 17, 33, 67, 130
+ So the correct weights per bit are 8, 17, 33, 64, 133
*/
- #define MULTIPLIER 8 * bit1 + 17 * bit2 + 33 * bit3 + 67 * bit4 + 130 * bit5
+ #define MULTIPLIER 8 * bit1 + 17 * bit2 + 33 * bit3 + 64 * bit4 + 133 * bit5
bit1 = BIT(data, 0);
bit2 = BIT(data, 1);