DOSBox-X
|
00001 00002 enum { 00003 ADTIMING_BIT = 11, 00004 ADTIMING = (1 << ADTIMING_BIT), 00005 ADPCM_SHIFT = 3 00006 }; 00007 00008 typedef struct { 00009 UINT8 ctrl1; // 00 00010 UINT8 ctrl2; // 01 00011 UINT8 start[2]; // 02 00012 UINT8 stop[2]; // 04 00013 UINT8 reg06; 00014 UINT8 reg07; 00015 UINT8 data; // 08 00016 UINT8 delta[2]; // 09 00017 UINT8 level; // 0b 00018 UINT8 limit[2]; // 0c 00019 UINT8 reg0e; 00020 UINT8 reg0f; 00021 UINT8 flag; // 10 00022 UINT8 reg11; 00023 UINT8 reg12; 00024 UINT8 reg13; 00025 } ADPCMREG; 00026 00027 typedef struct { 00028 ADPCMREG reg; 00029 UINT32 pos; 00030 UINT32 start; 00031 UINT32 stop; 00032 UINT32 limit; 00033 SINT32 level; 00034 UINT32 base; 00035 SINT32 samp; 00036 SINT32 delta; 00037 SINT32 remain; 00038 SINT32 step; 00039 SINT32 out0; 00040 SINT32 out1; 00041 SINT32 fb; 00042 SINT32 pertim; 00043 UINT8 status; 00044 UINT8 play; 00045 UINT8 mask; 00046 UINT8 fifopos; 00047 UINT8 fifo[2]; 00048 UINT8 padding[2]; 00049 UINT8 buf[0x40000]; 00050 } _ADPCM, *ADPCM; 00051 00052 typedef struct { 00053 UINT rate; 00054 UINT vol; 00055 } ADPCMCFG; 00056 00057 00058 #ifdef __cplusplus 00059 extern "C" { 00060 #endif 00061 00062 void adpcm_initialize(UINT rate); 00063 void adpcm_setvol(UINT vol); 00064 00065 void adpcm_reset(ADPCM ad); 00066 void adpcm_update(ADPCM ad); 00067 void adpcm_setreg(ADPCM ad, UINT reg, REG8 value); 00068 REG8 adpcm_status(ADPCM ad); 00069 00070 REG8 SOUNDCALL adpcm_readsample(ADPCM ad); 00071 void SOUNDCALL adpcm_datawrite(ADPCM ad, REG8 data); 00072 void SOUNDCALL adpcm_getpcm(ADPCM ad, SINT32 *buf, UINT count); 00073 00074 #ifdef __cplusplus 00075 } 00076 #endif 00077