OSDN Git Service

9b43f06f7b6b21ffc48d9ea5e52de7af12587474
[csp-qt/common_source_project-fm7.git] / source / src / vm / msx / scc.h
1 /*
2         Common Source Code Project
3         MSX Series (experimental)
4
5         Origin : emu2212
6         modified by umaiboux
7         Date   : 2016.04.xx-
8
9         [ SCC ]
10 */
11
12 #ifndef _SCC_H_
13 #define _SCC_H_
14
15 #include "../vm.h"
16 #include "../../emu.h"
17 #include "../device.h"
18
19 #define SCC EMU2212
20
21 #define SCC_STANDARD 0
22 #define SCC_ENHANCED 1
23
24 #define SCC_MASK_CH(x) (1<<(x))
25
26 typedef struct __SCC {
27
28   uint32_t clk, rate ,base_incr, quality ;
29
30   int32_t out, prev, next;
31   uint32_t type ;
32   uint32_t mode ;
33   uint32_t active;
34   uint32_t base_adr;
35   uint32_t mask ;
36   
37   uint32_t realstep ;
38   uint32_t scctime ;
39   uint32_t sccstep ;
40
41   uint32_t incr[5] ;
42
43   int8_t  wave[5][32] ;
44
45   uint32_t count[5] ;
46   uint32_t freq[5] ;
47   uint32_t phase[5] ;
48   uint32_t volume[5] ;
49   uint32_t offset[5] ;
50   uint8_t reg[0x100-0xC0];
51
52   int ch_enable ;
53   int ch_enable_next ;
54
55   int cycle_4bit ;
56   int cycle_8bit ;
57   int refresh ;
58   int rotate[5] ;
59
60 } SCC ;
61
62
63 SCC *SCC_new(uint32_t c, uint32_t r) ;
64 void SCC_reset(SCC *scc) ;
65 void SCC_set_rate(SCC *scc, uint32_t r);
66 void SCC_set_quality(SCC *scc, uint32_t q) ;
67 void SCC_set_type(SCC *scc, uint32_t type) ;
68 void SCC_delete(SCC *scc) ;
69 int16_t SCC_calc(SCC *scc) ;
70 void SCC_write(SCC *scc, uint32_t adr, uint32_t val) ;
71 void SCC_writeReg(SCC *scc, uint32_t adr, uint32_t val) ;
72 uint32_t SCC_read(SCC *scc, uint32_t adr) ;
73 uint32_t SCC_setMask(SCC *scc, uint32_t adr) ;
74 uint32_t SCC_toggleMask(SCC *scc, uint32_t adr) ;
75
76 #undef SCC
77
78 class SCC : public DEVICE
79 {
80 private:
81         EMU2212 *emu2212;
82         int volume_l, volume_r;
83         void save_load_state(FILEIO* state_fio, bool is_save);
84         void decl_state_scc();
85         
86 public:
87         SCC(VM_TEMPLATE* parent_vm, EMU* parent_emu);
88         ~SCC() {}
89         
90         // common functions
91         void write_data8(uint32_t addr, uint32_t data);
92         uint32_t read_data8(uint32_t addr);
93         void initialize();
94         void release();
95         void reset();
96         void mix(int32_t* buffer, int cnt);
97         void set_volume(int ch, int decibel_l, int decibel_r);
98         void decl_state();
99         void save_state(FILEIO* state_fio);
100         bool load_state(FILEIO* state_fio);
101         
102         // unique functions
103         void initialize_sound(int rate, int clock, int samples);
104 };
105
106 #endif