summaryrefslogtreecommitdiff
path: root/games-arcade/opentyrian/files/opentyrian-2.1.20130907-gcc10.patch
blob: 6f0bfcf64cf3c2adadc480aff8478525822c1165 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
From 962ee8fc46ca51691bde1c8c1022dacbe8a037ed Mon Sep 17 00:00:00 2001
From: Carl Reinke <carlreinke@users.noreply.github.com>
Date: Sun, 14 Jun 2020 14:11:00 -0600
Subject: [PATCH] Move definitions that don't need to be exposed from opl.h to
 opl.c

--- a/src/opl.c
+++ b/src/opl.c
@@ -23,12 +23,161 @@
  * Copyright (C) 1998-2001 Ken Silverman
  * Ken Silverman's official web site: "http://www.advsys.net/ken"
  */
-
+#include "opl.h"
 
 #include <math.h>
+#include <stdbool.h>
 #include <stdlib.h> // rand()
 #include <string.h> // memset()
-#include "opl.h"
+
+#define fltype double
+
+ /*
+ define attribution that inlines/forces inlining of a function (optional)
+ */
+#define OPL_INLINE inline
+
+
+#undef NUM_CHANNELS
+#if defined(OPLTYPE_IS_OPL3)
+#define NUM_CHANNELS	18
+#else
+#define NUM_CHANNELS	9
+#endif
+
+#define MAXOPERATORS	(NUM_CHANNELS*2)
+
+
+#define FL05	((fltype)0.5)
+#define FL2		((fltype)2.0)
+#define PI		((fltype)3.1415926535897932384626433832795)
+
+
+#define FIXEDPT			0x10000		// fixed-point calculations using 16+16
+#define FIXEDPT_LFO		0x1000000	// fixed-point calculations using 8+24
+
+#define WAVEPREC		1024		// waveform precision (10 bits)
+
+#define INTFREQU		((fltype)(14318180.0 / 288.0))		// clocking of the chip
+
+
+#define OF_TYPE_ATT			0
+#define OF_TYPE_DEC			1
+#define OF_TYPE_REL			2
+#define OF_TYPE_SUS			3
+#define OF_TYPE_SUS_NOKEEP	4
+#define OF_TYPE_OFF			5
+
+#define ARC_CONTROL			0x00
+#define ARC_TVS_KSR_MUL		0x20
+#define ARC_KSL_OUTLEV		0x40
+#define ARC_ATTR_DECR		0x60
+#define ARC_SUSL_RELR		0x80
+#define ARC_FREQ_NUM		0xa0
+#define ARC_KON_BNUM		0xb0
+#define ARC_PERC_MODE		0xbd
+#define ARC_FEEDBACK		0xc0
+#define ARC_WAVE_SEL		0xe0
+
+#define ARC_SECONDSET		0x100	// second operator set for OPL3
+
+
+#define OP_ACT_OFF			0x00
+#define OP_ACT_NORMAL		0x01	// regular channel activated (bitmasked)
+#define OP_ACT_PERC			0x02	// percussion channel activated (bitmasked)
+
+#define BLOCKBUF_SIZE		512
+
+
+ // vibrato constants
+#define VIBTAB_SIZE			8
+#define VIBFAC				70/50000		// no braces, integer mul/div
+
+ // tremolo constants and table
+#define TREMTAB_SIZE		53
+#define TREM_FREQ			((fltype)(3.7))			// tremolo at 3.7hz
+
+
+ /* operator struct definition
+ For OPL2 all 9 channels consist of two operators each, carrier and modulator.
+ Channel x has operators x as modulator and operators (9+x) as carrier.
+ For OPL3 all 18 channels consist either of two operators (2op mode) or four
+ operators (4op mode) which is determined through register4 of the second
+ adlib register set.
+ Only the channels 0,1,2 (first set) and 9,10,11 (second set) can act as
+ 4op channels. The two additional operators for a channel y come from the
+ 2op channel y+3 so the operatorss y, (9+y), y+3, (9+y)+3 make up a 4op
+ channel.
+ */
+typedef struct operator_struct {
+	Bit32s cval, lastcval;			// current output/last output (used for feedback)
+	Bit32u tcount, wfpos, tinc;		// time (position in waveform) and time increment
+	fltype amp, step_amp;			// and amplification (envelope)
+	fltype vol;						// volume
+	fltype sustain_level;			// sustain level
+	Bit32s mfbi;					// feedback amount
+	fltype a0, a1, a2, a3;			// attack rate function coefficients
+	fltype decaymul, releasemul;	// decay/release rate functions
+	Bit32u op_state;				// current state of operator (attack/decay/sustain/release/off)
+	Bit32u toff;
+	Bit32s freq_high;				// highest three bits of the frequency, used for vibrato calculations
+	Bit16s* cur_wform;				// start of selected waveform
+	Bit32u cur_wmask;				// mask for selected waveform
+	Bit32u act_state;				// activity state (regular, percussion)
+	bool sus_keep;					// keep sustain level when decay finished
+	bool vibrato,tremolo;			// vibrato/tremolo enable bits
+
+									// variables used to provide non-continuous envelopes
+	Bit32u generator_pos;			// for non-standard sample rates we need to determine how many samples have passed
+	Bits cur_env_step;				// current (standardized) sample position
+	Bits env_step_a,env_step_d,env_step_r;	// number of std samples of one step (for attack/decay/release mode)
+	Bit8u step_skip_pos_a;			// position of 8-cyclic step skipping (always 2^x to check against mask)
+	Bits env_step_skip_a;			// bitmask that determines if a step is skipped (respective bit is zero then)
+
+#if defined(OPLTYPE_IS_OPL3)
+	bool is_4op,is_4op_attached;	// base of a 4op channel/part of a 4op channel
+	Bit32s left_pan,right_pan;		// opl3 stereo panning amount
+#endif
+} op_type;
+
+// per-chip variables
+static op_type op[MAXOPERATORS];
+
+static Bits int_samplerate;
+
+static Bit8u status;
+static Bit32u opl_index;
+#if defined(OPLTYPE_IS_OPL3)
+static Bit8u adlibreg[512];	// adlib register set (including second set)
+static Bit8u wave_sel[44];		// waveform selection
+#else
+static Bit8u adlibreg[256];	// adlib register set
+static Bit8u wave_sel[22];		// waveform selection
+#endif
+
+
+						// vibrato/tremolo increment/counter
+static Bit32u vibtab_pos;
+static Bit32u vibtab_add;
+static Bit32u tremtab_pos;
+static Bit32u tremtab_add;
+
+
+// enable an operator
+void enable_operator(Bitu regbase, op_type* op_pt, Bit32u act_type);
+
+// functions to change parameters of an operator
+void change_frequency(Bitu chanbase, Bitu regbase, op_type* op_pt);
+
+void change_attackrate(Bitu regbase, op_type* op_pt);
+void change_decayrate(Bitu regbase, op_type* op_pt);
+void change_releaserate(Bitu regbase, op_type* op_pt);
+void change_sustainlevel(Bitu regbase, op_type* op_pt);
+void change_waveform(Bitu regbase, op_type* op_pt);
+void change_keepsustain(Bitu regbase, op_type* op_pt);
+void change_vibrato(Bitu regbase, op_type* op_pt);
+void change_feedback(Bitu chanbase, op_type* op_pt);
+
 
 static Bit32u generator_add;	// should be a chip parameter
 
--- a/src/opl.h
+++ b/src/opl.h
@@ -25,11 +25,8 @@
  * Ken Silverman's official web site: "http://www.advsys.net/ken"
  */
 
-
-#define fltype double
-
-#include <stdbool.h>
 #include <stdint.h>
+
 typedef uintptr_t	Bitu;
 typedef intptr_t	Bits;
 typedef uint32_t	Bit32u;
@@ -39,154 +36,6 @@ typedef int16_t		Bit16s;
 typedef uint8_t		Bit8u;
 typedef int8_t		Bit8s;
 
-
-/*
-	define attribution that inlines/forces inlining of a function (optional)
-*/
-#define OPL_INLINE inline
-
-
-#undef NUM_CHANNELS
-#if defined(OPLTYPE_IS_OPL3)
-#define NUM_CHANNELS	18
-#else
-#define NUM_CHANNELS	9
-#endif
-
-#define MAXOPERATORS	(NUM_CHANNELS*2)
-
-
-#define FL05	((fltype)0.5)
-#define FL2		((fltype)2.0)
-#define PI		((fltype)3.1415926535897932384626433832795)
-
-
-#define FIXEDPT			0x10000		// fixed-point calculations using 16+16
-#define FIXEDPT_LFO		0x1000000	// fixed-point calculations using 8+24
-
-#define WAVEPREC		1024		// waveform precision (10 bits)
-
-#define INTFREQU		((fltype)(14318180.0 / 288.0))		// clocking of the chip
-
-
-#define OF_TYPE_ATT			0
-#define OF_TYPE_DEC			1
-#define OF_TYPE_REL			2
-#define OF_TYPE_SUS			3
-#define OF_TYPE_SUS_NOKEEP	4
-#define OF_TYPE_OFF			5
-
-#define ARC_CONTROL			0x00
-#define ARC_TVS_KSR_MUL		0x20
-#define ARC_KSL_OUTLEV		0x40
-#define ARC_ATTR_DECR		0x60
-#define ARC_SUSL_RELR		0x80
-#define ARC_FREQ_NUM		0xa0
-#define ARC_KON_BNUM		0xb0
-#define ARC_PERC_MODE		0xbd
-#define ARC_FEEDBACK		0xc0
-#define ARC_WAVE_SEL		0xe0
-
-#define ARC_SECONDSET		0x100	// second operator set for OPL3
-
-
-#define OP_ACT_OFF			0x00
-#define OP_ACT_NORMAL		0x01	// regular channel activated (bitmasked)
-#define OP_ACT_PERC			0x02	// percussion channel activated (bitmasked)
-
-#define BLOCKBUF_SIZE		512
-
-
-// vibrato constants
-#define VIBTAB_SIZE			8
-#define VIBFAC				70/50000		// no braces, integer mul/div
-
-// tremolo constants and table
-#define TREMTAB_SIZE		53
-#define TREM_FREQ			((fltype)(3.7))			// tremolo at 3.7hz
-
-
-/* operator struct definition
-     For OPL2 all 9 channels consist of two operators each, carrier and modulator.
-     Channel x has operators x as modulator and operators (9+x) as carrier.
-     For OPL3 all 18 channels consist either of two operators (2op mode) or four
-     operators (4op mode) which is determined through register4 of the second
-     adlib register set.
-     Only the channels 0,1,2 (first set) and 9,10,11 (second set) can act as
-     4op channels. The two additional operators for a channel y come from the
-     2op channel y+3 so the operatorss y, (9+y), y+3, (9+y)+3 make up a 4op
-     channel.
-*/
-typedef struct operator_struct {
-	Bit32s cval, lastcval;			// current output/last output (used for feedback)
-	Bit32u tcount, wfpos, tinc;		// time (position in waveform) and time increment
-	fltype amp, step_amp;			// and amplification (envelope)
-	fltype vol;						// volume
-	fltype sustain_level;			// sustain level
-	Bit32s mfbi;					// feedback amount
-	fltype a0, a1, a2, a3;			// attack rate function coefficients
-	fltype decaymul, releasemul;	// decay/release rate functions
-	Bit32u op_state;				// current state of operator (attack/decay/sustain/release/off)
-	Bit32u toff;
-	Bit32s freq_high;				// highest three bits of the frequency, used for vibrato calculations
-	Bit16s* cur_wform;				// start of selected waveform
-	Bit32u cur_wmask;				// mask for selected waveform
-	Bit32u act_state;				// activity state (regular, percussion)
-	bool sus_keep;					// keep sustain level when decay finished
-	bool vibrato,tremolo;			// vibrato/tremolo enable bits
-	
-	// variables used to provide non-continuous envelopes
-	Bit32u generator_pos;			// for non-standard sample rates we need to determine how many samples have passed
-	Bits cur_env_step;				// current (standardized) sample position
-	Bits env_step_a,env_step_d,env_step_r;	// number of std samples of one step (for attack/decay/release mode)
-	Bit8u step_skip_pos_a;			// position of 8-cyclic step skipping (always 2^x to check against mask)
-	Bits env_step_skip_a;			// bitmask that determines if a step is skipped (respective bit is zero then)
-
-#if defined(OPLTYPE_IS_OPL3)
-	bool is_4op,is_4op_attached;	// base of a 4op channel/part of a 4op channel
-	Bit32s left_pan,right_pan;		// opl3 stereo panning amount
-#endif
-} op_type;
-
-// per-chip variables
-Bitu chip_num;
-op_type op[MAXOPERATORS];
-
-Bits int_samplerate;
-	
-Bit8u status;
-Bit32u opl_index;
-#if defined(OPLTYPE_IS_OPL3)
-Bit8u adlibreg[512];	// adlib register set (including second set)
-Bit8u wave_sel[44];		// waveform selection
-#else
-Bit8u adlibreg[256];	// adlib register set
-Bit8u wave_sel[22];		// waveform selection
-#endif
-
-
-// vibrato/tremolo increment/counter
-Bit32u vibtab_pos;
-Bit32u vibtab_add;
-Bit32u tremtab_pos;
-Bit32u tremtab_add;
-
-
-// enable an operator
-void enable_operator(Bitu regbase, op_type* op_pt, Bit32u act_type);
-
-// functions to change parameters of an operator
-void change_frequency(Bitu chanbase, Bitu regbase, op_type* op_pt);
-
-void change_attackrate(Bitu regbase, op_type* op_pt);
-void change_decayrate(Bitu regbase, op_type* op_pt);
-void change_releaserate(Bitu regbase, op_type* op_pt);
-void change_sustainlevel(Bitu regbase, op_type* op_pt);
-void change_waveform(Bitu regbase, op_type* op_pt);
-void change_keepsustain(Bitu regbase, op_type* op_pt);
-void change_vibrato(Bitu regbase, op_type* op_pt);
-void change_feedback(Bitu chanbase, op_type* op_pt);
-
 // general functions
 void adlib_init(Bit32u samplerate);
 void adlib_write(Bitu idx, Bit8u val);
@@ -195,8 +44,8 @@ void adlib_getsample(Bit16s* sndptr, Bits numsamples);
 Bitu adlib_reg_read(Bitu port);
 void adlib_write_index(Bitu port, Bit8u val);
 
-#endif /* OPL_H */
-
 #define opl_init() adlib_init(OUTPUT_QUALITY * 11025)
 #define opl_write(reg, val) adlib_write(reg, val)
 #define opl_update(buf, num) adlib_getsample(buf, num)
+
+#endif /* OPL_H */