forked from sin365/AxibugEmuOnline
MAME: FM小小unsafe缓存
This commit is contained in:
parent
909d1b35f1
commit
ec292251e0
@ -617,18 +617,20 @@ namespace MAME.Core
|
|||||||
//}
|
//}
|
||||||
|
|
||||||
//手动内联
|
//手动内联
|
||||||
public void chan_calc(int c, int chnum)
|
public unsafe void chan_calc(int c, int chnum)
|
||||||
{
|
{
|
||||||
uint eg_out;
|
uint eg_out;
|
||||||
out_fm[8] = out_fm[9] = out_fm[10] = out_fm[11] = 0;//m2 = c1 = c2 = mem = 0;
|
|
||||||
|
|
||||||
//减少寻址
|
//减少寻址
|
||||||
int imem_To_c = imem[c];//
|
int imem_To_c = imem[c];//
|
||||||
FM_SLOT[] CH_c_SLOT = CH[c].SLOT;//因为是引用类型,所以敢这么玩
|
fixed (FM_SLOT* CH_c_SLOT = &CH[c].SLOT[0])//因为是引用类型,所以敢这么玩
|
||||||
|
fixed (int* out_fm_ptr = &out_fm[0])
|
||||||
|
{
|
||||||
|
//out_fm[8] = out_fm[9] = out_fm[10] = out_fm[11] = 0; //本来就是注释->m2 = c1 = c2 = mem = 0;
|
||||||
|
out_fm_ptr[8] = out_fm_ptr[9] = out_fm_ptr[10] = out_fm_ptr[11] = 0;
|
||||||
|
|
||||||
//set_mem(c);
|
//set_mem(c);
|
||||||
if (imem_To_c == 8 || imem_To_c == 10 || imem_To_c == 11)
|
if (imem_To_c == 8 || imem_To_c == 10 || imem_To_c == 11)
|
||||||
out_fm[imem_To_c] = CH[c].mem_value;
|
out_fm_ptr[imem_To_c] = CH[c].mem_value;
|
||||||
|
|
||||||
//eg_out = volume_calc(c, 0);
|
//eg_out = volume_calc(c, 0);
|
||||||
eg_out = (uint)(CH_c_SLOT[0].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[0].AMmask));
|
eg_out = (uint)(CH_c_SLOT[0].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[0].AMmask));
|
||||||
@ -639,11 +641,11 @@ namespace MAME.Core
|
|||||||
//set_value1(c);
|
//set_value1(c);
|
||||||
if (iconnect1[c] == 12)
|
if (iconnect1[c] == 12)
|
||||||
{
|
{
|
||||||
out_fm[11] = out_fm[9] = out_fm[10] = CH[c].op1_out0;
|
out_fm_ptr[11] = out_fm_ptr[9] = out_fm_ptr[10] = CH[c].op1_out0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
out_fm[iconnect1[c]] = CH[c].op1_out0;
|
out_fm_ptr[iconnect1[c]] = CH[c].op1_out0;
|
||||||
}
|
}
|
||||||
|
|
||||||
CH[c].op1_out1 = 0;
|
CH[c].op1_out1 = 0;
|
||||||
@ -659,21 +661,21 @@ namespace MAME.Core
|
|||||||
eg_out = (uint)(CH_c_SLOT[1].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[1].AMmask));
|
eg_out = (uint)(CH_c_SLOT[1].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[1].AMmask));
|
||||||
if (eg_out < 832)
|
if (eg_out < 832)
|
||||||
{
|
{
|
||||||
out_fm[iconnect3[c]] += op_calc(CH_c_SLOT[1].phase, eg_out, out_fm[8]);
|
out_fm_ptr[iconnect3[c]] += op_calc(CH_c_SLOT[1].phase, eg_out, out_fm_ptr[8]);
|
||||||
}
|
}
|
||||||
//eg_out = volume_calc(c, 2);
|
//eg_out = volume_calc(c, 2);
|
||||||
eg_out = (uint)(CH_c_SLOT[2].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[2].AMmask));
|
eg_out = (uint)(CH_c_SLOT[2].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[2].AMmask));
|
||||||
if (eg_out < 832)
|
if (eg_out < 832)
|
||||||
{
|
{
|
||||||
out_fm[iconnect2[c]] += op_calc(CH_c_SLOT[2].phase, eg_out, out_fm[9]);
|
out_fm_ptr[iconnect2[c]] += op_calc(CH_c_SLOT[2].phase, eg_out, out_fm_ptr[9]);
|
||||||
}
|
}
|
||||||
//eg_out = volume_calc(c, 3);
|
//eg_out = volume_calc(c, 3);
|
||||||
eg_out = (uint)(CH_c_SLOT[3].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[3].AMmask));
|
eg_out = (uint)(CH_c_SLOT[3].vol_out + ((LFO_AM >> CH[c].ams) & CH_c_SLOT[3].AMmask));
|
||||||
if (eg_out < 832)
|
if (eg_out < 832)
|
||||||
{
|
{
|
||||||
out_fm[iconnect4[c]] += op_calc(CH_c_SLOT[3].phase, eg_out, out_fm[10]);
|
out_fm_ptr[iconnect4[c]] += op_calc(CH_c_SLOT[3].phase, eg_out, out_fm[10]);
|
||||||
}
|
}
|
||||||
CH[c].mem_value = out_fm[11];//mem;
|
CH[c].mem_value = out_fm_ptr[11];//mem;
|
||||||
if (CH[c].pms != 0)
|
if (CH[c].pms != 0)
|
||||||
{
|
{
|
||||||
if (((ST.mode & 0xC0) != 0) && (chnum == 2))
|
if (((ST.mode & 0xC0) != 0) && (chnum == 2))
|
||||||
@ -696,6 +698,7 @@ namespace MAME.Core
|
|||||||
CH_c_SLOT[3].phase += (uint)CH_c_SLOT[3].Incr;
|
CH_c_SLOT[3].phase += (uint)CH_c_SLOT[3].Incr;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public void refresh_fc_eg_slot(int type, int c, int s, int fc, int kc)
|
public void refresh_fc_eg_slot(int type, int c, int s, int fc, int kc)
|
||||||
{
|
{
|
||||||
int ksr = kc >> CH[c].SLOT[s].KSR;
|
int ksr = kc >> CH[c].SLOT[s].KSR;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user