trunk/src/mame/drivers/segajw.c
| r30999 | r31000 | |
| 23 | 23 | #include "cpu/m68000/m68000.h" |
| 24 | 24 | #include "cpu/z80/z80.h" |
| 25 | 25 | #include "machine/nvram.h" |
| 26 | #include "sound/2612intf.h" |
| 26 | 27 | #include "video/h63484.h" |
| 27 | 28 | #include "video/ramdac.h" |
| 28 | 29 | |
| r30999 | r31000 | |
| 32 | 33 | segajw_state(const machine_config &mconfig, device_type type, const char *tag) |
| 33 | 34 | : driver_device(mconfig, type, tag), |
| 34 | 35 | m_maincpu(*this, "maincpu"), |
| 35 | | m_palette(*this, "palette") |
| 36 | m_audiocpu(*this, "audiocpu") |
| 36 | 37 | { } |
| 37 | 38 | |
| 38 | 39 | DECLARE_READ16_MEMBER(coin_counter_r); |
| r30999 | r31000 | |
| 41 | 42 | DECLARE_WRITE16_MEMBER(hopper_w); |
| 42 | 43 | DECLARE_READ16_MEMBER(coinlockout_r); |
| 43 | 44 | DECLARE_WRITE16_MEMBER(coinlockout_w); |
| 44 | | DECLARE_READ16_MEMBER(soundboard_r); |
| 45 | DECLARE_WRITE8_MEMBER(audiocpu_cmd_w); |
| 45 | 46 | DECLARE_INPUT_CHANGED_MEMBER(coin_drop_start); |
| 46 | 47 | DECLARE_CUSTOM_INPUT_MEMBER(coin_sensors_r); |
| 47 | 48 | DECLARE_CUSTOM_INPUT_MEMBER(hopper_sensors_r); |
| r30999 | r31000 | |
| 50 | 51 | |
| 51 | 52 | // devices |
| 52 | 53 | required_device<cpu_device> m_maincpu; |
| 53 | | required_device<palette_device> m_palette; |
| 54 | required_device<cpu_device> m_audiocpu; |
| 54 | 55 | |
| 55 | 56 | // driver_device overrides |
| 56 | 57 | virtual void machine_start(); |
| r30999 | r31000 | |
| 99 | 100 | m_coin_lockout = data; |
| 100 | 101 | } |
| 101 | 102 | |
| 102 | | |
| 103 | | READ16_MEMBER(segajw_state::soundboard_r) |
| 103 | WRITE8_MEMBER(segajw_state::audiocpu_cmd_w) |
| 104 | 104 | { |
| 105 | | // TODO: to replace with proper sound emulation |
| 106 | | return 0xfff0; // value expected for pass the sound board test |
| 105 | soundlatch_byte_w(space, 0, data); |
| 106 | m_audiocpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE); |
| 107 | 107 | } |
| 108 | 108 | |
| 109 | 109 | INPUT_CHANGED_MEMBER( segajw_state::coin_drop_start ) |
| r30999 | r31000 | |
| 161 | 161 | AM_RANGE(0x080002, 0x080003) AM_DEVREADWRITE("hd63484", h63484_device, data_r, data_w) |
| 162 | 162 | |
| 163 | 163 | AM_RANGE(0x180000, 0x180001) AM_READ_PORT("DSW0") |
| 164 | | AM_RANGE(0x180004, 0x180005) AM_READ(soundboard_r) |
| 164 | AM_RANGE(0x180004, 0x180005) AM_READWRITE8(soundlatch2_byte_r, audiocpu_cmd_w, 0x00ff) |
| 165 | 165 | AM_RANGE(0x180008, 0x180009) AM_READ_PORT("DSW1") |
| 166 | 166 | AM_RANGE(0x18000a, 0x18000b) AM_READ_PORT("DSW3") |
| 167 | 167 | AM_RANGE(0x18000c, 0x18000d) AM_READ_PORT("DSW2") |
| 168 | 168 | |
| 169 | 169 | AM_RANGE(0x1a0000, 0x1a0001) AM_WRITE(coin_counter_w) |
| 170 | AM_RANGE(0x1a0002, 0x1a0005) AM_NOP // TODO: lamps |
| 170 | 171 | AM_RANGE(0x1a0006, 0x1a0007) AM_READWRITE(hopper_r, hopper_w) |
| 171 | 172 | AM_RANGE(0x1a000a, 0x1a000b) AM_READ(coin_counter_r) |
| 172 | 173 | |
| r30999 | r31000 | |
| 192 | 193 | |
| 193 | 194 | static ADDRESS_MAP_START( segajw_audiocpu_io_map, AS_IO, 8, segajw_state ) |
| 194 | 195 | ADDRESS_MAP_GLOBAL_MASK(0xff) |
| 196 | AM_RANGE(0x80, 0x83) AM_DEVREADWRITE("ymsnd", ym3438_device, read, write) |
| 197 | AM_RANGE(0xc0, 0xc0) AM_READWRITE(soundlatch_byte_r, soundlatch2_byte_w) |
| 195 | 198 | ADDRESS_MAP_END |
| 196 | 199 | |
| 197 | 200 | static ADDRESS_MAP_START( segajw_hd63484_map, AS_0, 16, segajw_state ) |
| r30999 | r31000 | |
| 365 | 368 | MCFG_CPU_ADD("maincpu",M68000,8000000) // unknown clock |
| 366 | 369 | MCFG_CPU_PROGRAM_MAP(segajw_map) |
| 367 | 370 | MCFG_CPU_VBLANK_INT_DRIVER("screen", segajw_state, irq4_line_hold) |
| 368 | | MCFG_CPU_PERIODIC_INT_DRIVER(segajw_state, irq5_line_hold, 300) // FIXME: unknown source, but vblank is too slow |
| 369 | 371 | |
| 370 | 372 | MCFG_CPU_ADD("audiocpu", Z80, 4000000) // unknown clock |
| 371 | 373 | MCFG_CPU_PROGRAM_MAP(segajw_audiocpu_map) |
| 372 | 374 | MCFG_CPU_IO_MAP(segajw_audiocpu_io_map) |
| 373 | | MCFG_DEVICE_DISABLE() |
| 374 | 375 | |
| 376 | MCFG_QUANTUM_TIME(attotime::from_hz(2000)) |
| 377 | |
| 375 | 378 | MCFG_NVRAM_ADD_NO_FILL("nvram") |
| 376 | 379 | |
| 377 | 380 | /* video hardware */ |
| r30999 | r31000 | |
| 390 | 393 | |
| 391 | 394 | /* sound hardware */ |
| 392 | 395 | MCFG_SPEAKER_STANDARD_MONO("mono") |
| 393 | | // MCFG_SOUND_ADD("aysnd", AY8910, MAIN_CLOCK/4) /* guess */ |
| 394 | | // MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30) |
| 396 | MCFG_SOUND_ADD("ymsnd", YM3438, 8000000) // unknown clock |
| 397 | MCFG_YM2612_IRQ_HANDLER(INPUTLINE("maincpu", 5)) |
| 398 | MCFG_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.50) |
| 395 | 399 | MACHINE_CONFIG_END |
| 396 | 400 | |
| 397 | 401 | /*************************************************************************** |