int sound_context_save(uint8 *state) { int bufferptr = 0; if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { bufferptr = YM2612SaveContext(state); } else { save_param(YM2413GetContextPtr(),YM2413GetContextSize()); } save_param(SN76489_GetContextPtr(),SN76489_GetContextSize()); save_param(&fm_cycles_start,sizeof(fm_cycles_start)); return bufferptr; }
int sound_context_load(uint8 *state) { int bufferptr = 0; if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { bufferptr = YM2612LoadContext(state); YM2612Config(config.dac_bits); } else { load_param(YM2413GetContextPtr(),YM2413GetContextSize()); } load_param(SN76489_GetContextPtr(),SN76489_GetContextSize()); load_param(&fm_cycles_start,sizeof(fm_cycles_start)); fm_cycles_count = fm_cycles_start; return bufferptr; }
void sound_restore() { int size; uint8 *ptr, *temp; /* save YM context */ if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { size = YM2612GetContextSize(); ptr = YM2612GetContextPtr(); } else { size = YM2413GetContextSize(); ptr = YM2413GetContextPtr(); } temp = malloc(size); if (temp) { memcpy(temp, ptr, size); } /* reinitialize sound chips */ sound_init(); /* restore YM context */ if (temp) { if ((system_hw & SYSTEM_PBC) == SYSTEM_MD) { YM2612Restore(temp); } else { YM2413Restore(temp); } free(temp); } }