Previous 199869 Revisions Next

r21886 Saturday 16th March, 2013 at 10:07:05 UTC by Barry Rodewald
de_2: Hooked up MSM5205 and fixed sample banking.  Sound should now work fully. (no whatsnew)
[src/mame/drivers]de_2.c

trunk/src/mame/drivers/de_2.c
r21885r21886
1212#include "sound/msm5205.h"
1313#include "de2.lh"
1414
15// To start Secret Service, hold I, O and Left ALT while pressing Start.
16
1517// Data East CPU board is similar to Williams System 11, but without the generic audio board.
1618// For now, we'll presume the timings are the same.
1719
r21885r21886
3133   de_2_state(const machine_config &mconfig, device_type type, const char *tag)
3234      : genpin_class(mconfig, type, tag),
3335         m_maincpu(*this, "maincpu"),
34         m_audiocpu(*this, "audiocpu"),
3536         m_ym2151(*this, "ym2151"),
36         m_msm5205(*this, "msm5205"),
3737         m_pia21(*this, "pia21"),
3838         m_pia24(*this, "pia24"),
3939         m_pia28(*this, "pia28"),
4040         m_pia2c(*this, "pia2c"),
4141         m_pia30(*this, "pia30"),
42         m_pia34(*this, "pia34")
42         m_pia34(*this, "pia34"),
43         m_audiocpu(*this, "audiocpu"),
44         m_msm5205(*this, "msm5205")
4345   { }
4446
4547protected:
4648
4749   // devices
4850   required_device<cpu_device> m_maincpu;
49   required_device<cpu_device> m_audiocpu;
5051   required_device<ym2151_device> m_ym2151;
51   required_device<msm5205_device> m_msm5205;
5252   required_device<pia6821_device> m_pia21;
5353   required_device<pia6821_device> m_pia24;
5454   required_device<pia6821_device> m_pia28;
r21885r21886
7777   DECLARE_WRITE8_MEMBER(lamp0_w);
7878   DECLARE_WRITE8_MEMBER(lamp1_w) { };
7979   DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
80   DECLARE_WRITE_LINE_MEMBER(msm5205_irq_w);
8081   DECLARE_WRITE_LINE_MEMBER(pia_irq);
8182   DECLARE_WRITE8_MEMBER(sol2_w) { }; // solenoids 8-15
8283   DECLARE_WRITE8_MEMBER(sol3_w);
r21885r21886
8889   DECLARE_READ8_MEMBER(sound_latch_r);
8990   DECLARE_WRITE8_MEMBER(sample_bank_w);
9091
92   required_device<cpu_device> m_audiocpu;
93   required_device<msm5205_device> m_msm5205;
94   UINT8 m_sample_data;
95   bool m_more_data;
96   bool m_nmi_enable;
97
9198private:
9299   UINT32 m_segment1;
93100   UINT32 m_segment2;
r21885r21886
101108
102109   UINT8 m_sample_bank;
103110   UINT8 m_msm_prescaler;
104   bool m_nmi_enable;
105111};
106112
107113static ADDRESS_MAP_START( de_2_map, AS_PROGRAM, 8, de_2_state )
r21885r21886
193199   PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
194200
195201   PORT_START("INP40")
196   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
202   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LALT)
203   PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
197204
198205   PORT_START("INP80")
199206   PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
r21885r21886
237244MACHINE_RESET_MEMBER(de_2_state, de_2)
238245{
239246   membank("sample_bank")->set_entry(0);
247   m_more_data = false;
240248}
241249
242250DRIVER_INIT_MEMBER(de_2_state, de_2)
243251{
244   UINT8 *ROM = memregion("audiocpu")->base();
252   UINT8 *ROM = memregion("sound1")->base();
245253   m_irq_timer = timer_alloc(TIMER_IRQ);
246254   m_irq_timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,E_CLOCK),1);
247255   m_irq_active = false;
r21885r21886
254262   m_audiocpu->set_input_line(M6809_IRQ_LINE,state);
255263}
256264
265//WRITE_LINE_MEMBER(de_2_state::msm5205_irq_w)
266static void msm5205_irq_w(device_t* device)
267{
268   de_2_state* state = device->machine().driver_data<de_2_state>();
269   msm5205_data_w(state->m_msm5205,state->m_sample_data >> 4);
270   if(state->m_more_data)
271   {
272      if(state->m_nmi_enable)
273         state->m_audiocpu->set_input_line(INPUT_LINE_NMI,PULSE_LINE);  // generate NMI when we need more data
274      state->m_more_data = false;
275   }
276   else
277   {
278      state->m_more_data = true;
279      state->m_sample_data <<= 4;
280   }
281}
282
257283WRITE_LINE_MEMBER(de_2_state::pia_irq)
258284{
259285   if(state == CLEAR_LINE)
r21885r21886
296322{
297323   m_sound_data = data;
298324   m_audiocpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
299   popmessage("sound_w: %02x",data);
300325}
301326
302327WRITE_LINE_MEMBER( de_2_state::pia21_ca2_w )
r21885r21886
498523// Sound board
499524WRITE8_MEMBER(de_2_state::sample_w)
500525{
501   msm5205_data_w(m_msm5205,data);
502   msm5205_vclk_w(m_msm5205,1);
503   msm5205_vclk_w(m_msm5205,0);
526   m_sample_data = data;
504527}
505528
506529READ8_MEMBER( de_2_state::sound_latch_r )
r21885r21886
511534
512535WRITE8_MEMBER( de_2_state::sample_bank_w )
513536{
514   UINT8 prescale[4] = { MSM5205_S96_4B, MSM5205_S48_4B, MSM5205_S64_4B, 0 };
537   static const UINT8 prescale[4] = { MSM5205_S96_4B, MSM5205_S48_4B, MSM5205_S64_4B, 0 };
515538
516   m_sample_bank = (data & 0x03) | ((data & 0x04) << 1);
539   m_sample_bank = (data & 0x07);
540   membank("sample_bank")->set_entry(m_sample_bank);
517541   m_msm_prescaler = (data & 0x30) >> 4;
518542   m_nmi_enable = (~data & 0x80);
519543   msm5205_playmode_w(m_msm5205,prescale[m_msm_prescaler]);
r21885r21886
522546
523547static const msm5205_interface msm5205_intf =
524548{
525   0,
526   MSM5205_SEX_4B
549   msm5205_irq_w,
550   MSM5205_S96_4B
527551};
528552
529553static MACHINE_CONFIG_START( de_2, de_2_state )
r21885r21886
554578   MCFG_YM2151_ADD("ym2151", 3580000)
555579   MCFG_YM2151_IRQ_HANDLER(WRITELINE(de_2_state, ym2151_irq_w))
556580   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50)
557   MCFG_SOUND_ADD("msm5205", MSM5205, 3580000)
581   MCFG_SOUND_ADD("msm5205", MSM5205, 384000)
558582   MCFG_SOUND_CONFIG(msm5205_intf)
559583   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50)
560584MACHINE_CONFIG_END
r21885r21886
634658   ROM_LOAD("sssndf7.rom", 0x8000, 0x8000, CRC(980778d0) SHA1(7c1f14d327b6d0e6d0fef058f96bb1cb440c9330))
635659   ROM_REGION(0x40000, "sound1", 0)
636660   ROM_LOAD("ssv1f6.rom", 0x00000, 0x10000, CRC(ccbc72f8) SHA1(c5c13fb8d05d7fb4005636655073d88b4d12d65e))
637   ROM_RELOAD( 0x10000, 0x10000)
638   ROM_LOAD("ssv2f4.rom", 0x20000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
639   ROM_RELOAD( 0x30000, 0x10000)
661   ROM_LOAD("ssv2f4.rom", 0x10000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
640662ROM_END
641663
642664ROM_START(ssvc_b26)
r21885r21886
647669   ROM_LOAD("sssndf7b.rom", 0x8000, 0x8000, CRC(4bd6b16a) SHA1(b9438a16cd35820628fe6eb82287b2c39fe4b1c6))
648670   ROM_REGION(0x40000, "sound1", 0)
649671   ROM_LOAD("ssv1f6.rom", 0x00000, 0x10000, CRC(ccbc72f8) SHA1(c5c13fb8d05d7fb4005636655073d88b4d12d65e))
650   ROM_RELOAD( 0x10000, 0x10000)
651672   ROM_LOAD("ssv2f4.rom", 0x20000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
652   ROM_RELOAD( 0x30000, 0x10000)
653673ROM_END
654674
655675/*--------------------------------------------------------------------------

Previous 199869 Revisions Next


© 1997-2024 The MAME Team