OSDN Git Service

c6de080a5e9ac68eb2ccf99d232445ea1e729dd9
[csp-qt/common_source_project-fm7.git] / source / src / vm / msx / sound_cart.cpp
1 /*
2         Common Source Code Project
3         MSX Series (experimental)
4
5         Author : umaiboux
6         Date   : 2016.03.xx-
7
8         [ Sound Manager for Cartridge ]
9 */
10
11 #include "sound_cart.h"
12
13 namespace MSX {
14
15 SOUND_CART::SOUND_CART(VM_TEMPLATE* parent_vm, EMU* parent_emu) : DEVICE(parent_vm, parent_emu)
16 {
17         d_chip[SOUND_CHIP_SCC] = new SCC(parent_vm, parent_emu);
18         enable_chip[SOUND_CHIP_SCC] = false;
19         set_device_name(_T("Sound Cartridge"));
20 }
21
22 void SOUND_CART::disable_all()
23 {
24         int i;
25         for(i=0; i<=SOUND_CHIP_MAX; i++) {
26                 this->enable_c(i, false);
27         }
28 }
29
30 void SOUND_CART::enable_c(int chip, bool enable)
31 {
32         if (enable_chip[chip] != enable) {
33                 d_chip[chip]->reset();
34                 enable_chip[chip] = enable;
35         }
36 }
37
38 void SOUND_CART::write_io8_c(int chip, uint32_t addr, uint32_t data)
39 {
40         d_chip[chip]->write_io8(addr, data);
41 }
42
43 uint32_t SOUND_CART::read_io8_c(int chip, uint32_t addr)
44 {
45         return d_chip[chip]->read_io8(addr);
46 }
47
48 void SOUND_CART::write_data8_c(int chip, uint32_t addr, uint32_t data)
49 {
50         d_chip[chip]->write_data8(addr, data);
51 }
52
53 uint32_t SOUND_CART::read_data8_c(int chip, uint32_t addr)
54 {
55         return d_chip[chip]->read_data8(addr);
56 }
57
58 void SOUND_CART::initialize()
59 {
60         /*int i;
61         for(i=0; i<=SOUND_CHIP_MAX; i++) {
62                 d_chip[i]->initialize();
63         }*/
64 }
65
66 void SOUND_CART::release()
67 {
68         /*int i;
69         for(i=0; i<=SOUND_CHIP_MAX; i++) {
70                 d_chip[i]->release();
71                 enable_chip[i] = false;
72         }*/
73 }
74
75 void SOUND_CART::reset()
76 {
77         /*int i;
78         for(i=0; i<=SOUND_CHIP_MAX; i++) {
79                 d_chip[i]->reset();
80         }*/
81 }
82
83 void SOUND_CART::mix(int32_t* buffer, int cnt)
84 {
85         int i;
86         for(i=0; i<=SOUND_CHIP_MAX; i++) {
87                 if (enable_chip[i]) {
88                         d_chip[i]->mix(buffer, cnt);
89                 }
90         }
91 }
92
93 void SOUND_CART::initialize_sound(int rate, int clock, int samples)
94 {
95         ((SCC*)d_chip[SOUND_CHIP_SCC])->initialize_sound(rate, clock, samples);
96 }
97
98 void SOUND_CART::set_volume(int ch, int decibel_l, int decibel_r)
99 {
100         int i;
101         for(i=0; i<=SOUND_CHIP_MAX; i++) {
102                 if (enable_chip[i]) {
103                         d_chip[i]->set_volume(1, decibel_l, decibel_r);
104                 }
105         }
106 }
107
108 }