@@ -194,36 +194,101 @@ export class Channel1 {
194
194
195
195
// Function to save the state of the class
196
196
static saveState ( ) : void {
197
- storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x00 , Channel1 . saveStateSlot ) , Channel1 . isEnabled ) ;
198
- store < i32 > ( getSaveStateMemoryOffset ( 0x01 , Channel1 . saveStateSlot ) , Channel1 . frequencyTimer ) ;
199
- store < i32 > ( getSaveStateMemoryOffset ( 0x05 , Channel1 . saveStateSlot ) , Channel1 . envelopeCounter ) ;
200
- store < i32 > ( getSaveStateMemoryOffset ( 0x09 , Channel1 . saveStateSlot ) , Channel1 . lengthCounter ) ;
201
- store < i32 > ( getSaveStateMemoryOffset ( 0x0e , Channel1 . saveStateSlot ) , Channel1 . volume ) ;
202
-
203
- store < u8 > ( getSaveStateMemoryOffset ( 0x13 , Channel1 . saveStateSlot ) , Channel1 . dutyCycle ) ;
204
- store < u8 > ( getSaveStateMemoryOffset ( 0x14 , Channel1 . saveStateSlot ) , < u8 > Channel1 . waveFormPositionOnDuty ) ;
205
-
206
- storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x19 , Channel1 . saveStateSlot ) , Channel1 . isSweepEnabled ) ;
207
- store < i32 > ( getSaveStateMemoryOffset ( 0x1a , Channel1 . saveStateSlot ) , Channel1 . sweepCounter ) ;
208
- store < u16 > ( getSaveStateMemoryOffset ( 0x1f , Channel1 . saveStateSlot ) , Channel1 . sweepShadowFrequency ) ;
209
- storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x21 , Channel1 . saveStateSlot ) , Channel1 . isEnvelopeAutomaticUpdating ) ;
197
+ // Cycle Counter
198
+ store < i32 > ( getSaveStateMemoryOffset ( 0x00 , Channel1 . saveStateSlot ) , Channel1 . cycleCounter ) ;
199
+
200
+ // NRx0
201
+ store < u8 > ( getSaveStateMemoryOffset ( 0x04 , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx0SweepPeriod ) ;
202
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x05 , Channel1 . saveStateSlot ) , Channel1 . NRx0Negate ) ;
203
+ store < u8 > ( getSaveStateMemoryOffset ( 0x06 , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx0SweepShift ) ;
204
+
205
+ // NRx1
206
+ store < u8 > ( getSaveStateMemoryOffset ( 0x07 , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx1Duty ) ;
207
+ store < u16 > ( getSaveStateMemoryOffset ( 0x09 , Channel1 . saveStateSlot ) , < u16 > Channel1 . NRx1LengthLoad ) ;
208
+
209
+ // NRx2
210
+ store < u8 > ( getSaveStateMemoryOffset ( 0x0a , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx2StartingVolume ) ;
211
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x0b , Channel1 . saveStateSlot ) , Channel1 . NRx2EnvelopeAddMode ) ;
212
+ store < u8 > ( getSaveStateMemoryOffset ( 0x0c , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx2EnvelopePeriod ) ;
213
+
214
+ // NRx3
215
+ store < u8 > ( getSaveStateMemoryOffset ( 0x0d , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx3FrequencyLSB ) ;
216
+
217
+ // NRx4
218
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x0e , Channel1 . saveStateSlot ) , Channel1 . NRx4LengthEnabled ) ;
219
+ store < u8 > ( getSaveStateMemoryOffset ( 0x0f , Channel1 . saveStateSlot ) , < u8 > Channel1 . NRx4FrequencyMSB ) ;
220
+
221
+ // Channel Properties
222
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x10 , Channel1 . saveStateSlot ) , Channel1 . isEnabled ) ;
223
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x11 , Channel1 . saveStateSlot ) , Channel1 . isDacEnabled ) ;
224
+ store < i32 > ( getSaveStateMemoryOffset ( 0x12 , Channel1 . saveStateSlot ) , Channel1 . frequency ) ;
225
+ store < i32 > ( getSaveStateMemoryOffset ( 0x16 , Channel1 . saveStateSlot ) , Channel1 . frequencyTimer ) ;
226
+ store < i32 > ( getSaveStateMemoryOffset ( 0x1a , Channel1 . saveStateSlot ) , Channel1 . envelopeCounter ) ;
227
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x1e , Channel1 . saveStateSlot ) , Channel1 . isEnvelopeAutomaticUpdating ) ;
228
+ store < i32 > ( getSaveStateMemoryOffset ( 0x1f , Channel1 . saveStateSlot ) , Channel1 . lengthCounter ) ;
229
+ store < i32 > ( getSaveStateMemoryOffset ( 0x23 , Channel1 . saveStateSlot ) , Channel1 . volume ) ;
230
+
231
+ // Square Duty
232
+ store < u8 > ( getSaveStateMemoryOffset ( 0x27 , Channel1 . saveStateSlot ) , Channel1 . dutyCycle ) ;
233
+ store < u8 > ( getSaveStateMemoryOffset ( 0x28 , Channel1 . saveStateSlot ) , < u8 > Channel1 . waveFormPositionOnDuty ) ;
234
+
235
+ // Square Sweep
236
+ storeBooleanDirectlyToWasmMemory ( getSaveStateMemoryOffset ( 0x29 , Channel1 . saveStateSlot ) , Channel1 . isSweepEnabled ) ;
237
+ store < i32 > ( getSaveStateMemoryOffset ( 0x2a , Channel1 . saveStateSlot ) , Channel1 . sweepCounter ) ;
238
+ store < u16 > ( getSaveStateMemoryOffset ( 0x2e , Channel1 . saveStateSlot ) , Channel1 . sweepShadowFrequency ) ;
239
+ storeBooleanDirectlyToWasmMemory (
240
+ getSaveStateMemoryOffset ( 0x31 , Channel1 . saveStateSlot ) ,
241
+ Channel1 . sweepNegateShouldDisableChannelOnClear
242
+ ) ;
210
243
}
211
244
212
245
// Function to load the save state from memory
213
246
static loadState ( ) : void {
214
- Channel1 . isEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x00 , Channel1 . saveStateSlot ) ) ;
215
- Channel1 . frequencyTimer = load < i32 > ( getSaveStateMemoryOffset ( 0x01 , Channel1 . saveStateSlot ) ) ;
216
- Channel1 . envelopeCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x05 , Channel1 . saveStateSlot ) ) ;
217
- Channel1 . lengthCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x09 , Channel1 . saveStateSlot ) ) ;
218
- Channel1 . volume = load < i32 > ( getSaveStateMemoryOffset ( 0x0e , Channel1 . saveStateSlot ) ) ;
219
-
220
- Channel1 . dutyCycle = load < u8 > ( getSaveStateMemoryOffset ( 0x13 , Channel1 . saveStateSlot ) ) ;
221
- Channel1 . waveFormPositionOnDuty = load < u8 > ( getSaveStateMemoryOffset ( 0x14 , Channel1 . saveStateSlot ) ) ;
222
-
223
- Channel1 . isSweepEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x19 , Channel1 . saveStateSlot ) ) ;
224
- Channel1 . sweepCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x1a , Channel1 . saveStateSlot ) ) ;
225
- Channel1 . sweepShadowFrequency = load < u16 > ( getSaveStateMemoryOffset ( 0x1f , Channel1 . saveStateSlot ) ) ;
226
- Channel1 . isEnvelopeAutomaticUpdating = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x21 , Channel1 . saveStateSlot ) ) ;
247
+ // Cycle Counter
248
+ Channel1 . cycleCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x00 , Channel1 . cycleCounter ) ) ;
249
+
250
+ // NRx0
251
+ Channel1 . NRx0SweepPeriod = load < u8 > ( getSaveStateMemoryOffset ( 0x04 , Channel1 . saveStateSlot ) ) ;
252
+ Channel1 . NRx0Negate = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x05 , Channel1 . saveStateSlot ) ) ;
253
+ Channel1 . NRx0SweepShift = load < u8 > ( getSaveStateMemoryOffset ( 0x06 , Channel1 . saveStateSlot ) ) ;
254
+
255
+ // NRx1
256
+ Channel1 . NRx1Duty = load < u8 > ( getSaveStateMemoryOffset ( 0x07 , Channel1 . saveStateSlot ) ) ;
257
+ Channel1 . NRx1LengthLoad = load < u16 > ( getSaveStateMemoryOffset ( 0x09 , Channel1 . saveStateSlot ) ) ;
258
+
259
+ // NRx2
260
+ Channel1 . NRx2StartingVolume = load < u8 > ( getSaveStateMemoryOffset ( 0x0a , Channel1 . saveStateSlot ) ) ;
261
+ Channel1 . NRx2EnvelopeAddMode = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x0b , Channel1 . saveStateSlot ) ) ;
262
+ Channel1 . NRx2EnvelopePeriod = load < u8 > ( getSaveStateMemoryOffset ( 0x0c , Channel1 . saveStateSlot ) ) ;
263
+
264
+ // NRx3
265
+ Channel1 . NRx3FrequencyLSB = load < u8 > ( getSaveStateMemoryOffset ( 0x0d , Channel1 . saveStateSlot ) ) ;
266
+
267
+ // NRx4
268
+ Channel1 . NRx4LengthEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x0e , Channel1 . saveStateSlot ) ) ;
269
+ Channel1 . NRx4FrequencyMSB = load < u8 > ( getSaveStateMemoryOffset ( 0x0f , Channel1 . saveStateSlot ) ) ;
270
+
271
+ // Channel Properties
272
+ Channel1 . isEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x10 , Channel1 . saveStateSlot ) ) ;
273
+ Channel1 . isDacEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x11 , Channel1 . saveStateSlot ) ) ;
274
+ Channel1 . frequency = load < i32 > ( getSaveStateMemoryOffset ( 0x12 , Channel1 . saveStateSlot ) ) ;
275
+ Channel1 . frequencyTimer = load < i32 > ( getSaveStateMemoryOffset ( 0x16 , Channel1 . saveStateSlot ) ) ;
276
+ Channel1 . envelopeCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x1a , Channel1 . saveStateSlot ) ) ;
277
+ Channel1 . isEnvelopeAutomaticUpdating = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x1e , Channel1 . saveStateSlot ) ) ;
278
+ Channel1 . lengthCounter = load < i32 > ( getSaveStateMemoryOffset ( 0x1f , Channel1 . saveStateSlot ) ) ;
279
+ Channel1 . volume = load < i32 > ( getSaveStateMemoryOffset ( 0x23 , Channel1 . saveStateSlot ) ) ;
280
+
281
+ // Square Duty
282
+ Channel1 . dutyCycle = load < u8 > ( getSaveStateMemoryOffset ( 0x27 , Channel1 . saveStateSlot ) ) ;
283
+ Channel1 . waveFormPositionOnDuty = load < u8 > ( getSaveStateMemoryOffset ( 0x28 , Channel1 . saveStateSlot ) ) ;
284
+
285
+ // Square Sweep
286
+ Channel1 . isSweepEnabled = loadBooleanDirectlyFromWasmMemory ( getSaveStateMemoryOffset ( 0x29 , Channel1 . saveStateSlot ) ) ;
287
+ Channel1 . sweepCounter = load < u8 > ( getSaveStateMemoryOffset ( 0x2a , Channel1 . saveStateSlot ) ) ;
288
+ Channel1 . sweepShadowFrequency = load < u8 > ( getSaveStateMemoryOffset ( 0x2e , Channel1 . saveStateSlot ) ) ;
289
+ Channel1 . sweepNegateShouldDisableChannelOnClear = loadBooleanDirectlyFromWasmMemory (
290
+ getSaveStateMemoryOffset ( 0x31 , Channel1 . saveStateSlot )
291
+ ) ;
227
292
}
228
293
229
294
static initialize ( ) : void {
0 commit comments