Nuked: env -> envelope
This commit is contained in:
@@ -18,7 +18,7 @@
|
|||||||
* siliconpr0n.org(John McMaster, digshadow):
|
* siliconpr0n.org(John McMaster, digshadow):
|
||||||
* YMF262 and VRC VII decaps and die shots.
|
* YMF262 and VRC VII decaps and die shots.
|
||||||
*
|
*
|
||||||
* Version: 1.8.0
|
* Version: 1.8
|
||||||
*
|
*
|
||||||
* Translation from C++ into C done by Miran Grca.
|
* Translation from C++ into C done by Miran Grca.
|
||||||
*
|
*
|
||||||
@@ -378,11 +378,11 @@ static uint8_t panpot_lut_build = 0;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Envelope generator
|
// Envelope generator
|
||||||
typedef int16_t (*env_sinfunc)(uint16_t phase, uint16_t envelope);
|
typedef int16_t (*envelope_sinfunc)(uint16_t phase, uint16_t envelope);
|
||||||
typedef void (*env_genfunc)(slot_t *slot);
|
typedef void (*envelope_genfunc)(slot_t *slot);
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_exp(uint32_t level)
|
envelope_calc_exp(uint32_t level)
|
||||||
{
|
{
|
||||||
if (level > 0x1fff)
|
if (level > 0x1fff)
|
||||||
level = 0x1fff;
|
level = 0x1fff;
|
||||||
@@ -391,7 +391,7 @@ env_calc_exp(uint32_t level)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin0(uint16_t phase, uint16_t env)
|
envelope_calc_sin0(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
uint16_t neg = 0;
|
uint16_t neg = 0;
|
||||||
@@ -406,11 +406,11 @@ env_calc_sin0(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[phase & 0xffu];
|
out = logsinrom[phase & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)) ^ neg);
|
return (envelope_calc_exp(out + (envelope << 3)) ^ neg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin1(uint16_t phase, uint16_t env)
|
envelope_calc_sin1(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
|
|
||||||
@@ -423,11 +423,11 @@ env_calc_sin1(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[phase & 0xffu];
|
out = logsinrom[phase & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)));
|
return (envelope_calc_exp(out + (envelope << 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin2(uint16_t phase, uint16_t env)
|
envelope_calc_sin2(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
|
|
||||||
@@ -438,11 +438,11 @@ env_calc_sin2(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[phase & 0xffu];
|
out = logsinrom[phase & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)));
|
return (envelope_calc_exp(out + (envelope << 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin3(uint16_t phase, uint16_t env)
|
envelope_calc_sin3(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
|
|
||||||
@@ -453,11 +453,11 @@ env_calc_sin3(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[phase & 0xffu];
|
out = logsinrom[phase & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)));
|
return (envelope_calc_exp(out + (envelope << 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin4(uint16_t phase, uint16_t env)
|
envelope_calc_sin4(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
uint16_t neg = 0;
|
uint16_t neg = 0;
|
||||||
@@ -474,11 +474,11 @@ env_calc_sin4(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[(phase << 1u) & 0xffu];
|
out = logsinrom[(phase << 1u) & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)) ^ neg);
|
return (envelope_calc_exp(out + (envelope << 3)) ^ neg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin5(uint16_t phase, uint16_t env)
|
envelope_calc_sin5(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
|
|
||||||
@@ -491,11 +491,11 @@ env_calc_sin5(uint16_t phase, uint16_t env)
|
|||||||
else
|
else
|
||||||
out = logsinrom[(phase << 1u) & 0xffu];
|
out = logsinrom[(phase << 1u) & 0xffu];
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)));
|
return (envelope_calc_exp(out + (envelope << 3)));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin6(uint16_t phase, uint16_t env)
|
envelope_calc_sin6(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t neg = 0;
|
uint16_t neg = 0;
|
||||||
|
|
||||||
@@ -504,11 +504,11 @@ env_calc_sin6(uint16_t phase, uint16_t env)
|
|||||||
if (phase & 0x0200)
|
if (phase & 0x0200)
|
||||||
neg = 0xffff;
|
neg = 0xffff;
|
||||||
|
|
||||||
return (env_calc_exp(env << 3) ^ neg);
|
return (envelope_calc_exp(envelope << 3) ^ neg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int16_t
|
static int16_t
|
||||||
env_calc_sin7(uint16_t phase, uint16_t env)
|
envelope_calc_sin7(uint16_t phase, uint16_t envelope)
|
||||||
{
|
{
|
||||||
uint16_t out = 0;
|
uint16_t out = 0;
|
||||||
uint16_t neg = 0;
|
uint16_t neg = 0;
|
||||||
@@ -522,22 +522,22 @@ env_calc_sin7(uint16_t phase, uint16_t env)
|
|||||||
|
|
||||||
out = phase << 3;
|
out = phase << 3;
|
||||||
|
|
||||||
return (env_calc_exp(out + (env << 3)) ^ neg);
|
return (envelope_calc_exp(out + (envelope << 3)) ^ neg);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const env_sinfunc env_sin[8] = {
|
static const envelope_sinfunc envelope_sin[8] = {
|
||||||
env_calc_sin0,
|
envelope_calc_sin0,
|
||||||
env_calc_sin1,
|
envelope_calc_sin1,
|
||||||
env_calc_sin2,
|
envelope_calc_sin2,
|
||||||
env_calc_sin3,
|
envelope_calc_sin3,
|
||||||
env_calc_sin4,
|
envelope_calc_sin4,
|
||||||
env_calc_sin5,
|
envelope_calc_sin5,
|
||||||
env_calc_sin6,
|
envelope_calc_sin6,
|
||||||
env_calc_sin7
|
envelope_calc_sin7
|
||||||
};
|
};
|
||||||
|
|
||||||
static void
|
static void
|
||||||
env_update_ksl(slot_t *slot)
|
envelope_update_ksl(slot_t *slot)
|
||||||
{
|
{
|
||||||
int16_t ksl = (kslrom[slot->chan->f_num >> 6u] << 2)
|
int16_t ksl = (kslrom[slot->chan->f_num >> 6u] << 2)
|
||||||
- ((0x08 - slot->chan->block) << 5);
|
- ((0x08 - slot->chan->block) << 5);
|
||||||
@@ -549,7 +549,7 @@ env_update_ksl(slot_t *slot)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
env_calc(slot_t *slot)
|
envelope_calc(slot_t *slot)
|
||||||
{
|
{
|
||||||
uint8_t nonzero;
|
uint8_t nonzero;
|
||||||
uint8_t rate;
|
uint8_t rate;
|
||||||
@@ -681,13 +681,13 @@ env_calc(slot_t *slot)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
env_key_on(slot_t *slot, uint8_t type)
|
envelope_key_on(slot_t *slot, uint8_t type)
|
||||||
{
|
{
|
||||||
slot->key |= type;
|
slot->key |= type;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
env_key_off(slot_t *slot, uint8_t type)
|
envelope_key_off(slot_t *slot, uint8_t type)
|
||||||
{
|
{
|
||||||
slot->key &= ~type;
|
slot->key &= ~type;
|
||||||
}
|
}
|
||||||
@@ -795,7 +795,7 @@ slot_write_40(slot_t *slot, uint8_t data)
|
|||||||
slot->reg_ksl = (data >> 6) & 0x03;
|
slot->reg_ksl = (data >> 6) & 0x03;
|
||||||
slot->reg_tl = data & 0x3f;
|
slot->reg_tl = data & 0x3f;
|
||||||
|
|
||||||
env_update_ksl(slot);
|
envelope_update_ksl(slot);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -828,7 +828,7 @@ slot_write_e0(slot_t *slot, uint8_t data)
|
|||||||
static void
|
static void
|
||||||
slot_generate(slot_t *slot)
|
slot_generate(slot_t *slot)
|
||||||
{
|
{
|
||||||
slot->out = env_sin[slot->reg_wf](slot->pg_phase_out + *slot->mod,
|
slot->out = envelope_sin[slot->reg_wf](slot->pg_phase_out + *slot->mod,
|
||||||
slot->eg_out);
|
slot->eg_out);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -883,43 +883,43 @@ channel_update_rhythm(nuked_t *dev, uint8_t data)
|
|||||||
|
|
||||||
// hh
|
// hh
|
||||||
if (dev->rhy & 0x01)
|
if (dev->rhy & 0x01)
|
||||||
env_key_on(ch7->slotz[0], egk_drum);
|
envelope_key_on(ch7->slotz[0], egk_drum);
|
||||||
else
|
else
|
||||||
env_key_off(ch7->slotz[0], egk_drum);
|
envelope_key_off(ch7->slotz[0], egk_drum);
|
||||||
|
|
||||||
// tc
|
// tc
|
||||||
if (dev->rhy & 0x02)
|
if (dev->rhy & 0x02)
|
||||||
env_key_on(ch8->slotz[1], egk_drum);
|
envelope_key_on(ch8->slotz[1], egk_drum);
|
||||||
else
|
else
|
||||||
env_key_off(ch8->slotz[1], egk_drum);
|
envelope_key_off(ch8->slotz[1], egk_drum);
|
||||||
|
|
||||||
// tom
|
// tom
|
||||||
if (dev->rhy & 0x04)
|
if (dev->rhy & 0x04)
|
||||||
env_key_on(ch8->slotz[0], egk_drum);
|
envelope_key_on(ch8->slotz[0], egk_drum);
|
||||||
else
|
else
|
||||||
env_key_off(ch8->slotz[0], egk_drum);
|
envelope_key_off(ch8->slotz[0], egk_drum);
|
||||||
|
|
||||||
// sd
|
// sd
|
||||||
if (dev->rhy & 0x08)
|
if (dev->rhy & 0x08)
|
||||||
env_key_on(ch7->slotz[1], egk_drum);
|
envelope_key_on(ch7->slotz[1], egk_drum);
|
||||||
else
|
else
|
||||||
env_key_off(ch7->slotz[1], egk_drum);
|
envelope_key_off(ch7->slotz[1], egk_drum);
|
||||||
|
|
||||||
// bd
|
// bd
|
||||||
if (dev->rhy & 0x10) {
|
if (dev->rhy & 0x10) {
|
||||||
env_key_on(ch6->slotz[0], egk_drum);
|
envelope_key_on(ch6->slotz[0], egk_drum);
|
||||||
env_key_on(ch6->slotz[1], egk_drum);
|
envelope_key_on(ch6->slotz[1], egk_drum);
|
||||||
} else {
|
} else {
|
||||||
env_key_off(ch6->slotz[0], egk_drum);
|
envelope_key_off(ch6->slotz[0], egk_drum);
|
||||||
env_key_off(ch6->slotz[1], egk_drum);
|
envelope_key_off(ch6->slotz[1], egk_drum);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
for (chnum = 6; chnum < 9; chnum++) {
|
for (chnum = 6; chnum < 9; chnum++) {
|
||||||
dev->chan[chnum].chtype = ch_2op;
|
dev->chan[chnum].chtype = ch_2op;
|
||||||
|
|
||||||
channel_setup_alg(&dev->chan[chnum]);
|
channel_setup_alg(&dev->chan[chnum]);
|
||||||
env_key_off(dev->chan[chnum].slotz[0], egk_drum);
|
envelope_key_off(dev->chan[chnum].slotz[0], egk_drum);
|
||||||
env_key_off(dev->chan[chnum].slotz[1], egk_drum);
|
envelope_key_off(dev->chan[chnum].slotz[1], egk_drum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -934,15 +934,15 @@ channel_write_a0(chan_t *ch, uint8_t data)
|
|||||||
ch->ksv = (ch->block << 1)
|
ch->ksv = (ch->block << 1)
|
||||||
| ((ch->f_num >> (0x09 - ch->dev->nts)) & 0x01);
|
| ((ch->f_num >> (0x09 - ch->dev->nts)) & 0x01);
|
||||||
|
|
||||||
env_update_ksl(ch->slotz[0]);
|
envelope_update_ksl(ch->slotz[0]);
|
||||||
env_update_ksl(ch->slotz[1]);
|
envelope_update_ksl(ch->slotz[1]);
|
||||||
|
|
||||||
if (ch->dev->newm && ch->chtype == ch_4op) {
|
if (ch->dev->newm && ch->chtype == ch_4op) {
|
||||||
ch->pair->f_num = ch->f_num;
|
ch->pair->f_num = ch->f_num;
|
||||||
ch->pair->ksv = ch->ksv;
|
ch->pair->ksv = ch->ksv;
|
||||||
|
|
||||||
env_update_ksl(ch->pair->slotz[0]);
|
envelope_update_ksl(ch->pair->slotz[0]);
|
||||||
env_update_ksl(ch->pair->slotz[1]);
|
envelope_update_ksl(ch->pair->slotz[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -957,16 +957,16 @@ channel_write_b0(chan_t *ch, uint8_t data)
|
|||||||
ch->ksv = (ch->block << 1)
|
ch->ksv = (ch->block << 1)
|
||||||
| ((ch->f_num >> (0x09 - ch->dev->nts)) & 0x01);
|
| ((ch->f_num >> (0x09 - ch->dev->nts)) & 0x01);
|
||||||
|
|
||||||
env_update_ksl(ch->slotz[0]);
|
envelope_update_ksl(ch->slotz[0]);
|
||||||
env_update_ksl(ch->slotz[1]);
|
envelope_update_ksl(ch->slotz[1]);
|
||||||
|
|
||||||
if (ch->dev->newm && ch->chtype == ch_4op) {
|
if (ch->dev->newm && ch->chtype == ch_4op) {
|
||||||
ch->pair->f_num = ch->f_num;
|
ch->pair->f_num = ch->f_num;
|
||||||
ch->pair->block = ch->block;
|
ch->pair->block = ch->block;
|
||||||
ch->pair->ksv = ch->ksv;
|
ch->pair->ksv = ch->ksv;
|
||||||
|
|
||||||
env_update_ksl(ch->pair->slotz[0]);
|
envelope_update_ksl(ch->pair->slotz[0]);
|
||||||
env_update_ksl(ch->pair->slotz[1]);
|
envelope_update_ksl(ch->pair->slotz[1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1140,17 +1140,17 @@ channel_key_on(chan_t *ch)
|
|||||||
{
|
{
|
||||||
if (ch->dev->newm) {
|
if (ch->dev->newm) {
|
||||||
if (ch->chtype == ch_4op) {
|
if (ch->chtype == ch_4op) {
|
||||||
env_key_on(ch->slotz[0], egk_norm);
|
envelope_key_on(ch->slotz[0], egk_norm);
|
||||||
env_key_on(ch->slotz[1], egk_norm);
|
envelope_key_on(ch->slotz[1], egk_norm);
|
||||||
env_key_on(ch->pair->slotz[0], egk_norm);
|
envelope_key_on(ch->pair->slotz[0], egk_norm);
|
||||||
env_key_on(ch->pair->slotz[1], egk_norm);
|
envelope_key_on(ch->pair->slotz[1], egk_norm);
|
||||||
} else if (ch->chtype == ch_2op || ch->chtype == ch_drum) {
|
} else if (ch->chtype == ch_2op || ch->chtype == ch_drum) {
|
||||||
env_key_on(ch->slotz[0], egk_norm);
|
envelope_key_on(ch->slotz[0], egk_norm);
|
||||||
env_key_on(ch->slotz[1], egk_norm);
|
envelope_key_on(ch->slotz[1], egk_norm);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
env_key_on(ch->slotz[0], egk_norm);
|
envelope_key_on(ch->slotz[0], egk_norm);
|
||||||
env_key_on(ch->slotz[1], egk_norm);
|
envelope_key_on(ch->slotz[1], egk_norm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1159,17 +1159,17 @@ channel_key_off(chan_t *ch)
|
|||||||
{
|
{
|
||||||
if (ch->dev->newm) {
|
if (ch->dev->newm) {
|
||||||
if (ch->chtype == ch_4op) {
|
if (ch->chtype == ch_4op) {
|
||||||
env_key_off(ch->slotz[0], egk_norm);
|
envelope_key_off(ch->slotz[0], egk_norm);
|
||||||
env_key_off(ch->slotz[1], egk_norm);
|
envelope_key_off(ch->slotz[1], egk_norm);
|
||||||
env_key_off(ch->pair->slotz[0], egk_norm);
|
envelope_key_off(ch->pair->slotz[0], egk_norm);
|
||||||
env_key_off(ch->pair->slotz[1], egk_norm);
|
envelope_key_off(ch->pair->slotz[1], egk_norm);
|
||||||
} else if (ch->chtype == ch_2op || ch->chtype == ch_drum) {
|
} else if (ch->chtype == ch_2op || ch->chtype == ch_drum) {
|
||||||
env_key_off(ch->slotz[0], egk_norm);
|
envelope_key_off(ch->slotz[0], egk_norm);
|
||||||
env_key_off(ch->slotz[1], egk_norm);
|
envelope_key_off(ch->slotz[1], egk_norm);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
env_key_off(ch->slotz[0], egk_norm);
|
envelope_key_off(ch->slotz[0], egk_norm);
|
||||||
env_key_off(ch->slotz[1], egk_norm);
|
envelope_key_off(ch->slotz[1], egk_norm);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1201,7 +1201,7 @@ static void
|
|||||||
process_slot(slot_t *slot)
|
process_slot(slot_t *slot)
|
||||||
{
|
{
|
||||||
slot_calc_fb(slot);
|
slot_calc_fb(slot);
|
||||||
env_calc(slot);
|
envelope_calc(slot);
|
||||||
phase_generate(slot);
|
phase_generate(slot);
|
||||||
slot_generate(slot);
|
slot_generate(slot);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user