OSDN Git Service

[VM] Apply VM_TEMPLATE to all VMs.
[csp-qt/common_source_project-fm7.git] / source / src / vm / scv / sound.h
index 62a382a..60e3b67 100644 (file)
@@ -1,87 +1,97 @@
-/*\r
-       EPOCH Super Cassette Vision Emulator 'eSCV'\r
-\r
-       Author : Takeda.Toshiya\r
-       Date   : 2006.08.21 -\r
-\r
-       [ uPD1771C ]\r
-*/\r
-\r
-#ifndef _SOUND_H_\r
-#define _SOUND_H_\r
-\r
-#include "../vm.h"\r
-#include "../../emu.h"\r
-#include "../device.h"\r
-\r
-#define SOUND_CLOCK  1522400.0\r
-#define NOISE_CLOCK      760.0\r
-#define SQUARE_CLOCK  174000.0\r
-\r
-#define PCM_PERIOD 120000\r
-\r
-#define MAX_TONE   24000\r
-#define MAX_NOISE  16000\r
-#define MAX_SQUARE  8000\r
-#define MAX_PCM    20000\r
-\r
-#define MAX_PARAM 0x8000\r
-\r
-class SOUND : public DEVICE\r
-{\r
-private:\r
-       DEVICE* d_cpu;\r
-       \r
-       // sound gen\r
-       typedef struct {\r
-               int count;\r
-               int diff;\r
-               int period;\r
-               int timbre;\r
-               int volume;\r
-               int output;\r
-               int ptr;\r
-       } channel_t;\r
-       struct channel_t tone;\r
-       struct channel_t noise;\r
-       struct channel_t square1;\r
-       struct channel_t square2;\r
-       struct channel_t square3;\r
-       struct channel_t pcm;\r
-       void clear_channel(channel_t *ch);\r
-       \r
-       int pcm_table[MAX_PARAM * 8];\r
-       uint32 cmd_addr;\r
-       int pcm_len;\r
-       \r
-       int volume_table[32];\r
-       int detune_table[32];\r
-       \r
-       // command buffer\r
-       int param_cnt, param_ptr, register_id;\r
-       uint8 params[MAX_PARAM];\r
-       \r
-       void process_pcm(uint8 data);\r
-       void process_cmd();\r
-       \r
-public:\r
-       SOUND(VM* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu) {}\r
-       ~SOUND() {}\r
-       \r
-       // common functions\r
-       void reset();\r
-       void write_data8(uint32 addr, uint32 data);\r
-       void write_io8(uint32 addr, uint32 data);\r
-       void event_callback(int event_id, int err);\r
-       void mix(int32* buffer, int cnt);\r
-       \r
-       // unique function\r
-       void set_context_cpu(DEVICE* device)\r
-       {\r
-               d_cpu = device;\r
-       }\r
-       void init(int rate);\r
-};\r
-\r
-#endif\r
-\r
+/*
+       EPOCH Super Cassette Vision Emulator 'eSCV'
+
+       Author : Takeda.Toshiya
+       Date   : 2006.08.21 -
+
+       [ uPD1771C ]
+*/
+
+#ifndef _SOUND_H_
+#define _SOUND_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+#define SOUND_CLOCK  1522400.0
+#define NOISE_CLOCK      760.0
+#define SQUARE_CLOCK  174000.0
+
+#define PCM_PERIOD 120000
+
+#define MAX_TONE   24000
+#define MAX_NOISE  16000
+#define MAX_SQUARE  8000
+#define MAX_PCM    20000
+
+#define MAX_PARAM 0x8000
+
+class SOUND : public DEVICE
+{
+private:
+       DEVICE* d_cpu;
+       
+       // sound gen
+       typedef struct {
+               int count;
+               int diff;
+               int period;
+               int timbre;
+               int volume;
+               int output;
+               int ptr;
+       } channel_t;
+       channel_t tone;
+       channel_t noise;
+       channel_t square1;
+       channel_t square2;
+       channel_t square3;
+       channel_t pcm;
+       void clear_channel(channel_t *ch);
+       
+       int pcm_table[MAX_PARAM * 8];
+       uint32_t cmd_addr;
+       int pcm_len;
+       
+       int volume_table[32];
+       int detune_table[32];
+       
+       int psg_volume_l, psg_volume_r;
+       int pcm_volume_l, pcm_volume_r;
+       
+       // command buffer
+       int param_cnt, param_ptr, register_id;
+       uint8_t params[MAX_PARAM];
+       
+       void process_pcm(uint8_t data);
+       void process_cmd();
+       
+public:
+       SOUND(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
+       {
+               set_device_name(_T("Sound"));
+       }
+       ~SOUND() {}
+       
+       // common functions
+       void reset();
+       void write_data8(uint32_t addr, uint32_t data);
+       void write_io8(uint32_t addr, uint32_t data);
+       void event_callback(int event_id, int err);
+       void mix(int32_t* buffer, int cnt);
+       void set_volume(int ch, int decibel_l, int decibel_r);
+       void decl_state();
+       void save_state(FILEIO* state_fio);
+       bool load_state(FILEIO* state_fio);
+       
+       // unique functions
+       void set_context_cpu(DEVICE* device)
+       {
+               d_cpu = device;
+       }
+       void initialize_sound(int rate);
+};
+
+#endif
+