1 /******************************************************************************
\r
3 * Yamaha 3812 emulator interface - MAME VERSION
\r
9 * JB 28-04-2002 Fixed simultaneous usage of all three different chip types.
\r
10 * Used real sample rate when resample filter is active.
\r
11 * AAT 12-28-2001 Protected Y8950 from accessing unmapped port and keyboard handlers.
\r
12 * CHS 1999-01-09 Fixes new ym3812 emulation interface.
\r
13 * CHS 1998-10-23 Mame streaming sound chip update
\r
14 * EC 1998 Created Interface
\r
18 ******************************************************************************/
\r
20 //#include "src/lib/vgmsnd/mamedef.h"
\r
21 #include "src/lib/vgmsnd/3812intf.h"
\r
22 //#include "fmopl.h"
\r
25 typedef struct _ym3812_state ym3812_state;
\r
26 struct _ym3812_state
\r
32 extern INT32 CHIP_SAMPLE_RATE;
\r
34 #define MAX_CHIPS 0x02
\r
35 static ym3812_state YM3812Data[MAX_CHIPS];
\r
36 static stream_sample_t* DUMMYBUF[0x02] = {NULL, NULL};
\r
38 void ym3812_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples)
\r
40 ym3812_state *info = &YM3812Data[ChipID];
\r
41 ym3812_update_one(info->chip, outputs, samples);
\r
44 static void _stream_update(void * param/*, int interval*/)
\r
46 ym3812_state *info = (ym3812_state *)param;
\r
47 ym3812_update_one(info->chip, DUMMYBUF, 0);
\r
51 //static DEVICE_START( ym3812 )
\r
52 int device_start_ym3812(UINT8 ChipID, int clock)
\r
57 if (ChipID >= MAX_CHIPS)
\r
60 info = &YM3812Data[ChipID];
\r
62 rate = CHIP_SAMPLE_RATE;
\r
64 info->chip = ym3812_init(clock, rate);
\r
67 ym3812_set_timer_handler (info->chip, NULL, info);
\r
68 ym3812_set_irq_handler (info->chip, NULL, info);
\r
69 ym3812_set_update_handler(info->chip, _stream_update, info);
\r
74 void device_stop_ym3812(UINT8 ChipID)
\r
76 ym3812_state *info = &YM3812Data[ChipID];
\r
77 ym3812_shutdown(info->chip);
\r
80 void device_reset_ym3812(UINT8 ChipID)
\r
82 ym3812_state *info = &YM3812Data[ChipID];
\r
83 ym3812_reset_chip(info->chip);
\r
87 UINT8 ym3812_r(UINT8 ChipID, offs_t offset)
\r
89 ym3812_state *info = &YM3812Data[ChipID];
\r
90 return ym3812_read(info->chip, offset & 1);
\r
93 void ym3812_w(UINT8 ChipID, offs_t offset, UINT8 data)
\r
95 ym3812_state *info = &YM3812Data[ChipID];
\r
96 ym3812_write(info->chip, offset & 1, data);
\r