@modplayjs/fmt-sid 0.0.0-stage → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +111 -2
- package/dist/c64.d.ts +8 -0
- package/dist/c64.d.ts.map +1 -0
- package/dist/c64.js +325 -0
- package/dist/c64.js.map +1 -0
- package/dist/c64types.d.ts +209 -0
- package/dist/c64types.d.ts.map +1 -0
- package/dist/c64types.js +181 -0
- package/dist/c64types.js.map +1 -0
- package/dist/cia.d.ts +19 -0
- package/dist/cia.d.ts.map +1 -0
- package/dist/cia.js +160 -0
- package/dist/cia.js.map +1 -0
- package/dist/combiwaves.d.ts +9 -0
- package/dist/combiwaves.d.ts.map +1 -0
- package/dist/combiwaves.js +533 -0
- package/dist/combiwaves.js.map +1 -0
- package/dist/config.d.ts +15 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +23 -0
- package/dist/config.js.map +1 -0
- package/dist/cpu.d.ts +12 -0
- package/dist/cpu.d.ts.map +1 -0
- package/dist/cpu.js +848 -0
- package/dist/cpu.js.map +1 -0
- package/dist/filtercurves.d.ts +13 -0
- package/dist/filtercurves.d.ts.map +1 -0
- package/dist/filtercurves.js +546 -0
- package/dist/filtercurves.js.map +1 -0
- package/dist/host.d.ts +4 -0
- package/dist/host.d.ts.map +1 -0
- package/dist/host.js +14 -0
- package/dist/host.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +36 -0
- package/dist/index.js.map +1 -0
- package/dist/instance.d.ts +119 -0
- package/dist/instance.d.ts.map +1 -0
- package/dist/instance.js +51 -0
- package/dist/instance.js.map +1 -0
- package/dist/loader.d.ts +26 -0
- package/dist/loader.d.ts.map +1 -0
- package/dist/loader.js +383 -0
- package/dist/loader.js.map +1 -0
- package/dist/mem.d.ts +30 -0
- package/dist/mem.d.ts.map +1 -0
- package/dist/mem.js +187 -0
- package/dist/mem.js.map +1 -0
- package/dist/psiddigi.d.ts +3 -0
- package/dist/psiddigi.d.ts.map +1 -0
- package/dist/psiddigi.js +73 -0
- package/dist/psiddigi.js.map +1 -0
- package/dist/settings.d.ts +41 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +64 -0
- package/dist/settings.js.map +1 -0
- package/dist/sid.d.ts +21 -0
- package/dist/sid.d.ts.map +1 -0
- package/dist/sid.js +78 -0
- package/dist/sid.js.map +1 -0
- package/dist/sidadsr.d.ts +9 -0
- package/dist/sidadsr.d.ts.map +1 -0
- package/dist/sidadsr.js +105 -0
- package/dist/sidadsr.js.map +1 -0
- package/dist/sidoscwaves.d.ts +15 -0
- package/dist/sidoscwaves.d.ts.map +1 -0
- package/dist/sidoscwaves.js +475 -0
- package/dist/sidoscwaves.js.map +1 -0
- package/dist/sidoutputs.d.ts +17 -0
- package/dist/sidoutputs.d.ts.map +1 -0
- package/dist/sidoutputs.js +185 -0
- package/dist/sidoutputs.js.map +1 -0
- package/dist/sidplugin.d.ts +18 -0
- package/dist/sidplugin.d.ts.map +1 -0
- package/dist/sidplugin.js +174 -0
- package/dist/sidplugin.js.map +1 -0
- package/dist/sidrouting.d.ts +8 -0
- package/dist/sidrouting.d.ts.map +1 -0
- package/dist/sidrouting.js +560 -0
- package/dist/sidrouting.js.map +1 -0
- package/dist/sidseek.d.ts +8 -0
- package/dist/sidseek.d.ts.map +1 -0
- package/dist/sidseek.js +60 -0
- package/dist/sidseek.js.map +1 -0
- package/dist/sincwindow.d.ts +3 -0
- package/dist/sincwindow.d.ts.map +1 -0
- package/dist/sincwindow.js +78 -0
- package/dist/sincwindow.js.map +1 -0
- package/dist/songlengths.d.ts +20 -0
- package/dist/songlengths.d.ts.map +1 -0
- package/dist/songlengths.js +81 -0
- package/dist/songlengths.js.map +1 -0
- package/dist/vic.d.ts +14 -0
- package/dist/vic.d.ts.map +1 -0
- package/dist/vic.js +63 -0
- package/dist/vic.js.map +1 -0
- package/package.json +48 -4
|
@@ -0,0 +1,475 @@
|
|
|
1
|
+
// SPDX-License-Identifier: BSD-3-Clause
|
|
2
|
+
// Copyright (c) 2026 Bitti09 — modplayjs contributors
|
|
3
|
+
// Ported from: cRSID 1.58 libcRSID/C64/SID_OscWaves.c — SID oscillators and
|
|
4
|
+
// waveform generation (lightweight + high-quality/oversampled variants).
|
|
5
|
+
// (c) Hermit (Mihaly Horvath), license: WTF ("do what the frick you want").
|
|
6
|
+
import { CRSpecC64 } from './c64types.js';
|
|
7
|
+
import { CRAudioLevels } from './c64types.js';
|
|
8
|
+
import { cRSID_C64 } from './instance.js';
|
|
9
|
+
import { CRSID_SawTriangle, CRSID_PulseTriangle, CRSID_PulseSawtooth, CRSID_PulseSawTriangle } from './combiwaves.js';
|
|
10
|
+
// ---------------------------------------------------------------------------
|
|
11
|
+
// getPW / getCombinedPW / combinedWF (SID_OscWaves.c:5-35)
|
|
12
|
+
// ---------------------------------------------------------------------------
|
|
13
|
+
/** getPW (SID_OscWaves.c:5-8) — PW=0000..FFF0 from SID-register (000..FFF). */
|
|
14
|
+
function getPW(C64, channelptr) {
|
|
15
|
+
const W = C64.IObankWR;
|
|
16
|
+
return ((((W[channelptr + 3] & 0xf) << 8) | W[channelptr + 2]) << 4) >>> 0;
|
|
17
|
+
}
|
|
18
|
+
/** getCombinedPW (SID_OscWaves.c:10-13) — PW=000..FFF (range for
|
|
19
|
+
* combined-waveform lookup) from SID-register (000..FFF). */
|
|
20
|
+
function getCombinedPW(C64, channelptr) {
|
|
21
|
+
const W = C64.IObankWR;
|
|
22
|
+
return (((W[channelptr + 3] & 0xf) << 8) | W[channelptr + 2]) & 0xffff;
|
|
23
|
+
}
|
|
24
|
+
// Specs of combinedWF (SID_OscWaves.c:14-28)
|
|
25
|
+
const COMBINEDWF_SAMPLE_RESOLUTION = 12;
|
|
26
|
+
const COMBINEDWF_FILT_RESOLUTION = 16; // bits
|
|
27
|
+
const COMBINEDWF_WAVE_RESOLUTION_8 = 8; /* COMBINEDWF_WAVE_RESOLUTION */
|
|
28
|
+
const CRSID_WAVE_RESOLUTION = 16; // bits
|
|
29
|
+
const COMBINEDWF_OSC_MSB_OFF_MASK = (1 << (COMBINEDWF_SAMPLE_RESOLUTION - 1)) - 1; // 0x7FFF
|
|
30
|
+
const COMBINEDWF_FILTMUL_MAX = (1 << COMBINEDWF_FILT_RESOLUTION) - 1; // 0xFFFF
|
|
31
|
+
const COMBINEDWF_FILT_FRACTION_SHIFTS = 16;
|
|
32
|
+
const COMBINEDWF_WAVE_SHIFTS8 = CRSID_WAVE_RESOLUTION - COMBINEDWF_WAVE_RESOLUTION_8; // 8
|
|
33
|
+
/** combinedWF (SID_OscWaves.c:14-35). */
|
|
34
|
+
function combinedWF(C64, SID, WFarray, oscval, channel, channelptr) {
|
|
35
|
+
let Pitch;
|
|
36
|
+
let Filt;
|
|
37
|
+
if (SID.ChipModel === 6581 && WFarray !== CRSID_PulseTriangle)
|
|
38
|
+
oscval &= COMBINEDWF_OSC_MSB_OFF_MASK; // 0x7FF; //0x7FFF;
|
|
39
|
+
Pitch = C64.IObankWR[channelptr + 1] || 1; // avoid division by zero
|
|
40
|
+
Filt = 0x7777 + divTrunc(0x8888, Pitch);
|
|
41
|
+
SID.PrevWavData[channel] =
|
|
42
|
+
(WFarray[oscval] * Filt + SID.PrevWavData[channel] * (COMBINEDWF_FILTMUL_MAX - Filt)) >>
|
|
43
|
+
COMBINEDWF_FILT_FRACTION_SHIFTS; // 16;
|
|
44
|
+
return (SID.PrevWavData[channel] << COMBINEDWF_WAVE_SHIFTS8) >>> 0; // 8;
|
|
45
|
+
}
|
|
46
|
+
// ---------------------------------------------------------------------------
|
|
47
|
+
// cRSID_emulateSID_light (SID_OscWaves.c:37-260)
|
|
48
|
+
// ---------------------------------------------------------------------------
|
|
49
|
+
// WaveFormBits / ControlBits / FilterBits enums (SID_OscWaves.c:38-44)
|
|
50
|
+
const NOISE_BITVAL = 0x80, PULSE_BITVAL = 0x40, SAW_BITVAL = 0x20, TRI_BITVAL = 0x10;
|
|
51
|
+
const PULSAWTRI_VAL = 0x70, PULSAW_VAL = 0x60, PULTRI_VAL = 0x50, SAWTRI_VAL = 0x30;
|
|
52
|
+
const TEST_BITVAL = 0x08, RING_BITVAL = 0x04, SYNC_BITVAL = 0x02 /*, GATE_BITVAL = 0x01*/;
|
|
53
|
+
const OFF3_BITVAL = 0x80;
|
|
54
|
+
// Specs (SID_OscWaves.c:45-73)
|
|
55
|
+
const SID_CHANNEL_SPACING = 7;
|
|
56
|
+
const SID_CHANNEL_COUNT = 3;
|
|
57
|
+
const CHANNEL2_INDEX = 2 * SID_CHANNEL_SPACING;
|
|
58
|
+
const SID_CHANNELS_RANGE = SID_CHANNEL_SPACING * SID_CHANNEL_COUNT;
|
|
59
|
+
const SID_PHASEACCU_RESOLUTION = 24;
|
|
60
|
+
const OSC3_WAVE_RESOLUTION = 8; // bits
|
|
61
|
+
const PHASEACCU_SID__RANGE = 1 << SID_PHASEACCU_RESOLUTION; // 0x1000000, covers 24 bit value-range
|
|
62
|
+
const LRW_CR_CLOCK_FRAC = CRSpecC64.CRSID_CLOCK_FRACTIONAL_BITS;
|
|
63
|
+
const PHASEACCU_RANGE_L = Math.imul(PHASEACCU_SID__RANGE, 1 << LRW_CR_CLOCK_FRAC); // 0x10000000
|
|
64
|
+
const PHASEACCU_MAX_L = PHASEACCU_RANGE_L - 1;
|
|
65
|
+
const PHASEACCU_ANDMASK_L = PHASEACCU_MAX_L;
|
|
66
|
+
const PHASEACCU_MSB_BITVAL_L = Math.imul(PHASEACCU_SID__RANGE >> 1, 1 << LRW_CR_CLOCK_FRAC); // 0x8000000
|
|
67
|
+
const CRSID_WAVE_SHIFTS_L = SID_PHASEACCU_RESOLUTION - CRSID_WAVE_RESOLUTION + LRW_CR_CLOCK_FRAC; // 12
|
|
68
|
+
const CRSID_WAVE_RANGE = 1 << CRSID_WAVE_RESOLUTION;
|
|
69
|
+
const CRSID_WAVE_MAX = CRSID_WAVE_RANGE - 1; // 0xFFFF
|
|
70
|
+
const CRSID_WAVE_MASK = CRSID_WAVE_MAX;
|
|
71
|
+
const CRSID_WAVE_MID = CRSID_WAVE_RANGE / 2;
|
|
72
|
+
const CRSID_WAVE_MIN = 0x0000;
|
|
73
|
+
const SOUNDEMON_DIGI_SEEK_WAVEFORM = 0x01;
|
|
74
|
+
const SOUNDEMON_DIGI_RESOLUTION = 8;
|
|
75
|
+
const SOUNDEMON_DIGI_SHIFTS = CRSID_WAVE_RESOLUTION - SOUNDEMON_DIGI_RESOLUTION;
|
|
76
|
+
const SOUNDEMON_CARRIER_ELIMINATION_SAMPLECOUNT = 2; // 4,
|
|
77
|
+
const SID_NOISE_CLOCK_BITVAL = 0x100000;
|
|
78
|
+
const NOISE_CLOCK_L = Math.imul(SID_NOISE_CLOCK_BITVAL, 1 << LRW_CR_CLOCK_FRAC); // 0x1000000 — value of phaseaccu-bit clocking the Noise-LFSR
|
|
79
|
+
const COMBINEDWF_SAMPLE_SHIFTS_L = SID_PHASEACCU_RESOLUTION - COMBINEDWF_SAMPLE_RESOLUTION + LRW_CR_CLOCK_FRAC; // 16
|
|
80
|
+
const WAVE_OSC3_SHIFTS = CRSID_WAVE_RESOLUTION - OSC3_WAVE_RESOLUTION; // 8
|
|
81
|
+
const STEEPNESS_FRACTION_SHIFTS = 16;
|
|
82
|
+
const STEEPNESS_STEPLIMIT_L = Math.imul(256, 1 << LRW_CR_CLOCK_FRAC); // 4096 — high-pitch waveform anti-aliasing by frequency-dependent wave-edge steepness control
|
|
83
|
+
const SID_ENVELOPE_RESOLUTION = 8 /* bits */;
|
|
84
|
+
const SID_ENVELOPE_MAGNITUDE = 1 << SID_ENVELOPE_RESOLUTION; // 256
|
|
85
|
+
const ENVELOPE_MAGNITUDE_DIV = Math.imul(SID_ENVELOPE_MAGNITUDE, CRAudioLevels.CRSID_WAVGEN_PREDIV); // 256 * 1..16 = 256..4096
|
|
86
|
+
void CRSpecC64;
|
|
87
|
+
/** FilterSwitchVal (SID_OscWaves.c:75). */
|
|
88
|
+
const FilterSwitchVal = new Uint8Array([1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 4]);
|
|
89
|
+
/**
|
|
90
|
+
* cRSID_emulateSID_light (SID_OscWaves.c:37-260) — lightweight (samplerate-
|
|
91
|
+
* paced) oscillator + waveform generation; calls the output stage at the end
|
|
92
|
+
* and returns the SID's master output.
|
|
93
|
+
*
|
|
94
|
+
* C static locals TestBit/Envelope/Steepness/PulsePeak are
|
|
95
|
+
* write-before-read per use — locals here (same semantics).
|
|
96
|
+
*/
|
|
97
|
+
export function cRSID_emulateSID_light(C64, SID) {
|
|
98
|
+
const W = C64.IObankWR;
|
|
99
|
+
const R = C64.IObankRD;
|
|
100
|
+
let TestBit = 0;
|
|
101
|
+
let Envelope = 0;
|
|
102
|
+
let Tmp;
|
|
103
|
+
let Feedback;
|
|
104
|
+
let Utmp = 0;
|
|
105
|
+
let WavGenOut = 0;
|
|
106
|
+
let PW = 0;
|
|
107
|
+
let PhaseAccuStep = 0;
|
|
108
|
+
let MSB = 0;
|
|
109
|
+
let Steepness = 0;
|
|
110
|
+
let PulsePeak = 0;
|
|
111
|
+
SID.NonFiltedSample = 0;
|
|
112
|
+
SID.FilterInputSample = 0;
|
|
113
|
+
const FilterSwitchReso = W[SID.BasePtr + 0x17];
|
|
114
|
+
const VolumeBand = W[SID.BasePtr + 0x18];
|
|
115
|
+
// Waveform generator (phase accumulator and waveform-selector)
|
|
116
|
+
for (let Channel = 0; Channel < SID_CHANNELS_RANGE; Channel += SID_CHANNEL_SPACING) {
|
|
117
|
+
const ChannelPtr = SID.BasePtr + Channel;
|
|
118
|
+
const WF = W[ChannelPtr + 4];
|
|
119
|
+
TestBit = (WF & TEST_BITVAL) !== 0 ? 1 : 0;
|
|
120
|
+
const PhaseAccuIdx = Channel;
|
|
121
|
+
PhaseAccuStep = Math.imul(((W[ChannelPtr + 1] << 8) | W[ChannelPtr + 0]) >>> 0, C64.SampleClockRatio) >>> 0; // SID->cRSID_C64.SampleClockRatio;
|
|
122
|
+
if (TestBit || ((WF & SYNC_BITVAL) !== 0 && SID.SyncSourceMSBrise))
|
|
123
|
+
SID.PhaseAccu[PhaseAccuIdx] = 0;
|
|
124
|
+
else {
|
|
125
|
+
// stepping phase-accumulator (oscillator)
|
|
126
|
+
SID.PhaseAccu[PhaseAccuIdx] += PhaseAccuStep;
|
|
127
|
+
if (SID.PhaseAccu[PhaseAccuIdx] >= PHASEACCU_RANGE_L)
|
|
128
|
+
SID.PhaseAccu[PhaseAccuIdx] -= PHASEACCU_RANGE_L; // 0x10000000
|
|
129
|
+
}
|
|
130
|
+
SID.PhaseAccu[PhaseAccuIdx] &= PHASEACCU_ANDMASK_L; // 0xFFFFFFF;
|
|
131
|
+
MSB = SID.PhaseAccu[PhaseAccuIdx] & PHASEACCU_MSB_BITVAL_L; // 0x8000000;
|
|
132
|
+
SID.SyncSourceMSBrise = MSB > (SID.PrevPhaseAccu[PhaseAccuIdx] & PHASEACCU_MSB_BITVAL_L) ? 1 : 0;
|
|
133
|
+
switch (WF & 0xf0) {
|
|
134
|
+
// switch-case encourages computed-goto compiler-optimization
|
|
135
|
+
case NOISE_BITVAL: {
|
|
136
|
+
// noise waveform
|
|
137
|
+
Tmp = SID.NoiseLFSR[Channel]; // clock LFSR all time if clockrate exceeds observable at given samplerate (last term):
|
|
138
|
+
if ((SID.PhaseAccu[PhaseAccuIdx] & NOISE_CLOCK_L) !== (SID.PrevPhaseAccu[PhaseAccuIdx] & NOISE_CLOCK_L) ||
|
|
139
|
+
PhaseAccuStep >= NOISE_CLOCK_L) {
|
|
140
|
+
Feedback = ((Tmp & 0x400000) ^ ((Tmp & 0x20000) << 5)) !== 0 ? 1 : 0;
|
|
141
|
+
Tmp = Math.imul(Tmp, 2) | (Feedback | TestBit);
|
|
142
|
+
Tmp &= 0x7fffff; // TEST-bit turns all bits in noise LFSR to 1 (on real SID slowly, in approx. 8000 microseconds ~ 300 samples)
|
|
143
|
+
SID.NoiseLFSR[Channel] = Tmp;
|
|
144
|
+
} // we simply zero output when other waveform is mixed with noise. On real SID LFSR continuously gets filled by zero and locks up. ($C1 waveform with pw<8 can keep it for a while.)
|
|
145
|
+
WavGenOut =
|
|
146
|
+
/* (WF & 0x70) ? 0 : */ ((Tmp & 0x100000) >>> 5) |
|
|
147
|
+
(Tmp & 0x40000) >>> 4 |
|
|
148
|
+
(Tmp & 0x4000) >>> 1 |
|
|
149
|
+
((Tmp & 0x800) << 1) |
|
|
150
|
+
((Tmp & 0x200) << 2) |
|
|
151
|
+
((Tmp & 0x20) << 5) |
|
|
152
|
+
((Tmp & 0x04) << 7) |
|
|
153
|
+
((Tmp & 0x01) << 8);
|
|
154
|
+
break;
|
|
155
|
+
}
|
|
156
|
+
case PULSE_BITVAL: {
|
|
157
|
+
// simple pulse
|
|
158
|
+
PW = getPW(C64, ChannelPtr); // PW=0000..FFF0 from SID-register
|
|
159
|
+
Utmp = PhaseAccuStep >>> (CRSID_WAVE_SHIFTS_L + 1);
|
|
160
|
+
if (0 < PW && PW < Utmp)
|
|
161
|
+
PW = Utmp; // Too thin pulsewidth? Correct...
|
|
162
|
+
Utmp = Utmp ^ CRSID_WAVE_MAX;
|
|
163
|
+
if (PW > Utmp)
|
|
164
|
+
PW = Utmp; // Too thin pulsewidth? Correct it to a value representable at the current samplerate
|
|
165
|
+
Utmp = SID.PhaseAccu[PhaseAccuIdx] >>> CRSID_WAVE_SHIFTS_L; // 12;
|
|
166
|
+
// simple pulse, most often used waveform, make it sound as clean as possible (by making it trapezoid)
|
|
167
|
+
Steepness = PhaseAccuStep >= STEEPNESS_STEPLIMIT_L ? divTrunc(PHASEACCU_MAX_L, PhaseAccuStep) : CRSID_WAVE_MAX; // rising/falling-edge steepness (add/sub at samples)
|
|
168
|
+
if (TestBit)
|
|
169
|
+
WavGenOut = CRSID_WAVE_MAX; // 0xFFFF;
|
|
170
|
+
else if (Utmp < PW) {
|
|
171
|
+
// rising edge (interpolation)
|
|
172
|
+
PulsePeak = Math.imul(CRSID_WAVE_MAX - PW, Steepness); // very thin pulses don't make a full swing between 0 and max but make a little spike
|
|
173
|
+
if (PulsePeak > CRSID_WAVE_MAX)
|
|
174
|
+
PulsePeak = CRSID_WAVE_MAX; // but adequately thick trapezoid pulses reach the maximum level
|
|
175
|
+
Tmp = PulsePeak - (PW - Utmp) * Steepness; // draw the slope from the peak
|
|
176
|
+
WavGenOut = Tmp < CRSID_WAVE_MIN ? CRSID_WAVE_MIN : Tmp; // but stop at 0-level
|
|
177
|
+
}
|
|
178
|
+
else {
|
|
179
|
+
// falling edge (interpolation)
|
|
180
|
+
PulsePeak = Math.imul(PW, Steepness); // very thin pulses don't make a full swing between 0 and max but make a little spike
|
|
181
|
+
if (PulsePeak > CRSID_WAVE_MAX)
|
|
182
|
+
PulsePeak = CRSID_WAVE_MAX; // adequately thick trapezoid pulses reach the maximum level
|
|
183
|
+
Tmp = (CRSID_WAVE_MAX - Utmp) * Steepness - PulsePeak; // draw the slope from the peak
|
|
184
|
+
WavGenOut = Tmp >= 0 ? CRSID_WAVE_MAX : Tmp; // but stop at max-level
|
|
185
|
+
}
|
|
186
|
+
break;
|
|
187
|
+
}
|
|
188
|
+
case PULSAWTRI_VAL: {
|
|
189
|
+
// combined pulse (pulse+saw+triangle, waveform nearly identical to tri+saw)
|
|
190
|
+
Utmp = SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_L; // 16;
|
|
191
|
+
WavGenOut =
|
|
192
|
+
Utmp >= getCombinedPW(C64, ChannelPtr) || TestBit
|
|
193
|
+
? combinedWF(C64, SID, CRSID_PulseSawTriangle, Utmp, Channel, ChannelPtr)
|
|
194
|
+
: CRSID_WAVE_MIN; // 0;
|
|
195
|
+
break;
|
|
196
|
+
}
|
|
197
|
+
case PULSAW_VAL: {
|
|
198
|
+
// pulse+saw
|
|
199
|
+
Utmp = SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_L; // 16;
|
|
200
|
+
WavGenOut =
|
|
201
|
+
Utmp >= getCombinedPW(C64, ChannelPtr)
|
|
202
|
+
// || RARELY(TestBit)
|
|
203
|
+
? combinedWF(C64, SID, CRSID_PulseSawtooth, Utmp, Channel, ChannelPtr)
|
|
204
|
+
: CRSID_WAVE_MIN; // 0;
|
|
205
|
+
break;
|
|
206
|
+
}
|
|
207
|
+
case PULTRI_VAL: {
|
|
208
|
+
// pulse+triangle
|
|
209
|
+
Tmp = SID.PhaseAccu[PhaseAccuIdx] ^ ((WF & RING_BITVAL) !== 0 ? SID.RingSourceMSB : 0);
|
|
210
|
+
WavGenOut =
|
|
211
|
+
(SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_L) >= getCombinedPW(C64, ChannelPtr) || TestBit
|
|
212
|
+
? combinedWF(C64, SID, CRSID_PulseTriangle, Tmp >>> COMBINEDWF_SAMPLE_SHIFTS_L, Channel, ChannelPtr)
|
|
213
|
+
: CRSID_WAVE_MIN; // 0;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
case SAWTRI_VAL: {
|
|
217
|
+
// saw+triangle
|
|
218
|
+
WavGenOut = combinedWF(C64, SID, CRSID_SawTriangle, SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_L, Channel, ChannelPtr);
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
case SAW_BITVAL: {
|
|
222
|
+
// sawtooth
|
|
223
|
+
WavGenOut = SID.PhaseAccu[PhaseAccuIdx] >>> CRSID_WAVE_SHIFTS_L; // 12; (this row would be enough for simple but aliased-at-high-pitch saw)
|
|
224
|
+
Steepness = (PhaseAccuStep >>> LRW_CR_CLOCK_FRAC) / 288;
|
|
225
|
+
if (Steepness === 0)
|
|
226
|
+
Steepness = 1; // avoid division by zero in next steps
|
|
227
|
+
WavGenOut += Math.imul(WavGenOut, Steepness) >>> STEEPNESS_FRACTION_SHIFTS; // 1st half (rising edge) of asymmetric triangle-like saw waveform
|
|
228
|
+
if (WavGenOut > CRSID_WAVE_MAX)
|
|
229
|
+
WavGenOut = CRSID_WAVE_MAX - divTrunc((WavGenOut - CRSID_WAVE_RANGE) << STEEPNESS_FRACTION_SHIFTS, Steepness); // 2nd half (falling edge, reciprocal steepness
|
|
230
|
+
break;
|
|
231
|
+
}
|
|
232
|
+
case TRI_BITVAL: {
|
|
233
|
+
// triangle (this waveform has no harsh edges, so it doesn't suffer from strong aliasing at high pitches)
|
|
234
|
+
if (!C64.RealSIDmode || SID.PrevSounDemonDigiWF[Channel] <= 0) {
|
|
235
|
+
// != SOUNDEMON_DIGI_SEEK_WAVEFORM
|
|
236
|
+
Tmp = SID.PhaseAccu[PhaseAccuIdx] ^ ((WF & RING_BITVAL) !== 0 ? SID.RingSourceMSB : 0);
|
|
237
|
+
WavGenOut = (Tmp ^ (Tmp & PHASEACCU_MSB_BITVAL_L ? PHASEACCU_MAX_L : 0)) >>> (CRSID_WAVE_SHIFTS_L - 1); // 11;
|
|
238
|
+
} // SounDemon digi hack: if previous waveform was 01, don't modify output in this round:
|
|
239
|
+
else {
|
|
240
|
+
WavGenOut = SID.PrevWavGenOut[Channel];
|
|
241
|
+
--SID.PrevSounDemonDigiWF[Channel];
|
|
242
|
+
} // (so carrier noise won't be heard due to non 1MHz emulation)
|
|
243
|
+
break;
|
|
244
|
+
}
|
|
245
|
+
case 0x00: {
|
|
246
|
+
// emulate waveform 00 floating wave-DAC (utilized by SounDemon digis)
|
|
247
|
+
// (on real SID waveform00 decays after about 5 seconds, here we just simply keep the value to avoid clicks)
|
|
248
|
+
// (Our jittery 'seeking' waveform=$01 part of SounDemon-digi is substituted directly by frequency-high register's value (as in SwinSID))
|
|
249
|
+
if (C64.RealSIDmode && WF === SOUNDEMON_DIGI_SEEK_WAVEFORM) {
|
|
250
|
+
WavGenOut = Math.imul(W[ChannelPtr + 1], 1 << SOUNDEMON_DIGI_SHIFTS) >>> 0;
|
|
251
|
+
SID.PrevSounDemonDigiWF[Channel] = SOUNDEMON_CARRIER_ELIMINATION_SAMPLECOUNT;
|
|
252
|
+
}
|
|
253
|
+
else
|
|
254
|
+
WavGenOut = SID.PrevWavGenOut[Channel];
|
|
255
|
+
break;
|
|
256
|
+
}
|
|
257
|
+
default:
|
|
258
|
+
WavGenOut = CRSID_WAVE_MIN;
|
|
259
|
+
break; // noise plus pulse/saw/triangle mostly yields silence
|
|
260
|
+
}
|
|
261
|
+
// SID.PrevSounDemonDigiWF[Channel] = WF;
|
|
262
|
+
WavGenOut &= CRSID_WAVE_MASK; // 0xFFFF;
|
|
263
|
+
/* if (WF&0xF0) */ SID.PrevWavGenOut[Channel] = WavGenOut >>> 0; // emulate waveform 00 floating wave-DAC (utilized by SounDemon digis)
|
|
264
|
+
// else WavGenOut = SID.PrevWavGenOut[Channel]; (on real SID waveform00 decays, we just simply keep the value to avoid clicks)
|
|
265
|
+
SID.PrevPhaseAccu[PhaseAccuIdx] = SID.PhaseAccu[PhaseAccuIdx];
|
|
266
|
+
SID.RingSourceMSB = MSB;
|
|
267
|
+
// routing the channel signal to either the filter or the unfiltered
|
|
268
|
+
// master output depending on filter-switch SID-registers
|
|
269
|
+
Envelope = SID.ChipModel === 8580 ? SID.EnvelopeCounter[Channel] : cRSID_ADSR_DAC_6581[SID.EnvelopeCounter[Channel]];
|
|
270
|
+
if (FilterSwitchReso & FilterSwitchVal[Channel]) {
|
|
271
|
+
SID.FilterInputSample += divTrunc((WavGenOut - CRSID_WAVE_MID) * Envelope, ENVELOPE_MAGNITUDE_DIV); // >> 8;
|
|
272
|
+
}
|
|
273
|
+
else if (Channel !== 14 || !(VolumeBand & OFF3_BITVAL)) {
|
|
274
|
+
SID.NonFiltedSample += divTrunc((WavGenOut - CRSID_WAVE_MID) * Envelope, ENVELOPE_MAGNITUDE_DIV); // >> 8;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
// update readable SID1-registers (some SID tunes might use 3rd channel ENV3/OSC3 value as control)
|
|
278
|
+
R[SID.BasePtrRD + 0x1b] = WavGenOut >>> WAVE_OSC3_SHIFTS; // OSC3, ENV3 (some players rely on it, unfortunately even for timing)
|
|
279
|
+
R[SID.BasePtrRD + 0x1c] = SID.EnvelopeCounter[CHANNEL2_INDEX]; // Envelope
|
|
280
|
+
// cRSID_C64.IObankRD[SID->BaseAddress+0x1F] = (cRSID.SelectedSIDmodel==8580); — this doesn't exist in real SID but SID-Wizard code removes comment-marks and uses it as identification workaround
|
|
281
|
+
return cRSID_emulateSIDoutputStage(C64, SID);
|
|
282
|
+
}
|
|
283
|
+
/** C integer division (truncates toward zero; JS `/` is not integer and
|
|
284
|
+
* `Math.floor` rounds down — not the same for negative operands). */
|
|
285
|
+
function divTrunc(a, b) {
|
|
286
|
+
return Math.trunc(a / b);
|
|
287
|
+
}
|
|
288
|
+
// re-export for the output stage (SID_Outputs.c include chain) to keep the
|
|
289
|
+
// same call-graph as C (SID.c includes SID_ADSR.c + SID_OscWaves.c +
|
|
290
|
+
// SID_Outputs.c)
|
|
291
|
+
import { cRSID_emulateSIDoutputStage } from './sidoutputs.js';
|
|
292
|
+
import { cRSID_ADSR_DAC_6581 } from './sidadsr.js';
|
|
293
|
+
// ---------------------------------------------------------------------------
|
|
294
|
+
// HQcombinedWF (SID_OscWaves.c:262-279) + cRSID_emulateHQwaves (…:281-445ish)
|
|
295
|
+
// ---------------------------------------------------------------------------
|
|
296
|
+
/** HQcombinedWF (SID_OscWaves.c:262-279). */
|
|
297
|
+
function HQcombinedWF(C64, SID, WFarray, oscval) {
|
|
298
|
+
void C64;
|
|
299
|
+
// Specs (SID_OscWaves.c:263-271) — same values as the light-variant ones 1:1
|
|
300
|
+
if (SID.ChipModel === 6581 && WFarray !== CRSID_PulseTriangle)
|
|
301
|
+
oscval &= COMBINEDWF_OSC_MSB_OFF_MASK; // 0x7FF;
|
|
302
|
+
return (WFarray[oscval] << COMBINEDWF_WAVE_SHIFTS8) >>> 0; // 8
|
|
303
|
+
}
|
|
304
|
+
// Specs T of cRSID_emulateHQwaves (SID_OscWaves.c:283-310)
|
|
305
|
+
const PHASEACCU_RANGE_H = PHASEACCU_SID__RANGE; // 0x1000000
|
|
306
|
+
const PHASEACCU_MAX_H = PHASEACCU_RANGE_H - 1;
|
|
307
|
+
const PHASEACCU_ANDMASK_H = PHASEACCU_MAX_H;
|
|
308
|
+
const PHASEACCU_MSB_BITVAL_H = PHASEACCU_RANGE_H >>> 1; // 0x800000
|
|
309
|
+
const CRSID_WAVE_SHIFTS_H = SID_PHASEACCU_RESOLUTION - CRSID_WAVE_RESOLUTION;
|
|
310
|
+
const SOUNDEMON_DIGI_SHIFTS_H = SOUNDEMON_DIGI_SHIFTS;
|
|
311
|
+
const SOUNDEMON_CARRIER_ELIMINATION_CYCLECOUNT = 24;
|
|
312
|
+
const COMBINEDWF_SAMPLE_SHIFTS_H = SID_PHASEACCU_RESOLUTION - COMBINEDWF_SAMPLE_RESOLUTION;
|
|
313
|
+
const NOISE_CLOCK_H = 0x100000;
|
|
314
|
+
void NOISE_CLOCK_H;
|
|
315
|
+
const _unused_h = [CRSID_WAVE_SHIFTS_H, SOUNDEMON_DIGI_SHIFTS_H, COMBINEDWF_SAMPLE_SHIFTS_H];
|
|
316
|
+
void _unused_h;
|
|
317
|
+
/** cRSID_emulateHQwaves (SID_OscWaves.c:281-445).
|
|
318
|
+
* C static locals TestBit/Envelope/SIDwavOutput are write-before-read per
|
|
319
|
+
* call — SIDwavOutput is returned, TestBit/Envelope are locals here. */
|
|
320
|
+
export function cRSID_emulateHQwaves(C64, SID, cycles) {
|
|
321
|
+
const W = C64.IObankWR;
|
|
322
|
+
const R = C64.IObankRD;
|
|
323
|
+
let TestBit = 0;
|
|
324
|
+
let Envelope = 0;
|
|
325
|
+
let Tmp;
|
|
326
|
+
let Feedback;
|
|
327
|
+
let Utmp = 0;
|
|
328
|
+
let PW = 0;
|
|
329
|
+
void PW;
|
|
330
|
+
let WavGenOut = 0;
|
|
331
|
+
let PhaseAccuStep = 0;
|
|
332
|
+
let MSB = 0;
|
|
333
|
+
const SIDwavOutput = { FilterInput: 0, NonFilted: 0 };
|
|
334
|
+
void WAVE_OSC3_SHIFTS;
|
|
335
|
+
const FilterSwitchReso = W[SID.BasePtr + 0x17];
|
|
336
|
+
const VolumeBand = W[SID.BasePtr + 0x18];
|
|
337
|
+
for (let Channel = 0; Channel < SID_CHANNELS_RANGE; Channel += SID_CHANNEL_SPACING) {
|
|
338
|
+
const ChannelPtr = SID.BasePtr + Channel;
|
|
339
|
+
const WF = W[ChannelPtr + 4];
|
|
340
|
+
TestBit = (WF & TEST_BITVAL) !== 0 ? 1 : 0;
|
|
341
|
+
const PhaseAccuIdx = Channel;
|
|
342
|
+
PhaseAccuStep = Math.imul(((W[ChannelPtr + 1] << 8) | W[ChannelPtr + 0]) >>> 0, cycles) >>> 0; // oscillator pitch
|
|
343
|
+
if (TestBit || ((WF & SYNC_BITVAL) !== 0 && SID.SyncSourceMSBrise))
|
|
344
|
+
SID.PhaseAccu[PhaseAccuIdx] = 0; // oscillator-sync
|
|
345
|
+
else {
|
|
346
|
+
// stepping phase-accumulator (oscillator)
|
|
347
|
+
SID.PhaseAccu[PhaseAccuIdx] += PhaseAccuStep;
|
|
348
|
+
if (SID.PhaseAccu[PhaseAccuIdx] >= PHASEACCU_RANGE_H)
|
|
349
|
+
SID.PhaseAccu[PhaseAccuIdx] -= PHASEACCU_RANGE_H; // 0x1000000;
|
|
350
|
+
}
|
|
351
|
+
SID.PhaseAccu[PhaseAccuIdx] &= PHASEACCU_ANDMASK_H;
|
|
352
|
+
MSB = SID.PhaseAccu[PhaseAccuIdx] & PHASEACCU_MSB_BITVAL_H;
|
|
353
|
+
SID.SyncSourceMSBrise = MSB > (SID.PrevPhaseAccu[PhaseAccuIdx] & PHASEACCU_MSB_BITVAL_H) ? 1 : 0;
|
|
354
|
+
switch (WF & 0xf0) {
|
|
355
|
+
case NOISE_BITVAL: {
|
|
356
|
+
// noise waveform
|
|
357
|
+
Tmp = SID.NoiseLFSR[Channel]; // clock LFSR all time if clockrate exceeds observable at given samplerate (last term):
|
|
358
|
+
if ((SID.PhaseAccu[PhaseAccuIdx] & NOISE_CLOCK_H) !== (SID.PrevPhaseAccu[PhaseAccuIdx] & NOISE_CLOCK_H)) {
|
|
359
|
+
Feedback = ((Tmp & 0x400000) ^ ((Tmp & 0x20000) << 5)) !== 0 ? 1 : 0;
|
|
360
|
+
Tmp = Math.imul(Tmp, 2) | (Feedback | TestBit);
|
|
361
|
+
Tmp &= 0x7fffff; // TEST-bit turns all bits in noise LFSR to 1 (on real SID slowly, in approx. 8000 microseconds ~ 300 samples)
|
|
362
|
+
SID.NoiseLFSR[Channel] = Tmp;
|
|
363
|
+
} // we simply zero output below when other waveform is mixed with noise. On real SID LFSR continuously gets filled by zero and locks up. ($C1 waveform with pw<8 can keep it for a while.)
|
|
364
|
+
SID.PrevWavGenOut[Channel] =
|
|
365
|
+
/* (WF & 0x70) ? 0 : */ ((Tmp & 0x100000) >>> 5) |
|
|
366
|
+
(Tmp & 0x40000) >>> 4 |
|
|
367
|
+
(Tmp & 0x4000) >>> 1 |
|
|
368
|
+
((Tmp & 0x800) << 1) |
|
|
369
|
+
((Tmp & 0x200) << 2) |
|
|
370
|
+
((Tmp & 0x20) << 5) |
|
|
371
|
+
((Tmp & 0x04) << 7) |
|
|
372
|
+
((Tmp & 0x01) << 8);
|
|
373
|
+
break;
|
|
374
|
+
}
|
|
375
|
+
case PULSAWTRI_VAL: {
|
|
376
|
+
// pulse+saw+triangle (waveform nearly identical to tri+saw)
|
|
377
|
+
Utmp = SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_H; // 12;
|
|
378
|
+
SID.PrevWavGenOut[Channel] =
|
|
379
|
+
Utmp >= getCombinedPW(C64, ChannelPtr) || TestBit
|
|
380
|
+
? HQcombinedWF(C64, SID, CRSID_PulseSawTriangle, Utmp)
|
|
381
|
+
: CRSID_WAVE_MIN; // 0;
|
|
382
|
+
break;
|
|
383
|
+
}
|
|
384
|
+
case PULSAW_VAL: {
|
|
385
|
+
// pulse+saw
|
|
386
|
+
Utmp = SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_H; // 12;
|
|
387
|
+
SID.PrevWavGenOut[Channel] =
|
|
388
|
+
Utmp >= getCombinedPW(C64, ChannelPtr) || TestBit
|
|
389
|
+
? HQcombinedWF(C64, SID, CRSID_PulseSawtooth, Utmp)
|
|
390
|
+
: CRSID_WAVE_MIN; // 0;
|
|
391
|
+
break;
|
|
392
|
+
}
|
|
393
|
+
case PULTRI_VAL: {
|
|
394
|
+
// pulse+triangle
|
|
395
|
+
Tmp = SID.PhaseAccu[PhaseAccuIdx] ^ ((WF & RING_BITVAL) !== 0 ? SID.RingSourceMSB : 0);
|
|
396
|
+
SID.PrevWavGenOut[Channel] =
|
|
397
|
+
(SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_H) >= getCombinedPW(C64, ChannelPtr) || TestBit
|
|
398
|
+
? HQcombinedWF(C64, SID, CRSID_PulseTriangle, Tmp >>> COMBINEDWF_SAMPLE_SHIFTS_H)
|
|
399
|
+
: CRSID_WAVE_MIN; // 0;
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
402
|
+
case PULSE_BITVAL: {
|
|
403
|
+
// simple pulse or pulse+combined
|
|
404
|
+
SID.PrevWavGenOut[Channel] =
|
|
405
|
+
(SID.PhaseAccu[PhaseAccuIdx] >>> CRSID_WAVE_SHIFTS_H) >= getPW(C64, ChannelPtr) || TestBit
|
|
406
|
+
? CRSID_WAVE_MAX
|
|
407
|
+
: CRSID_WAVE_MIN; // 0xFFFF : 0;
|
|
408
|
+
break;
|
|
409
|
+
}
|
|
410
|
+
case SAWTRI_VAL: {
|
|
411
|
+
// saw+triangle
|
|
412
|
+
SID.PrevWavGenOut[Channel] = HQcombinedWF(C64, SID, CRSID_SawTriangle, SID.PhaseAccu[PhaseAccuIdx] >>> COMBINEDWF_SAMPLE_SHIFTS_H);
|
|
413
|
+
break;
|
|
414
|
+
}
|
|
415
|
+
case SAW_BITVAL: {
|
|
416
|
+
// sawtooth
|
|
417
|
+
SID.PrevWavGenOut[Channel] = SID.PhaseAccu[PhaseAccuIdx] >>> CRSID_WAVE_SHIFTS_H; // 8;
|
|
418
|
+
// if (WF & TRI_BITVAL) WavGenOut = HQcombinedWF( SID, cRSID_SawTriangle, WavGenOut ); //saw+triangle
|
|
419
|
+
break;
|
|
420
|
+
}
|
|
421
|
+
case TRI_BITVAL: {
|
|
422
|
+
// triangle (this waveform has no harsh edges, so it doesn't suffer from strong aliasing at high pitches)
|
|
423
|
+
if (!C64.RealSIDmode || SID.PrevSounDemonDigiWF[Channel] <= 0) {
|
|
424
|
+
// != SOUNDEMON_DIGI_SEEK_WAVEFORM
|
|
425
|
+
Tmp = SID.PhaseAccu[PhaseAccuIdx] ^ ((WF & RING_BITVAL) !== 0 ? SID.RingSourceMSB : 0);
|
|
426
|
+
SID.PrevWavGenOut[Channel] =
|
|
427
|
+
(((Tmp ^ (Tmp & PHASEACCU_MSB_BITVAL_H ? PHASEACCU_MAX_H : 0)) >>> (CRSID_WAVE_SHIFTS_H - 1)) & CRSID_WAVE_MASK) >>> 0; // 0xFFFF;
|
|
428
|
+
} // SounDemon digi hack: if previous waveform was 01, don't modify output in these rounds:
|
|
429
|
+
else {
|
|
430
|
+
SID.PrevSounDemonDigiWF[Channel] -= cycles; // (so carrier noise won't be heard in Fanta_in_Space.sid/etc due to non-1MHz emulation)
|
|
431
|
+
}
|
|
432
|
+
break;
|
|
433
|
+
}
|
|
434
|
+
case 0x00: {
|
|
435
|
+
// emulate waveform 00 floating wave-DAC (utilized by SounDemon digis)
|
|
436
|
+
// (on real SID waveform00 decays, we just simply keep the value to avoid clicks)
|
|
437
|
+
// (Our jittery 'seeking' waveform=$01 part of SounDemon-digi is substituted directly by frequency-high register's value (as in SwinSID))
|
|
438
|
+
if (C64.RealSIDmode && WF === SOUNDEMON_DIGI_SEEK_WAVEFORM) {
|
|
439
|
+
SID.PrevWavGenOut[Channel] = Math.imul(W[ChannelPtr + 1], 1 << SOUNDEMON_DIGI_SHIFTS_H) >>> 0;
|
|
440
|
+
SID.PrevSounDemonDigiWF[Channel] = SOUNDEMON_CARRIER_ELIMINATION_CYCLECOUNT;
|
|
441
|
+
}
|
|
442
|
+
break;
|
|
443
|
+
}
|
|
444
|
+
default:
|
|
445
|
+
SID.PrevWavGenOut[Channel] = CRSID_WAVE_MIN; // noise with pulse/saw/triangle mostly yields silence
|
|
446
|
+
break;
|
|
447
|
+
}
|
|
448
|
+
WavGenOut = SID.PrevWavGenOut[Channel];
|
|
449
|
+
SID.PrevPhaseAccu[PhaseAccuIdx] = SID.PhaseAccu[PhaseAccuIdx];
|
|
450
|
+
SID.RingSourceMSB = MSB;
|
|
451
|
+
// routing the channel signal to either the filter or the unfiltered
|
|
452
|
+
// master output depending on filter-switch SID-registers
|
|
453
|
+
Envelope = SID.ChipModel === 8580 ? SID.EnvelopeCounter[Channel] : cRSID_ADSR_DAC_6581[SID.EnvelopeCounter[Channel]];
|
|
454
|
+
if (FilterSwitchReso & FilterSwitchVal[Channel]) {
|
|
455
|
+
SIDwavOutput.FilterInput += divTrunc((WavGenOut - CRSID_WAVE_MID) * Envelope, ENVELOPE_MAGNITUDE_DIV); // >> 8;
|
|
456
|
+
}
|
|
457
|
+
else if (Channel !== 14 || !(VolumeBand & OFF3_BITVAL)) {
|
|
458
|
+
SIDwavOutput.NonFilted += divTrunc((WavGenOut - CRSID_WAVE_MID) * Envelope, ENVELOPE_MAGNITUDE_DIV); // >> 8;
|
|
459
|
+
}
|
|
460
|
+
}
|
|
461
|
+
// update readable SID1-registers (some SID tunes might use 3rd channel ENV3/OSC3 value as control)
|
|
462
|
+
R[SID.BasePtrRD + 0x1b] = WavGenOut >>> WAVE_OSC3_SHIFTS; // OSC3, ENV3 (some players rely on it, unfortunately even for timing)
|
|
463
|
+
R[SID.BasePtrRD + 0x1c] = SID.EnvelopeCounter[CHANNEL2_INDEX]; // Envelope
|
|
464
|
+
// cRSID_C64.IObankRD[SID->BaseAddress+0x1F] = (cRSID.SelectedSIDmodel==8580); — this doesn't exist in real SID but SID-Wizard code removes comment-marks and uses it as identification workaround
|
|
465
|
+
// if (filter) {
|
|
466
|
+
// cRSID_emulateHQresampledSIDfilter( SID );
|
|
467
|
+
// SIDwavOutput.Mix = (SIDwavOutput.NonFilted + FilterOutput) * (VolumeBand & 0xF);
|
|
468
|
+
// }
|
|
469
|
+
return SIDwavOutput; // NonFilted; //+FilterInput; //WavGenOut; //(*PhaseAccuPtr)>>8;
|
|
470
|
+
}
|
|
471
|
+
// The `cRSID_C64` import is used by C's static function-scope emulations via
|
|
472
|
+
// the file-global object; the TS port passes C64 explicitly everywhere — the
|
|
473
|
+
// import is kept for the (rare) places that read the global in parity notes.
|
|
474
|
+
void cRSID_C64;
|
|
475
|
+
//# sourceMappingURL=sidoscwaves.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidoscwaves.js","sourceRoot":"","sources":["../src/sidoscwaves.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { CRC64instance, CRSIDinstance, CRSIDwavOutput } from './c64types.js';
|
|
2
|
+
/** cRSID_emulateSIDoutputStage (SID_Outputs.c:23-101) — filter + output-
|
|
3
|
+
* mixing (main-volume / attenuator) stage. */
|
|
4
|
+
export declare function cRSID_emulateSIDoutputStage(C64: CRC64instance, SID: CRSIDinstance): number;
|
|
5
|
+
/** cRSID_precalculateHQoutputParameters (SID_Outputs.c:103-157) — called by
|
|
6
|
+
* resampler at samplerate-pace. */
|
|
7
|
+
export declare function cRSID_precalculateHQoutputParameters(C64: CRC64instance, SID: CRSIDinstance): void;
|
|
8
|
+
/** cRSID_emulateHQresampledSIDoutputStage (SID_Outputs.c:159-206) — called by
|
|
9
|
+
* resampler at oversample-rate. */
|
|
10
|
+
export declare function cRSID_emulateHQresampledSIDoutputStage(C64: CRC64instance, SID: CRSIDinstance, waves: CRSIDwavOutput): number;
|
|
11
|
+
/** cRSID_emulateHQresampledSIDdigi (SID_Outputs.c:208-260) — called by
|
|
12
|
+
* resampler at samplerate-pace, only digis. */
|
|
13
|
+
export declare function cRSID_emulateHQresampledSIDdigi(C64: CRC64instance, SID: CRSIDinstance, signal: {
|
|
14
|
+
L: number;
|
|
15
|
+
R: number;
|
|
16
|
+
}): void;
|
|
17
|
+
//# sourceMappingURL=sidoutputs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidoutputs.d.ts","sourceRoot":"","sources":["../src/sidoutputs.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAgClF;+CAC+C;AAC/C,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,MAAM,CAmE1F;AAED;oCACoC;AACpC,wBAAgB,oCAAoC,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,GAAG,IAAI,CA8BjG;AAED;oCACoC;AACpC,wBAAgB,sCAAsC,CACpD,GAAG,EAAE,aAAa,EAClB,GAAG,EAAE,aAAa,EAClB,KAAK,EAAE,cAAc,GACpB,MAAM,CA8BR;AAED;gDACgD;AAChD,wBAAgB,+BAA+B,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW9H"}
|