1 /* emu2149.h */
2 #ifndef _EMU2149_H_
3 #define _EMU2149_H_
4 #include "emutypes.h"
5 
6 /*#ifdef EMU2149_DLL_EXPORTS
7 #define EMU2149_API __declspec(dllexport)
8 #elif  EMU2149_DLL_IMPORTS
9 #define EMU2149_API __declspec(dllimport)
10 #else*/
11 #define EMU2149_API
12 //#endif
13 
14 #define EMU2149_VOL_DEFAULT 1
15 #define EMU2149_VOL_YM2149 0
16 #define EMU2149_VOL_AY_3_8910 1
17 
18 #define EMU2149_ZX_STEREO			0x80
19 
20 #define PSG_MASK_CH(x) (1<<(x))
21 
22 /*#ifdef __cplusplus
23 extern "C"
24 {
25 #endif*/
26 
27   typedef struct __PSG
28   {
29 
30     /* Volume Table */
31     e_uint32 *voltbl;
32 
33     e_uint8 reg[0x20];
34     e_int32 out;
35     e_int32 cout[3];
36 
37     e_uint32 clk, rate, base_incr, quality;
38 
39     e_uint32 count[3];
40     e_uint32 volume[3];
41     e_uint32 freq[3];
42     e_uint32 edge[3];
43     e_uint32 tmask[3];
44     e_uint32 nmask[3];
45     e_uint32 mask;
46     e_uint32 stereo_mask[3];
47 
48     e_uint32 base_count;
49 
50     e_uint32 env_volume;
51     e_uint32 env_ptr;
52     e_uint32 env_face;
53 
54     e_uint32 env_continue;
55     e_uint32 env_attack;
56     e_uint32 env_alternate;
57     e_uint32 env_hold;
58     e_uint32 env_pause;
59     e_uint32 env_reset;
60 
61     e_uint32 env_freq;
62     e_uint32 env_count;
63 
64     e_uint32 noise_seed;
65     e_uint32 noise_count;
66     e_uint32 noise_freq;
67 
68     /* rate converter */
69     e_uint32 realstep;
70     e_uint32 psgtime;
71     e_uint32 psgstep;
72     e_int32 prev, next;
73     e_int32 sprev[2], snext[2];
74 
75     /* I/O Ctrl */
76     e_uint32 adr;
77 
78   }
79   PSG;
80 
81   EMU2149_API void PSG_set_quality (PSG * psg, e_uint32 q);
82   EMU2149_API void PSG_set_clock(PSG * psg, e_uint32 c);
83   EMU2149_API void PSG_set_rate (PSG * psg, e_uint32 r);
84   EMU2149_API PSG *PSG_new (e_uint32 clk, e_uint32 rate);
85   EMU2149_API void PSG_reset (PSG *);
86   EMU2149_API void PSG_delete (PSG *);
87   EMU2149_API void PSG_writeReg (PSG *, e_uint32 reg, e_uint32 val);
88   EMU2149_API void PSG_writeIO (PSG * psg, e_uint32 adr, e_uint32 val);
89   EMU2149_API e_uint8 PSG_readReg (PSG * psg, e_uint32 reg);
90   EMU2149_API e_uint8 PSG_readIO (PSG * psg);
91   EMU2149_API e_int16 PSG_calc (PSG *);
92   EMU2149_API void PSG_calc_stereo (PSG * psg, e_int32 **out, e_int32 samples);
93   EMU2149_API void PSG_setFlags (PSG * psg, e_uint8 flags);
94   EMU2149_API void PSG_setVolumeMode (PSG * psg, int type);
95   EMU2149_API e_uint32 PSG_setMask (PSG *, e_uint32 mask);
96   EMU2149_API e_uint32 PSG_toggleMask (PSG *, e_uint32 mask);
97   EMU2149_API void PSG_setStereoMask (PSG *psg, e_uint32 mask);
98 
99 /*#ifdef __cplusplus
100 }
101 #endif*/
102 
103 #endif
104