DOSBox-X
|
00001 00002 enum { 00003 PSGFREQPADBIT = 12, 00004 PSGADDEDBIT = 3 00005 }; 00006 00007 enum { 00008 PSGENV_INC = 15, 00009 PSGENV_ONESHOT = 16, 00010 PSGENV_LASTON = 32, 00011 PSGENV_ONECYCLE = 64 00012 }; 00013 00014 typedef struct { 00015 SINT32 freq; 00016 SINT32 count; 00017 SINT32 *pvol; // !! 00018 UINT16 puchi; 00019 UINT8 pan; 00020 UINT8 padding; 00021 } PSGTONE; 00022 00023 typedef struct { 00024 SINT32 freq; 00025 SINT32 count; 00026 UINT base; 00027 } PSGNOISE; 00028 00029 typedef struct { 00030 UINT8 tune[3][2]; // 0 00031 UINT8 noise; // 6 00032 UINT8 mixer; // 7 00033 UINT8 vol[3]; // 8 00034 UINT8 envtime[2]; // b 00035 UINT8 env; // d 00036 UINT8 io1; 00037 UINT8 io2; 00038 } PSGREG; 00039 00040 typedef struct { 00041 PSGTONE tone[3]; 00042 PSGNOISE noise; 00043 PSGREG reg; 00044 UINT16 envcnt; 00045 UINT16 envmax; 00046 UINT8 mixer; 00047 UINT8 envmode; 00048 UINT8 envvol; 00049 SINT8 envvolcnt; 00050 SINT32 evol; // !! 00051 UINT puchicount; 00052 } _PSGGEN, *PSGGEN; 00053 00054 typedef struct { 00055 SINT32 volume[16]; 00056 SINT32 voltbl[16]; 00057 UINT rate; 00058 UINT32 base; 00059 UINT16 puchidec; 00060 } PSGGENCFG; 00061 00062 00063 #ifdef __cplusplus 00064 extern "C" { 00065 #endif 00066 00067 void psggen_initialize(UINT rate); 00068 void psggen_setvol(UINT vol); 00069 00070 void psggen_reset(PSGGEN psg); 00071 void psggen_restore(PSGGEN psg); 00072 void psggen_setreg(PSGGEN psg, UINT reg, REG8 val); 00073 REG8 psggen_getreg(PSGGEN psg, UINT reg); 00074 void psggen_setpan(PSGGEN psg, UINT ch, REG8 pan); 00075 00076 void SOUNDCALL psggen_getpcm(PSGGEN psg, SINT32 *pcm, UINT count); 00077 00078 #ifdef __cplusplus 00079 } 00080 #endif 00081