OSDN Git Service

[General] Tracking to upstream, rev 2015-01-14.
[csp-qt/common_source_project-fm7.git] / source / src / vm / scv / sound.h
1 /*\r
2         EPOCH Super Cassette Vision Emulator 'eSCV'\r
3 \r
4         Author : Takeda.Toshiya\r
5         Date   : 2006.08.21 -\r
6 \r
7         [ uPD1771C ]\r
8 */\r
9 \r
10 #ifndef _SOUND_H_\r
11 #define _SOUND_H_\r
12 \r
13 #include "../vm.h"\r
14 #include "../../emu.h"\r
15 #include "../device.h"\r
16 \r
17 #define SOUND_CLOCK  1522400.0\r
18 #define NOISE_CLOCK      760.0\r
19 #define SQUARE_CLOCK  174000.0\r
20 \r
21 #define PCM_PERIOD 120000\r
22 \r
23 #define MAX_TONE   24000\r
24 #define MAX_NOISE  16000\r
25 #define MAX_SQUARE  8000\r
26 #define MAX_PCM    20000\r
27 \r
28 #define MAX_PARAM 0x8000\r
29 \r
30 class SOUND : public DEVICE\r
31 {\r
32 private:\r
33         DEVICE* d_cpu;\r
34         \r
35         // sound gen\r
36         typedef struct {\r
37                 int count;\r
38                 int diff;\r
39                 int period;\r
40                 int timbre;\r
41                 int volume;\r
42                 int output;\r
43                 int ptr;\r
44         } channel_t;\r
45         struct channel_t tone;\r
46         struct channel_t noise;\r
47         struct channel_t square1;\r
48         struct channel_t square2;\r
49         struct channel_t square3;\r
50         struct channel_t pcm;\r
51         void clear_channel(channel_t *ch);\r
52         \r
53         int pcm_table[MAX_PARAM * 8];\r
54         uint32 cmd_addr;\r
55         int pcm_len;\r
56         \r
57         int volume_table[32];\r
58         int detune_table[32];\r
59         \r
60         // command buffer\r
61         int param_cnt, param_ptr, register_id;\r
62         uint8 params[MAX_PARAM];\r
63         \r
64         void process_pcm(uint8 data);\r
65         void process_cmd();\r
66         \r
67 public:\r
68         SOUND(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
69         ~SOUND() {}\r
70         \r
71         // common functions\r
72         void reset();\r
73         void write_data8(uint32 addr, uint32 data);\r
74         void write_io8(uint32 addr, uint32 data);\r
75         void event_callback(int event_id, int err);\r
76         void mix(int32* buffer, int cnt);\r
77         void save_state(FILEIO* state_fio);\r
78         bool load_state(FILEIO* state_fio);\r
79         \r
80         // unique functions\r
81         void set_context_cpu(DEVICE* device)\r
82         {\r
83                 d_cpu = device;\r
84         }\r
85         void init(int rate);\r
86 };\r
87 \r
88 #endif\r
89 \r