LMMS
Loading...
Searching...
No Matches
nukedopl.c File Reference
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "nukedopl.h"

Macros

#define RSM_FRAC   10

Typedefs

typedef Bit16s(* envelope_sinfunc) (Bit16u phase, Bit16u envelope)
typedef void(* envelope_genfunc) (opl3_slot *slott)

Enumerations

enum  { ch_2op = 0 , ch_4op = 1 , ch_4op2 = 2 , ch_drum = 3 }
enum  { egk_norm = 0x01 , egk_drum = 0x02 }
enum  envelope_gen_num {
  envelope_gen_num_off = 0 , envelope_gen_num_attack = 1 , envelope_gen_num_decay = 2 , envelope_gen_num_sustain = 3 ,
  envelope_gen_num_release = 4
}

Functions

static Bit16s OPL3_EnvelopeCalcExp (Bit32u level)
static Bit16s OPL3_EnvelopeCalcSin0 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin1 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin2 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin3 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin4 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin5 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin6 (Bit16u phase, Bit16u envelope)
static Bit16s OPL3_EnvelopeCalcSin7 (Bit16u phase, Bit16u envelope)
static void OPL3_EnvelopeGenOff (opl3_slot *slot)
static void OPL3_EnvelopeGenAttack (opl3_slot *slot)
static void OPL3_EnvelopeGenDecay (opl3_slot *slot)
static void OPL3_EnvelopeGenSustain (opl3_slot *slot)
static void OPL3_EnvelopeGenRelease (opl3_slot *slot)
static Bit8u OPL3_EnvelopeCalcRate (opl3_slot *slot, Bit8u reg_rate)
static void OPL3_EnvelopeUpdateKSL (opl3_slot *slot)
static void OPL3_EnvelopeUpdateRate (opl3_slot *slot)
static void OPL3_EnvelopeCalc (opl3_slot *slot)
static void OPL3_EnvelopeKeyOn (opl3_slot *slot, Bit8u type)
static void OPL3_EnvelopeKeyOff (opl3_slot *slot, Bit8u type)
static void OPL3_PhaseGenerate (opl3_slot *slot)
static void OPL3_NoiseGenerate (opl3_chip *chip)
static void OPL3_SlotWrite20 (opl3_slot *slot, Bit8u data)
static void OPL3_SlotWrite40 (opl3_slot *slot, Bit8u data)
static void OPL3_SlotWrite60 (opl3_slot *slot, Bit8u data)
static void OPL3_SlotWrite80 (opl3_slot *slot, Bit8u data)
static void OPL3_SlotWriteE0 (opl3_slot *slot, Bit8u data)
static void OPL3_SlotGeneratePhase (opl3_slot *slot, Bit16u phase)
static void OPL3_SlotGenerate (opl3_slot *slot)
static void OPL3_SlotGenerateZM (opl3_slot *slot)
static void OPL3_SlotCalcFB (opl3_slot *slot)
static void OPL3_ChannelSetupAlg (opl3_channel *channel)
static void OPL3_ChannelUpdateRhythm (opl3_chip *chip, Bit8u data)
static void OPL3_ChannelWriteA0 (opl3_channel *channel, Bit8u data)
static void OPL3_ChannelWriteB0 (opl3_channel *channel, Bit8u data)
static void OPL3_ChannelWriteC0 (opl3_channel *channel, Bit8u data)
static void OPL3_ChannelKeyOn (opl3_channel *channel)
static void OPL3_ChannelKeyOff (opl3_channel *channel)
static void OPL3_ChannelSet4Op (opl3_chip *chip, Bit8u data)
static Bit16s OPL3_ClipSample (Bit32s sample)
static void OPL3_GenerateRhythm1 (opl3_chip *chip)
static void OPL3_GenerateRhythm2 (opl3_chip *chip)
void OPL3_Generate (opl3_chip *chip, Bit16s *buf)
void OPL3_GenerateResampled (opl3_chip *chip, Bit16s *buf)
void OPL3_Reset (opl3_chip *chip, Bit32u samplerate)
void OPL3_WriteReg (opl3_chip *chip, Bit16u reg, Bit8u v)
void OPL3_WriteRegBuffered (opl3_chip *chip, Bit16u reg, Bit8u v)
void OPL3_GenerateStream (opl3_chip *chip, Bit16s *sndptr, Bit32u numsamples)

Variables

static const Bit16u logsinrom [256]
static const Bit16u exprom [256]
static const Bit8u mt [16]
static const Bit8u kslrom [16]
static const Bit8u kslshift [4]
static const Bit8u eg_incstep [3][4][8]
static const Bit8u eg_incdesc [16]
static const Bit8s eg_incsh [16]
static const Bit8s ad_slot [0x20]
static const Bit8u ch_slot [18]
static const envelope_sinfunc envelope_sin [8]
envelope_genfunc envelope_gen [5]

Macro Definition Documentation

◆ RSM_FRAC

#define RSM_FRAC   10

Typedef Documentation

◆ envelope_genfunc

typedef void(* envelope_genfunc) (opl3_slot *slott)

◆ envelope_sinfunc

typedef Bit16s(* envelope_sinfunc) (Bit16u phase, Bit16u envelope)

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
egk_norm 
egk_drum 

◆ anonymous enum

anonymous enum
Enumerator
ch_2op 
ch_4op 
ch_4op2 
ch_drum 

◆ envelope_gen_num

Enumerator
envelope_gen_num_off 
envelope_gen_num_attack 
envelope_gen_num_decay 
envelope_gen_num_sustain 
envelope_gen_num_release 

Function Documentation

◆ OPL3_ChannelKeyOff()

void OPL3_ChannelKeyOff ( opl3_channel * channel)
static

◆ OPL3_ChannelKeyOn()

void OPL3_ChannelKeyOn ( opl3_channel * channel)
static

◆ OPL3_ChannelSet4Op()

void OPL3_ChannelSet4Op ( opl3_chip * chip,
Bit8u data )
static

◆ OPL3_ChannelSetupAlg()

void OPL3_ChannelSetupAlg ( opl3_channel * channel)
static

◆ OPL3_ChannelUpdateRhythm()

void OPL3_ChannelUpdateRhythm ( opl3_chip * chip,
Bit8u data )
static

◆ OPL3_ChannelWriteA0()

void OPL3_ChannelWriteA0 ( opl3_channel * channel,
Bit8u data )
static

◆ OPL3_ChannelWriteB0()

void OPL3_ChannelWriteB0 ( opl3_channel * channel,
Bit8u data )
static

◆ OPL3_ChannelWriteC0()

void OPL3_ChannelWriteC0 ( opl3_channel * channel,
Bit8u data )
static

◆ OPL3_ClipSample()

Bit16s OPL3_ClipSample ( Bit32s sample)
static

◆ OPL3_EnvelopeCalc()

void OPL3_EnvelopeCalc ( opl3_slot * slot)
static

◆ OPL3_EnvelopeCalcExp()

Bit16s OPL3_EnvelopeCalcExp ( Bit32u level)
static

◆ OPL3_EnvelopeCalcRate()

Bit8u OPL3_EnvelopeCalcRate ( opl3_slot * slot,
Bit8u reg_rate )
static

◆ OPL3_EnvelopeCalcSin0()

Bit16s OPL3_EnvelopeCalcSin0 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin1()

Bit16s OPL3_EnvelopeCalcSin1 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin2()

Bit16s OPL3_EnvelopeCalcSin2 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin3()

Bit16s OPL3_EnvelopeCalcSin3 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin4()

Bit16s OPL3_EnvelopeCalcSin4 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin5()

Bit16s OPL3_EnvelopeCalcSin5 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin6()

Bit16s OPL3_EnvelopeCalcSin6 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeCalcSin7()

Bit16s OPL3_EnvelopeCalcSin7 ( Bit16u phase,
Bit16u envelope )
static

◆ OPL3_EnvelopeGenAttack()

void OPL3_EnvelopeGenAttack ( opl3_slot * slot)
static

◆ OPL3_EnvelopeGenDecay()

void OPL3_EnvelopeGenDecay ( opl3_slot * slot)
static

◆ OPL3_EnvelopeGenOff()

void OPL3_EnvelopeGenOff ( opl3_slot * slot)
static

◆ OPL3_EnvelopeGenRelease()

void OPL3_EnvelopeGenRelease ( opl3_slot * slot)
static

◆ OPL3_EnvelopeGenSustain()

void OPL3_EnvelopeGenSustain ( opl3_slot * slot)
static

◆ OPL3_EnvelopeKeyOff()

void OPL3_EnvelopeKeyOff ( opl3_slot * slot,
Bit8u type )
static

◆ OPL3_EnvelopeKeyOn()

void OPL3_EnvelopeKeyOn ( opl3_slot * slot,
Bit8u type )
static

◆ OPL3_EnvelopeUpdateKSL()

void OPL3_EnvelopeUpdateKSL ( opl3_slot * slot)
static

◆ OPL3_EnvelopeUpdateRate()

void OPL3_EnvelopeUpdateRate ( opl3_slot * slot)
static

◆ OPL3_Generate()

void OPL3_Generate ( opl3_chip * chip,
Bit16s * buf )

◆ OPL3_GenerateResampled()

void OPL3_GenerateResampled ( opl3_chip * chip,
Bit16s * buf )

◆ OPL3_GenerateRhythm1()

void OPL3_GenerateRhythm1 ( opl3_chip * chip)
static

◆ OPL3_GenerateRhythm2()

void OPL3_GenerateRhythm2 ( opl3_chip * chip)
static

◆ OPL3_GenerateStream()

void OPL3_GenerateStream ( opl3_chip * chip,
Bit16s * sndptr,
Bit32u numsamples )

◆ OPL3_NoiseGenerate()

void OPL3_NoiseGenerate ( opl3_chip * chip)
static

◆ OPL3_PhaseGenerate()

void OPL3_PhaseGenerate ( opl3_slot * slot)
static

◆ OPL3_Reset()

void OPL3_Reset ( opl3_chip * chip,
Bit32u samplerate )

◆ OPL3_SlotCalcFB()

void OPL3_SlotCalcFB ( opl3_slot * slot)
static

◆ OPL3_SlotGenerate()

void OPL3_SlotGenerate ( opl3_slot * slot)
static

◆ OPL3_SlotGeneratePhase()

void OPL3_SlotGeneratePhase ( opl3_slot * slot,
Bit16u phase )
static

◆ OPL3_SlotGenerateZM()

void OPL3_SlotGenerateZM ( opl3_slot * slot)
static

◆ OPL3_SlotWrite20()

void OPL3_SlotWrite20 ( opl3_slot * slot,
Bit8u data )
static

◆ OPL3_SlotWrite40()

void OPL3_SlotWrite40 ( opl3_slot * slot,
Bit8u data )
static

◆ OPL3_SlotWrite60()

void OPL3_SlotWrite60 ( opl3_slot * slot,
Bit8u data )
static

◆ OPL3_SlotWrite80()

void OPL3_SlotWrite80 ( opl3_slot * slot,
Bit8u data )
static

◆ OPL3_SlotWriteE0()

void OPL3_SlotWriteE0 ( opl3_slot * slot,
Bit8u data )
static

◆ OPL3_WriteReg()

void OPL3_WriteReg ( opl3_chip * chip,
Bit16u reg,
Bit8u v )

◆ OPL3_WriteRegBuffered()

void OPL3_WriteRegBuffered ( opl3_chip * chip,
Bit16u reg,
Bit8u v )

Variable Documentation

◆ ad_slot

const Bit8s ad_slot[0x20]
static
Initial value:
= {
0, 1, 2, 3, 4, 5, -1, -1, 6, 7, 8, 9, 10, 11, -1, -1,
12, 13, 14, 15, 16, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1
}

◆ ch_slot

const Bit8u ch_slot[18]
static
Initial value:
= {
0, 1, 2, 6, 7, 8, 12, 13, 14, 18, 19, 20, 24, 25, 26, 30, 31, 32
}

◆ eg_incdesc

const Bit8u eg_incdesc[16]
static
Initial value:
= {
0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2
}

◆ eg_incsh

const Bit8s eg_incsh[16]
static
Initial value:
= {
0, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0, -1, -2
}

◆ eg_incstep

const Bit8u eg_incstep[3][4][8]
static
Initial value:
= {
{
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0 }
},
{
{ 0, 1, 0, 1, 0, 1, 0, 1 },
{ 0, 1, 0, 1, 1, 1, 0, 1 },
{ 0, 1, 1, 1, 0, 1, 1, 1 },
{ 0, 1, 1, 1, 1, 1, 1, 1 }
},
{
{ 1, 1, 1, 1, 1, 1, 1, 1 },
{ 2, 2, 1, 1, 1, 1, 1, 1 },
{ 2, 2, 1, 1, 2, 2, 1, 1 },
{ 2, 2, 2, 2, 2, 2, 1, 1 }
}
}

◆ envelope_gen

envelope_genfunc envelope_gen[5]
Initial value:
= {
}
static void OPL3_EnvelopeGenAttack(opl3_slot *slot)
Definition nukedopl.c:437
static void OPL3_EnvelopeGenDecay(opl3_slot *slot)
Definition nukedopl.c:452
static void OPL3_EnvelopeGenSustain(opl3_slot *slot)
Definition nukedopl.c:463
static void OPL3_EnvelopeGenOff(opl3_slot *slot)
Definition nukedopl.c:432
static void OPL3_EnvelopeGenRelease(opl3_slot *slot)
Definition nukedopl.c:471

◆ envelope_sin

const envelope_sinfunc envelope_sin[8]
static
Initial value:
= {
}
static Bit16s OPL3_EnvelopeCalcSin5(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:309
static Bit16s OPL3_EnvelopeCalcSin6(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:328
static Bit16s OPL3_EnvelopeCalcSin4(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:285
static Bit16s OPL3_EnvelopeCalcSin3(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:270
static Bit16s OPL3_EnvelopeCalcSin2(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:255
static Bit16s OPL3_EnvelopeCalcSin7(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:339
static Bit16s OPL3_EnvelopeCalcSin0(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:216
static Bit16s OPL3_EnvelopeCalcSin1(Bit16u phase, Bit16u envelope)
Definition nukedopl.c:236

◆ exprom

const Bit16u exprom[256]
static

◆ kslrom

const Bit8u kslrom[16]
static
Initial value:
= {
0, 32, 40, 45, 48, 51, 53, 55, 56, 58, 59, 60, 61, 62, 63, 64
}

◆ kslshift

const Bit8u kslshift[4]
static
Initial value:
= {
8, 1, 2, 0
}

◆ logsinrom

const Bit16u logsinrom[256]
static

◆ mt

const Bit8u mt[16]
static
Initial value:
= {
1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 20, 24, 24, 30, 30
}