Skip to content

Commit

Permalink
OPLLに対応
Browse files Browse the repository at this point in the history
OPMのYコマンド実装(忘れてた)
  • Loading branch information
kuma committed Oct 14, 2018
1 parent 6427a4e commit 0d00ff5
Show file tree
Hide file tree
Showing 20 changed files with 1,248 additions and 896 deletions.
4 changes: 4 additions & 0 deletions mml2vgm/Core/chips/AY8910.cs
Original file line number Diff line number Diff line change
Expand Up @@ -358,5 +358,9 @@ public override void CmdY(partWork pw, MML mml)
parent.OutData(pw.port0, (byte)adr, (byte)dat);
}

public override void CmdLoopExtProc(partWork pw, MML mml)
{
}

}
}
75 changes: 40 additions & 35 deletions mml2vgm/Core/chips/C140.cs
Original file line number Diff line number Diff line change
Expand Up @@ -693,16 +693,45 @@ public override void SetVolume(partWork pw)
}
}

public override void CmdY(partWork pw, MML mml)
public override void SetLfoAtKeyOn(partWork pw)
{
if (mml.args[0] is string) return;
for (int lfo = 0; lfo < 4; lfo++)
{
clsLfo pl = pw.lfo[lfo];
if (!pl.sw)
continue;

int adr = (int)mml.args[0];
byte dat = (byte)mml.args[1];
if (pl.param[5] != 1)
continue;

OutC140Port(pw, (byte)(adr >> 8), (byte)adr, dat);
pl.isEnd = false;
pl.value = (pl.param[0] == 0) ? pl.param[6] : 0;//ディレイ中は振幅補正は適用されない
pl.waitCounter = pl.param[0];
pl.direction = pl.param[2] < 0 ? -1 : 1;

if (pl.type == eLfoType.Vibrato)
{
SetFNum(pw);
}
if (pl.type == eLfoType.Tremolo)
{
pw.beforeVolume = -1;
SetVolume(pw);
}
}
}

public override void SetToneDoubler(partWork pw)
{
//実装不要
}

public override int GetToneDoublerShift(partWork pw, int octave, char noteCmd, int shift)
{
return 0;
}


public override void CmdPan(partWork pw, MML mml)
{
int l = (int)mml.args[0];
Expand Down Expand Up @@ -767,42 +796,18 @@ public override void CmdInstrument(partWork pw, MML mml)

}

public override void SetLfoAtKeyOn(partWork pw)
public override void CmdY(partWork pw, MML mml)
{
for (int lfo = 0; lfo < 4; lfo++)
{
clsLfo pl = pw.lfo[lfo];
if (!pl.sw)
continue;

if (pl.param[5] != 1)
continue;

pl.isEnd = false;
pl.value = (pl.param[0] == 0) ? pl.param[6] : 0;//ディレイ中は振幅補正は適用されない
pl.waitCounter = pl.param[0];
pl.direction = pl.param[2] < 0 ? -1 : 1;
if (mml.args[0] is string) return;

if (pl.type == eLfoType.Vibrato)
{
SetFNum(pw);
}
if (pl.type == eLfoType.Tremolo)
{
pw.beforeVolume = -1;
SetVolume(pw);
}
}
}
int adr = (int)mml.args[0];
byte dat = (byte)mml.args[1];

public override void SetToneDoubler(partWork pw)
{
//実装不要
OutC140Port(pw, (byte)(adr >> 8), (byte)adr, dat);
}

public override int GetToneDoublerShift(partWork pw, int octave, char noteCmd, int shift)
public override void CmdLoopExtProc(partWork pw, MML mml)
{
return 0;
}

}
Expand Down
89 changes: 45 additions & 44 deletions mml2vgm/Core/chips/HuC6280.cs
Original file line number Diff line number Diff line change
Expand Up @@ -467,16 +467,46 @@ public override void SetVolume(partWork pw)
}
}

public override void CmdY(partWork pw, MML mml)
public override void SetPCMDataBlock()
{
if (mml.args[0] is string) return;
if (use && pcmData != null && pcmData.Length > 0)
parent.OutData(pcmData);
}

byte adr = (byte)mml.args[0];
byte dat = (byte)mml.args[1];
public override void SetLfoAtKeyOn(partWork pw)
{
for (int lfo = 0; lfo < 4; lfo++)
{
clsLfo pl = pw.lfo[lfo];
if (!pl.sw)
continue;

OutHuC6280Port(pw.isSecondary, adr, dat);
if (pl.param[5] != 1)
continue;

pl.isEnd = false;
pl.value = (pl.param[0] == 0) ? pl.param[6] : 0;//ディレイ中は振幅補正は適用されない
pl.waitCounter = pl.param[0];
pl.direction = pl.param[2] < 0 ? -1 : 1;

if (pl.type == eLfoType.Vibrato)
{
SetFNum(pw);
}
if (pl.type == eLfoType.Tremolo)
{
pw.beforeVolume = -1;
SetVolume(pw);
}
}
}

public override void SetToneDoubler(partWork pw)
{
//実装不要
}


public override void CmdNoise(partWork pw, MML mml)
{
int n = (int)mml.args[0];
Expand Down Expand Up @@ -582,6 +612,16 @@ public override void CmdMode(partWork pw, MML mml)
//}
}

public override void CmdY(partWork pw, MML mml)
{
if (mml.args[0] is string) return;

byte adr = (byte)mml.args[0];
byte dat = (byte)mml.args[1];

OutHuC6280Port(pw.isSecondary, adr, dat);
}

public override void CmdLoopExtProc(partWork p, MML mml)
{
if (p.chip is HuC6280 && parent.huc6280[p.isSecondary ? 1 : 0].use)
Expand Down Expand Up @@ -658,44 +698,5 @@ public override void CmdNoiseToneMixer(partWork pw, MML mml)
}
}

public override void SetPCMDataBlock()
{
if (use && pcmData != null && pcmData.Length > 0)
parent.OutData(pcmData);
}

public override void SetLfoAtKeyOn(partWork pw)
{
for (int lfo = 0; lfo < 4; lfo++)
{
clsLfo pl = pw.lfo[lfo];
if (!pl.sw)
continue;

if (pl.param[5] != 1)
continue;

pl.isEnd = false;
pl.value = (pl.param[0] == 0) ? pl.param[6] : 0;//ディレイ中は振幅補正は適用されない
pl.waitCounter = pl.param[0];
pl.direction = pl.param[2] < 0 ? -1 : 1;

if (pl.type == eLfoType.Vibrato)
{
SetFNum(pw);
}
if (pl.type == eLfoType.Tremolo)
{
pw.beforeVolume = -1;
SetVolume(pw);
}
}
}

public override void SetToneDoubler(partWork pw)
{
//実装不要
}

}
}
Loading

0 comments on commit 0d00ff5

Please sign in to comment.