]> 4ch.mooo.com Git - 16.git/blob - src/lib/vgmsnd/3812intf.c
refresh wwww
[16.git] / src / lib / vgmsnd / 3812intf.c
1 /******************************************************************************\r
2 * FILE\r
3 *   Yamaha 3812 emulator interface - MAME VERSION\r
4 *\r
5 * CREATED BY\r
6 *   Ernesto Corvi\r
7 *\r
8 * UPDATE LOG\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
15 *\r
16 * NOTES\r
17 *\r
18 ******************************************************************************/\r
19 #include <stddef.h>\r
20 //#include "src/lib/vgmsnd/mamedef.h"\r
21 #include "src/lib/vgmsnd/3812intf.h"\r
22 //#include "fmopl.h"\r
23 \r
24 \r
25 typedef struct _ym3812_state ym3812_state;\r
26 struct _ym3812_state\r
27 {\r
28         void *                  chip;\r
29 };\r
30 \r
31 \r
32 extern INT32 CHIP_SAMPLE_RATE;\r
33 \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
37 \r
38 void ym3812_stream_update(UINT8 ChipID, stream_sample_t **outputs, int samples)\r
39 {\r
40         ym3812_state *info = &YM3812Data[ChipID];\r
41         ym3812_update_one(info->chip, outputs, samples);\r
42 }\r
43 \r
44 static void _stream_update(void * param/*, int interval*/)\r
45 {\r
46         ym3812_state *info = (ym3812_state *)param;\r
47         ym3812_update_one(info->chip, DUMMYBUF, 0);\r
48 }\r
49 \r
50 \r
51 //static DEVICE_START( ym3812 )\r
52 int device_start_ym3812(UINT8 ChipID, int clock)\r
53 {\r
54         ym3812_state *info;\r
55         int rate;\r
56 \r
57         if (ChipID >= MAX_CHIPS)\r
58                 return 0;\r
59 \r
60         info = &YM3812Data[ChipID];\r
61         //rate = clock /72;\r
62         rate = CHIP_SAMPLE_RATE;\r
63 \r
64         info->chip = ym3812_init(clock, rate);\r
65 \r
66         /* YM3812 setup */\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
70 \r
71         return rate;\r
72 }\r
73 \r
74 void device_stop_ym3812(UINT8 ChipID)\r
75 {\r
76         ym3812_state *info = &YM3812Data[ChipID];\r
77         ym3812_shutdown(info->chip);\r
78 }\r
79 \r
80 void device_reset_ym3812(UINT8 ChipID)\r
81 {\r
82         ym3812_state *info = &YM3812Data[ChipID];\r
83         ym3812_reset_chip(info->chip);\r
84 }\r
85 \r
86 \r
87 UINT8 ym3812_r(UINT8 ChipID, offs_t offset)\r
88 {\r
89         ym3812_state *info = &YM3812Data[ChipID];\r
90         return ym3812_read(info->chip, offset & 1);\r
91 }\r
92 \r
93 void ym3812_w(UINT8 ChipID, offs_t offset, UINT8 data)\r
94 {\r
95         ym3812_state *info = &YM3812Data[ChipID];\r
96         ym3812_write(info->chip, offset & 1, data);\r
97 }\r