trunk/src/emu/sound/qsound.c
| r22617 | r22618 | |
| 45 | 45 | |
| 46 | 46 | |
| 47 | 47 | //************************************************************************** |
| 48 | // GLOBAL VARIABLES |
| 49 | //************************************************************************** |
| 50 | |
| 51 | // program map for the DSP (points to internal 4096 words of internal ROM) |
| 52 | static ADDRESS_MAP_START( dsp16_program_map, AS_PROGRAM, 16, qsound_device ) |
| 53 | AM_RANGE(0x0000, 0x0fff) AM_ROM |
| 54 | ADDRESS_MAP_END |
| 55 | |
| 56 | |
| 57 | // data map for the DSP (the dsp16 appears to use 2048 words of internal RAM) |
| 58 | static ADDRESS_MAP_START( dsp16_data_map, AS_DATA, 16, qsound_device ) |
| 59 | ADDRESS_MAP_UNMAP_HIGH |
| 60 | AM_RANGE(0x0000, 0x07ff) AM_RAM |
| 61 | ADDRESS_MAP_END |
| 62 | |
| 63 | |
| 64 | // machine fragment |
| 65 | static MACHINE_CONFIG_FRAGMENT( qsound ) |
| 66 | MCFG_CPU_ADD("qsound", DSP16, QSOUND_CLOCK) |
| 67 | MCFG_CPU_PROGRAM_MAP(dsp16_program_map) |
| 68 | MCFG_CPU_DATA_MAP(dsp16_data_map) |
| 69 | MACHINE_CONFIG_END |
| 70 | |
| 71 | |
| 72 | // ROM definition for the Qsound program ROM |
| 73 | // NOTE: ROM is marked as bad since a handful of questionable bits haven't been fully examined. |
| 74 | ROM_START( qsound ) |
| 75 | ROM_REGION( 0x2000, "qsound", 0 ) |
| 76 | ROM_LOAD16_WORD( "qsound.bin", 0x0000, 0x2000, BAD_DUMP CRC(059c847d) SHA1(229cead1be2f86733dd80573d4983ba482355ece) ) |
| 77 | ROM_END |
| 78 | |
| 79 | |
| 80 | //************************************************************************** |
| 48 | 81 | // LIVE DEVICE |
| 49 | 82 | //************************************************************************** |
| 50 | 83 | |
| r22617 | r22618 | |
| 53 | 86 | //------------------------------------------------- |
| 54 | 87 | |
| 55 | 88 | qsound_device::qsound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 56 | | : device_t(mconfig, QSOUND, "Q-Sound", tag, owner, clock), |
| 57 | | device_sound_interface(mconfig, *this), |
| 58 | | m_data(0), |
| 59 | | m_stream(NULL), |
| 60 | | m_sample_rom_length(0), |
| 61 | | m_sample_rom(NULL), |
| 62 | | m_frq_ratio(0.0f), |
| 63 | | m_fpRawDataL(NULL), |
| 64 | | m_fpRawDataR(NULL) |
| 89 | : device_t(mconfig, QSOUND, "Q-Sound", tag, owner, clock, "qsound"), |
| 90 | device_sound_interface(mconfig, *this), |
| 91 | m_data(0), |
| 92 | m_stream(NULL), |
| 93 | m_sample_rom_length(0), |
| 94 | m_sample_rom(NULL), |
| 95 | m_cpu(NULL), |
| 96 | m_frq_ratio(0.0f), |
| 97 | m_fpRawDataL(NULL), |
| 98 | m_fpRawDataR(NULL) |
| 65 | 99 | { |
| 66 | 100 | } |
| 67 | 101 | |
| 68 | 102 | |
| 69 | 103 | //------------------------------------------------- |
| 104 | // rom_region - return a pointer to the device's |
| 105 | // internal ROM region |
| 106 | //------------------------------------------------- |
| 107 | |
| 108 | const rom_entry *qsound_device::device_rom_region() const |
| 109 | { |
| 110 | return ROM_NAME( qsound ); |
| 111 | } |
| 112 | |
| 113 | |
| 114 | //------------------------------------------------- |
| 115 | // machine_config_additions - return a pointer to |
| 116 | // the device's machine fragment |
| 117 | //------------------------------------------------- |
| 118 | |
| 119 | machine_config_constructor qsound_device::device_mconfig_additions() const |
| 120 | { |
| 121 | return MACHINE_CONFIG_NAME( qsound ); |
| 122 | } |
| 123 | |
| 124 | |
| 125 | //------------------------------------------------- |
| 70 | 126 | // device_start - device-specific startup |
| 71 | 127 | //------------------------------------------------- |
| 72 | 128 | |
| r22617 | r22618 | |
| 74 | 130 | { |
| 75 | 131 | int i; |
| 76 | 132 | |
| 133 | // find our CPU |
| 134 | m_cpu = subdevice<dsp16_device>("qsound"); |
| 135 | |
| 77 | 136 | m_sample_rom = (QSOUND_SRC_SAMPLE *)*region(); |
| 78 | 137 | m_sample_rom_length = region()->bytes(); |
| 79 | 138 | |
trunk/src/emu/sound/qsound.h
| r22617 | r22618 | |
| 9 | 9 | #ifndef __QSOUND_H__ |
| 10 | 10 | #define __QSOUND_H__ |
| 11 | 11 | |
| 12 | #include "cpu/dsp16/dsp16.h" |
| 13 | |
| 12 | 14 | #define QSOUND_CLOCK 4000000 /* default 4MHz clock */ |
| 13 | 15 | |
| 14 | 16 | #define QSOUND_CLOCKDIV 166 /* Clock divider */ |
| r22617 | r22618 | |
| 55 | 57 | // ======================> qsound_device |
| 56 | 58 | |
| 57 | 59 | class qsound_device : public device_t, |
| 58 | | public device_sound_interface |
| 60 | public device_sound_interface |
| 59 | 61 | { |
| 60 | 62 | public: |
| 61 | 63 | qsound_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); |
| r22617 | r22618 | |
| 63 | 65 | |
| 64 | 66 | protected: |
| 65 | 67 | // device-level overrides |
| 68 | const rom_entry *device_rom_region() const; |
| 69 | machine_config_constructor device_mconfig_additions() const; |
| 66 | 70 | virtual void device_start(); |
| 67 | 71 | virtual void device_stop(); |
| 68 | 72 | |
| r22617 | r22618 | |
| 82 | 86 | QSOUND_CHANNEL m_channel[QSOUND_CHANNELS]; |
| 83 | 87 | UINT32 m_sample_rom_length; |
| 84 | 88 | QSOUND_SRC_SAMPLE *m_sample_rom; // Q sound sample ROM |
| 89 | dsp16_device *m_cpu; |
| 85 | 90 | |
| 86 | 91 | int m_pan_table[33]; // Pan volume table |
| 87 | 92 | float m_frq_ratio; // Frequency ratio |