1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
// license:BSD-3-Clause
// copyright-holders:Vas Crabb
/*********************************************************
Capcom System QSound™
*********************************************************/
#ifndef MAME_SOUND_QSOUND_H
#define MAME_SOUND_QSOUND_H
#pragma once
#include "dirom.h"
#include "cpu/dsp16/dsp16.h"
class qsound_device : public device_t, public device_sound_interface, public device_rom_interface<24>
{
public:
// default 60MHz clock (divided by 2 for DSP core clock, and then by 1248 for sample rate)
qsound_device(machine_config const &mconfig, char const *tag, device_t *owner, u32 clock = 60'000'000);
void qsound_w(offs_t offset, u8 data);
u8 qsound_r();
protected:
// device_t implementation
tiny_rom_entry const *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_clock_changed() override;
virtual void device_reset() override;
// device_sound_interface implementation
virtual void sound_stream_update_legacy(sound_stream &stream, stream_sample_t const * const *inputs, stream_sample_t * const *outputs, int samples) override;
// device_rom_interface implementation
virtual void rom_bank_updated() override;
void dsp_io_map(address_map &map);
private:
// DSP ROM access
u16 dsp_sample_r(offs_t offset);
void dsp_pio_w(offs_t offset, u16 data);
// for synchronised DSP communication
DECLARE_WRITE_LINE_MEMBER(dsp_ock_w);
u16 dsp_pio_r();
void set_dsp_ready(void *ptr, s32 param);
void set_cmd(void *ptr, s32 param);
// MAME resources
required_device<dsp16_device_base> m_dsp;
sound_stream *m_stream;
// DSP communication
u16 m_rom_bank, m_rom_offset;
u16 m_cmd_addr, m_cmd_data, m_new_data;
u8 m_cmd_pending, m_dsp_ready;
// serial sample recovery
s16 m_samples[2];
u16 m_sr, m_fsr;
u8 m_ock, m_old, m_ready, m_channel;
};
DECLARE_DEVICE_TYPE(QSOUND, qsound_device)
#if !defined(QSOUND_LLE) // && 0
#include "qsoundhle.h"
#define qsound_device qsound_hle_device
#define QSOUND QSOUND_HLE
#endif // QSOUND_LLE
#endif // MAME_SOUND_QSOUND_H
|