1 #ifndef __YMDELTAT_H_ 2 #define __YMDELTAT_H_ 3 4 #define YM_DELTAT_SHIFT (16) 5 6 7 typedef void (*STATUS_CHANGE_HANDLER)(UINT8 which_chip, UINT8 status_bits); 8 9 10 /* DELTA-T (adpcm type B) struct */ 11 typedef struct deltat_adpcm_state { /* AT: rearranged and tigntened structure */ 12 UINT8 *memory; 13 INT32 *output_pointer;/* pointer of output pointers */ 14 INT32 *pan; /* pan : &output_pointer[pan] */ 15 double freqbase; 16 #if 0 17 double write_time; /* Y8950: 10 cycles of main clock; YM2608: 20 cycles of main clock */ 18 double read_time; /* Y8950: 8 cycles of main clock; YM2608: 18 cycles of main clock */ 19 #endif 20 UINT32 memory_size; 21 int output_range; 22 UINT32 now_addr; /* current address */ 23 UINT32 now_step; /* currect step */ 24 UINT32 step; /* step */ 25 UINT32 start; /* start address */ 26 UINT32 limit; /* limit address */ 27 UINT32 end; /* end address */ 28 UINT32 delta; /* delta scale */ 29 INT32 volume; /* current volume */ 30 INT32 acc; /* shift Measurement value*/ 31 INT32 adpcmd; /* next Forecast */ 32 INT32 adpcml; /* current value */ 33 INT32 prev_acc; /* leveling value */ 34 UINT8 now_data; /* current rom data */ 35 UINT8 CPU_data; /* current data from reg 08 */ 36 UINT8 portstate; /* port status */ 37 UINT8 control2; /* control reg: SAMPLE, DA/AD, RAM TYPE (x8bit / x1bit), ROM/RAM */ 38 UINT8 portshift; /* address bits shift-left: 39 ** 8 for YM2610, 40 ** 5 for Y8950 and YM2608 */ 41 42 UINT8 DRAMportshift; /* address bits shift-right: 43 ** 0 for ROM and x8bit DRAMs, 44 ** 3 for x1 DRAMs */ 45 46 UINT8 memread; /* needed for reading/writing external memory */ 47 48 /* handlers and parameters for the status flags support */ 49 STATUS_CHANGE_HANDLER status_set_handler; 50 STATUS_CHANGE_HANDLER status_reset_handler; 51 52 /* note that different chips have these flags on different 53 ** bits of the status register 54 */ 55 UINT8 status_change_which_chip; /* this chip id */ 56 UINT8 status_change_EOS_bit; /* 1 on End Of Sample (record/playback/cycle time of AD/DA converting has passed)*/ 57 UINT8 status_change_BRDY_bit; /* 1 after recording 2 datas (2x4bits) or after reading/writing 1 data */ 58 UINT8 status_change_ZERO_bit; /* 1 if silence lasts for more than 290 miliseconds on ADPCM recording */ 59 60 /* neither Y8950 nor YM2608 can generate IRQ when PCMBSY bit changes, so instead of above, 61 ** the statusflag gets ORed with PCM_BSY (below) (on each read of statusflag of Y8950 and YM2608) 62 */ 63 UINT8 PCM_BSY; /* 1 when ADPCM is playing; Y8950/YM2608 only */ 64 65 UINT8 reg[16]; /* adpcm registers */ 66 }YM_DELTAT; 67 68 /*void YM_DELTAT_BRDY_callback(YM_DELTAT *DELTAT);*/ 69 70 UINT8 YM_DELTAT_ADPCM_Read(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 void YM_DELTAT_ADPCM_CALC(YM_DELTAT *DELTAT); 74 75 void YM_DELTAT_postload(YM_DELTAT *DELTAT,UINT8 *regs); 76 void YM_DELTAT_savestate(const char *statename,int num,YM_DELTAT *DELTAT); 77 78 #endif 79