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