@audiofab-io/fv1-core 0.2.3 → 0.4.0
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/blocks/ATL_DEVELOPER_REFERENCE.md +156 -0
- package/blocks/control/constant.atl +36 -0
- package/blocks/control/entropy_lfo.atl +74 -0
- package/blocks/control/envelope.atl +121 -0
- package/blocks/control/invert.atl +33 -0
- package/blocks/control/pot.atl +150 -0
- package/blocks/control/power.atl +77 -0
- package/blocks/control/ramp_lfo.atl +122 -0
- package/blocks/control/scale_offset.atl +84 -0
- package/blocks/control/sincos_lfo.atl +126 -0
- package/blocks/control/smoother.atl +48 -0
- package/blocks/control/tremolizer.atl +55 -0
- package/blocks/effects/delay/micro_stutter.atl +77 -0
- package/blocks/effects/delay/mn3011.atl +281 -0
- package/blocks/effects/delay/simple_delay.atl +96 -0
- package/blocks/effects/delay/triple_tap_delay.atl +176 -0
- package/blocks/effects/lo-fi/bit_mangler.atl +74 -0
- package/blocks/effects/lo-fi/chiptune.atl +311 -0
- package/blocks/effects/lo-fi/tape_degrade.atl +181 -0
- package/blocks/effects/modulation/chorus.atl +141 -0
- package/blocks/effects/modulation/chorus_4voice.atl +188 -0
- package/blocks/effects/modulation/flanger.atl +184 -0
- package/blocks/effects/modulation/guitar_synth.atl +350 -0
- package/blocks/effects/modulation/harmonic_trem.atl +129 -0
- package/blocks/effects/modulation/organ_synth.atl +326 -0
- package/blocks/effects/modulation/phaser.atl +300 -0
- package/blocks/effects/pitch/octave_up_down.atl +80 -0
- package/blocks/effects/pitch/pitch_offset.atl +149 -0
- package/blocks/effects/pitch/pitch_offset_dual.atl +197 -0
- package/blocks/effects/pitch/pitch_shift.atl +115 -0
- package/blocks/effects/pitch/sub_octave.atl +100 -0
- package/blocks/effects/reverb/ducking_reverb.atl +145 -0
- package/blocks/effects/reverb/min_reverb.atl +132 -0
- package/blocks/effects/reverb/plate_reverb.atl +344 -0
- package/blocks/effects/reverb/room_reverb.atl +293 -0
- package/blocks/effects/reverb/smear.atl +90 -0
- package/blocks/effects/reverb/spring_reverb.atl +353 -0
- package/blocks/filter/1p_high_pass.atl +63 -0
- package/blocks/filter/1p_low_pass.atl +59 -0
- package/blocks/filter/auto_wah.atl +207 -0
- package/blocks/filter/bbd_loss.atl +79 -0
- package/blocks/filter/shelving_high_pass.atl +76 -0
- package/blocks/filter/shelving_low_pass.atl +76 -0
- package/blocks/filter/svf_2p.atl +116 -0
- package/blocks/gain_mix/crossfade.atl +93 -0
- package/blocks/gain_mix/crossfade2.atl +86 -0
- package/blocks/gain_mix/crossfade3.atl +71 -0
- package/blocks/gain_mix/gainboost.atl +54 -0
- package/blocks/gain_mix/mixer2.atl +76 -0
- package/blocks/gain_mix/mixer3.atl +109 -0
- package/blocks/gain_mix/mixer4.atl +152 -0
- package/blocks/gain_mix/volume.atl +51 -0
- package/blocks/io/adc.atl +53 -0
- package/blocks/io/dac.atl +61 -0
- package/blocks/other/stickynote.atl +24 -0
- package/blocks/other/tone_gen_adjustable.atl +137 -0
- package/blocks/other/tone_gen_fixed.atl +109 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts +13 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.js +44 -0
- package/dist/blockDiagram/blocks/BlockDirectoryLoader.js.map +1 -0
- package/dist/blockDiagram/blocks/BlockRegistry.d.ts +48 -0
- package/dist/blockDiagram/blocks/BlockRegistry.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/BlockRegistry.js +109 -0
- package/dist/blockDiagram/blocks/BlockRegistry.js.map +1 -0
- package/dist/blockDiagram/blocks/TemplateBlock.d.ts +20 -0
- package/dist/blockDiagram/blocks/TemplateBlock.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/TemplateBlock.js +82 -0
- package/dist/blockDiagram/blocks/TemplateBlock.js.map +1 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.d.ts +248 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.d.ts.map +1 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.js +402 -0
- package/dist/blockDiagram/blocks/base/BaseBlock.js.map +1 -0
- package/dist/blockDiagram/builtinBlocks.d.ts +9 -0
- package/dist/blockDiagram/builtinBlocks.d.ts.map +1 -0
- package/dist/blockDiagram/builtinBlocks.js +4912 -0
- package/dist/blockDiagram/builtinBlocks.js.map +1 -0
- package/dist/blockDiagram/compiler/BlockTemplate.d.ts +37 -0
- package/dist/blockDiagram/compiler/BlockTemplate.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/BlockTemplate.js +860 -0
- package/dist/blockDiagram/compiler/BlockTemplate.js.map +1 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.d.ts +75 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.js +443 -0
- package/dist/blockDiagram/compiler/CodeOptimizer.js.map +1 -0
- package/dist/blockDiagram/compiler/GraphCompiler.d.ts +63 -0
- package/dist/blockDiagram/compiler/GraphCompiler.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/GraphCompiler.js +656 -0
- package/dist/blockDiagram/compiler/GraphCompiler.js.map +1 -0
- package/dist/blockDiagram/compiler/TopologicalSort.d.ts +63 -0
- package/dist/blockDiagram/compiler/TopologicalSort.d.ts.map +1 -0
- package/dist/blockDiagram/compiler/TopologicalSort.js +268 -0
- package/dist/blockDiagram/compiler/TopologicalSort.js.map +1 -0
- package/dist/blockDiagram/index.d.ts +30 -0
- package/dist/blockDiagram/index.d.ts.map +1 -0
- package/dist/blockDiagram/index.js +29 -0
- package/dist/blockDiagram/index.js.map +1 -0
- package/dist/blockDiagram/types/Block.d.ts +178 -0
- package/dist/blockDiagram/types/Block.d.ts.map +1 -0
- package/dist/blockDiagram/types/Block.js +5 -0
- package/dist/blockDiagram/types/Block.js.map +1 -0
- package/dist/blockDiagram/types/CodeGenContext.d.ts +235 -0
- package/dist/blockDiagram/types/CodeGenContext.d.ts.map +1 -0
- package/dist/blockDiagram/types/CodeGenContext.js +554 -0
- package/dist/blockDiagram/types/CodeGenContext.js.map +1 -0
- package/dist/blockDiagram/types/Connection.d.ts +17 -0
- package/dist/blockDiagram/types/Connection.d.ts.map +1 -0
- package/dist/blockDiagram/types/Connection.js +5 -0
- package/dist/blockDiagram/types/Connection.js.map +1 -0
- package/dist/blockDiagram/types/Graph.d.ts +28 -0
- package/dist/blockDiagram/types/Graph.d.ts.map +1 -0
- package/dist/blockDiagram/types/Graph.js +24 -0
- package/dist/blockDiagram/types/Graph.js.map +1 -0
- package/dist/blockDiagram/types/IR.d.ts +79 -0
- package/dist/blockDiagram/types/IR.d.ts.map +1 -0
- package/dist/blockDiagram/types/IR.js +6 -0
- package/dist/blockDiagram/types/IR.js.map +1 -0
- package/dist/blockDiagram/utils/SpinCADConverter.d.ts +17 -0
- package/dist/blockDiagram/utils/SpinCADConverter.d.ts.map +1 -0
- package/dist/blockDiagram/utils/SpinCADConverter.js +307 -0
- package/dist/blockDiagram/utils/SpinCADConverter.js.map +1 -0
- package/dist/effect/compileEffect.d.ts +51 -0
- package/dist/effect/compileEffect.d.ts.map +1 -0
- package/dist/effect/compileEffect.js +133 -0
- package/dist/effect/compileEffect.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +17 -5
|
@@ -0,0 +1,554 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Code generation context implementation
|
|
3
|
+
*/
|
|
4
|
+
export class CodeGenerationContext {
|
|
5
|
+
constructor(graph, options) {
|
|
6
|
+
this.registerAllocations = [];
|
|
7
|
+
this.memoryAllocations = [];
|
|
8
|
+
this.equDeclarations = [];
|
|
9
|
+
this.constantMap = new Map(); // Dynamic map of value -> EQU name
|
|
10
|
+
this.nextRegister = 0; // Allocate permanent registers from REG0 upward
|
|
11
|
+
this.nextScratchRegister = 31; // Allocate scratch registers from REG31 downward
|
|
12
|
+
this.nextMemoryAddress = 0;
|
|
13
|
+
this.currentBlockId = null;
|
|
14
|
+
this.blockShortIdMap = new Map();
|
|
15
|
+
this.nextShortId = 1;
|
|
16
|
+
this.blockVariables = new Map();
|
|
17
|
+
// Code sections
|
|
18
|
+
this.headerComments = []; // User comments from sticky notes
|
|
19
|
+
this.initCode = []; // EQU, MEM declarations, SKP logic
|
|
20
|
+
this.inputCode = []; // ADC reads, POT reads
|
|
21
|
+
this.mainCode = []; // Main processing logic
|
|
22
|
+
this.outputCode = []; // DAC writes
|
|
23
|
+
this.flattenedCode = []; // Aggressive optimization flattened buffer
|
|
24
|
+
this.irNodes = []; // Semantic IR nodes
|
|
25
|
+
this.flattenMode = false;
|
|
26
|
+
// Error tracking
|
|
27
|
+
this.compilationErrors = [];
|
|
28
|
+
// Set of EQU names pushed to IR header section (decoupled from equDeclarations)
|
|
29
|
+
this.headerEquSet = new Set();
|
|
30
|
+
this.graph = graph;
|
|
31
|
+
this.maxMemory = options?.delaySize ?? 32768;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Get the current block ID being processed
|
|
35
|
+
*/
|
|
36
|
+
getCurrentBlock() {
|
|
37
|
+
return this.currentBlockId;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Set the current block ID
|
|
41
|
+
being processed
|
|
42
|
+
*/
|
|
43
|
+
setCurrentBlock(blockId) {
|
|
44
|
+
this.currentBlockId = blockId;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Push comments to the header section
|
|
48
|
+
* For documentation and notes from sticky note blocks
|
|
49
|
+
*/
|
|
50
|
+
pushHeaderComment(...lines) {
|
|
51
|
+
this.headerComments.push(...lines);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Report an error that halts generation and alerts the user
|
|
55
|
+
*/
|
|
56
|
+
addError(message) {
|
|
57
|
+
if (this.currentBlockId) {
|
|
58
|
+
const shortId = this.getShortId(this.currentBlockId);
|
|
59
|
+
this.compilationErrors.push(`Block [${shortId}]: ${message}`);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
this.compilationErrors.push(message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Return all collected errors during AST template evaluation
|
|
67
|
+
*/
|
|
68
|
+
getErrors() {
|
|
69
|
+
return this.compilationErrors;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Set flatten mode for aggressive optimization
|
|
73
|
+
*/
|
|
74
|
+
setFlattenMode(enabled) {
|
|
75
|
+
this.flattenMode = enabled;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Check if flatten mode is enabled
|
|
79
|
+
*/
|
|
80
|
+
isFlattenMode() {
|
|
81
|
+
return this.flattenMode;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Push code to the initialization section
|
|
85
|
+
* For EQU/MEM declarations and SKP logic
|
|
86
|
+
*/
|
|
87
|
+
pushInitCode(...lines) {
|
|
88
|
+
this.initCode.push(...lines);
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Push code to the input section
|
|
92
|
+
* For ADC reads and POT reads
|
|
93
|
+
*/
|
|
94
|
+
pushInputCode(...lines) {
|
|
95
|
+
if (this.flattenMode) {
|
|
96
|
+
this.flattenedCode.push(...lines);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
this.inputCode.push(...lines);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Push code to the main code section
|
|
104
|
+
* For main processing logic
|
|
105
|
+
*/
|
|
106
|
+
pushMainCode(...lines) {
|
|
107
|
+
if (this.flattenMode) {
|
|
108
|
+
this.flattenedCode.push(...lines);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
this.mainCode.push(...lines);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Push code to the output section
|
|
116
|
+
* For DAC writes
|
|
117
|
+
*/
|
|
118
|
+
pushOutputCode(...lines) {
|
|
119
|
+
if (this.flattenMode) {
|
|
120
|
+
this.flattenedCode.push(...lines);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
this.outputCode.push(...lines);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Get header comments (from sticky notes)
|
|
128
|
+
*/
|
|
129
|
+
getHeaderComments() {
|
|
130
|
+
return [...this.headerComments];
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get all code sections
|
|
134
|
+
* Also generates EQU and MEM declarations at the beginning of init section
|
|
135
|
+
*/
|
|
136
|
+
getCodeSections() {
|
|
137
|
+
const init = [];
|
|
138
|
+
// Add EQU declarations for constants
|
|
139
|
+
const equDecls = this.getEquDeclarations();
|
|
140
|
+
if (equDecls.length > 0) {
|
|
141
|
+
init.push('; Constants');
|
|
142
|
+
for (const equ of equDecls) {
|
|
143
|
+
init.push(`equ\t${equ.name}\t${equ.value}`);
|
|
144
|
+
}
|
|
145
|
+
init.push('');
|
|
146
|
+
}
|
|
147
|
+
// Add EQU declarations for register aliases
|
|
148
|
+
const aliases = this.getRegisterAliases();
|
|
149
|
+
if (aliases.length > 0) {
|
|
150
|
+
init.push('; Register Aliases');
|
|
151
|
+
for (const alias of aliases) {
|
|
152
|
+
init.push(`equ\t${alias.alias}\t${alias.register}`);
|
|
153
|
+
}
|
|
154
|
+
init.push('');
|
|
155
|
+
}
|
|
156
|
+
// Add MEM declarations
|
|
157
|
+
const memBlocks = this.getMemoryBlocks();
|
|
158
|
+
if (memBlocks.length > 0) {
|
|
159
|
+
init.push('; Memory Allocations');
|
|
160
|
+
for (const mem of memBlocks) {
|
|
161
|
+
init.push(`mem\t${mem.name}\t${mem.size}`);
|
|
162
|
+
}
|
|
163
|
+
init.push('');
|
|
164
|
+
}
|
|
165
|
+
// Add any custom init code from blocks
|
|
166
|
+
if (this.initCode.length > 0) {
|
|
167
|
+
init.push(...this.initCode);
|
|
168
|
+
}
|
|
169
|
+
return {
|
|
170
|
+
init,
|
|
171
|
+
input: [...this.inputCode],
|
|
172
|
+
main: this.flattenMode ? [...this.flattenedCode] : [...this.mainCode],
|
|
173
|
+
output: [...this.outputCode]
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Check if an output port is connected to anything
|
|
178
|
+
* Used to skip generating code for unused outputs (optimization)
|
|
179
|
+
*/
|
|
180
|
+
isOutputConnected(blockIdOrType, portId) {
|
|
181
|
+
// If blockIdOrType looks like a type (contains '.'), use current block ID
|
|
182
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
183
|
+
// Check if any connection uses this output
|
|
184
|
+
return this.graph.connections.some(conn => conn.from.blockId === blockId && conn.from.portId === portId);
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* Get the register that feeds a block's input port
|
|
188
|
+
* Returns null if input is not connected (for optional inputs like CV)
|
|
189
|
+
*/
|
|
190
|
+
getInputRegister(blockIdOrType, portId) {
|
|
191
|
+
// If blockIdOrType looks like a type (contains '.'), use current block ID
|
|
192
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
193
|
+
// Find the connection feeding this input
|
|
194
|
+
const connection = this.graph.connections.find(conn => conn.to.blockId === blockId && conn.to.portId === portId);
|
|
195
|
+
if (!connection) {
|
|
196
|
+
// No connection - this is OK for optional inputs
|
|
197
|
+
return null;
|
|
198
|
+
}
|
|
199
|
+
// Find the register allocated to the source output
|
|
200
|
+
const allocation = this.registerAllocations.find(alloc => alloc.blockId === connection.from.blockId &&
|
|
201
|
+
alloc.portId === connection.from.portId);
|
|
202
|
+
if (!allocation) {
|
|
203
|
+
throw new Error(`No register allocated for ${connection.from.blockId}.${connection.from.portId}`);
|
|
204
|
+
}
|
|
205
|
+
// Return the alias (symbolic name) instead of raw register name
|
|
206
|
+
return allocation.alias;
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Check if an input port is connected to a zero-bypass pot
|
|
210
|
+
*/
|
|
211
|
+
isInputZeroBypassed(blockIdOrType, portId) {
|
|
212
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
213
|
+
// Find the connection feeding this input
|
|
214
|
+
const connection = this.graph.connections.find(conn => conn.to.blockId === blockId && conn.to.portId === portId);
|
|
215
|
+
if (!connection) {
|
|
216
|
+
return false;
|
|
217
|
+
}
|
|
218
|
+
// Check the source block
|
|
219
|
+
const sourceBlock = this.graph.blocks.find(b => b.id === connection.from.blockId);
|
|
220
|
+
if (sourceBlock && sourceBlock.type === 'input.pot') {
|
|
221
|
+
return sourceBlock.parameters['ignoreIfZero'] === true;
|
|
222
|
+
}
|
|
223
|
+
return false;
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Get the zeroValue from a connected zero-bypass pot
|
|
227
|
+
* Returns 0 if not connected to a zero-bypass pot
|
|
228
|
+
*/
|
|
229
|
+
getInputZeroValue(blockIdOrType, portId) {
|
|
230
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
231
|
+
const connection = this.graph.connections.find(conn => conn.to.blockId === blockId && conn.to.portId === portId);
|
|
232
|
+
if (!connection) {
|
|
233
|
+
return 0;
|
|
234
|
+
}
|
|
235
|
+
const sourceBlock = this.graph.blocks.find(b => b.id === connection.from.blockId);
|
|
236
|
+
if (sourceBlock && sourceBlock.type === 'input.pot' && sourceBlock.parameters['ignoreIfZero'] === true) {
|
|
237
|
+
return sourceBlock.parameters['zeroValue'] ?? 0;
|
|
238
|
+
}
|
|
239
|
+
return 0;
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Allocate a register for a block's output port
|
|
243
|
+
* These are permanent registers allocated from REG0 upward
|
|
244
|
+
*/
|
|
245
|
+
allocateRegister(blockIdOrType, portId) {
|
|
246
|
+
// If blockIdOrType looks like a type (contains '.'), use current block ID
|
|
247
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
248
|
+
// Check if already allocated
|
|
249
|
+
const existing = this.registerAllocations.find(alloc => alloc.blockId === blockId && alloc.portId === portId);
|
|
250
|
+
if (existing) {
|
|
251
|
+
return existing.alias; // Return alias, not raw register name
|
|
252
|
+
}
|
|
253
|
+
// NOTE: No hard limit check here. Registers are allowed to spill past REG31
|
|
254
|
+
// during code generation. The actual limit is enforced post-optimization
|
|
255
|
+
// after dead store elimination and register renumbering compact the set.
|
|
256
|
+
const registerName = `REG${this.nextRegister}`;
|
|
257
|
+
this.nextRegister++;
|
|
258
|
+
// Generate a meaningful alias for this register
|
|
259
|
+
const alias = this.generateRegisterAlias(blockId, portId);
|
|
260
|
+
this.registerAllocations.push({
|
|
261
|
+
blockId,
|
|
262
|
+
portId,
|
|
263
|
+
register: registerName,
|
|
264
|
+
alias
|
|
265
|
+
});
|
|
266
|
+
return alias; // Return the alias, not the raw register name
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Generate a meaningful alias for a register
|
|
270
|
+
*/
|
|
271
|
+
generateRegisterAlias(blockId, portId) {
|
|
272
|
+
// Get the block to find its type
|
|
273
|
+
const block = this.graph.blocks.find(b => b.id === blockId);
|
|
274
|
+
if (!block) {
|
|
275
|
+
// Fallback to blockId
|
|
276
|
+
return this.sanitizeIdentifier(`${blockId}_${portId}`);
|
|
277
|
+
}
|
|
278
|
+
// Create alias from block type and port
|
|
279
|
+
// e.g., "input.adcl" + "out" -> "adcl_out"
|
|
280
|
+
// e.g., "math.gain" + "out" -> "gain_out"
|
|
281
|
+
const typeParts = block.type.split('.');
|
|
282
|
+
const baseName = typeParts[typeParts.length - 1]; // Get last part (e.g., "adcl", "gain")
|
|
283
|
+
// Special case for POT blocks: use the potNumber parameter
|
|
284
|
+
let suffix = '';
|
|
285
|
+
if (block.type === 'input.pot') {
|
|
286
|
+
const potNum = (block.parameters && block.parameters.potNumber !== undefined && block.parameters.potNumber !== null)
|
|
287
|
+
? block.parameters.potNumber
|
|
288
|
+
: 0;
|
|
289
|
+
suffix = `${potNum}`;
|
|
290
|
+
}
|
|
291
|
+
else if (this.graph.blocks.filter(b => b.type === block.type).length > 1) {
|
|
292
|
+
// If there are multiple blocks of the same type, add a number
|
|
293
|
+
const sameTypeBlocks = this.graph.blocks.filter(b => b.type === block.type);
|
|
294
|
+
const index = sameTypeBlocks.findIndex(b => b.id === blockId);
|
|
295
|
+
suffix = `${index + 1}`;
|
|
296
|
+
}
|
|
297
|
+
const baseAlias = this.sanitizeIdentifier(`${baseName}${suffix}_${portId}`);
|
|
298
|
+
let finalAlias = baseAlias;
|
|
299
|
+
let counter = 2;
|
|
300
|
+
// Guarantee global alias uniqueness
|
|
301
|
+
while (this.registerAllocations.some(a => a.alias === finalAlias && (a.blockId !== blockId || a.portId !== portId))) {
|
|
302
|
+
finalAlias = `${baseAlias}_${counter}`;
|
|
303
|
+
counter++;
|
|
304
|
+
}
|
|
305
|
+
return finalAlias;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Sanitize an identifier to make it valid for assembly
|
|
309
|
+
*/
|
|
310
|
+
sanitizeIdentifier(name) {
|
|
311
|
+
return name.replace(/[^a-zA-Z0-9_]/g, '_').toLowerCase();
|
|
312
|
+
}
|
|
313
|
+
/**
|
|
314
|
+
* Get a scratch/temporary register for intermediate calculations
|
|
315
|
+
* Scratch registers are allocated from REG31 downward and are automatically
|
|
316
|
+
* available again after the current block's code generation completes
|
|
317
|
+
*/
|
|
318
|
+
getScratchRegister() {
|
|
319
|
+
// NOTE: No hard limit check here. Scratch registers may temporarily overlap
|
|
320
|
+
// with permanent registers during code generation. The renumbering pass
|
|
321
|
+
// will compact everything post-optimization.
|
|
322
|
+
const registerName = `REG${this.nextScratchRegister}`;
|
|
323
|
+
this.nextScratchRegister--;
|
|
324
|
+
return registerName;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Reset scratch register allocation
|
|
328
|
+
* Called after each block's code generation to make scratch registers available again
|
|
329
|
+
*/
|
|
330
|
+
resetScratchRegisters() {
|
|
331
|
+
this.nextScratchRegister = 31;
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Register an EQU constant declaration
|
|
335
|
+
* For common values, use standardized names
|
|
336
|
+
*/
|
|
337
|
+
registerEqu(name, value) {
|
|
338
|
+
// Check if already registered
|
|
339
|
+
if (this.hasEqu(name)) {
|
|
340
|
+
return name; // Already registered, skip
|
|
341
|
+
}
|
|
342
|
+
const valueStr = typeof value === 'number' ? value.toString() : value;
|
|
343
|
+
this.equDeclarations.push({ name, value: valueStr });
|
|
344
|
+
this.constantMap.set(name, valueStr);
|
|
345
|
+
return name;
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get or create a standard EQU name for a constant value
|
|
349
|
+
* Returns the EQU name to use in code
|
|
350
|
+
* Dynamically builds the constant map as values are encountered
|
|
351
|
+
*/
|
|
352
|
+
getStandardConstant(value) {
|
|
353
|
+
// Generate a name for this constant
|
|
354
|
+
// Convert value to a valid identifier (e.g., 0.6 -> k_0_6, -0.6 -> k_neg_0_6)
|
|
355
|
+
const valueStr = value.toString().replace('.', '_');
|
|
356
|
+
const absValueStr = valueStr.startsWith('-') ? valueStr.substring(1) : valueStr;
|
|
357
|
+
let name = value < 0 ? `k_neg_${absValueStr}` : `k_${absValueStr}`;
|
|
358
|
+
// Check if we already have an EQU for this value
|
|
359
|
+
const existingName = this.constantMap.get(name);
|
|
360
|
+
if (existingName) {
|
|
361
|
+
return existingName;
|
|
362
|
+
}
|
|
363
|
+
// Register the EQU
|
|
364
|
+
this.registerEqu(name, value.toString());
|
|
365
|
+
return name;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Check if an EQU constant has been registered
|
|
369
|
+
*/
|
|
370
|
+
hasEqu(name) {
|
|
371
|
+
return this.equDeclarations.some(equ => equ.name === name);
|
|
372
|
+
}
|
|
373
|
+
/**
|
|
374
|
+
* Register an EQU that lives only in the IR header section (not in equDeclarations).
|
|
375
|
+
* Prevents the EQU from being duplicated in the init/Constants section.
|
|
376
|
+
*/
|
|
377
|
+
registerHeaderEqu(name) {
|
|
378
|
+
this.headerEquSet.add(name);
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Returns true if an EQU has been registered for the IR header section.
|
|
382
|
+
*/
|
|
383
|
+
hasHeaderEqu(name) {
|
|
384
|
+
return this.headerEquSet.has(name);
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Get all registered EQU declarations
|
|
388
|
+
*/
|
|
389
|
+
getEquDeclarations() {
|
|
390
|
+
return [...this.equDeclarations];
|
|
391
|
+
}
|
|
392
|
+
/**
|
|
393
|
+
* Get all register aliases for EQU declarations
|
|
394
|
+
*/
|
|
395
|
+
getRegisterAliases() {
|
|
396
|
+
return this.registerAllocations.map(alloc => ({
|
|
397
|
+
alias: alloc.alias,
|
|
398
|
+
register: alloc.register
|
|
399
|
+
}));
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Allocate delay memory for a block
|
|
403
|
+
*/
|
|
404
|
+
allocateMemory(name, size) {
|
|
405
|
+
// If blockIdOrType looks like a type (contains '.'), use current block ID
|
|
406
|
+
const blockId = this.currentBlockId;
|
|
407
|
+
// I don't see why we would ever want to do this...
|
|
408
|
+
// // Check if already allocated
|
|
409
|
+
// const existing = this.memoryAllocations.find(
|
|
410
|
+
// alloc => alloc.blockId === blockId
|
|
411
|
+
// );
|
|
412
|
+
// if (existing) {
|
|
413
|
+
// return existing;
|
|
414
|
+
// }
|
|
415
|
+
// Check if enough memory available
|
|
416
|
+
if (this.nextMemoryAddress + size > this.maxMemory) {
|
|
417
|
+
// Update nextMemoryAddress to reflect total attempted allocation
|
|
418
|
+
// so getUsedMemorySize() returns the correct total when error is caught
|
|
419
|
+
this.nextMemoryAddress += size;
|
|
420
|
+
throw new Error(`Out of delay memory! Requested ${size} words, ` +
|
|
421
|
+
`but only ${this.maxMemory - (this.nextMemoryAddress - size)} available.`);
|
|
422
|
+
}
|
|
423
|
+
// Generate a short, unique memory name based on block type
|
|
424
|
+
// Follow same pattern as register aliases: use block type name + instance number
|
|
425
|
+
// const block = this.graph.blocks.find(b => b.id === blockId);
|
|
426
|
+
// let memName: string;
|
|
427
|
+
// if (block) {
|
|
428
|
+
// // Extract base name from block type (e.g., "effects.delay" -> "delay")
|
|
429
|
+
// const typeParts = block.type.split('.');
|
|
430
|
+
// const baseName = typeParts[typeParts.length - 1];
|
|
431
|
+
// // If there are multiple blocks of the same type, add instance number
|
|
432
|
+
// const sameTypeBlocks = this.graph.blocks.filter(b => b.type === block.type);
|
|
433
|
+
// let suffix = '';
|
|
434
|
+
// if (sameTypeBlocks.length > 1) {
|
|
435
|
+
// const index = sameTypeBlocks.findIndex(b => b.id === blockId);
|
|
436
|
+
// suffix = `${index + 1}`;
|
|
437
|
+
// }
|
|
438
|
+
// memName = this.sanitizeIdentifier(`mem_${baseName}${suffix}_${name}`);
|
|
439
|
+
// } else {
|
|
440
|
+
// // Fallback to generic name with counter
|
|
441
|
+
// memName = `mem${this.memoryAllocations.length}_${name}`;
|
|
442
|
+
// }
|
|
443
|
+
// Just use a generic name with counter
|
|
444
|
+
let memName = `mem${this.memoryAllocations.length}_${name}`;
|
|
445
|
+
// Ensure name doesn't exceed 32 characters (FV-1 limit)
|
|
446
|
+
if (memName.length > 32) {
|
|
447
|
+
memName = memName.substring(0, 32);
|
|
448
|
+
}
|
|
449
|
+
const allocation = {
|
|
450
|
+
blockId,
|
|
451
|
+
name: memName,
|
|
452
|
+
address: this.nextMemoryAddress,
|
|
453
|
+
size
|
|
454
|
+
};
|
|
455
|
+
this.memoryAllocations.push(allocation);
|
|
456
|
+
this.nextMemoryAddress += size;
|
|
457
|
+
return allocation;
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* Get a block instance
|
|
461
|
+
*/
|
|
462
|
+
getBlock(blockId) {
|
|
463
|
+
return this.graph.blocks.find(b => b.id === blockId);
|
|
464
|
+
}
|
|
465
|
+
/**
|
|
466
|
+
* Get a parameter value from a block
|
|
467
|
+
*/
|
|
468
|
+
getParameter(blockIdOrType, parameterId) {
|
|
469
|
+
// If blockIdOrType looks like a type (contains '.'), use current block ID
|
|
470
|
+
const blockId = blockIdOrType.includes('.') ? this.currentBlockId : blockIdOrType;
|
|
471
|
+
const block = this.graph.blocks.find(b => b.id === blockId);
|
|
472
|
+
if (!block) {
|
|
473
|
+
throw new Error(`Block ${blockId} not found`);
|
|
474
|
+
}
|
|
475
|
+
return block.parameters[parameterId];
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* Push an IR node
|
|
479
|
+
*/
|
|
480
|
+
pushIR(node) {
|
|
481
|
+
this.irNodes.push(node);
|
|
482
|
+
}
|
|
483
|
+
/**
|
|
484
|
+
* Get a short, unique identifier for a block (e.g. "b1", "b2") to avoid long UUIDs in assembly
|
|
485
|
+
*/
|
|
486
|
+
getShortId(blockId) {
|
|
487
|
+
const existing = this.blockShortIdMap.get(blockId);
|
|
488
|
+
if (existing) {
|
|
489
|
+
return existing;
|
|
490
|
+
}
|
|
491
|
+
const newId = `b${this.nextShortId++}`;
|
|
492
|
+
this.blockShortIdMap.set(blockId, newId);
|
|
493
|
+
return newId;
|
|
494
|
+
}
|
|
495
|
+
/**
|
|
496
|
+
* Get all IR nodes
|
|
497
|
+
*/
|
|
498
|
+
getIR() {
|
|
499
|
+
return [...this.irNodes];
|
|
500
|
+
}
|
|
501
|
+
/**
|
|
502
|
+
* Get count of used registers
|
|
503
|
+
*/
|
|
504
|
+
getUsedRegisterCount() {
|
|
505
|
+
return this.nextRegister;
|
|
506
|
+
}
|
|
507
|
+
/**
|
|
508
|
+
* Get total used memory size
|
|
509
|
+
*/
|
|
510
|
+
getUsedMemorySize() {
|
|
511
|
+
return this.nextMemoryAddress;
|
|
512
|
+
}
|
|
513
|
+
/**
|
|
514
|
+
* Get all memory allocations
|
|
515
|
+
*/
|
|
516
|
+
getMemoryBlocks() {
|
|
517
|
+
return this.memoryAllocations.map(alloc => ({
|
|
518
|
+
name: alloc.name,
|
|
519
|
+
address: alloc.address,
|
|
520
|
+
size: alloc.size
|
|
521
|
+
}));
|
|
522
|
+
}
|
|
523
|
+
/**
|
|
524
|
+
* Get a local variable value (used by macros)
|
|
525
|
+
*/
|
|
526
|
+
getVariable(name) {
|
|
527
|
+
return this.blockVariables.get(name);
|
|
528
|
+
}
|
|
529
|
+
/**
|
|
530
|
+
* Set a local variable value (used by macros)
|
|
531
|
+
*/
|
|
532
|
+
setVariable(name, value) {
|
|
533
|
+
this.blockVariables.set(name, value);
|
|
534
|
+
}
|
|
535
|
+
/**
|
|
536
|
+
* Reset allocations (for re-compilation)
|
|
537
|
+
*/
|
|
538
|
+
reset() {
|
|
539
|
+
this.registerAllocations = [];
|
|
540
|
+
this.memoryAllocations = [];
|
|
541
|
+
this.equDeclarations = [];
|
|
542
|
+
this.blockVariables.clear();
|
|
543
|
+
this.constantMap.clear();
|
|
544
|
+
this.initCode = [];
|
|
545
|
+
this.inputCode = [];
|
|
546
|
+
this.mainCode = [];
|
|
547
|
+
this.outputCode = [];
|
|
548
|
+
this.flattenedCode = [];
|
|
549
|
+
this.nextRegister = 0;
|
|
550
|
+
this.nextScratchRegister = 31;
|
|
551
|
+
this.nextMemoryAddress = 0;
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
//# sourceMappingURL=CodeGenContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CodeGenContext.js","sourceRoot":"","sources":["../../../src/blockDiagram/types/CodeGenContext.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Connection type definitions
|
|
3
|
+
*/
|
|
4
|
+
export interface ConnectionEndpoint {
|
|
5
|
+
blockId: string;
|
|
6
|
+
portId: string;
|
|
7
|
+
}
|
|
8
|
+
export interface Connection {
|
|
9
|
+
id: string;
|
|
10
|
+
from: ConnectionEndpoint;
|
|
11
|
+
to: ConnectionEndpoint;
|
|
12
|
+
}
|
|
13
|
+
export interface ConnectionValidationResult {
|
|
14
|
+
valid: boolean;
|
|
15
|
+
error?: string;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=Connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.d.ts","sourceRoot":"","sources":["../../../src/blockDiagram/types/Connection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,kBAAkB,CAAC;IACzB,EAAE,EAAE,kBAAkB,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACvC,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Connection.js","sourceRoot":"","sources":["../../../src/blockDiagram/types/Connection.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block diagram graph structure
|
|
3
|
+
*/
|
|
4
|
+
import { Block } from './Block.js';
|
|
5
|
+
import { Connection } from './Connection.js';
|
|
6
|
+
export interface GraphMetadata {
|
|
7
|
+
name: string;
|
|
8
|
+
author?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
version?: string;
|
|
11
|
+
}
|
|
12
|
+
export interface CanvasState {
|
|
13
|
+
zoom: number;
|
|
14
|
+
panX: number;
|
|
15
|
+
panY: number;
|
|
16
|
+
}
|
|
17
|
+
export interface BlockGraph {
|
|
18
|
+
version: string;
|
|
19
|
+
metadata: GraphMetadata;
|
|
20
|
+
canvas: CanvasState;
|
|
21
|
+
blocks: Block[];
|
|
22
|
+
connections: Connection[];
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Default empty graph
|
|
26
|
+
*/
|
|
27
|
+
export declare function createEmptyGraph(name?: string): BlockGraph;
|
|
28
|
+
//# sourceMappingURL=Graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.d.ts","sourceRoot":"","sources":["../../../src/blockDiagram/types/Graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,WAAW;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,WAAW,CAAC;IACpB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,WAAW,EAAE,UAAU,EAAE,CAAC;CAC7B;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,GAAE,MAAsB,GAAG,UAAU,CAgBzE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Block diagram graph structure
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Default empty graph
|
|
6
|
+
*/
|
|
7
|
+
export function createEmptyGraph(name = 'New Program') {
|
|
8
|
+
return {
|
|
9
|
+
version: '1.0',
|
|
10
|
+
metadata: {
|
|
11
|
+
name,
|
|
12
|
+
author: '',
|
|
13
|
+
description: ''
|
|
14
|
+
},
|
|
15
|
+
canvas: {
|
|
16
|
+
zoom: 1.0,
|
|
17
|
+
panX: 0,
|
|
18
|
+
panY: 0
|
|
19
|
+
},
|
|
20
|
+
blocks: [],
|
|
21
|
+
connections: []
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=Graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Graph.js","sourceRoot":"","sources":["../../../src/blockDiagram/types/Graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AA0BH;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe,aAAa;IACzD,OAAO;QACH,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE;YACN,IAAI;YACJ,MAAM,EAAE,EAAE;YACV,WAAW,EAAE,EAAE;SAClB;QACD,MAAM,EAAE;YACJ,IAAI,EAAE,GAAG;YACT,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,CAAC;SACV;QACD,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,EAAE;KAClB,CAAC;AACN,CAAC"}
|