diff options
Diffstat (limited to 'Hardsid.cs')
-rw-r--r-- | Hardsid.cs | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/Hardsid.cs b/Hardsid.cs new file mode 100644 index 0000000..74d80bc --- /dev/null +++ b/Hardsid.cs @@ -0,0 +1,100 @@ +// C# Hardsid interface +// Copyright (C) 2004 Ian Cowburn +// +// This program is free software; you can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +// $Id$ +// +using System; +using System.Runtime.InteropServices; + +namespace HardsidInterface +{ + /// <summary> + /// Main Hardsid class + /// </summary> + public class Hardsid + { + public delegate void DebugEvent(uint device, uint reg, uint val); + + public static event DebugEvent DebugWrite; + + public static void Init() + { + InitHardSID_Mapper(); + } + + public static int Count + { + get {return (int)GetHardSIDCount();} + } + + public static void Write(uint reg, uint val) + { + //System.Diagnostics.Debugger.Break(); + WriteToHardSID(0,Cast(reg),Cast(val)); + + if (DebugWrite!=null) + { + DebugWrite(0,reg,val); + } + } + + public static void Write(uint device, uint reg, uint val) + { + WriteToHardSID(Cast(device),Cast(reg),Cast(val)); + + if (DebugWrite!=null) + { + DebugWrite(device,reg,val); + } + } + + public static uint Read(uint device, uint reg) + { + return ReadFromHardSID(Cast(device),Cast(reg)); + } + + public static byte Read(uint reg) + { + return ReadFromHardSID(0,Cast(reg)); + } + + public static void DLLDebug(int i) + { + SetDebug(i); + } + + private static byte Cast(uint v) + { + return (byte)(v&0xffu); + } + + [DllImport ("HARDSID.DLL")] + private static extern byte GetHardSIDCount(); + + [DllImport ("HARDSID.DLL")] + private static extern void WriteToHardSID(byte id, byte reg, byte data); + + [DllImport ("HARDSID.DLL")] + private static extern byte ReadFromHardSID(byte id, byte reg); + + [DllImport ("HARDSID.DLL")] + private static extern byte InitHardSID_Mapper(); + + [DllImport ("HARDSID.DLL")] + private static extern void SetDebug(int i); + } +} |