Skip to content

Commit

Permalink
- 5.9.0.0 Supported NanoDrive 6 UART for OPN2, DCSG.
Browse files Browse the repository at this point in the history
  • Loading branch information
110-kenichi committed Feb 20, 2025
1 parent d42f2ac commit 5f679fe
Show file tree
Hide file tree
Showing 18 changed files with 573 additions and 76 deletions.
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
MAmidiMEmo 5.8.2.0 Itoken (c)2019, 2025 / GPL-2.0
MAmidiMEmo 5.9.0.0 Itoken (c)2019, 2025 / GPL-2.0

*** What is the MAmidiMEmo? ***

Expand Down Expand Up @@ -274,6 +274,7 @@ e.g.) YM2151 has 8ch FM sounds, so you can play 8 chords on MIDI 1ch or sharing
[![Donate](https://img.shields.io/badge/Donate-PayPal-green.svg)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SNQ9JE3JAQMNQ)

*** Changes
- 5.9.0.0 Supported NanoDrive 6 UART for OPN2, DCSG.
- 5.8.2.0 Added Push/Pop Tone button on the FM Timbre Editor.
- 5.8.1.6 Supported a VRC7 VGM file by VGMPlayer w/ MAmiCart + VRC7 cart.
- 5.8.1.5 Re-fixed FTDI clk handling for NES.
Expand Down
8 changes: 5 additions & 3 deletions src/VSIF/VGMPlayer/FormMain.Designer.cs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions src/VSIF/VGMPlayer/FormMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1156,6 +1156,10 @@ private void checkBoxConnDCSG_CheckedChanged(object sender, EventArgs e)
if (comPortDCSG != null)
comPortDCSG.DeferredWriteData(0x15, (byte)0x0, (byte)127, (int)Settings.Default.BitBangWaitDCSG);
break;
case 7:
comPortDCSG = VsifManager.TryToConnectVSIF(VsifSoundModuleType.NanoDrive,
(PortId)Settings.Default.DCSG_Port, (int)Settings.Default.DCSGDiv, false);
break;
}

checkBoxConnDCSG.Checked = comPortDCSG != null;
Expand Down Expand Up @@ -1252,6 +1256,10 @@ private void checkBoxConnOPN2_CheckedChanged(object sender, EventArgs e)
if (comPortOPN2 != null)
comPortOPN2.DeferredWriteData(0x15, (byte)0x0, (byte)127, (int)Settings.Default.BitBangWaitOPN2);
break;
case 5:
comPortOPN2 = VsifManager.TryToConnectVSIF(VsifSoundModuleType.NanoDrive,
(PortId)Settings.Default.OPN2_Port, (int)Settings.Default.OPN2Div, false);
break;
}
checkBoxConnOPN2.Checked = comPortOPN2 != null;
comboBoxOPN2.Enabled = comPortOPN2 == null;
Expand Down
4 changes: 2 additions & 2 deletions src/VSIF/VGMPlayer/FormMain.resx
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAD+
ZQAAAk1TRnQBSQFMAgEBCgEAAUABGgFAARoBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
ZQAAAk1TRnQBSQFMAgEBCgEAAVABGgFQARoBIAEAASABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAGA
AwABYAMAAQEBAAEgBgABwMIAA3kB/wNbAf8BTQFMAU0B/wNLAf8BTQFMAU0B/wNZAf8DdwH/A6IB//8A
1QADcwH/A0wB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DSwH/A0sB/wNLAf8DbQH//wDFAAN+
Af8DSwH/A0sB/wNLAf8DTwH/A3QB/wOaAf8MAAKaAZsB/wN4Af8DUAH/A0sB/wNLAf8DSwH/A3kB//8A
Expand Down Expand Up @@ -577,7 +577,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAAB6
aQAAAk1TRnQBSQFMAgEBAgEAAUABGgFAARoBQAEAAUABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgEAAEB
aQAAAk1TRnQBSQFMAgEBAgEAAVABGgFQARoBQAEAAUABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgEAAEB
AgABQAMAAQEBAAEgBwABAWUAAwYBBwMSARcDHAEnAyUBNgM+AWoDRwGBA04BmANVAa8DWwHFA14B3QNg
AfMDYAHzA14B3QNbAcUDVQGvA04BmANHAYEDPgFqAyUBNgMcAScDEgEXAwYBB6gAAwYBBwMSARcDHAEn
AyUBNgM+AWoDRwGBA04BmANVAa8DWwHFA14B3QNgAfMDYAHzA14B3QNbAcUDVQGvA04BmANHAYEDPgFq
Expand Down
99 changes: 99 additions & 0 deletions src/VSIF/VGMPlayer/PortWriterNanoDrive.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
using FTD2XX_NET;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO.Ports;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;

namespace zanac.VGMPlayer
{
public class PortWriterNanoDrive : PortWriter
{
/// <summary>
///
/// </summary>
/// <param name="serialPort"></param>
public PortWriterNanoDrive(SerialPort serialPort) : base(serialPort)
{
}

/// <summary>
///
/// </summary>
/// <param name="ftdiPort"></param>
public PortWriterNanoDrive(FTDI ftdiPort, PortId portNo) : base(ftdiPort, portNo)
{
}

/// <summary>
///
/// </summary>
/// <param name="type"></param>
/// <param name="address"></param>
/// <param name="data"></param>
/// <param name="wait"></param>
public override void Write(PortWriteData[] data)
{
try
{
List<byte> ds = new List<byte>();
foreach (var dt in data)
{
switch (dt.Type)
{
//PSG (SN76489/SN76496) write value dd
case 0x50:
ds.Add(dt.Type);
ds.Add(dt.Data);
break;
//YM2612 port 0, write value dd to register aa
case 0x52:
//YM2612 port 1, write value dd to register aa
case 0x53:
ds.Add(dt.Type);
ds.Add(dt.Address);
ds.Add(dt.Data);
break;
}
}

byte[] dsa = ds.ToArray();
lock (LockObject)
SerialPort?.Write(dsa, 0, dsa.Length);
}
catch (Exception ex)
{
if (ex.GetType() == typeof(Exception))
throw;
else if (ex.GetType() == typeof(SystemException))
throw;
}
}

/// <summary>
///
/// </summary>
/// <param name="data"></param>
/// <param name="wait"></param>
public override void RawWrite(byte[] data, int[] wait)
{
try
{
lock (LockObject)
SerialPort?.Write(data, 0, data.Length);
}
catch (Exception ex)
{
if (ex.GetType() == typeof(Exception))
throw;
else if (ex.GetType() == typeof(SystemException))
throw;
}
}

}

}
95 changes: 58 additions & 37 deletions src/VSIF/VGMPlayer/SongBase.cs
Original file line number Diff line number Diff line change
Expand Up @@ -437,8 +437,8 @@ protected void LoadCoverArt()
completed = true;
},
() => { cancelled = true; });
}
break;
}
break;
}
if (completed)
break;
Expand Down Expand Up @@ -545,9 +545,9 @@ protected virtual void Dispose(bool disposing)
playTicTimer?.Dispose();
playTicTimer = null;

if(DeleteFileAfterStop)
if (DeleteFileAfterStop)
File.Delete(FileName);
if(DeleteCoverArtFileAfterStop)
if (DeleteCoverArtFileAfterStop)
File.Delete(CoverArtFile);
}
}
Expand Down Expand Up @@ -1274,6 +1274,9 @@ protected void deferredWriteOPNA_P0(VsifClient comPortOPNA, int adrs, int dt)
comPortOPNA.DeferredWriteData(0x00, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPNA);
}
break;
case VsifSoundModuleType.NanoDrive:
comPortOPNA.DeferredWriteData(0x52, (byte)adrs, (byte)dt, 0);
break;
}
}

Expand Down Expand Up @@ -1367,6 +1370,9 @@ protected void deferredWriteOPNA_P1(VsifClient comPortOPNA, int adrs, int dt)
else
comPortOPNA.DeferredWriteData(0x01, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPNA);
break;
case VsifSoundModuleType.NanoDrive:
comPortOPNA.DeferredWriteData(0x53, (byte)adrs, (byte)dt, 0);
break;
}
}

Expand Down Expand Up @@ -1402,18 +1408,23 @@ public void DeferredWriteOPN2_DAC(VsifClient comPortOPN2, int dacValue)
if (lastOpn2DacValue == dacValue)
return;

if (comPortOPN2.SoundModuleType == VsifSoundModuleType.MSX_FTDI ||
comPortOPN2.SoundModuleType == VsifSoundModuleType.TurboR_FTDI)
switch (comPortOPN2.SoundModuleType)
{
comPortOPN2.DeferredWriteData(0x14, (byte)0x2a, (byte)dacValue, (int)Program.Default.BitBangWaitOPN2);
}
else //Genesis
{
comPortOPN2.DeferredWriteDataPrior(
new byte[] { 0, 0 },
new byte[] { 0x04, 0x8 },
new byte[] { (byte)0x2a, (byte)dacValue },
(int)Program.Default.BitBangWaitOPN2);
case VsifSoundModuleType.MSX_FTDI:
case VsifSoundModuleType.TurboR_FTDI:
comPortOPN2.DeferredWriteData(0x14, (byte)0x2a, (byte)dacValue, (int)Program.Default.BitBangWaitOPN2);
break;
case VsifSoundModuleType.NanoDrive:
comPortOPN2.DeferredWriteData(0x52, (byte)0x2a, (byte)dacValue, (int)Program.Default.BitBangWaitOPN2);
break;
default:
//Genesis
comPortOPN2.DeferredWriteDataPrior(
new byte[] { 0, 0 },
new byte[] { 0x04, 0x8 },
new byte[] { (byte)0x2a, (byte)dacValue },
(int)Program.Default.BitBangWaitOPN2);
break;
}
lastOpn2DacValue = dacValue;
}
Expand Down Expand Up @@ -1552,18 +1563,23 @@ protected void deferredWriteOPN2_P0(VsifClient comPortOPN2, int adrs, int dt, ui
/// <param name="dt"></param>
protected void deferredWriteOPN2_P0(VsifClient comPortOPN2, int adrs, int dt)
{
if (comPortOPN2.SoundModuleType == VsifSoundModuleType.MSX_FTDI ||
comPortOPN2.SoundModuleType == VsifSoundModuleType.TurboR_FTDI)
switch (comPortOPN2.SoundModuleType)
{
comPortOPN2.DeferredWriteData(0x10, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
}
else //Genesis
{
comPortOPN2.DeferredWriteData(
new byte[] { 0, 0 },
new byte[] { 0x04, 0x8 },
new byte[] { (byte)adrs, (byte)dt },
(int)Program.Default.BitBangWaitOPN2);
case VsifSoundModuleType.MSX_FTDI:
case VsifSoundModuleType.TurboR_FTDI:
comPortOPN2.DeferredWriteData(0x10, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
break;
case VsifSoundModuleType.NanoDrive:
comPortOPN2.DeferredWriteData(0x52, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
break;
default:
//Genesis
comPortOPN2.DeferredWriteData(
new byte[] { 0, 0 },
new byte[] { 0x04, 0x8 },
new byte[] { (byte)adrs, (byte)dt },
(int)Program.Default.BitBangWaitOPN2);
break;
}
}

Expand Down Expand Up @@ -1628,18 +1644,23 @@ protected void deferredWriteOPN2_P1(VsifClient comPortOPN2, int adrs, int dt, ui
/// <param name="dt"></param>
protected void deferredWriteOPN2_P1(VsifClient comPortOPN2, int adrs, int dt)
{
if (comPortOPN2.SoundModuleType == VsifSoundModuleType.MSX_FTDI ||
comPortOPN2.SoundModuleType == VsifSoundModuleType.TurboR_FTDI)
{
comPortOPN2.DeferredWriteData(0x11, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
}
else
switch (comPortOPN2.SoundModuleType)
{
comPortOPN2.DeferredWriteData(
new byte[] { 0, 0 },
new byte[] { 0x0C, 0x10 },
new byte[] { (byte)adrs, (byte)dt },
(int)Program.Default.BitBangWaitOPN2);
case VsifSoundModuleType.MSX_FTDI:
case VsifSoundModuleType.TurboR_FTDI:
comPortOPN2.DeferredWriteData(0x11, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
break;
case VsifSoundModuleType.NanoDrive:
comPortOPN2.DeferredWriteData(0x53, (byte)adrs, (byte)dt, (int)Program.Default.BitBangWaitOPN2);
break;
default:
//Genesis
comPortOPN2.DeferredWriteData(
new byte[] { 0, 0 },
new byte[] { 0x0C, 0x10 },
new byte[] { (byte)adrs, (byte)dt },
(int)Program.Default.BitBangWaitOPN2);
break;
}
}

Expand Down
1 change: 1 addition & 0 deletions src/VSIF/VGMPlayer/VGMPlayer.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@
<Compile Include="FormWeb.Designer.cs">
<DependentUpon>FormWeb.cs</DependentUpon>
</Compile>
<Compile Include="PortWriterNanoDrive.cs" />
<Compile Include="TurboLink\TurboEvedriveManager.cs" />
<Compile Include="Gimic\GimicManager.cs" />
<Compile Include="Gimic\NativeC86CtlWrapper.cs" />
Expand Down
Loading

0 comments on commit 5f679fe

Please # to comment.