Previous 199869 Revisions Next

r25505 Thursday 3rd October, 2013 at 08:52:34 UTC by Barry Rodewald
s11,wpc: Made System 11C BG music hardware a device, and plugged it into the WPC versions of Dr. Dude.
[src/mame]mame.mak
[src/mame/audio]s11c_bg.c* s11c_bg.h*
[src/mame/drivers]s11.c s11a.c s11b.c s11c.c wpc_an.c
[src/mame/includes]s11.h

trunk/src/mame/drivers/s11.c
r25504r25505
2323#include "sound/hc55516.h"
2424#include "sound/2151intf.h"
2525#include "sound/dac.h"
26#include "audio/s11c_bg.h"
2627#include "includes/s11.h"
2728#include "s11.lh"
2829
r25504r25505
215216   m_ca1 = state;
216217   if(m_pias)
217218      m_pias->ca1_w(m_ca1);
218   m_pia40->cb2_w(m_ca1);
219   if(m_pia40)
220      m_pia40->cb2_w(m_ca1);
219221}
220222
221223static const pia6821_interface pia21_intf =
r25504r25505
385387
386388WRITE8_MEMBER( s11_state::pia34_pb_w )
387389{
388   m_pia40->portb_w(data);
390   if(m_pia40)
391      m_pia40->portb_w(data);
392   else
393      m_bg->data_w(data);
389394}
390395
391396WRITE_LINE_MEMBER( s11_state::pia34_cb2_w )
392397{
393   m_pia40->cb1_w(state);  // MCB2 through CPU interface
398   if(m_pia40)
399      m_pia40->cb1_w(state);  // MCB2 through CPU interface
400   else
401      m_bg->ctrl_w(state);
394402}
395403
396404static const pia6821_interface pia34_intf =
r25504r25505
463471
464472WRITE8_MEMBER( s11_state::pia40_pa_w )
465473{
466   m_dac1->write_unsigned8(data);
474   if(m_dac1)
475      m_dac1->write_unsigned8(data);
467476}
468477
469478WRITE_LINE_MEMBER( s11_state::ym2151_irq_w)
470479{
471   if(state == CLEAR_LINE)
472      m_pia40->ca1_w(1);
473   else
474      m_pia40->ca1_w(0);
480   if(m_pia40)
481   {
482      if(state == CLEAR_LINE)
483         m_pia40->ca1_w(1);
484      else
485         m_pia40->ca1_w(0);
486   }
475487}
476488
477489WRITE_LINE_MEMBER( s11_state::pia40_cb2_w)
trunk/src/mame/drivers/s11a.c
r25504r25505
2626#include "sound/hc55516.h"
2727#include "sound/2151intf.h"
2828#include "sound/dac.h"
29#include "audio/s11c_bg.h"
2930#include "includes/s11.h"
3031#include "s11a.lh"
3132
trunk/src/mame/drivers/s11c.c
r25504r25505
1010#include "sound/hc55516.h"
1111#include "sound/2151intf.h"
1212#include "sound/dac.h"
13#include "audio/s11c_bg.h"
1314#include "includes/s11.h"
1415#include "s11c.lh"
1516
r25504r25505
3334    AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank0")
3435    AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank1")
3536ADDRESS_MAP_END
36*/
3737static ADDRESS_MAP_START( s11c_bg_map, AS_PROGRAM, 8, s11c_state )
3838   AM_RANGE(0x0000, 0x07ff) AM_RAM
3939   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
r25504r25505
4343   AM_RANGE(0x7800, 0x7fff) AM_WRITE(bgbank_w)
4444   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bgbank")
4545ADDRESS_MAP_END
46*/
4647
4748static INPUT_PORTS_START( s11c )
4849   PORT_START("X0")
r25504r25505
124125   PORT_CONFSETTING( 0x10, "English" )
125126INPUT_PORTS_END
126127
128/*
127129WRITE8_MEMBER( s11c_state::bgbank_w )
128130{
129131   UINT8 bank = ((data & 0x04) >> 2) | ((data & 0x03) << 1);
130132   membank("bgbank")->set_entry(bank);
131133//  popmessage("BG bank set to %02x (%i)",data,bank);
132134}
133
135*/
134136MACHINE_RESET_MEMBER( s11c_state, s11c )
135137{
136   membank("bgbank")->set_entry(0);
138//   membank("bgbank")->set_entry(0);
137139   // reset the CPUs again, so that the CPUs are starting with the right vectors (otherwise sound may die on reset)
138   m_bgcpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
140//   m_bgcpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
139141}
140142
141143DRIVER_INIT_MEMBER(s11c_state,s11c)
142144{
143145   emu_timer* timer = timer_alloc(TIMER_IRQ);
144   UINT8 *BGROM = memregion("bgcpu")->base();
145   membank("bgbank")->configure_entries(0, 8, &BGROM[0x10000], 0x8000);
146   membank("bgbank")->set_entry(0);
146//   UINT8 *BGROM = memregion("bgcpu")->base();
147//   membank("bgbank")->configure_entries(0, 8, &BGROM[0x10000], 0x8000);
148//   membank("bgbank")->set_entry(0);
147149   set_invert(true);
148150   set_timer(timer);
149151   timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,E_CLOCK),1);
r25504r25505
261263//  DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE)        /* IRQB */
262264//};
263265
264static const pia6821_interface pia40_intf =
265{
266   DEVCB_NULL,     /* port A in */
267   DEVCB_NULL,     /* port B in */
268   DEVCB_NULL,     /* line CA1 in */
269   DEVCB_NULL,     /* line CB1 in */
270   DEVCB_LINE_VCC,     /* line CA2 in */
271   DEVCB_NULL,     /* line CB2 in */
272   DEVCB_DRIVER_MEMBER(s11_state, pia40_pa_w),     /* port A out */
273   DEVCB_DRIVER_MEMBER(s11_state, pia40_pb_w),     /* port B out */
274   DEVCB_DRIVER_LINE_MEMBER(s11b_state, pia40_ca2_w),      /* line CA2 out */
275   DEVCB_DRIVER_LINE_MEMBER(s11_state, pia40_cb2_w),       /* line CB2 out */
276   DEVCB_CPU_INPUT_LINE("bgcpu", M6809_FIRQ_LINE),     /* IRQA */
277   DEVCB_CPU_INPUT_LINE("bgcpu", INPUT_LINE_NMI)       /* IRQB */
278};
266//static const pia6821_interface pia40_intf =
267//{
268//   DEVCB_NULL,     /* port A in */
269//   DEVCB_NULL,     /* port B in */
270//   DEVCB_NULL,     /* line CA1 in */
271//   DEVCB_NULL,     /* line CB1 in */
272//   DEVCB_LINE_VCC,     /* line CA2 in */
273//   DEVCB_NULL,     /* line CB2 in */
274//   DEVCB_DRIVER_MEMBER(s11_state, pia40_pa_w),     /* port A out */
275//   DEVCB_DRIVER_MEMBER(s11_state, pia40_pb_w),     /* port B out */
276//   DEVCB_DRIVER_LINE_MEMBER(s11b_state, pia40_ca2_w),      /* line CA2 out */
277//   DEVCB_DRIVER_LINE_MEMBER(s11_state, pia40_cb2_w),       /* line CB2 out */
278//   DEVCB_CPU_INPUT_LINE("bgcpu", M6809_FIRQ_LINE),     /* IRQA */
279//   DEVCB_CPU_INPUT_LINE("bgcpu", INPUT_LINE_NMI)       /* IRQB */
280//};
279281
280282static MACHINE_CONFIG_START( s11c, s11c_state )
281283   /* basic machine hardware */
r25504r25505
301303   // generic sound board is not used in System 11C, except for Star Trax
302304
303305   /* Add the background music card */
306   MCFG_WMS_S11C_BG_ADD("bgm",":bgcpu")
307   /*
304308   MCFG_CPU_ADD("bgcpu", M6809E, XTAL_8MHz) // MC68B09E (note: schematics show this as 8mhz/2, but games crash very quickly with that speed?)
305309   MCFG_CPU_PROGRAM_MAP(s11c_bg_map)
306310   MCFG_QUANTUM_TIME(attotime::from_hz(50))
r25504r25505
317321   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50)
318322
319323   MCFG_PIA6821_ADD("pia40", pia40_intf)
324   */
320325MACHINE_CONFIG_END
321326
322327/*--------------------
trunk/src/mame/drivers/s11b.c
r25504r25505
2626#include "sound/hc55516.h"
2727#include "sound/2151intf.h"
2828#include "sound/dac.h"
29#include "audio/s11c_bg.h"
2930#include "includes/s11.h"
3031#include "s11b.lh"
3132
r25504r25505
146147   membank("bgbank")->set_entry(0);
147148   // reset the CPUs again, so that the CPUs are starting with the right vectors (otherwise sound may die on reset)
148149   m_audiocpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
149   m_bgcpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
150   if(m_bgcpu)
151      m_bgcpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
150152}
151153
152154WRITE8_MEMBER( s11b_state::bg_speech_clock_w )
153155{
154   // pulses clock input?
155   m_bg_hc55516->clock_w(1);
156   m_bg_hc55516->clock_w(0);
156   if(m_bg_hc55516)
157   {
158      // pulses clock input?
159      m_bg_hc55516->clock_w(1);
160      m_bg_hc55516->clock_w(0);
161   }
157162}
158163
159164WRITE8_MEMBER( s11b_state::bg_speech_digit_w )
160165{
161   m_bg_hc55516->digit_w(data);
166   if(m_bg_hc55516)
167      m_bg_hc55516->digit_w(data);
162168}
163169
164170static const pia6821_interface pia21_intf =
trunk/src/mame/drivers/wpc_an.c
r25504r25505
55
66#include "emu.h"
77#include "cpu/m6809/m6809.h"
8#include "audio/s11c_bg.h"
89#include "wpc_an.lh"
910
1011#define LOG_WPC (1)
r25504r25505
1516#define WPC_PRINTDATA     (0x11) /* xxxxx  W: send to printer */
1617#define WPC_PRINTDATAX    (0x12) /* xxxxx  W: 0: Printer data available */
1718/* Sound board */
19#define WPC_SOUNDS11      (0x21) /* xxx    RW: R: Sound data availble, W: Reset soundboard ? */
1820#define WPC_SOUNDIF       (0x2c) /* xxx    RW: Sound board interface */
1921#define WPC_SOUNDBACK     (0x2d) /* xxx    RW: R: Sound data availble, W: Reset soundboard ? */
2022
r25504r25505
5355   wpc_an_state(const machine_config &mconfig, device_type type, const char *tag)
5456      : driver_device(mconfig, type, tag),
5557         m_maincpu(*this, "maincpu"),
58         m_bg(*this,"bg"),
5659         m_cpubank(*this, "cpubank")
5760   { }
5861
r25504r25505
6063
6164   // devices
6265   required_device<cpu_device> m_maincpu;
66   optional_device<s11c_bg_device> m_bg;  // only used with Dr. Dude
6367   required_memory_bank m_cpubank;
6468
6569   // driver_device overrides
r25504r25505
297301   case WPC_SWCOLSELECT:
298302      m_switch_col = data;
299303      break;
304   case WPC_SOUNDIF:
305      if(m_bg)
306      {
307         m_bg->data_w(data);
308         m_bg->ctrl_w(0);
309      }
310      break;
311   case WPC_SOUNDBACK:
312      if(m_bg)
313      {
314         m_bg->data_w(data);
315         m_bg->ctrl_w(1);
316      }
317      break;
318   case WPC_SOUNDS11:
319      if(m_bg)
320      {
321         m_bg->data_w(data);
322         m_bg->ctrl_w(0);
323         m_bg->ctrl_w(1);
324      }
325      break;
300326   }
301327}
302328
r25504r25505
323349   logerror("WPC: ROM bank mask = %02x\n",m_bankmask);
324350}
325351
326static MACHINE_CONFIG_START( wpc_an, wpc_an_state )
352static MACHINE_CONFIG_FRAGMENT( wpc_an_base )
327353   /* basic machine hardware */
328354   MCFG_CPU_ADD("maincpu", M6809, 2000000)
329355   MCFG_CPU_PROGRAM_MAP(wpc_an_map)
r25504r25505
331357   MCFG_DEFAULT_LAYOUT(layout_wpc_an)
332358MACHINE_CONFIG_END
333359
360static MACHINE_CONFIG_START( wpc_an, wpc_an_state )
361   MCFG_FRAGMENT_ADD(wpc_an_base)
362MACHINE_CONFIG_END
334363
364static MACHINE_CONFIG_START( wpc_an_dd, wpc_an_state )
365   MCFG_FRAGMENT_ADD(wpc_an_base)
366   MCFG_WMS_S11C_BG_ADD("bg",":sound1")
367MACHINE_CONFIG_END
368
335369/*-----------------
336370/  Dr. Dude
337371/------------------*/
r25504r25505
340374   ROM_LOAD("dude_u6.p7", 0x10000, 0x18000, CRC(b6c35b98) SHA1(5e9d70ce40669e2f402561dc1d8aa70a8b8a2958))
341375   ROM_CONTINUE(0x8000,0x8000)
342376   ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
343   ROM_REGION(0x30000, "sound1", 0)
344   ROM_LOAD("dude_u4.l1", 0x00000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
345   ROM_LOAD("dude_u19.l1", 0x10000, 0x10000, CRC(dc7b985b) SHA1(f672d1f1fe1d1d887113ea6ccd745a78f7760526))
346   ROM_LOAD("dude_u20.l1", 0x20000, 0x10000, CRC(a83d53dd) SHA1(92a81069c42c7760888201fb0787fa7ddfbf1658))
377   ROM_REGION(0x40000, "sound1", 0)
378   ROM_LOAD("dude_u4.l1", 0x10000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
379   ROM_LOAD("dude_u19.l1", 0x20000, 0x10000, CRC(dc7b985b) SHA1(f672d1f1fe1d1d887113ea6ccd745a78f7760526))
380   ROM_LOAD("dude_u20.l1", 0x30000, 0x10000, CRC(a83d53dd) SHA1(92a81069c42c7760888201fb0787fa7ddfbf1658))
347381ROM_END
348382
349383ROM_START(dd_p06)
r25504r25505
351385   ROM_LOAD("u6-pa6.wpc", 0x10000, 0x18000, CRC(fb72571b) SHA1(a12b32eac3141c881064e6de2f49d6d213248fde))
352386   ROM_CONTINUE(0x8000,0x8000)
353387   ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
354   ROM_REGION(0x30000, "sound1", 0)
355   ROM_LOAD("dude_u4.l1", 0x00000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
356   ROM_LOAD("dude_u19.l1", 0x10000, 0x10000, CRC(dc7b985b) SHA1(f672d1f1fe1d1d887113ea6ccd745a78f7760526))
357   ROM_LOAD("dude_u20.l1", 0x20000, 0x10000, CRC(a83d53dd) SHA1(92a81069c42c7760888201fb0787fa7ddfbf1658))
388   ROM_REGION(0x40000, "sound1", 0)
389   ROM_LOAD("dude_u4.l1", 0x10000, 0x10000, CRC(3eeef714) SHA1(74dcc83958cb62819e0ac36ca83001694faafec7))
390   ROM_LOAD("dude_u19.l1", 0x20000, 0x10000, CRC(dc7b985b) SHA1(f672d1f1fe1d1d887113ea6ccd745a78f7760526))
391   ROM_LOAD("dude_u20.l1", 0x30000, 0x10000, CRC(a83d53dd) SHA1(92a81069c42c7760888201fb0787fa7ddfbf1658))
358392ROM_END
359393
360394/*-------------
r25504r25505
524558   ROM_REGION(0x50000, "maincpu", ROMREGION_ERASEFF)
525559   ROM_LOAD("tmbopl_7.rom", 0x10000, 0x38000, CRC(773e1488) SHA1(36e8957b3903b99844a76bf15ba393b17db0db59))
526560   ROM_CONTINUE(0x8000,0x8000)
527   ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF)
528561   ROM_REGION(0x180000, "sound1",0)
529562   ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27))
530563   ROM_RELOAD( 0x000000 + 0x20000, 0x20000)
r25504r25505
650683ROM_END
651684
652685GAME(1990,  tfa_13,     0,      wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Bally",                "WPC Test Fixture: Alphanumeric (1.3)",             GAME_IS_SKELETON_MECHANICAL)
653GAME(1990,  dd_p7,      dd_l2,  wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Bally",                "Dr. Dude (PA-7 WPC)",              GAME_IS_SKELETON_MECHANICAL)
654GAME(1990,  dd_p06,     dd_l2,  wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Bally",                "Dr. Dude (PA-6 WPC)",              GAME_IS_SKELETON_MECHANICAL)
686GAME(1990,  dd_p7,      dd_l2,  wpc_an_dd, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Bally",                "Dr. Dude (PA-7 WPC)",              GAME_IS_SKELETON_MECHANICAL)
687GAME(1990,  dd_p06,     dd_l2,  wpc_an_dd, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Bally",                "Dr. Dude (PA-6 WPC)",              GAME_IS_SKELETON_MECHANICAL)
655688GAME(1990,  fh_l9,      0,      wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Williams",             "Funhouse L-9 (SL-2m)",             GAME_IS_SKELETON_MECHANICAL)
656689GAME(1990,  fh_l9b,     fh_l9,  wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Williams",             "Funhouse L-9 (SL-2m) Bootleg Improved German translation",             GAME_IS_SKELETON_MECHANICAL)
657690GAME(1996,  fh_905h,    fh_l9,  wpc_an, wpc_an, wpc_an_state,   wpc_an, ROT0,   "Williams",             "Funhouse 9.05H",               GAME_IS_SKELETON_MECHANICAL)
trunk/src/mame/audio/s11c_bg.c
r0r25505
1/*
2 * s11c_bg.c - Williams System 11C background music (M68B09E + YM2151 + HC55516 + DAC)
3 *
4 *  Created on: 2/10/2013
5 *      Author: bsr
6 */
7
8#include "s11c_bg.h"
9
10
11const device_type S11C_BG = &device_creator<s11c_bg_device>;
12
13s11c_bg_device::s11c_bg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
14   : device_t(mconfig,S11C_BG,"Williams System 11C background music",tag,owner,clock, "s11c_bg", __FILE__),
15     m_cpu(*this,"bgcpu"),
16     m_ym2151(*this,"ym2151"),
17     m_hc55516(*this,"hc55516_bg"),
18     m_dac1(*this,"dac1"),
19     m_pia40(*this,"pia40"),
20     m_cpubank(*this,"bgbank")
21{
22}
23
24static ADDRESS_MAP_START( s11c_bg_map, AS_PROGRAM, 8, s11c_bg_device )
25   AM_RANGE(0x0000, 0x07ff) AM_RAM
26   AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("ym2151", ym2151_device, read, write)
27   AM_RANGE(0x4000, 0x4003) AM_MIRROR(0x1ffc) AM_DEVREADWRITE("pia40", pia6821_device, read, write)
28   AM_RANGE(0x6000, 0x67ff) AM_WRITE(bg_speech_digit_w)
29   AM_RANGE(0x6800, 0x6fff) AM_WRITE(bg_speech_clock_w)
30   AM_RANGE(0x7800, 0x7fff) AM_WRITE(bgbank_w)
31   AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bgbank")
32ADDRESS_MAP_END
33
34static const pia6821_interface pia40_intf =
35{
36   DEVCB_NULL,     /* port A in */
37   DEVCB_NULL,     /* port B in */
38   DEVCB_NULL,     /* line CA1 in */
39   DEVCB_NULL,     /* line CB1 in */
40   DEVCB_LINE_VCC,     /* line CA2 in */
41   DEVCB_NULL,     /* line CB2 in */
42   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER,s11c_bg_device, pia40_pa_w),     /* port A out */
43   DEVCB_DEVICE_MEMBER(DEVICE_SELF_OWNER,s11c_bg_device, pia40_pb_w),     /* port B out */
44   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,s11c_bg_device, pia40_ca2_w),      /* line CA2 out */
45   DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER,s11c_bg_device, pia40_cb2_w),       /* line CB2 out */
46   DEVCB_CPU_INPUT_LINE("bgcpu", M6809_FIRQ_LINE),     /* IRQA */
47   DEVCB_CPU_INPUT_LINE("bgcpu", INPUT_LINE_NMI)       /* IRQB */
48};
49
50WRITE8_MEMBER( s11c_bg_device::pia40_pa_w )
51{
52   m_dac1->write_unsigned8(data);
53}
54
55WRITE_LINE_MEMBER( s11c_bg_device::pia40_cb2_w)
56{
57//   m_pia34->cb1_w(state);  // To Widget MCB1 through CPU Data interface
58}
59
60WRITE8_MEMBER( s11c_bg_device::pia40_pb_w )
61{
62//   m_pia34->portb_w(data);
63}
64
65WRITE_LINE_MEMBER( s11c_bg_device::pia40_ca2_w)
66{
67   if(state == ASSERT_LINE)
68      m_ym2151->reset();
69}
70
71void s11c_bg_device::ctrl_w(UINT8 data)
72{
73   m_pia40->cb1_w(data);
74}
75
76void s11c_bg_device::data_w(UINT8 data)
77{
78   m_pia40->portb_w(data);
79}
80
81MACHINE_CONFIG_FRAGMENT( s11c_bg )
82   MCFG_CPU_ADD("bgcpu", M6809E, XTAL_8MHz) // MC68B09E (note: schematics show this as 8mhz/2, but games crash very quickly with that speed?)
83   MCFG_CPU_PROGRAM_MAP(s11c_bg_map)
84   MCFG_QUANTUM_TIME(attotime::from_hz(50))
85
86   MCFG_SPEAKER_STANDARD_MONO("bg")
87   MCFG_YM2151_ADD("ym2151", 3580000)
88   MCFG_YM2151_IRQ_HANDLER(WRITELINE(s11c_bg_device, ym2151_irq_w))
89   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.25)
90
91   MCFG_DAC_ADD("dac1")
92   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50)
93
94   MCFG_SOUND_ADD("hc55516_bg", HC55516, 0)
95   MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50)
96
97   MCFG_PIA6821_ADD("pia40", pia40_intf)
98MACHINE_CONFIG_END
99
100machine_config_constructor s11c_bg_device::device_mconfig_additions() const
101{
102   return MACHINE_CONFIG_NAME( s11c_bg );
103}
104
105void s11c_bg_device::device_start()
106{
107}
108
109void s11c_bg_device::device_reset()
110{
111   UINT8* ROM;
112
113   m_rom = memregion(m_regiontag);
114   ROM = m_rom->base();
115   m_cpubank->configure_entries(0, 8, &ROM[0x10000], 0x8000);
116   m_cpubank->set_entry(0);
117   // reset the CPU again, so that the CPU are starting with the right vectors (otherwise sound may die on reset)
118   m_cpu->set_input_line(INPUT_LINE_RESET,PULSE_LINE);
119}
120
121void s11c_bg_device::static_set_gfxregion(device_t &device, const char *tag)
122{
123   s11c_bg_device &cpuboard = downcast<s11c_bg_device &>(device);
124   cpuboard.m_regiontag = tag;
125}
126
127WRITE_LINE_MEMBER( s11c_bg_device::ym2151_irq_w)
128{
129   if(state == CLEAR_LINE)
130      m_pia40->ca1_w(1);
131   else
132      m_pia40->ca1_w(0);
133}
134
135WRITE8_MEMBER( s11c_bg_device::bg_speech_clock_w )
136{
137   // pulses clock input?
138   m_hc55516->clock_w(1);
139   m_hc55516->clock_w(0);
140}
141
142WRITE8_MEMBER( s11c_bg_device::bg_speech_digit_w )
143{
144   m_hc55516->digit_w(data);
145}
146
147WRITE8_MEMBER( s11c_bg_device::bgbank_w )
148{
149   UINT8 bank = ((data & 0x04) >> 2) | ((data & 0x03) << 1);
150   m_cpubank->set_entry(bank);
151}
Property changes on: trunk/src/mame/audio/s11c_bg.c
Added: svn:eol-style
   + native
Added: svn:mime-type
   + text/plain
trunk/src/mame/audio/s11c_bg.h
r0r25505
1/*
2 * s11c_bg.h - Williams System 11C background sound (M68B09E + YM2151 + HC55516 + DAC)
3 *
4 *  Created on: 2/10/2013
5 */
6
7#ifndef S11C_BG_H_
8#define S11C_BG_H_
9
10#include "emu.h"
11#include "cpu/m6809/m6809.h"
12#include "sound/2151intf.h"
13#include "sound/dac.h"
14#include "sound/hc55516.h"
15#include "machine/6821pia.h"
16
17#define MCFG_WMS_S11C_BG_ADD(_tag, _region) \
18   MCFG_DEVICE_ADD(_tag, S11C_BG, 0) \
19   s11c_bg_device::static_set_gfxregion(*device, _region);
20
21
22class s11c_bg_device : public device_t
23{
24public:
25   // construction/destruction
26   s11c_bg_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
27
28   required_device<cpu_device> m_cpu;
29   required_device<ym2151_device> m_ym2151;
30   required_device<hc55516_device> m_hc55516;
31   required_device<dac_device> m_dac1;
32   required_device<pia6821_device> m_pia40;
33   required_memory_bank m_cpubank;
34   memory_region* m_rom;
35
36   DECLARE_WRITE8_MEMBER(pia40_pa_w);
37   DECLARE_WRITE8_MEMBER(pia40_pb_w);
38   DECLARE_WRITE_LINE_MEMBER(pia40_ca2_w);
39   DECLARE_WRITE_LINE_MEMBER(pia40_cb2_w);
40   DECLARE_WRITE8_MEMBER(bg_speech_clock_w);
41   DECLARE_WRITE8_MEMBER(bg_speech_digit_w);
42   DECLARE_WRITE8_MEMBER(bgbank_w);
43   DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
44   void ctrl_w(UINT8 data);
45   void data_w(UINT8 data);
46
47   static void static_set_gfxregion(device_t &device, const char *tag);
48
49protected:
50   // overrides
51   virtual void device_start();
52   virtual void device_reset();
53   virtual machine_config_constructor device_mconfig_additions() const;
54
55private:
56   const char* m_regiontag;
57
58};
59
60extern const device_type S11C_BG;
61
62#endif /* S11C_BG_H_ */
Property changes on: trunk/src/mame/audio/s11c_bg.h
Added: svn:mime-type
   + text/plain
Added: svn:eol-style
   + native
trunk/src/mame/mame.mak
r25504r25505
19701970   $(DRIVERS)/s11a.o  \
19711971   $(DRIVERS)/s11b.o  \
19721972   $(DRIVERS)/s11c.o  \
1973   $(AUDIO)/s11c_bg.o \
19731974   $(DRIVERS)/s3.o  \
19741975   $(DRIVERS)/s4.o  \
19751976   $(DRIVERS)/s6.o  \
trunk/src/mame/includes/s11.h
r25504r25505
3636   m_pia30(*this, "pia30"),
3737   m_pia34(*this, "pia34"),
3838   m_pia40(*this, "pia40"),
39   m_ym(*this, "ym2151")
39   m_ym(*this, "ym2151"),
40   m_bg(*this, "bgm")
4041   { }
4142
4243   DECLARE_READ8_MEMBER(dac_r);
r25504r25505
8182   // devices
8283   required_device<cpu_device> m_maincpu;
8384   optional_device<cpu_device> m_audiocpu;
84   required_device<cpu_device> m_bgcpu;
85   optional_device<cpu_device> m_bgcpu;
8586   optional_device<dac_device> m_dac;
86   required_device<dac_device> m_dac1;
87   optional_device<dac_device> m_dac1;
8788   optional_device<hc55516_device> m_hc55516;
8889   optional_device<pia6821_device> m_pias;
8990   required_device<pia6821_device> m_pia21;
r25504r25505
9293   required_device<pia6821_device> m_pia2c;
9394   required_device<pia6821_device> m_pia30;
9495   required_device<pia6821_device> m_pia34;
95   required_device<pia6821_device> m_pia40;
96   required_device<ym2151_device> m_ym;
96   optional_device<pia6821_device> m_pia40;
97   optional_device<ym2151_device> m_ym;
98   optional_device<s11c_bg_device> m_bg;
9799
98100   // getters/setters
99101   UINT8 get_strobe() { return m_strobe; }
r25504r25505
161163   DECLARE_DRIVER_INIT(s11b_invert);
162164
163165protected:
164   required_device<hc55516_device> m_bg_hc55516;
166   optional_device<hc55516_device> m_bg_hc55516;
165167
166168   void set_invert(bool inv) { m_invert = inv; }
167169

Previous 199869 Revisions Next


© 1997-2024 The MAME Team