trunk/src/mame/drivers/s11c.c
| r25504 | r25505 | |
| 10 | 10 | #include "sound/hc55516.h" |
| 11 | 11 | #include "sound/2151intf.h" |
| 12 | 12 | #include "sound/dac.h" |
| 13 | #include "audio/s11c_bg.h" |
| 13 | 14 | #include "includes/s11.h" |
| 14 | 15 | #include "s11c.lh" |
| 15 | 16 | |
| r25504 | r25505 | |
| 33 | 34 | AM_RANGE(0x8000, 0xbfff) AM_ROMBANK("bank0") |
| 34 | 35 | AM_RANGE(0xc000, 0xffff) AM_ROMBANK("bank1") |
| 35 | 36 | ADDRESS_MAP_END |
| 36 | | */ |
| 37 | 37 | static ADDRESS_MAP_START( s11c_bg_map, AS_PROGRAM, 8, s11c_state ) |
| 38 | 38 | AM_RANGE(0x0000, 0x07ff) AM_RAM |
| 39 | 39 | AM_RANGE(0x2000, 0x2001) AM_MIRROR(0x1ffe) AM_DEVREADWRITE("ym2151", ym2151_device, read, write) |
| r25504 | r25505 | |
| 43 | 43 | AM_RANGE(0x7800, 0x7fff) AM_WRITE(bgbank_w) |
| 44 | 44 | AM_RANGE(0x8000, 0xffff) AM_ROMBANK("bgbank") |
| 45 | 45 | ADDRESS_MAP_END |
| 46 | */ |
| 46 | 47 | |
| 47 | 48 | static INPUT_PORTS_START( s11c ) |
| 48 | 49 | PORT_START("X0") |
| r25504 | r25505 | |
| 124 | 125 | PORT_CONFSETTING( 0x10, "English" ) |
| 125 | 126 | INPUT_PORTS_END |
| 126 | 127 | |
| 128 | /* |
| 127 | 129 | WRITE8_MEMBER( s11c_state::bgbank_w ) |
| 128 | 130 | { |
| 129 | 131 | UINT8 bank = ((data & 0x04) >> 2) | ((data & 0x03) << 1); |
| 130 | 132 | membank("bgbank")->set_entry(bank); |
| 131 | 133 | // popmessage("BG bank set to %02x (%i)",data,bank); |
| 132 | 134 | } |
| 133 | | |
| 135 | */ |
| 134 | 136 | MACHINE_RESET_MEMBER( s11c_state, s11c ) |
| 135 | 137 | { |
| 136 | | membank("bgbank")->set_entry(0); |
| 138 | // membank("bgbank")->set_entry(0); |
| 137 | 139 | // 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); |
| 139 | 141 | } |
| 140 | 142 | |
| 141 | 143 | DRIVER_INIT_MEMBER(s11c_state,s11c) |
| 142 | 144 | { |
| 143 | 145 | 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); |
| 147 | 149 | set_invert(true); |
| 148 | 150 | set_timer(timer); |
| 149 | 151 | timer->adjust(attotime::from_ticks(S11_IRQ_CYCLES,E_CLOCK),1); |
| r25504 | r25505 | |
| 261 | 263 | // DEVCB_CPU_INPUT_LINE("audiocpu", M6800_IRQ_LINE) /* IRQB */ |
| 262 | 264 | //}; |
| 263 | 265 | |
| 264 | | static 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 | //}; |
| 279 | 281 | |
| 280 | 282 | static MACHINE_CONFIG_START( s11c, s11c_state ) |
| 281 | 283 | /* basic machine hardware */ |
| r25504 | r25505 | |
| 301 | 303 | // generic sound board is not used in System 11C, except for Star Trax |
| 302 | 304 | |
| 303 | 305 | /* Add the background music card */ |
| 306 | MCFG_WMS_S11C_BG_ADD("bgm",":bgcpu") |
| 307 | /* |
| 304 | 308 | MCFG_CPU_ADD("bgcpu", M6809E, XTAL_8MHz) // MC68B09E (note: schematics show this as 8mhz/2, but games crash very quickly with that speed?) |
| 305 | 309 | MCFG_CPU_PROGRAM_MAP(s11c_bg_map) |
| 306 | 310 | MCFG_QUANTUM_TIME(attotime::from_hz(50)) |
| r25504 | r25505 | |
| 317 | 321 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "bg", 0.50) |
| 318 | 322 | |
| 319 | 323 | MCFG_PIA6821_ADD("pia40", pia40_intf) |
| 324 | */ |
| 320 | 325 | MACHINE_CONFIG_END |
| 321 | 326 | |
| 322 | 327 | /*-------------------- |
trunk/src/mame/drivers/wpc_an.c
| r25504 | r25505 | |
| 5 | 5 | |
| 6 | 6 | #include "emu.h" |
| 7 | 7 | #include "cpu/m6809/m6809.h" |
| 8 | #include "audio/s11c_bg.h" |
| 8 | 9 | #include "wpc_an.lh" |
| 9 | 10 | |
| 10 | 11 | #define LOG_WPC (1) |
| r25504 | r25505 | |
| 15 | 16 | #define WPC_PRINTDATA (0x11) /* xxxxx W: send to printer */ |
| 16 | 17 | #define WPC_PRINTDATAX (0x12) /* xxxxx W: 0: Printer data available */ |
| 17 | 18 | /* Sound board */ |
| 19 | #define WPC_SOUNDS11 (0x21) /* xxx RW: R: Sound data availble, W: Reset soundboard ? */ |
| 18 | 20 | #define WPC_SOUNDIF (0x2c) /* xxx RW: Sound board interface */ |
| 19 | 21 | #define WPC_SOUNDBACK (0x2d) /* xxx RW: R: Sound data availble, W: Reset soundboard ? */ |
| 20 | 22 | |
| r25504 | r25505 | |
| 53 | 55 | wpc_an_state(const machine_config &mconfig, device_type type, const char *tag) |
| 54 | 56 | : driver_device(mconfig, type, tag), |
| 55 | 57 | m_maincpu(*this, "maincpu"), |
| 58 | m_bg(*this,"bg"), |
| 56 | 59 | m_cpubank(*this, "cpubank") |
| 57 | 60 | { } |
| 58 | 61 | |
| r25504 | r25505 | |
| 60 | 63 | |
| 61 | 64 | // devices |
| 62 | 65 | required_device<cpu_device> m_maincpu; |
| 66 | optional_device<s11c_bg_device> m_bg; // only used with Dr. Dude |
| 63 | 67 | required_memory_bank m_cpubank; |
| 64 | 68 | |
| 65 | 69 | // driver_device overrides |
| r25504 | r25505 | |
| 297 | 301 | case WPC_SWCOLSELECT: |
| 298 | 302 | m_switch_col = data; |
| 299 | 303 | 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; |
| 300 | 326 | } |
| 301 | 327 | } |
| 302 | 328 | |
| r25504 | r25505 | |
| 323 | 349 | logerror("WPC: ROM bank mask = %02x\n",m_bankmask); |
| 324 | 350 | } |
| 325 | 351 | |
| 326 | | static MACHINE_CONFIG_START( wpc_an, wpc_an_state ) |
| 352 | static MACHINE_CONFIG_FRAGMENT( wpc_an_base ) |
| 327 | 353 | /* basic machine hardware */ |
| 328 | 354 | MCFG_CPU_ADD("maincpu", M6809, 2000000) |
| 329 | 355 | MCFG_CPU_PROGRAM_MAP(wpc_an_map) |
| r25504 | r25505 | |
| 331 | 357 | MCFG_DEFAULT_LAYOUT(layout_wpc_an) |
| 332 | 358 | MACHINE_CONFIG_END |
| 333 | 359 | |
| 360 | static MACHINE_CONFIG_START( wpc_an, wpc_an_state ) |
| 361 | MCFG_FRAGMENT_ADD(wpc_an_base) |
| 362 | MACHINE_CONFIG_END |
| 334 | 363 | |
| 364 | static MACHINE_CONFIG_START( wpc_an_dd, wpc_an_state ) |
| 365 | MCFG_FRAGMENT_ADD(wpc_an_base) |
| 366 | MCFG_WMS_S11C_BG_ADD("bg",":sound1") |
| 367 | MACHINE_CONFIG_END |
| 368 | |
| 335 | 369 | /*----------------- |
| 336 | 370 | / Dr. Dude |
| 337 | 371 | /------------------*/ |
| r25504 | r25505 | |
| 340 | 374 | ROM_LOAD("dude_u6.p7", 0x10000, 0x18000, CRC(b6c35b98) SHA1(5e9d70ce40669e2f402561dc1d8aa70a8b8a2958)) |
| 341 | 375 | ROM_CONTINUE(0x8000,0x8000) |
| 342 | 376 | 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)) |
| 347 | 381 | ROM_END |
| 348 | 382 | |
| 349 | 383 | ROM_START(dd_p06) |
| r25504 | r25505 | |
| 351 | 385 | ROM_LOAD("u6-pa6.wpc", 0x10000, 0x18000, CRC(fb72571b) SHA1(a12b32eac3141c881064e6de2f49d6d213248fde)) |
| 352 | 386 | ROM_CONTINUE(0x8000,0x8000) |
| 353 | 387 | 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)) |
| 358 | 392 | ROM_END |
| 359 | 393 | |
| 360 | 394 | /*------------- |
| r25504 | r25505 | |
| 524 | 558 | ROM_REGION(0x50000, "maincpu", ROMREGION_ERASEFF) |
| 525 | 559 | ROM_LOAD("tmbopl_7.rom", 0x10000, 0x38000, CRC(773e1488) SHA1(36e8957b3903b99844a76bf15ba393b17db0db59)) |
| 526 | 560 | ROM_CONTINUE(0x8000,0x8000) |
| 527 | | ROM_REGION(0x10000, "cpu2", ROMREGION_ERASEFF) |
| 528 | 561 | ROM_REGION(0x180000, "sound1",0) |
| 529 | 562 | ROM_LOAD("mach_u18.l1", 0x000000, 0x20000, CRC(f3f53896) SHA1(4be5a8a27c5ac4718713c05ff2ddf51658a1be27)) |
| 530 | 563 | ROM_RELOAD( 0x000000 + 0x20000, 0x20000) |
| r25504 | r25505 | |
| 650 | 683 | ROM_END |
| 651 | 684 | |
| 652 | 685 | GAME(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) |
| 653 | | GAME(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) |
| 654 | | GAME(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) |
| 686 | GAME(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) |
| 687 | GAME(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) |
| 655 | 688 | GAME(1990, fh_l9, 0, wpc_an, wpc_an, wpc_an_state, wpc_an, ROT0, "Williams", "Funhouse L-9 (SL-2m)", GAME_IS_SKELETON_MECHANICAL) |
| 656 | 689 | GAME(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) |
| 657 | 690 | GAME(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
| r0 | r25505 | |
| 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 | |
| 11 | const device_type S11C_BG = &device_creator<s11c_bg_device>; |
| 12 | |
| 13 | s11c_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 | |
| 24 | static 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") |
| 32 | ADDRESS_MAP_END |
| 33 | |
| 34 | static 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 | |
| 50 | WRITE8_MEMBER( s11c_bg_device::pia40_pa_w ) |
| 51 | { |
| 52 | m_dac1->write_unsigned8(data); |
| 53 | } |
| 54 | |
| 55 | WRITE_LINE_MEMBER( s11c_bg_device::pia40_cb2_w) |
| 56 | { |
| 57 | // m_pia34->cb1_w(state); // To Widget MCB1 through CPU Data interface |
| 58 | } |
| 59 | |
| 60 | WRITE8_MEMBER( s11c_bg_device::pia40_pb_w ) |
| 61 | { |
| 62 | // m_pia34->portb_w(data); |
| 63 | } |
| 64 | |
| 65 | WRITE_LINE_MEMBER( s11c_bg_device::pia40_ca2_w) |
| 66 | { |
| 67 | if(state == ASSERT_LINE) |
| 68 | m_ym2151->reset(); |
| 69 | } |
| 70 | |
| 71 | void s11c_bg_device::ctrl_w(UINT8 data) |
| 72 | { |
| 73 | m_pia40->cb1_w(data); |
| 74 | } |
| 75 | |
| 76 | void s11c_bg_device::data_w(UINT8 data) |
| 77 | { |
| 78 | m_pia40->portb_w(data); |
| 79 | } |
| 80 | |
| 81 | MACHINE_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) |
| 98 | MACHINE_CONFIG_END |
| 99 | |
| 100 | machine_config_constructor s11c_bg_device::device_mconfig_additions() const |
| 101 | { |
| 102 | return MACHINE_CONFIG_NAME( s11c_bg ); |
| 103 | } |
| 104 | |
| 105 | void s11c_bg_device::device_start() |
| 106 | { |
| 107 | } |
| 108 | |
| 109 | void 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 | |
| 121 | void 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 | |
| 127 | WRITE_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 | |
| 135 | WRITE8_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 | |
| 142 | WRITE8_MEMBER( s11c_bg_device::bg_speech_digit_w ) |
| 143 | { |
| 144 | m_hc55516->digit_w(data); |
| 145 | } |
| 146 | |
| 147 | WRITE8_MEMBER( s11c_bg_device::bgbank_w ) |
| 148 | { |
| 149 | UINT8 bank = ((data & 0x04) >> 2) | ((data & 0x03) << 1); |
| 150 | m_cpubank->set_entry(bank); |
| 151 | } |
trunk/src/mame/audio/s11c_bg.h
| r0 | r25505 | |
| 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 | |
| 22 | class s11c_bg_device : public device_t |
| 23 | { |
| 24 | public: |
| 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 | |
| 49 | protected: |
| 50 | // overrides |
| 51 | virtual void device_start(); |
| 52 | virtual void device_reset(); |
| 53 | virtual machine_config_constructor device_mconfig_additions() const; |
| 54 | |
| 55 | private: |
| 56 | const char* m_regiontag; |
| 57 | |
| 58 | }; |
| 59 | |
| 60 | extern const device_type S11C_BG; |
| 61 | |
| 62 | #endif /* S11C_BG_H_ */ |