@@ -194,36 +194,101 @@ export class Channel1 {
194194
195195 // Function to save the state of the class
196196 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+ ) ;
210243 }
211244
212245 // Function to load the save state from memory
213246 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+ ) ;
227292 }
228293
229294 static initialize ( ) : void {
0 commit comments