OSDN Git Service

[General] Merge upstream 2017-03-08 1/2.
[csp-qt/common_source_project-fm7.git] / source / src / vm / msx / scc.h
diff --git a/source/src/vm/msx/scc.h b/source/src/vm/msx/scc.h
new file mode 100644 (file)
index 0000000..922ada9
--- /dev/null
@@ -0,0 +1,104 @@
+/*
+       Common Source Code Project
+       MSX Series (experimental)
+
+       Origin : emu2212
+       modified by umaiboux
+       Date   : 2016.04.xx-
+
+       [ SCC ]
+*/
+
+#ifndef _SCC_H_
+#define _SCC_H_
+
+#include "../vm.h"
+#include "../../emu.h"
+#include "../device.h"
+
+#define SCC EMU2212
+
+#define SCC_STANDARD 0
+#define SCC_ENHANCED 1
+
+#define SCC_MASK_CH(x) (1<<(x))
+
+typedef struct __SCC {
+
+  uint32_t clk, rate ,base_incr, quality ;
+
+  int32_t out, prev, next;
+  uint32_t type ;
+  uint32_t mode ;
+  uint32_t active;
+  uint32_t base_adr;
+  uint32_t mask ;
+  
+  uint32_t realstep ;
+  uint32_t scctime ;
+  uint32_t sccstep ;
+
+  uint32_t incr[5] ;
+
+  int8_t  wave[5][32] ;
+
+  uint32_t count[5] ;
+  uint32_t freq[5] ;
+  uint32_t phase[5] ;
+  uint32_t volume[5] ;
+  uint32_t offset[5] ;
+  uint8_t reg[0x100-0xC0];
+
+  int ch_enable ;
+  int ch_enable_next ;
+
+  int cycle_4bit ;
+  int cycle_8bit ;
+  int refresh ;
+  int rotate[5] ;
+
+} SCC ;
+
+
+SCC *SCC_new(uint32_t c, uint32_t r) ;
+void SCC_reset(SCC *scc) ;
+void SCC_set_rate(SCC *scc, uint32_t r);
+void SCC_set_quality(SCC *scc, uint32_t q) ;
+void SCC_set_type(SCC *scc, uint32_t type) ;
+void SCC_delete(SCC *scc) ;
+int16_t SCC_calc(SCC *scc) ;
+void SCC_write(SCC *scc, uint32_t adr, uint32_t val) ;
+void SCC_writeReg(SCC *scc, uint32_t adr, uint32_t val) ;
+uint32_t SCC_read(SCC *scc, uint32_t adr) ;
+uint32_t SCC_setMask(SCC *scc, uint32_t adr) ;
+uint32_t SCC_toggleMask(SCC *scc, uint32_t adr) ;
+
+#undef SCC
+
+class SCC : public DEVICE
+{
+private:
+       EMU2212 *emu2212;
+       int volume_l, volume_r;
+       void save_load_state(FILEIO* state_fio, bool is_save);
+
+public:
+       SCC(VM* parent_vm, EMU* parent_emu);
+       ~SCC() {}
+       
+       // common functions
+       void write_data8(uint32_t addr, uint32_t data);
+       uint32_t read_data8(uint32_t addr);
+       void initialize();
+       void release();
+       void reset();
+       void mix(int32_t* buffer, int cnt);
+       void set_volume(int ch, int decibel_l, int decibel_r);
+       void save_state(FILEIO* state_fio);
+       bool load_state(FILEIO* state_fio);
+       
+       // unique functions
+       void initialize_sound(int rate, int clock, int samples);
+};
+
+#endif