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

[Retrieved from:
https://github.com/opentyrian/opentyrian/commit/962ee8fc46ca51691bde1c8c1022dacbe8a037ed]
Signed-off-by: Fabrice Fontaine <fontaine.fabrice@gmail.com>
---
 src/opl.c | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 src/opl.h | 157 ++----------------------------------------------------
 2 files changed, 154 insertions(+), 156 deletions(-)

diff --git a/src/opl.c b/src/opl.c
index a4071c5..f15474c 100644
--- 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
 
diff --git a/src/opl.h b/src/opl.h
index c8e643b..cbb56ad 100644
--- 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 */
