1 #ifndef __YMDELTAT_H_ 2 #define __YMDELTAT_H_ 3 4 5 #include "MsxTypes.h" 6 7 #define YM_DELTAT_SHIFT (16) 8 9 #ifndef OSD_CPU_H 10 #define OSD_CPU_H 11 typedef unsigned char UINT8; /* unsigned 8bit */ 12 typedef unsigned short UINT16; /* unsigned 16bit */ 13 typedef unsigned int UINT32; /* unsigned 32bit */ 14 typedef signed char INT8; /* signed 8bit */ 15 typedef signed short INT16; /* signed 16bit */ 16 typedef signed int INT32; /* signed 32bit */ 17 #endif 18 19 /* adpcm type A and type B struct */ 20 typedef struct deltat_adpcm_state { 21 UINT8 *memory; 22 UINT32 memory_size; 23 void* OPL; 24 DoubleT freqbase; 25 INT32 *output_pointer; /* pointer of output pointers */ 26 int output_range; 27 28 UINT8 reg[16]; 29 UINT8 portstate,portcontrol; 30 int portshift; 31 int memread; /* first two bytes of mem->cpu transfer are dummy */ 32 33 UINT8 flag; /* port state */ 34 UINT8 eos; /* end of sample flag */ 35 UINT8 flagMask; /* arrived flag mask */ 36 UINT8 now_data; 37 UINT32 now_addr; 38 UINT32 now_step; 39 UINT32 step; 40 UINT32 start; 41 UINT32 end; 42 UINT32 read_pointer; /* used for memory -> sample bank */ 43 UINT32 write_pointer; /* used for memory -> sample bank */ 44 UINT32 delta; 45 INT32 volume; 46 INT32 *pan; /* &output_pointer[pan] */ 47 INT32 /*adpcmm,*/ adpcmx, adpcmd; 48 INT32 adpcml; /* hiro-shi!! */ 49 50 /* leveling and re-sampling state for DELTA-T */ 51 INT32 volume_w_step; /* volume with step rate */ 52 INT32 next_leveling; /* leveling value */ 53 INT32 sample_step; /* step of re-sampling */ 54 55 UINT8 arrivedFlag; /* flag of arrived end address */ 56 }YM_DELTAT; 57 58 /* static state */ 59 extern UINT8 *ym_deltat_memory; /* memory pointer */ 60 61 /* before YM_DELTAT_ADPCM_CALC(YM_DELTAT *DELTAT); */ 62 #define YM_DELTAT_DECODE_PRESET(DELTAT) {ym_deltat_memory = DELTAT->memory;} 63 64 void YM_DELTAT_ADPCM_LoadState(YM_DELTAT *DELTAT); 65 void YM_DELTAT_ADPCM_SaveState(YM_DELTAT *DELTAT); 66 67 UINT8 YM_DELTAT_ADPCM_Peek(YM_DELTAT *DELTAT); 68 UINT8 YM_DELTAT_ADPCM_Peek2(YM_DELTAT *DELTAT); 69 UINT8 YM_DELTAT_ADPCM_Read(YM_DELTAT *DELTAT); 70 UINT8 YM_DELTAT_ADPCM_Read2(YM_DELTAT *DELTAT); 71 void YM_DELTAT_ADPCM_Write(YM_DELTAT *DELTAT,int r,int v); 72 void YM_DELTAT_ADPCM_Reset(YM_DELTAT *DELTAT,int pan); 73 74 #endif 75 76 void YM_DELTAT_ADPCM_CALC(YM_DELTAT *DELTAT); 77 78 /* DELTA-T particle adjuster */ 79 #define YM_DELTAT_DELTA_MAX (24576) 80 #define YM_DELTAT_DELTA_MIN (127) 81 #define YM_DELTAT_DELTA_DEF (127) 82 83 #define YM_DELTAT_DECODE_RANGE 32768 84 #define YM_DELTAT_DECODE_MIN (-(YM_DELTAT_DECODE_RANGE)) 85 #define YM_DELTAT_DECODE_MAX ((YM_DELTAT_DECODE_RANGE)-1) 86 87 extern const INT32 ym_deltat_decode_tableB1[]; 88 extern const INT32 ym_deltat_decode_tableB2[]; 89 90 #define YM_DELTAT_Limit(val,max,min) \ 91 { \ 92 if ( val > max ) val = max; \ 93 else if ( val < min ) val = min; \ 94 } 95