6 #include "blargg_common.h"
8 /* compiler dependence */
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 */
18 typedef INT32 stream_sample_t
;
20 #endif /* __OSDCOMM_H__ */
22 #define YM_DELTAT_SHIFT (16)
24 #define YM_DELTAT_EMULATION_MODE_NORMAL 0
25 #define YM_DELTAT_EMULATION_MODE_YM2610 1
28 typedef void (*STATUS_CHANGE_HANDLER
)(void *chip
, UINT8 status_bits
);
31 /* DELTA-T (adpcm type B) struct */
32 typedef struct deltat_adpcm_state
{ /* AT: rearranged and tigntened structure */
34 INT32
*output_pointer
;/* pointer of output pointers */
35 INT32
*pan
; /* pan : &output_pointer[pan] */
38 double write_time
; /* Y8950: 10 cycles of main clock; YM2608: 20 cycles of main clock */
39 double read_time
; /* Y8950: 8 cycles of main clock; YM2608: 18 cycles of main clock */
43 UINT32 now_addr
; /* current address */
44 UINT32 now_step
; /* currect step */
45 UINT32 step
; /* step */
46 UINT32 start
; /* start address */
47 UINT32 limit
; /* limit address */
48 UINT32 end
; /* end address */
49 UINT32 delta
; /* delta scale */
50 INT32 volume
; /* current volume */
51 INT32 acc
; /* shift Measurement value*/
52 INT32 adpcmd
; /* next Forecast */
53 INT32 adpcml
; /* current value */
54 INT32 prev_acc
; /* leveling value */
55 UINT8 now_data
; /* current rom data */
56 UINT8 CPU_data
; /* current data from reg 08 */
57 UINT8 portstate
; /* port status */
58 UINT8 control2
; /* control reg: SAMPLE, DA/AD, RAM TYPE (x8bit / x1bit), ROM/RAM */
59 UINT8 portshift
; /* address bits shift-left:
61 ** 5 for Y8950 and YM2608 */
63 UINT8 DRAMportshift
; /* address bits shift-right:
64 ** 0 for ROM and x8bit DRAMs,
67 UINT8 memread
; /* needed for reading/writing external memory */
69 /* handlers and parameters for the status flags support */
70 STATUS_CHANGE_HANDLER status_set_handler
;
71 STATUS_CHANGE_HANDLER status_reset_handler
;
73 /* note that different chips have these flags on different
74 ** bits of the status register
76 void * status_change_which_chip
; /* this chip id */
77 UINT8 status_change_EOS_bit
; /* 1 on End Of Sample (record/playback/cycle time of AD/DA converting has passed)*/
78 UINT8 status_change_BRDY_bit
; /* 1 after recording 2 datas (2x4bits) or after reading/writing 1 data */
79 UINT8 status_change_ZERO_bit
; /* 1 if silence lasts for more than 290 miliseconds on ADPCM recording */
81 /* neither Y8950 nor YM2608 can generate IRQ when PCMBSY bit changes, so instead of above,
82 ** the statusflag gets ORed with PCM_BSY (below) (on each read of statusflag of Y8950 and YM2608)
84 UINT8 PCM_BSY
; /* 1 when ADPCM is playing; Y8950/YM2608 only */
86 UINT8 reg
[16]; /* adpcm registers */
87 UINT8 emulation_mode
; /* which chip we're emulating */
90 /*void YM_DELTAT_BRDY_callback(YM_DELTAT *DELTAT);*/
92 UINT8
YM_DELTAT_ADPCM_Read(YM_DELTAT
*DELTAT
) ICODE_ATTR
;
93 void YM_DELTAT_ADPCM_Write(YM_DELTAT
*DELTAT
,int r
,int v
) ICODE_ATTR
;
94 void YM_DELTAT_ADPCM_Reset(YM_DELTAT
*DELTAT
,int pan
,int emulation_mode
);
95 void YM_DELTAT_ADPCM_CALC(YM_DELTAT
*DELTAT
) ICODE_ATTR
;
97 /*void YM_DELTAT_postload(YM_DELTAT *DELTAT,UINT8 *regs);
98 void YM_DELTAT_savestate(const device_config *device,YM_DELTAT *DELTAT);*/
100 #endif /* __YMDELTAT_H__ */