Mesen2/Core/Shared/Utilities/Emu2413Serializer.h
2023-12-14 22:23:27 +09:00

92 lines
No EOL
1.8 KiB
C++

#include "pch.h"
#include "Shared/Utilities/emu2413.h"
#include "Utilities/Serializer.h"
class Emu2413Serializer
{
public:
static void Serialize(OPLL* opll, Serializer& s)
{
SV(opll->clk);
SV(opll->rate);
SV(opll->chip_type);
SV(opll->adr);
SV(opll->inp_step);
SV(opll->out_step);
SV(opll->out_time);
SVArray(opll->reg, 0x40);
SV(opll->test_flag);
SV(opll->slot_key_status);
SV(opll->rhythm_mode);
SV(opll->eg_counter);
SV(opll->pm_phase);
SV(opll->am_phase);
SV(opll->lfo_am);
SV(opll->noise);
SV(opll->short_noise);
SVArray(opll->patch_number, 9);
for(int i = 0; i < 18; i++) {
SVI(opll->slot[i].number);
SVI(opll->slot[i].type);
SVI(opll->slot[i].output[0]);
SVI(opll->slot[i].output[1]);
SVI(opll->slot[i].pg_phase);
SVI(opll->slot[i].pg_out);
SVI(opll->slot[i].pg_keep);
SVI(opll->slot[i].blk_fnum);
SVI(opll->slot[i].fnum);
SVI(opll->slot[i].blk);
SVI(opll->slot[i].eg_state);
SVI(opll->slot[i].volume);
SVI(opll->slot[i].key_flag);
SVI(opll->slot[i].sus_flag);
SVI(opll->slot[i].tll);
SVI(opll->slot[i].rks);
SVI(opll->slot[i].eg_rate_h);
SVI(opll->slot[i].eg_rate_l);
SVI(opll->slot[i].eg_shift);
SVI(opll->slot[i].eg_out);
SVI(opll->slot[i].update_requests);
}
SV(opll->mask);
SVArray(opll->ch_out, 14);
SVArray(opll->mix_out, 2);
//custom patches
for(int i = 0; i < 2; i++) {
SVI(opll->patch[i].TL);
SVI(opll->patch[i].FB);
SVI(opll->patch[i].EG);
SVI(opll->patch[i].ML);
SVI(opll->patch[i].AR);
SVI(opll->patch[i].DR);
SVI(opll->patch[i].SL);
SVI(opll->patch[i].RR);
SVI(opll->patch[i].KR);
SVI(opll->patch[i].KL);
SVI(opll->patch[i].AM);
SVI(opll->patch[i].PM);
SVI(opll->patch[i].WS);
}
if(!s.IsSaving()) {
OPLL_forceRefresh(opll);
}
}
};