@audiofab-io/fv1-core 0.1.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.
@@ -0,0 +1,206 @@
1
+ export declare class FV1Simulator {
2
+ private delaySize;
3
+ private delayMask;
4
+ private regCount;
5
+ private progSize;
6
+ private static readonly MAX_ACC;
7
+ private static readonly MIN_ACC;
8
+ private sin0;
9
+ private cos0;
10
+ private sin1;
11
+ private cos1;
12
+ private rmp0;
13
+ private rmp1;
14
+ private sin0_rate;
15
+ private sin0_range;
16
+ private sin1_rate;
17
+ private sin1_range;
18
+ private rmp0_rate;
19
+ private rmp0_range;
20
+ private rmp1_rate;
21
+ private rmp1_range;
22
+ private delayRam;
23
+ private registers;
24
+ private program;
25
+ private acc;
26
+ private pacc;
27
+ private lr;
28
+ private lfo;
29
+ private delayPointer;
30
+ private firstRun;
31
+ private pc;
32
+ private breakpoints;
33
+ private symbols;
34
+ private memories;
35
+ private fv1AsmMemBug;
36
+ private traceEnabled;
37
+ private traceWriter;
38
+ private cycleCount;
39
+ private traceCycle;
40
+ private traceMaxCycles;
41
+ private traceRowCount;
42
+ private traceDelayAddr;
43
+ private traceDelayOffset;
44
+ private traceDelayOp;
45
+ private traceDelayValue;
46
+ private traceInstructionPC;
47
+ private currentReadOffsets;
48
+ constructor();
49
+ /**
50
+ * Configures simulator hardware limits.
51
+ */
52
+ setCapabilities(delaySize: number, regCount: number, progSize: number): void;
53
+ getDelayPointer(): number;
54
+ getDelaySize(): number;
55
+ /**
56
+ * Loads the machine code into the simulator.
57
+ * @param code Array of 32-bit integers representing the assembled program.
58
+ */
59
+ loadProgram(code: Uint32Array | number[]): void;
60
+ /**
61
+ * Resets the simulator state (clears memory, registers, accumulator).
62
+ */
63
+ reset(): void;
64
+ /**
65
+ * Set breakpoints at specific instruction addresses.
66
+ * @param addresses Set of addresses to break at.
67
+ */
68
+ setBreakpoints(addresses: Set<number>): void;
69
+ /**
70
+ * Set symbol and memory metadata for expression evaluation.
71
+ */
72
+ setSymbols(symbols: any[], memories: any[], fv1AsmMemBug?: boolean): void;
73
+ /**
74
+ * Process a block of audio samples.
75
+ * Useful for real-time audio processing in AudioWorklets.
76
+ */
77
+ processBlock(inputL: Float32Array, inputR: Float32Array, outputL: Float32Array, outputR: Float32Array, pot0: number, pot1: number, pot2: number): void;
78
+ /**
79
+ * Process a single sample frame.
80
+ * Executes instructions until the end of the program or a breakpoint is hit.
81
+ * @param skipCurrentBreakpoint If true, will not break on the instruction at the current PC.
82
+ * @returns [outL, outR, breakpointHit]
83
+ */
84
+ step(inL: number, inR: number, pot0: number, pot1: number, pot2: number, skipCurrentBreakpoint?: boolean): [number, number, boolean];
85
+ private getOutputs;
86
+ beginFrame(inL?: number, inR?: number, pot0?: number, pot1?: number, pot2?: number): void;
87
+ endFrame(): [number, number];
88
+ /**
89
+ * Executes a single instruction at the current PC.
90
+ * @returns The next PC address.
91
+ */
92
+ stepInstruction(): number;
93
+ private executeInstruction;
94
+ private opRDA;
95
+ private opWRA;
96
+ private opWRAP;
97
+ private opRDAX;
98
+ private opWRAX;
99
+ private opSOF;
100
+ private opRMPA;
101
+ private opMULX;
102
+ private opLOG;
103
+ private opEXP;
104
+ private opRDFX;
105
+ private opMAXX;
106
+ private opSKP;
107
+ private opWRLX;
108
+ private opWRHX;
109
+ private opAND;
110
+ private opOR;
111
+ private opXOR;
112
+ private opJAM;
113
+ private opWLDS;
114
+ private opWLDR;
115
+ private getLfoVal;
116
+ private getLfoRange;
117
+ private opCHO;
118
+ private opCHO_RDA;
119
+ private opCHO_SOF;
120
+ private opCHO_RDAL;
121
+ getPC(): number;
122
+ getProgSize(): number;
123
+ setPC(pc: number): void;
124
+ setAcc(val: number): void;
125
+ setPacc(val: number): void;
126
+ /**
127
+ * Sets a register value with hardware-accurate saturation and quantization.
128
+ * @param idx Register index (0-63)
129
+ * @param val Raw value (float)
130
+ */
131
+ setRegister(idx: number, val: number): void;
132
+ /**
133
+ * Evaluates a string expression (register name, symbol, memory suffix).
134
+ * @returns { result: string, value: number } or null
135
+ */
136
+ evaluateExpression(expr: string): {
137
+ label: string;
138
+ value: number;
139
+ } | null;
140
+ getState(): {
141
+ pc: number;
142
+ acc: number;
143
+ pacc: number;
144
+ lr: number;
145
+ lfo: number;
146
+ registers: {
147
+ [k: string]: number;
148
+ };
149
+ flags: {
150
+ RUN: boolean;
151
+ ZRC: boolean;
152
+ ZRO: boolean;
153
+ GEZ: boolean;
154
+ NEG: boolean;
155
+ };
156
+ lfoState: {
157
+ sin0: number;
158
+ cos0: number;
159
+ sin1: number;
160
+ cos1: number;
161
+ rmp0: number;
162
+ rmp1: number;
163
+ };
164
+ };
165
+ getCycleCount(): number;
166
+ getReadOffsets(): number[];
167
+ getRegisters(): Float32Array;
168
+ private updateLFOs;
169
+ private updateStateRegisters;
170
+ getDelayRam(): Float32Array;
171
+ private decodeS1_14;
172
+ private decodeS1_9;
173
+ private decodeS_10;
174
+ private decodeS4_6;
175
+ private decodeS_15;
176
+ private saturate;
177
+ private static readonly OPCODE_NAMES;
178
+ private traceOnComplete;
179
+ /**
180
+ * Enable trace logging with a streaming writer callback.
181
+ * Each row is emitted immediately via the writer — nothing is stored in memory.
182
+ * @param writer Callback that receives each CSV row (including header).
183
+ * @param maxCycles Maximum number of sample cycles to log (0 = unlimited).
184
+ * @param onComplete Optional callback when trace auto-completes.
185
+ */
186
+ enableTrace(writer: (row: string) => void, maxCycles?: number, onComplete?: () => void): void;
187
+ /**
188
+ * Disable trace logging.
189
+ */
190
+ disableTrace(): void;
191
+ /**
192
+ * Returns whether trace logging is currently active.
193
+ */
194
+ isTraceEnabled(): boolean;
195
+ /**
196
+ * Returns the number of trace rows emitted so far.
197
+ */
198
+ getTraceRowCount(): number;
199
+ /**
200
+ * Called at end-of-frame to advance the trace cycle counter.
201
+ * If maxCycles is reached, trace is automatically disabled.
202
+ */
203
+ advanceTraceCycle(): void;
204
+ private logTrace;
205
+ }
206
+ //# sourceMappingURL=FV1Simulator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FV1Simulator.d.ts","sourceRoot":"","sources":["../../src/simulator/FV1Simulator.ts"],"names":[],"mappings":"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"}