+ spu.XAPlay = spu.XAFeed = spu.XAStart;\r
+ spu.CDDAPlay = spu.CDDAFeed = spu.CDDAStart;\r
+ if (pFO && pFO->xa_left && pF->xaS.nsamples) { // start xa again\r
+ FeedXA(&pF->xaS);\r
+ spu.XAPlay = spu.XAFeed - pFO->xa_left;\r
+ if (spu.XAPlay < spu.XAStart)\r
+ spu.XAPlay = spu.XAStart;\r
+ }\r
+ else if (pFO && pFO->cdda_left) { // start cdda again\r
+ FeedCDDA((void *)pF->xaS.pcm, pFO->cdda_left * 4);\r
+ }\r
+\r
+ // not in old savestates\r
+ spu.cycles_dma_end = 0;\r
+ spu.decode_dirty_ch = spu.dwChannelsAudible & 0x0a;\r
+ spu.dwNoiseVal = 0;\r
+ spu.dwNoiseCount = 0;\r
+ spu.XARepeat = 0;\r
+ spu.XALastVal = 0;\r
+ spu.last_keyon_cycles = cycles - 16*786u;\r
+ if (pFO && pF->ulFreezeSize >= sizeof(*pF) + sizeof(*pFO)) {\r
+ spu.cycles_dma_end = pFO->cycles_dma_end;\r
+ spu.decode_dirty_ch = pFO->decode_dirty_ch;\r
+ spu.dwNoiseVal = pFO->dwNoiseVal;\r
+ spu.dwNoiseCount = pFO->dwNoiseCount;\r
+ spu.XARepeat = pFO->XARepeat;\r
+ spu.XALastVal = pFO->XALastVal;\r
+ spu.last_keyon_cycles = pFO->last_keyon_cycles;\r
+ }\r
+\r