去掉不必要的内容

This commit is contained in:
sin365 2025-01-21 14:22:25 +08:00
parent 83224f7024
commit 0192ae4f1b
45 changed files with 136 additions and 5261 deletions

View File

@ -1,8 +0,0 @@
fileFormatVersion: 2
guid: f996a7038b3e4a04bbc4722c030e7c0e
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,263 +0,0 @@
using System;
using System.Runtime.InteropServices;
namespace MAME.Core.AxiBitmap
{
[StructLayout(LayoutKind.Explicit)]
public struct AxiColor
{
[FieldOffset(0)]
public int sdColor;
[FieldOffset(0)]
public byte r;
[FieldOffset(1)]
public byte g;
[FieldOffset(2)]
public byte b;
[FieldOffset(3)]
public byte a;
public AxiColor(byte _r, byte _g, byte _b)
{
r = g = b = a = 0;
sdColor = 0;
r = _r;
g = _g;
b = _b;
a = byte.MaxValue;
}
public AxiColor(byte _r, byte _g, byte _b, byte _a)
{
r = g = b = a = 0;
sdColor = 0;
r = _r;
g = _g;
b = _b;
a = _a;
}
public static AxiColor FromArgb(int argb)
{
return new AxiColor { sdColor = argb };
}
public override string ToString()
{
return String.Format("{0:X8}", sdColor);
}
public static int ToArgb(AxiColor color)
{
return color.sdColor;
}
#region
public static AxiColor Transparent => new AxiColor(0, 0, 0, 0);
public static AxiColor AliceBlue => new AxiColor(240, 248, 255);
public static AxiColor AntiqueWhite => new AxiColor(250, 235, 215);
public static AxiColor Aqua => new AxiColor(0, 255, 255);
public static AxiColor Aquamarine => new AxiColor(127, 255, 212);
public static AxiColor Azure => new AxiColor(240, 255, 255);
public static AxiColor Beige => new AxiColor(245, 245, 220);
public static AxiColor Bisque => new AxiColor(255, 228, 196);
public static AxiColor Black => new AxiColor(0, 0, 0);
public static AxiColor BlanchedAlmond => new AxiColor(255, 235, 205);
public static AxiColor Blue => new AxiColor(0, 0, 255);
public static AxiColor BlueViolet => new AxiColor(138, 43, 226);
public static AxiColor Brown => new AxiColor(165, 42, 42);
public static AxiColor BurlyWood => new AxiColor(222, 184, 135);
public static AxiColor CadetBlue => new AxiColor(95, 158, 160);
public static AxiColor Chartreuse => new AxiColor(127, 255, 0);
public static AxiColor Chocolate => new AxiColor(210, 105, 30);
public static AxiColor Coral => new AxiColor(255, 127, 80);
public static AxiColor CornflowerBlue => new AxiColor(100, 149, 237);
public static AxiColor Cornsilk => new AxiColor(255, 248, 220);
public static AxiColor Crimson => new AxiColor(220, 20, 60);
public static AxiColor Cyan => new AxiColor(0, 255, 255);
public static AxiColor DarkBlue => new AxiColor(0, 0, 139);
public static AxiColor DarkCyan => new AxiColor(0, 139, 139);
public static AxiColor DarkGoldenrod => new AxiColor(184, 134, 11);
public static AxiColor DarkGray => new AxiColor(169, 169, 169);
public static AxiColor DarkGreen => new AxiColor(0, 100, 0);
public static AxiColor DarkKhaki => new AxiColor(189, 183, 107);
public static AxiColor DarkMagenta => new AxiColor(139, 0, 139);
public static AxiColor DarkOliveGreen => new AxiColor(85, 107, 47);
public static AxiColor DarkOrange => new AxiColor(255, 140, 0);
public static AxiColor DarkOrchid => new AxiColor(153, 50, 204);
public static AxiColor DarkRed => new AxiColor(139, 0, 0);
public static AxiColor DarkSalmon => new AxiColor(233, 150, 122);
public static AxiColor DarkSeaGreen => new AxiColor(143, 188, 143);
public static AxiColor DarkSlateBlue => new AxiColor(72, 61, 139);
public static AxiColor DarkSlateGray => new AxiColor(47, 79, 79);
public static AxiColor DarkViolet => new AxiColor(148, 0, 211);
public static AxiColor DeepPink => new AxiColor(255, 20, 147);
public static AxiColor DeepSkyBlue => new AxiColor(0, 191, 255);
public static AxiColor DimGray => new AxiColor(105, 105, 105);
public static AxiColor DodgerBlue => new AxiColor(30, 144, 255);
public static AxiColor FireBrick => new AxiColor(178, 34, 34);
public static AxiColor FloralWhite => new AxiColor(255, 250, 240);
public static AxiColor ForestGreen => new AxiColor(34, 139, 34);
public static AxiColor Fuchsia => new AxiColor(255, 0, 255);
public static AxiColor Gainsboro => new AxiColor(220, 220, 220);
public static AxiColor GhostWhite => new AxiColor(248, 248, 255);
public static AxiColor Gold => new AxiColor(255, 215, 0);
public static AxiColor Goldenrod => new AxiColor(218, 165, 32);
public static AxiColor Gray => new AxiColor(128, 128, 128);
public static AxiColor Green => new AxiColor(0, 128, 0);
public static AxiColor GreenYellow => new AxiColor(173, 255, 47);
public static AxiColor Honeydew => new AxiColor(240, 255, 240);
public static AxiColor HotPink => new AxiColor(255, 105, 180);
public static AxiColor IndianRed => new AxiColor(205, 92, 92);
public static AxiColor Indigo => new AxiColor(75, 0, 130);
public static AxiColor Ivory => new AxiColor(255, 255, 240);
public static AxiColor Khaki => new AxiColor(240, 230, 140);
public static AxiColor Lavender => new AxiColor(230, 230, 250);
public static AxiColor LavenderBlush => new AxiColor(255, 240, 245);
public static AxiColor LawnGreen => new AxiColor(124, 252, 0);
public static AxiColor LemonChiffon => new AxiColor(255, 250, 205);
public static AxiColor LightBlue => new AxiColor(173, 216, 230);
public static AxiColor LightCoral => new AxiColor(240, 128, 128);
public static AxiColor LightCyan => new AxiColor(224, 255, 255);
public static AxiColor LightGoldenrodYellow => new AxiColor(250, 250, 210);
public static AxiColor LightGray => new AxiColor(211, 211, 211);
public static AxiColor LightGreen => new AxiColor(144, 238, 144);
public static AxiColor LightPink => new AxiColor(255, 182, 193);
public static AxiColor LightSalmon => new AxiColor(255, 160, 122);
public static AxiColor LightSeaGreen => new AxiColor(32, 178, 170);
public static AxiColor LightSkyBlue => new AxiColor(135, 206, 250);
public static AxiColor LightSlateGray => new AxiColor(119, 136, 153);
public static AxiColor LightYellow => new AxiColor(255, 255, 224);
public static AxiColor Lime => new AxiColor(0, 255, 0);
public static AxiColor LimeGreen => new AxiColor(50, 205, 50);
public static AxiColor Linen => new AxiColor(250, 240, 230);
public static AxiColor Magenta => new AxiColor(255, 0, 255);
public static AxiColor Maroon => new AxiColor(176, 48, 96);
public static AxiColor MediumAquamarine => new AxiColor(102, 205, 170);
public static AxiColor MediumBlue => new AxiColor(0, 0, 205);
public static AxiColor MediumOrchid => new AxiColor(186, 85, 211);
public static AxiColor MediumPurple => new AxiColor(147, 112, 219);
public static AxiColor MediumSeaGreen => new AxiColor(60, 179, 113);
public static AxiColor MediumSlateBlue => new AxiColor(123, 104, 238);
public static AxiColor MediumSpringGreen => new AxiColor(0, 250, 154);
public static AxiColor MediumTurquoise => new AxiColor(72, 209, 204);
public static AxiColor MediumVioletRed => new AxiColor(199, 21, 133);
public static AxiColor MidnightBlue => new AxiColor(25, 25, 112);
public static AxiColor MintCream => new AxiColor(245, 255, 250);
public static AxiColor MistyRose => new AxiColor(255, 228, 225);
public static AxiColor Moccasin => new AxiColor(255, 228, 181);
public static AxiColor NavajoWhite => new AxiColor(255, 222, 173);
public static AxiColor Navy => new AxiColor(0, 0, 128);
public static AxiColor OldLace => new AxiColor(253, 245, 230);
public static AxiColor Olive => new AxiColor(128, 128, 0);
public static AxiColor OliveDrab => new AxiColor(107, 142, 35);
public static AxiColor Orange => new AxiColor(255, 165, 0);
public static AxiColor OrangeRed => new AxiColor(255, 69, 0);
public static AxiColor Orchid => new AxiColor(218, 112, 214);
public static AxiColor PaleGoldenrod => new AxiColor(238, 232, 170);
public static AxiColor PaleGreen => new AxiColor(152, 251, 152);
public static AxiColor PaleTurquoise => new AxiColor(175, 238, 238);
public static AxiColor PaleVioletRed => new AxiColor(219, 112, 147);
public static AxiColor PapayaWhip => new AxiColor(255, 239, 213);
public static AxiColor PeachPuff => new AxiColor(255, 218, 185);
public static AxiColor Peru => new AxiColor(205, 133, 63);
public static AxiColor Pink => new AxiColor(255, 192, 203);
public static AxiColor Plum => new AxiColor(221, 160, 221);
public static AxiColor PowderBlue => new AxiColor(176, 224, 230);
public static AxiColor Purple => new AxiColor(160, 32, 240);
public static AxiColor Red => new AxiColor(255, 0, 0);
public static AxiColor RosyBrown => new AxiColor(188, 143, 143);
public static AxiColor RoyalBlue => new AxiColor(65, 105, 225);
public static AxiColor SaddleBrown => new AxiColor(139, 69, 19);
public static AxiColor Salmon => new AxiColor(250, 128, 114);
public static AxiColor SandyBrown => new AxiColor(244, 164, 96);
public static AxiColor SeaGreen => new AxiColor(46, 139, 87);
public static AxiColor SeaShell => new AxiColor(255, 245, 238);
public static AxiColor Sienna => new AxiColor(160, 82, 45);
public static AxiColor Silver => new AxiColor(192, 192, 192);
public static AxiColor SkyBlue => new AxiColor(135, 206, 235);
public static AxiColor SlateBlue => new AxiColor(106, 90, 205);
public static AxiColor SlateGray => new AxiColor(112, 128, 144);
public static AxiColor Snow => new AxiColor(255, 250, 250);
public static AxiColor SpringGreen => new AxiColor(0, 255, 127);
public static AxiColor SteelBlue => new AxiColor(70, 130, 180);
public static AxiColor Tan => new AxiColor(210, 180, 140);
public static AxiColor Teal => new AxiColor(0, 128, 128);
public static AxiColor Thistle => new AxiColor(216, 191, 216);
public static AxiColor Tomato => new AxiColor(255, 99, 71);
public static AxiColor Turquoise => new AxiColor(64, 224, 208);
public static AxiColor Violet => new AxiColor(238, 130, 238);
public static AxiColor Wheat => new AxiColor(245, 222, 179);
public static AxiColor White => new AxiColor(255, 255, 255);
public static AxiColor WhiteSmoke => new AxiColor(245, 245, 245);
public static AxiColor Yellow => new AxiColor(255, 255, 0);
public static AxiColor YellowGreen => new AxiColor(154, 205, 50);
#endregion
}
public static class AxiBitmapEx
{
public static int ToArgb(this AxiColor color)
{
return (color.a << 24) | (color.r << 16) | (color.g << 8) | color.b;
}
//public static void CloneIntColorArr(int[] baseBitmap, int[] targetBitmap, int baseWidth, int baseHeight, Rectangle rect)
//{
// // 检查矩形是否超出位图边界
// if (rect.X < 0 || rect.X + rect.Width > baseWidth || rect.Y < 0 || rect.Y + rect.Height > baseHeight)
// {
// throw new ArgumentException("Rectangle is out of bitmap bounds.");
// }
// int baseStartIndex = rect.Y * baseWidth + rect.X;
// int targetStartIndex = rect.Y * rect.Width;
// for (int y = 0; y < rect.Height; y++)
// {
// // 注意这里使用了rect.Width作为要拷贝的元素数量而不是baseWidth
// Buffer.BlockCopy(baseBitmap, baseStartIndex + y * baseWidth, targetBitmap, targetStartIndex + y * rect.Width, rect.Width * sizeof(int));
// // 或者使用Array.Copy但要注意类型的大小在这里是int
// // Array.Copy(baseBitmap, baseStartIndex + y * baseWidth, targetBitmap, targetStartIndex + y * rect.Width, rect.Width);
// }
//}
public static void CloneIntColorArr(int[] baseBitmap, int[] targetBitmap, int Width, int Height, Rectangle rect)
{
// 检查矩形是否超出位图边界
if (rect.X < 0 || rect.Right > Width || rect.Y < 0 || rect.Bottom > Height)
{
throw new ArgumentException("out of");
}
int srcStartIndex = rect.Y * Width + rect.X;
for (int y = 0; y < rect.Height; y++)
{
Array.Copy(baseBitmap, srcStartIndex + y * Width, targetBitmap, y * rect.Width, rect.Width);
}
}
public struct Rectangle
{
public int X;
public int Y;
public int Width;
public int Height;
public Rectangle(int x, int y, int width, int height)
{
X = x;
Y = y;
Width = width;
Height = height;
}
public int Right => X + Width;
public int Bottom => Y + Height;
public int Area { get { return Width * Height; } }
public bool Contains(int pointX, int pointY) { return pointX >= X && pointX < X + Width && pointY >= Y && pointY < Y + Height; }
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: b94fc4b46eb73b541b66a64f2831e49c
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -7,7 +7,7 @@ namespace MAME.Core
public class MameMainMotion
{
public string tsslStatus;
public CheatMotion cheatmotion;
//public CheatMotion cheatmotion;
public M68000Motion m68000motion;
public Z80Motion z80motion;
public M6809Motion m6809motion;
@ -26,7 +26,7 @@ namespace MAME.Core
public MameMainMotion()
{
neogeomotion = new NeogeoMotion();
cheatmotion = new CheatMotion();
//cheatmotion = new CheatMotion();
m68000motion = new M68000Motion();
m6809motion = new M6809Motion();
z80motion = new Z80Motion();
@ -204,8 +204,6 @@ namespace MAME.Core
public void StartGame()
{
bIsNewThreadMode = false;
M68000Motion.iStatus = 0;
M68000Motion.iValue = 0;
Mame.exit_pending = false;
Mame.mame_execute_UpdateMode_Start();
@ -214,8 +212,6 @@ namespace MAME.Core
public void StartGame_WithNewThread()
{
bIsNewThreadMode = true;
M68000Motion.iStatus = 0;
M68000Motion.iValue = 0;
Mame.exit_pending = false;
//初始化停帧信号量

View File

@ -1,138 +0,0 @@
using cpu.m68000;
using cpu.nec;
using System;
using System.Collections.Generic;
namespace MAME.Core
{
public unsafe partial class CheatMotion
{
public enum LockState
{
LOCK_NONE = 0,
LOCK_SECOND,
LOCK_FRAME,
}
public LockState lockState = LockState.LOCK_NONE;
public List<int[]> lsCheatdata1;
public List<int[]> lsCheatdata2;
private string[] sde6 = new string[1] { "," }, sde7 = new string[1] { ";" }, sde9 = new string[1] { "$" }, sde10 = new string[] { "+" };
public Func<int, byte> CheatReadByte;
public Action<int, byte> CheatWriteByte;
#region
List<string> mTxList_tbResult = new List<string>();
#endregion
public CheatMotion()
{
cheatForm_Load();
}
private void cheatForm_Load()
{
switch (Machine.sBoard)
{
case "CPS-1":
case "CPS-1(QSound)":
case "CPS2":
case "Data East":
case "Tehkan":
case "Neo Geo":
case "Taito B":
case "Konami 68000":
case "Capcom":
CheatReadByte = (int i1) => { return Memory.mainram_Ptr[i1]; };
CheatWriteByte = (int i1, byte b1) => { Memory.mainram_Ptr[i1] = b1; };
break;
case "Namco System 1":
CheatReadByte = (int i1) => { return Namcos1.N0ReadMemory((ushort)i1); };
CheatWriteByte = (int i1, byte b1) => { Namcos1.N0WriteMemory((ushort)i1, b1); };
break;
case "IGS011":
CheatReadByte = (int i1) => { return (byte)MC68000.m1.ReadByte(i1); };
CheatWriteByte = (int i1, byte b1) => { MC68000.m1.WriteByte(i1, (sbyte)b1); };
break;
case "PGM":
CheatReadByte = (int i1) => { return (byte)MC68000.m1.ReadByte(i1); };
CheatWriteByte = (int i1, byte b1) => { MC68000.m1.WriteByte(i1, (sbyte)b1); };
break;
case "M72":
case "M92":
CheatReadByte = (int i1) => { return Nec.nn1[0].ReadByte(i1); };
CheatWriteByte = (int i1, byte b1) => { Nec.nn1[0].WriteByte(i1, b1); };
break;
}
}
private void GetCheatdata()
{
// lsCheatdata1 = new List<int[]>();
// lsCheatdata2 = new List<int[]>();
// int i1, i2, i3, iAddress, iOffsetAddress1, iOffsetAddress2, iValue2, n3;
// string[] ss1, ss2, ss3;
// foreach (ListViewItem item1 in listViewControl1.myListView.Items)
// {
// if (item1.Checked)
// {
// i1 = listViewControl1.myListView.Items.IndexOf(item1);
// i2 = Array.IndexOf(listViewControl1.ssCItem[i1], item1.SubItems[1].Text);
// ss1 = listViewControl1.ssCValue[i1][i2].Split(sde7, StringSplitOptions.RemoveEmptyEntries);
// n3 = ss1.Length;
// for (i3 = 0; i3 < n3; i3++)
// {
// ss3 = ss1[i3].Split(sde6, StringSplitOptions.RemoveEmptyEntries);
// iValue2 = Convert.ToInt32(ss3[1], 16);
// if (ss3[0].IndexOf("$") >= 0)
// {
// ss2 = ss3[0].Split(sde9, StringSplitOptions.RemoveEmptyEntries);
// iOffsetAddress1 = Convert.ToInt32(ss2[0], 16);
// iOffsetAddress2 = Convert.ToInt32(ss2[1], 16);
// lsCheatdata1.Add(new int[] { iOffsetAddress1, iOffsetAddress2, iValue2 });
// }
// else if (ss3[0].IndexOf("+") >= 0)
// {
// ss2 = ss3[0].Split(sde10, StringSplitOptions.RemoveEmptyEntries);
// iOffsetAddress1 = Convert.ToInt32(ss2[0], 16);
// iOffsetAddress2 = Convert.ToInt32(ss2[1], 16);
// iAddress = iOffsetAddress1 + iOffsetAddress2;
// lsCheatdata2.Add(new int[] { iAddress, iValue2 });
// }
// else
// {
// iAddress = Convert.ToInt32(ss3[0], 16);
// lsCheatdata2.Add(new int[] { iAddress, iValue2 });
// }
// }
// }
// }
}
public void ApplyCheat()
{
int iAddress, iValue1;
foreach (int[] ii1 in lsCheatdata1)
{
//iAddress = bbMem[ii1[0]] * 0x100 + bbMem[ii1[0] + 1] + ii1[1];
//iValue1 = bbMem[iAddress];
//bbMem[iAddress] = (byte)ii1[2];
iAddress = CheatReadByte(ii1[0]) * 0x100 + CheatReadByte(ii1[0] + 1) + ii1[1];
iValue1 = CheatReadByte(iAddress);
CheatWriteByte(iAddress, (byte)ii1[2]);
if (iValue1 != ii1[2])
{
mTxList_tbResult.Add(iAddress.ToString("X4") + " " + iValue1.ToString("X2") + " " + ii1[2].ToString("X2") + "\r\n");
}
}
foreach (int[] ii1 in lsCheatdata2)
{
iAddress = ii1[0];
//iValue1 = bbMem[iAddress];
//bbMem[ii1[0]] = (byte)ii1[1];
iValue1 = CheatReadByte(iAddress);
CheatWriteByte(ii1[0], (byte)ii1[1]);
if (iValue1 != ii1[1])
{
mTxList_tbResult.Add(ii1[0].ToString("X4") + " " + iValue1.ToString("X2") + " " + ii1[1].ToString("X2") + "\r\n");
}
}
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 847edc5d4d82b7448a62f92c9d3dee10
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,36 +1,7 @@
using System.Collections.Generic;
namespace MAME.Core
namespace MAME.Core
{
public partial class CpsMotion
{
private string[] sde2 = new string[] { "," };
private int locationX, locationY;
#region
public bool cbLockpal = false;
public bool cbRowscroll = false;
public string tbInput = string.Empty;
public bool cbL0 = false;
public bool cbL1 = false;
public bool cbL2 = false;
public bool cbL3 = false;
public string tbFile = string.Empty;
public string tbPoint = string.Empty;
public int cbLayer = 0;
public string tbCode = string.Empty;
public string tbColor = string.Empty;
public string tbScroll1x = string.Empty;
public string tbScroll1y = string.Empty;
public string tbScroll2x = string.Empty;
public string tbScroll2y = string.Empty;
public string tbScroll3x = string.Empty;
public string tbScroll3y = string.Empty;
public string tbScrollsx = string.Empty;
public string tbScrollsy = string.Empty;
public List<string> tbResult = new List<string>();
#endregion
public CpsMotion()
{
}

View File

@ -2,18 +2,8 @@
{
public class Konami68000Motion
{
private int locationX, locationY;
#region
public bool cbT0 = false;
public bool cbT1 = false;
public bool cbT2 = false;
public bool cbSprite = false;
public string tbSprite;
#endregion
public Konami68000Motion()
{
tbSprite = "0000-4000";
}
}
}

View File

@ -6,187 +6,8 @@ namespace MAME.Core
{
public class M68000Motion
{
private string[] sde6 = new string[1] { "," }, sde7 = new string[1] { ";" }, sde9 = new string[1] { "$" }, sde10 = new string[] { "+" };
private bool bLogNew, bNew;
public static int iStatus, iRAddress, iWAddress, iROp, iWOp, iValue;
private int PPCTill, PPC, Addr;
private ulong CyclesTill, TotalExecutedCycles;
private List<int> lsAddr = new List<int>();
private List<int> lsPPC = new List<int>();
#region
string[] mTxList_tbDs;
string[] mTxList_tbAs;
Boolean[] mBList_cbDs;
Boolean[] mBList_cbAs;
List<Boolean> mBList_lsCB;
string mTx_tbPPC = string.Empty;
string mTx_tbOP = string.Empty;
Boolean b_cbS = false;
Boolean b_cbM = false;
Boolean b_cbX = false;
Boolean b_cbN = false;
Boolean b_cbZ = false;
Boolean b_cbV = false;
Boolean b_cbC = false;
Boolean b_cbPC = false;
Boolean b_cbTotal = false;
Boolean b_cbLog = false;
string mTx_tbIML = string.Empty;
string mTx_tbUSP = string.Empty;
string mTx_tbSSP = string.Empty;
string mTx_tbCycles = string.Empty;
string mTx_tbPC = string.Empty;
string mTx_tbDisassemble = string.Empty;
List<string> mTxList_tbResult = new List<string>();
public string mTx_tsslStatus = string.Empty;
#endregion
public enum M68000State
{
M68000_NONE = 0,
M68000_RUN,
M68000_STEP,
M68000_STEP2,
M68000_STEP3,
M68000_STOP,
}
public static M68000State m68000State, m68000FState;
public M68000Motion()
{
int i;
mTxList_tbDs = new string[8];
mTxList_tbAs = new string[8];
mBList_cbDs = new bool[8];
mBList_cbAs = new bool[8];
for (i = 0; i < 8; i++)
{
mTxList_tbDs[i] = string.Empty;
mBList_cbDs[i] = false;
mTxList_tbAs[i] = string.Empty;
mBList_cbAs[i] = false;
}
b_cbPC = false;
b_cbTotal = false;
mBList_lsCB = new List<bool>();
for (i = 0; i < 8; i++)
{
mBList_lsCB.Add(mBList_cbDs[i]);
mBList_lsCB.Add(mBList_cbAs[i]);
}
mBList_lsCB.Add(b_cbPC);
}
//public void GetData()
//{
// int i;
// string sDisassemble, sDisassemble2 = "";
// for (i = 0; i < 8; i++)
// {
// mTxList_tbDs[i] = MC68000.m1.D[i].u32.ToString("X8");
// mTxList_tbAs[i] = MC68000.m1.A[i].u32.ToString("X8");
// }
// mTx_tbPPC = MC68000.m1.PPC.ToString("X6");
// mTx_tbOP = MC68000.m1.op.ToString("X4");
// b_cbS = MC68000.m1.S;
// b_cbM = MC68000.m1.M;
// b_cbX = MC68000.m1.X;
// b_cbN = MC68000.m1.N;
// b_cbZ = MC68000.m1.Z;
// b_cbV = MC68000.m1.V;
// b_cbC = MC68000.m1.C;
// mTx_tbIML = MC68000.m1.InterruptMaskLevel.ToString();
// mTx_tbUSP = MC68000.m1.usp.ToString("X8");
// mTx_tbSSP = MC68000.m1.ssp.ToString("X8");
// mTx_tbCycles = MC68000.m1.TotalExecutedCycles.ToString("X16");
// mTx_tbPC = MC68000.m1.PC.ToString("X6");
// sDisassemble = MC68000.m1.Disassemble(MC68000.m1.PPC).ToString();
// mTx_tbDisassemble = sDisassemble;
// sDisassemble2 = sDisassemble;
// foreach (bool cb in mBList_lsCB)
// {
// if (cb)
// {
// //sDisassemble2 += " " + cb + cb.TB.Text;
// sDisassemble2 += " " + cb + cb;
// }
// }
// if (b_cbTotal)
// {
// sDisassemble2 = MC68000.m1.TotalExecutedCycles.ToString("X") + " " + sDisassemble2;
// }
// mTxList_tbResult.Add(sDisassemble2 + "\r\n");
//}
//public void m68000_start_debug()
//{
// if (bLogNew && lsPPC.IndexOf(MC68000.m1.PPC) < 0)
// {
// m68000FState = m68000State;
// m68000State = M68000State.M68000_STOP;
// lsPPC.Add(MC68000.m1.PPC);
// mTxList_tbResult.Add(MC68000.m1.Disassemble(MC68000.m1.PPC).ToString() + "\r\n");
// m68000State = m68000FState;
// }
// PPC = MC68000.m1.PPC;
// TotalExecutedCycles = MC68000.m1.TotalExecutedCycles;
// if (iStatus == 1)
// {
// iStatus = 0;
// }
// if (m68000State == M68000State.M68000_STEP2)
// {
// if (MC68000.m1.PPC == PPCTill)
// {
// m68000State = M68000State.M68000_STOP;
// }
// }
// if (m68000State == M68000State.M68000_STEP3)
// {
// if (MC68000.m1.TotalExecutedCycles >= CyclesTill)
// {
// m68000State = M68000State.M68000_STOP;
// }
// }
// if (b_cbLog == true && (m68000State == M68000State.M68000_STEP2 || m68000State == M68000State.M68000_STEP3))
// {
// GetData();
// }
// if (m68000State == M68000State.M68000_STOP)
// {
// GetData();
// mTx_tsslStatus = "m68000 stop";
// }
// while (m68000State == M68000State.M68000_STOP)
// {
// }
//}
//public void m68000_stop_debug()
//{
// if (iStatus == 1)
// {
// GetData();
// m68000State = M68000State.M68000_STOP;
// mTx_tsslStatus = "m68000 stop";
// iStatus = 2;
// }
// if (m68000State == M68000State.M68000_STEP)
// {
// m68000State = M68000State.M68000_STOP;
// mTx_tsslStatus = "m68000 stop";
// }
// if (iStatus == 0)
// {
// /*if(Memory.mainram_Ptr[0xd1b]==0x05)
// {
// iStatus = 1;
// GetData();
// m68000State = M68000State.M68000_STOP;
// tsslStatus.Text = "m68000 stop";
// }*/
// }
//}
}
}

View File

@ -6,100 +6,8 @@ namespace MAME.Core
public partial class M6809Motion
{
//private Disassembler disassembler;
private bool bLogNew;
public static int iStatus;
private int PPCTill;
private ulong CyclesTill;
private List<ushort> lPPC = new List<ushort>();
public static CPUState m6809State, m6809FState;
#region
public List<string> tbResult = new List<string>();
public string tsslStatus = string.Empty;
public string tbD = string.Empty;
public string tbDp = string.Empty;
public string tbU = string.Empty;
public string tbS = string.Empty;
public string tbX = string.Empty;
public string tbY = string.Empty;
public string tbCc = string.Empty;
public string tbIrqstate0 = string.Empty;
public string tbIrqstate1 = string.Empty;
public string tbIntstate = string.Empty;
public string tbNmistate = string.Empty;
public string tbPPC = string.Empty;
public string tbCycles = string.Empty;
public string tbDisassemble = string.Empty;
#endregion
public M6809Motion()
{
}
public void GetData()
{
int reg, offset;
reg = M6809.mm1[0].PPC.LowWord / 0x2000;
offset = M6809.mm1[0].PPC.LowWord & 0x1fff;
tbD = M6809.mm1[0].D.LowWord.ToString("X4");
tbDp = M6809.mm1[0].DP.LowWord.ToString("X4");
tbU = M6809.mm1[0].U.LowWord.ToString("X4");
tbS = M6809.mm1[0].S.LowWord.ToString("X4");
tbX = M6809.mm1[0].X.LowWord.ToString("X4");
tbY = M6809.mm1[0].Y.LowWord.ToString("X4");
tbCc = M6809.mm1[0].CC.ToString("X2");
tbIrqstate0 = M6809.mm1[0].irq_state[0].ToString("X2");
tbIrqstate1 = M6809.mm1[0].irq_state[1].ToString("X2");
tbIntstate = M6809.mm1[0].int_state.ToString("X2");
tbNmistate = M6809.mm1[0].nmi_state.ToString("X2");
tbPPC = (Namcos1.user1rom_offset[0, reg] + offset).ToString("X6");
tbCycles = M6809.mm1[0].TotalExecutedCycles.ToString("X16");
tbDisassemble = M6809.mm1[0].m6809_dasm(M6809.mm1[0].PPC.LowWord);
}
public void m6809_start_debug()
{
if (bLogNew && lPPC.IndexOf(M6809.mm1[0].PPC.LowWord) < 0)
{
m6809FState = m6809State;
m6809State = CPUState.STOP;
lPPC.Add(M6809.mm1[0].PPC.LowWord);
tbResult.Add(M6809.mm1[0].PPC.LowWord.ToString("X4") + ": ");
m6809State = m6809FState;
}
if (m6809State == CPUState.STEP2)
{
if (M6809.mm1[0].PPC.LowWord == PPCTill)
{
m6809State = CPUState.STOP;
}
}
if (m6809State == CPUState.STEP3)
{
if (M6809.mm1[0].TotalExecutedCycles >= CyclesTill)
{
m6809State = CPUState.STOP;
}
}
if (m6809State == CPUState.STOP)
{
GetData();
tsslStatus = "m6809 stop";
}
while (m6809State == CPUState.STOP)
{
Video.video_frame_update();
//??
//Application.DoEvents();
}
}
public void m6809_stop_debug()
{
if (m6809State == CPUState.STEP)
{
m6809State = CPUState.STOP;
tsslStatus = "m6809 stop";
}
}
}
}

View File

@ -4,33 +4,8 @@ namespace MAME.Core
{
public partial class NeogeoMotion
{
private string[] sde2 = new string[] { "," };
private int locationX, locationY;
public List<string> tbResult;
public string tbSprite = string.Empty;
public string tbPoint = string.Empty;
public string tbFile = string.Empty;
public string tbSOffset = string.Empty;
public string tbPensoffset = string.Empty;
#region
bool cbL0 = false;
bool cbL1 = false;
#endregion
public NeogeoMotion()
{
tbResult = new List<string>();
neogeoForm_Load();
}
private void neogeoForm_Load()
{
cbL0 = true;
cbL1 = true;
tbSprite = "000-17C";
tbFile = "00";
tbPoint = "350,240,30,16";
tbSOffset = "01cb0600";
tbPensoffset = "ed0";
}
}
}

View File

@ -3,130 +3,12 @@ using System.Collections.Generic;
namespace MAME.Core
{
public enum CPUState
{
NONE = 0,
RUN,
STEP,
STEP2,
STEP3,
STOP,
}
public partial class Z80Motion
{
private Disassembler disassembler;
private bool bLogNew;
public static int iStatus;
private int PPCTill;
private ulong CyclesTill;
private List<ushort> lPPC = new List<ushort>();
#region
string mTx_tbAF = string.Empty;
string mTx_tbBC = string.Empty;
string mTx_tbDE = string.Empty;
string mTx_tbHL = string.Empty;
string mTx_tbShadowAF = string.Empty;
string mTx_tbShadowBC = string.Empty;
string mTx_tbShadowDE = string.Empty;
string mTx_tbShadowHL = string.Empty;
string mTx_tbI = string.Empty;
string mTx_tbR = string.Empty;
string mTx_tbIX = string.Empty;
string mTx_tbIY = string.Empty;
string mTx_tbSP = string.Empty;
string mTx_tbRPC = string.Empty;
string mTx_tbPPC = string.Empty;
string mTx_tbR2 = string.Empty;
string mTx_tbWZ = string.Empty;
string mTx_tbCycles = string.Empty;
string mTx_tbDisassemble = string.Empty;
public string mTx_tsslStatus = string.Empty;
List<string> mTxList_tbResult = new List<string>();
#endregion
public enum Z80AState
{
Z80A_NONE = 0,
Z80A_RUN,
Z80A_STEP,
Z80A_STEP2,
Z80A_STEP3,
Z80A_STOP,
}
public static Z80AState z80State, z80FState;
public Z80Motion()
{
disassembler = new Disassembler();
Disassembler.GenerateOpcodeSizes();
}
public void GetData()
{
string sDisassemble;
mTx_tbAF = Z80A.zz1[0].RegisterAF.ToString("X4");
mTx_tbBC = Z80A.zz1[0].RegisterBC.ToString("X4");
mTx_tbDE = Z80A.zz1[0].RegisterDE.ToString("X4");
mTx_tbHL = Z80A.zz1[0].RegisterHL.ToString("X4");
mTx_tbShadowAF = Z80A.zz1[0].RegisterShadowAF.ToString("X4");
mTx_tbShadowBC = Z80A.zz1[0].RegisterShadowBC.ToString("X4");
mTx_tbShadowDE = Z80A.zz1[0].RegisterShadowDE.ToString("X4");
mTx_tbShadowHL = Z80A.zz1[0].RegisterShadowHL.ToString("X4");
mTx_tbI = Z80A.zz1[0].RegisterI.ToString("X2");
mTx_tbR = Z80A.zz1[0].RegisterR.ToString("X2");
mTx_tbIX = Z80A.zz1[0].RegisterIX.ToString("X4");
mTx_tbIY = Z80A.zz1[0].RegisterIY.ToString("X4");
mTx_tbSP = Z80A.zz1[0].RegisterSP.ToString("X4");
mTx_tbRPC = Z80A.zz1[0].RegisterPC.ToString("X4");
mTx_tbPPC = Z80A.zz1[0].PPC.ToString("X4");
mTx_tbR2 = Z80A.zz1[0].RegisterR2.ToString("X2");
mTx_tbWZ = Z80A.zz1[0].RegisterWZ.ToString("X4");
mTx_tbCycles = Z80A.zz1[0].TotalExecutedCycles.ToString("X16");
sDisassemble = disassembler.GetDisassembleInfo(Z80A.zz1[0].PPC);
mTx_tbDisassemble = sDisassemble;
mTxList_tbResult.Add(sDisassemble + "\r\n");
}
public void z80_start_debug()
{
if (bLogNew && lPPC.IndexOf(Z80A.zz1[0].PPC) < 0)
{
z80FState = z80State;
z80State = Z80AState.Z80A_STOP;
lPPC.Add(Z80A.zz1[0].PPC);
mTxList_tbResult.Add(Z80A.zz1[0].PPC.ToString("X4") + ": " + disassembler.GetDisassembleInfo(Z80A.zz1[0].PPC) + "\r\n");
z80State = z80FState;
}
if (z80State == Z80AState.Z80A_STEP2)
{
if (Z80A.zz1[0].PPC == PPCTill)
{
z80State = Z80AState.Z80A_STOP;
}
}
if (z80State == Z80AState.Z80A_STEP3)
{
if (Z80A.zz1[0].TotalExecutedCycles >= CyclesTill)
{
z80State = Z80AState.Z80A_STOP;
}
}
if (z80State == Z80AState.Z80A_STOP)
{
GetData();
mTx_tsslStatus = "z80 stop";
}
while (z80State == Z80AState.Z80A_STOP)
{
}
}
public void z80_stop_debug()
{
if (z80State == Z80AState.Z80A_STEP)
{
z80State = Z80AState.Z80A_STOP;
mTx_tsslStatus = "z80 stop";
}
}
}
}

View File

@ -146,7 +146,6 @@ namespace cpu.m6502
{
byte op;
ppc.d = pc.d;
//debugger_instruction_hook(Machine, PCD);
if (pending_irq != 0)
{
m6502_take_irq();

View File

@ -1,144 +0,0 @@
using System.Text;
namespace cpu.m68000
{
public sealed class DisassemblyInfo
{
public int PC;
public string Mnemonic;
public string Args;
public string RawBytes;
public int Length;
public override string ToString()
{
return string.Format("{0:X6}: {3,-20} {1,-8} {2}", PC, Mnemonic, Args, RawBytes);
}
}
partial class MC68000
{
//public DisassemblyInfo Disassemble(int pc)
//{
// var info = new DisassemblyInfo { Mnemonic = "UNKNOWN", PC = pc, Length = 2 };
// op = (ushort)ReadOpWord(pc);
// if (Opcodes[op] == MOVE) MOVE_Disasm(info);//
// else if (Opcodes[op] == MOVEA) MOVEA_Disasm(info);
// else if (Opcodes[op] == MOVEQ) MOVEQ_Disasm(info);
// else if (Opcodes[op] == MOVEM0) MOVEM0_Disasm(info);
// else if (Opcodes[op] == MOVEM1) MOVEM1_Disasm(info);
// else if (Opcodes[op] == LEA) LEA_Disasm(info);//
// else if (Opcodes[op] == CLR) CLR_Disasm(info);
// else if (Opcodes[op] == EXT) EXT_Disasm(info);
// else if (Opcodes[op] == PEA) PEA_Disasm(info);
// else if (Opcodes[op] == ANDI) ANDI_Disasm(info);
// else if (Opcodes[op] == ANDI_CCR) ANDI_CCR_Disasm(info);
// else if (Opcodes[op] == EORI) EORI_Disasm(info);
// else if (Opcodes[op] == EORI_CCR) EORI_CCR_Disasm(info);
// else if (Opcodes[op] == ORI) ORI_Disasm(info);
// else if (Opcodes[op] == ORI_CCR) ORI_CCR_Disasm(info);
// else if (Opcodes[op] == ASLd) ASLd_Disasm(info);
// else if (Opcodes[op] == ASRd) ASRd_Disasm(info);
// else if (Opcodes[op] == LSLd) LSLd_Disasm(info);
// else if (Opcodes[op] == LSRd) LSRd_Disasm(info);
// else if (Opcodes[op] == ROXLd) ROXLd_Disasm(info);
// else if (Opcodes[op] == ROXRd) ROXRd_Disasm(info);
// else if (Opcodes[op] == ROLd) ROLd_Disasm(info);
// else if (Opcodes[op] == RORd) RORd_Disasm(info);
// else if (Opcodes[op] == ASLd0) ASLd0_Disasm(info);
// else if (Opcodes[op] == ASRd0) ASRd0_Disasm(info);
// else if (Opcodes[op] == LSLd0) LSLd0_Disasm(info);
// else if (Opcodes[op] == LSRd0) LSRd0_Disasm(info);
// else if (Opcodes[op] == ROXLd0) ROXLd0_Disasm(info);
// else if (Opcodes[op] == ROXRd0) ROXRd0_Disasm(info);
// else if (Opcodes[op] == ROLd0) ROLd0_Disasm(info);
// else if (Opcodes[op] == RORd0) RORd0_Disasm(info);
// else if (Opcodes[op] == SWAP) SWAP_Disasm(info);
// else if (Opcodes[op] == AND0) AND0_Disasm(info);
// else if (Opcodes[op] == AND1) AND1_Disasm(info);
// else if (Opcodes[op] == EOR) EOR_Disasm(info);
// else if (Opcodes[op] == OR0) OR0_Disasm(info);
// else if (Opcodes[op] == OR1) OR1_Disasm(info);
// else if (Opcodes[op] == NOT) NOT_Disasm(info);
// else if (Opcodes[op] == NEG) NEG_Disasm(info);
// else if (Opcodes[op] == JMP) JMP_Disasm(info);
// else if (Opcodes[op] == JSR) JSR_Disasm(info);
// else if (Opcodes[op] == Bcc) Bcc_Disasm(info);
// else if (Opcodes[op] == BRA) BRA_Disasm(info);
// else if (Opcodes[op] == BSR) BSR_Disasm(info);
// else if (Opcodes[op] == DBcc) DBcc_Disasm(info);
// else if (Opcodes[op] == Scc) Scc_Disasm(info);
// else if (Opcodes[op] == RTE) RTE_Disasm(info);
// else if (Opcodes[op] == RTS) RTS_Disasm(info);
// else if (Opcodes[op] == RTR) RTR_Disasm(info);
// else if (Opcodes[op] == TST) TST_Disasm(info);
// else if (Opcodes[op] == BTSTi) BTSTi_Disasm(info);
// else if (Opcodes[op] == BTSTr) BTSTr_Disasm(info);
// else if (Opcodes[op] == BCHGi) BCHGi_Disasm(info);
// else if (Opcodes[op] == BCHGr) BCHGr_Disasm(info);
// else if (Opcodes[op] == BCLRi) BCLRi_Disasm(info);
// else if (Opcodes[op] == BCLRr) BCLRr_Disasm(info);
// else if (Opcodes[op] == BSETi) BSETi_Disasm(info);
// else if (Opcodes[op] == BSETr) BSETr_Disasm(info);
// else if (Opcodes[op] == LINK) LINK_Disasm(info);
// else if (Opcodes[op] == UNLK) UNLK_Disasm(info);
// else if (Opcodes[op] == RESET) RESET_Disasm(info);
// else if (Opcodes[op] == NOP) NOP_Disasm(info);
// else if (Opcodes[op] == ADD0) ADD_Disasm(info);
// else if (Opcodes[op] == ADD1) ADD_Disasm(info);
// else if (Opcodes[op] == ADDA) ADDA_Disasm(info);
// else if (Opcodes[op] == ADDI) ADDI_Disasm(info);
// else if (Opcodes[op] == ADDQ) ADDQ_Disasm(info);
// else if (Opcodes[op] == SUB0) SUB_Disasm(info);
// else if (Opcodes[op] == SUB1) SUB_Disasm(info);
// else if (Opcodes[op] == SUBA) SUBA_Disasm(info);
// else if (Opcodes[op] == SUBI) SUBI_Disasm(info);
// else if (Opcodes[op] == SUBQ) SUBQ_Disasm(info);
// else if (Opcodes[op] == CMP) CMP_Disasm(info);
// else if (Opcodes[op] == CMPM) CMPM_Disasm(info);
// else if (Opcodes[op] == CMPA) CMPA_Disasm(info);
// else if (Opcodes[op] == CMPI) CMPI_Disasm(info);
// else if (Opcodes[op] == MULU) MULU_Disasm(info);
// else if (Opcodes[op] == MULS) MULS_Disasm(info);
// else if (Opcodes[op] == DIVU) DIVU_Disasm(info);
// else if (Opcodes[op] == DIVS) DIVS_Disasm(info);
// else if (Opcodes[op] == MOVEtSR) MOVEtSR_Disasm(info);//
// else if (Opcodes[op] == MOVEfSR) MOVEfSR_Disasm(info);
// else if (Opcodes[op] == MOVEUSP) MOVEUSP_Disasm(info);
// else if (Opcodes[op] == ANDI_SR) ANDI_SR_Disasm(info);
// else if (Opcodes[op] == EORI_SR) EORI_SR_Disasm(info);
// else if (Opcodes[op] == ORI_SR) ORI_SR_Disasm(info);
// else if (Opcodes[op] == MOVECCR) MOVECCR_Disasm(info);
// else if (Opcodes[op] == TRAP) TRAP_Disasm(info);
// else if (Opcodes[op] == NBCD) NBCD_Disasm(info);
// else if (Opcodes[op] == ILLEGAL) ILLEGAL_Disasm(info);
// else if (Opcodes[op] == STOP) STOP_Disasm(info);
// else if (Opcodes[op] == TRAPV) TRAPV_Disasm(info);
// else if (Opcodes[op] == CHK) CHK_Disasm(info);
// else if (Opcodes[op] == NEGX) NEGX_Disasm(info);
// else if (Opcodes[op] == SBCD0) SBCD0_Disasm(info);
// else if (Opcodes[op] == SBCD1) SBCD1_Disasm(info);
// else if (Opcodes[op] == ABCD0) ABCD0_Disasm(info);
// else if (Opcodes[op] == ABCD1) ABCD1_Disasm(info);
// else if (Opcodes[op] == EXGdd) EXGdd_Disasm(info);
// else if (Opcodes[op] == EXGaa) EXGaa_Disasm(info);
// else if (Opcodes[op] == EXGda) EXGda_Disasm(info);
// else if (Opcodes[op] == TAS) TAS_Disasm(info);
// else if (Opcodes[op] == MOVEP) MOVEP_Disasm(info);
// else if (Opcodes[op] == ADDX0) ADDX0_Disasm(info);
// else if (Opcodes[op] == ADDX1) ADDX1_Disasm(info);
// else if (Opcodes[op] == SUBX0) SUBX0_Disasm(info);
// else if (Opcodes[op] == SUBX1) SUBX1_Disasm(info);
// else if (Opcodes[op] == ILL) ILL_Disasm(info);
// var sb = new StringBuilder();
// for (int p = info.PC; p < info.PC + info.Length; p += 2)
// {
// sb.AppendFormat("{0:X4} ", ReadOpWord(p));
// }
// info.RawBytes = sb.ToString();
// return info;
//}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 59a132d3fbbd20c488b17cf0b0bedd22
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -44,33 +44,6 @@ namespace cpu.m68000
}
}
void AND0_Disasm(DisassemblyInfo info)
{
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcMode = (op >> 3) & 0x07;
int srcReg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "and.b";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 1, ref pc), dstReg);
break;
case 1: // Word
info.Mnemonic = "and.w";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 2, ref pc), dstReg);
break;
case 2: // Long
info.Mnemonic = "and.l";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 4, ref pc), dstReg);
break;
}
info.Length = pc - info.PC;
}
void AND1() // AND Dn, <ea>
{
@ -117,33 +90,6 @@ namespace cpu.m68000
}
}
void AND1_Disasm(DisassemblyInfo info)
{
int srcReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int dstMode = (op >> 3) & 0x07;
int dstReg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "and.b";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 1, ref pc));
break;
case 1: // Word
info.Mnemonic = "and.w";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 2, ref pc));
break;
case 2: // Long
info.Mnemonic = "and.l";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 4, ref pc));
break;
}
info.Length = pc - info.PC;
}
void ANDI() // ANDI #<data>, <ea>
{
@ -192,44 +138,6 @@ namespace cpu.m68000
}
}
void ANDI_Disasm(DisassemblyInfo info)
{
int size = ((op >> 6) & 0x03);
int dstMode = ((op >> 3) & 0x07);
int dstReg = (op & 0x07);
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
{
info.Mnemonic = "andi.b";
sbyte imm = (sbyte)ReadOpWord(pc); pc += 2;
info.Args = string.Format("${0:X}, ", imm);
info.Args += DisassembleValue(dstMode, dstReg, 1, ref pc);
break;
}
case 1: // Word
{
info.Mnemonic = "andi.w";
short imm = ReadOpWord(pc); pc += 2;
info.Args = string.Format("${0:X}, ", imm);
info.Args += DisassembleValue(dstMode, dstReg, 2, ref pc);
break;
}
case 2: // Long
{
info.Mnemonic = "andi.l";
int imm = ReadOpLong(pc); pc += 4;
info.Args = string.Format("${0:X}, ", imm);
info.Args += DisassembleValue(dstMode, dstReg, 4, ref pc);
break;
}
}
info.Length = pc - info.PC;
}
void ANDI_CCR() //m68k_op_andi_16_toc , 0xffff, 0x023c, { 20}
{
@ -239,13 +147,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void ANDI_CCR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "andi";
info.Args = DisassembleImmediate(1, ref pc) + ", CCR";
info.Length = pc - info.PC;
}
void EOR() // EOR Dn, <ea>
{
@ -292,33 +193,6 @@ namespace cpu.m68000
}
}
void EOR_Disasm(DisassemblyInfo info)
{
int srcReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int dstMode = (op >> 3) & 0x07;
int dstReg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "eor.b";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 1, ref pc));
break;
case 1: // Word
info.Mnemonic = "eor.w";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 2, ref pc));
break;
case 2: // Long
info.Mnemonic = "eor.l";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 4, ref pc));
break;
}
info.Length = pc - info.PC;
}
void EORI()
{
@ -364,40 +238,6 @@ namespace cpu.m68000
}
}
void EORI_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0: // byte
{
info.Mnemonic = "eori.b";
sbyte immed = (sbyte)ReadOpWord(pc); pc += 2;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 1, ref pc));
break;
}
case 1: // word
{
info.Mnemonic = "eori.w";
short immed = ReadOpWord(pc); pc += 2;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 2, ref pc));
break;
}
case 2: // long
{
info.Mnemonic = "eori.l";
int immed = ReadOpLong(pc); pc += 4;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 4, ref pc));
break;
}
}
info.Length = pc - info.PC;
}
void EORI_CCR()//m68k_op_eori_16_toc , 0xffff, 0x0a3c, { 20}
{
@ -408,13 +248,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void EORI_CCR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "eori";
info.Args = DisassembleImmediate(1, ref pc) + ", CCR";
info.Length = pc - info.PC;
}
void OR0() // OR <ea>, Dn
{
@ -456,33 +289,6 @@ namespace cpu.m68000
}
}
void OR0_Disasm(DisassemblyInfo info)
{
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcMode = (op >> 3) & 0x07;
int srcReg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "or.b";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 1, ref pc), dstReg);
break;
case 1: // Word
info.Mnemonic = "or.w";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 2, ref pc), dstReg);
break;
case 2: // Long
info.Mnemonic = "or.l";
info.Args = string.Format("{0}, D{1}", DisassembleValue(srcMode, srcReg, 4, ref pc), dstReg);
break;
}
info.Length = pc - info.PC;
}
void OR1() // OR Dn, <ea>
{
@ -529,33 +335,6 @@ namespace cpu.m68000
}
}
void OR1_Disasm(DisassemblyInfo info)
{
int srcReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int dstMode = (op >> 3) & 0x07;
int dstReg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "or.b";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 1, ref pc));
break;
case 1: // Word
info.Mnemonic = "or.w";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 2, ref pc));
break;
case 2: // Long
info.Mnemonic = "or.l";
info.Args = string.Format("D{0}, {1}", srcReg, DisassembleValue(dstMode, dstReg, 4, ref pc));
break;
}
info.Length = pc - info.PC;
}
void ORI()
{
@ -601,40 +380,6 @@ namespace cpu.m68000
}
}
void ORI_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0: // byte
{
info.Mnemonic = "ori.b";
sbyte immed = (sbyte)ReadOpWord(pc); pc += 2;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 1, ref pc));
break;
}
case 1: // word
{
info.Mnemonic = "ori.w";
short immed = ReadOpWord(pc); pc += 2;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 2, ref pc));
break;
}
case 2: // long
{
info.Mnemonic = "ori.l";
int immed = ReadOpLong(pc); pc += 4;
info.Args = String.Format("${0:X}, {1}", immed, DisassembleValue(mode, reg, 4, ref pc));
break;
}
}
info.Length = pc - info.PC;
}
void ORI_CCR()//m68k_op_ori_16_toc , 0xffff, 0x003c, { 20}
{
@ -644,13 +389,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void ORI_CCR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "ori";
info.Args = DisassembleImmediate(1, ref pc) + ", CCR";
info.Length = pc - info.PC;
}
void NOT()
{
@ -696,32 +434,6 @@ namespace cpu.m68000
}
}
void NOT_Disasm(DisassemblyInfo info)
{
int size = (op >> 6) & 0x03;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "not.b";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
break;
case 1: // Word
info.Mnemonic = "not.w";
info.Args = DisassembleValue(mode, reg, 2, ref pc);
break;
case 2: // Long
info.Mnemonic = "not.l";
info.Args = DisassembleValue(mode, reg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void LSLd()
{
@ -771,27 +483,6 @@ namespace cpu.m68000
}
}
void LSLd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "lsl.b"; break;
case 1: info.Mnemonic = "lsl.w"; break;
case 2: info.Mnemonic = "lsl.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void LSLd0()
{
@ -816,15 +507,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void LSLd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "lsl";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void LSRd()
{
@ -874,27 +556,6 @@ namespace cpu.m68000
}
}
void LSRd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "lsr.b"; break;
case 1: info.Mnemonic = "lsr.w"; break;
case 2: info.Mnemonic = "lsr.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void LSRd0()
{
@ -920,15 +581,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void LSRd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "lsr";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ASLd()
{
@ -984,27 +636,6 @@ namespace cpu.m68000
}
}
void ASLd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "asl.b"; break;
case 1: info.Mnemonic = "asl.w"; break;
case 2: info.Mnemonic = "asl.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void ASLd0()
{
@ -1030,15 +661,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void ASLd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "asl";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ASRd()
{
@ -1094,27 +716,6 @@ namespace cpu.m68000
}
}
void ASRd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "asr.b"; break;
case 1: info.Mnemonic = "asr.w"; break;
case 2: info.Mnemonic = "asr.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void ASRd0()
{
@ -1143,15 +744,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void ASRd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "asr";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ROLd()
{
@ -1201,27 +793,6 @@ namespace cpu.m68000
}
}
void ROLd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "rol.b"; break;
case 1: info.Mnemonic = "rol.w"; break;
case 2: info.Mnemonic = "rol.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void ROLd0()
{
@ -1246,15 +817,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void ROLd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "rol";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void RORd()
{
@ -1304,27 +866,6 @@ namespace cpu.m68000
}
}
void RORd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "ror.b"; break;
case 1: info.Mnemonic = "ror.w"; break;
case 2: info.Mnemonic = "ror.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void RORd0()
{
@ -1349,15 +890,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void RORd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "ror";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ROXLd()
{
@ -1410,27 +942,6 @@ namespace cpu.m68000
}
}
void ROXLd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "roxl.b"; break;
case 1: info.Mnemonic = "roxl.w"; break;
case 2: info.Mnemonic = "roxl.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void ROXLd0()
{
@ -1457,15 +968,7 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void ROXLd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "roxl";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ROXRd()
{
@ -1518,28 +1021,6 @@ namespace cpu.m68000
}
}
void ROXRd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int rot = (op >> 9) & 7;
int size = (op >> 6) & 3;
int m = (op >> 5) & 1;
int reg = op & 7;
if (m == 0 && rot == 0) rot = 8;
switch (size)
{
case 0: info.Mnemonic = "roxr.b"; break;
case 1: info.Mnemonic = "roxr.w"; break;
case 2: info.Mnemonic = "roxr.l"; break;
}
if (m == 0) info.Args = rot + ", D" + reg;
else info.Args = "D" + rot + ", D" + reg;
info.Length = pc - info.PC;
}
void ROXRd0()
{
//m68k_op_roxr_16_ai , 0xfff8, 0xe4d0, { 12}
@ -1566,15 +1047,6 @@ namespace cpu.m68000
pendingCycles -= 8 + EACyclesBW[mode, reg];
}
void ROXRd0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "roxr";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void SWAP()
{
@ -1586,11 +1058,5 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void SWAP_Disasm(DisassemblyInfo info)
{
int reg = op & 7;
info.Mnemonic = "swap";
info.Args = "D" + reg;
}
}
}

View File

@ -41,36 +41,6 @@ namespace cpu.m68000
Z = (value == 0);
}
void MOVE_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = ((op >> 12) & 0x03);
int dstMode = ((op >> 6) & 0x07);
int dstReg = ((op >> 9) & 0x07);
int srcMode = ((op >> 3) & 0x07);
int srcReg = (op & 0x07);
switch (size)
{
case 1:
info.Mnemonic = "move.b";
info.Args = DisassembleValue(srcMode, srcReg, 1, ref pc) + ", ";
info.Args += DisassembleValue(dstMode, dstReg, 1, ref pc);
break;
case 3:
info.Mnemonic = "move.w";
info.Args = DisassembleValue(srcMode, srcReg, 2, ref pc) + ", ";
info.Args += DisassembleValue(dstMode, dstReg, 2, ref pc);
break;
case 2:
info.Mnemonic = "move.l";
info.Args = DisassembleValue(srcMode, srcReg, 4, ref pc) + ", ";
info.Args += DisassembleValue(dstMode, dstReg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void MOVEA()
{
@ -131,26 +101,6 @@ namespace cpu.m68000
}
}
void MOVEA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = ((op >> 12) & 0x03);
int dstReg = ((op >> 9) & 0x07);
int srcMode = ((op >> 3) & 0x07);
int srcReg = (op & 0x07);
if (size == 3)
{
info.Mnemonic = "movea.w";
info.Args = DisassembleValue(srcMode, srcReg, 2, ref pc) + ", A" + dstReg;
}
else
{
info.Mnemonic = "movea.l";
info.Args = DisassembleValue(srcMode, srcReg, 4, ref pc) + ", A" + dstReg;
}
info.Length = pc - info.PC;
}
void MOVEP()
{
@ -196,39 +146,6 @@ namespace cpu.m68000
}
}
void MOVEP_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = ((op >> 9) & 0x07);
int dir = ((op >> 7) & 0x01);
int size = ((op >> 6) & 0x01);
int aReg = (op & 0x07);
if (size == 0)
{
info.Mnemonic = "movep.w";
if (dir == 0)
{
info.Args = DisassembleValue(5, aReg, 2, ref pc) + ", D" + dReg;
}
else if (dir == 1)
{
info.Args = "D" + dReg + ", " + DisassembleValue(5, aReg, 2, ref pc);
}
}
else if (size == 1)
{
info.Mnemonic = "movep.l";
if (dir == 0)
{
info.Args = DisassembleValue(5, aReg, 4, ref pc) + ", D" + dReg;
}
else if (dir == 1)
{
info.Args = "D" + dReg + ", " + DisassembleValue(5, aReg, 4, ref pc);
}
}
info.Length = pc - info.PC;
}
void MOVEQ()
{
@ -241,11 +158,6 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void MOVEQ_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "moveq";
info.Args = String.Format("${0:X}, D{1}", (int)((sbyte)op), (op >> 9) & 7);
}
static string DisassembleRegisterList0(ushort registers)
{
@ -434,20 +346,6 @@ namespace cpu.m68000
}
}
void MOVEM0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 1;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
ushort registers = (ushort)ReadOpWord(pc); pc += 2;
string address = DisassembleAddress(mode, reg, ref pc);
info.Mnemonic = size == 0 ? "movem.w" : "movem.l";
info.Args = DisassembleRegisterList0(registers) + ", " + address;
info.Length = pc - info.PC;
}
void MOVEM1()
{
@ -562,21 +460,6 @@ namespace cpu.m68000
}
}
void MOVEM1_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 1;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
ushort registers = (ushort)ReadOpWord(pc); pc += 2;
string address = DisassembleAddress(mode, reg, ref pc);
info.Mnemonic = size == 0 ? "movem.w" : "movem.l";
info.Args = address + ", " + DisassembleRegisterList1(registers);
info.Length = pc - info.PC;
}
void LEA()
{
int mode = (op >> 3) & 7;
@ -601,19 +484,6 @@ namespace cpu.m68000
}
}
void LEA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int sReg = (op >> 0) & 7;
int dReg = (op >> 9) & 7;
info.Mnemonic = "lea";
info.Args = DisassembleAddress(mode, sReg, ref pc);
info.Args += ", A" + dReg;
info.Length = pc - info.PC;
}
void CLR()
{
@ -634,21 +504,6 @@ namespace cpu.m68000
Z = true;
}
void CLR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0: info.Mnemonic = "clr.b"; info.Args = DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "clr.w"; info.Args = DisassembleValue(mode, reg, 2, ref pc); break;
case 2: info.Mnemonic = "clr.l"; info.Args = DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Length = pc - info.PC;
}
void EXT()
{
@ -674,17 +529,6 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void EXT_Disasm(DisassemblyInfo info)
{
int size = (op >> 6) & 1;
int reg = op & 7;
switch (size)
{
case 0: info.Mnemonic = "ext.w"; info.Args = "D" + reg; break;
case 1: info.Mnemonic = "ext.l"; info.Args = "D" + reg; break;
}
}
void PEA()
{
@ -712,15 +556,5 @@ namespace cpu.m68000
}
}
void PEA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "pea";
info.Args = DisassembleAddress(mode, reg, ref pc);
info.Length = pc - info.PC;
}
}
}

View File

@ -113,27 +113,6 @@ namespace cpu.m68000
}
}
void ADD_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int Dreg = (op >> 9) & 7;
int dir = (op >> 8) & 1;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
string op1 = "D" + Dreg;
string op2;
switch (size)
{
case 0: info.Mnemonic = "add.b"; op2 = DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "add.w"; op2 = DisassembleValue(mode, reg, 2, ref pc); break;
default: info.Mnemonic = "add.l"; op2 = DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Args = dir == 0 ? (op2 + ", " + op1) : (op1 + ", " + op2);
info.Length = pc - info.PC;
}
void ADDI()
{
@ -193,30 +172,6 @@ namespace cpu.m68000
}
}
void ADDI_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0:
info.Mnemonic = "addi.b";
info.Args = DisassembleImmediate(1, ref pc) + ", " + DisassembleValue(mode, reg, 1, ref pc);
break;
case 1:
info.Mnemonic = "addi.w";
info.Args = DisassembleImmediate(2, ref pc) + ", " + DisassembleValue(mode, reg, 2, ref pc);
break;
case 2:
info.Mnemonic = "addi.l";
info.Args = DisassembleImmediate(4, ref pc) + ", " + DisassembleValue(mode, reg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void ADDQ()
{
@ -290,24 +245,6 @@ namespace cpu.m68000
}
}
void ADDQ_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int data = (op >> 9) & 7;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
data = data == 0 ? 8 : data; // range is 1-8; 0 represents 8
switch (size)
{
case 0: info.Mnemonic = "addq.b"; info.Args = data + ", " + DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "addq.w"; info.Args = data + ", " + DisassembleValue(mode, reg, 2, ref pc); break;
case 2: info.Mnemonic = "addq.l"; info.Args = data + ", " + DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Length = pc - info.PC;
}
void ADDA()
{
@ -333,19 +270,6 @@ namespace cpu.m68000
}
}
void ADDA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int aReg = (op >> 9) & 7;
int size = (op >> 8) & 1;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = (size == 0) ? "adda.w" : "adda.l";
info.Args = DisassembleValue(mode, reg, (size == 0) ? 2 : 4, ref pc) + ", A" + aReg;
info.Length = pc - info.PC;
}
void SUB0()
{
@ -456,27 +380,6 @@ namespace cpu.m68000
}
}
void SUB_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int dir = (op >> 8) & 1;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
string op1 = "D" + dReg;
string op2;
switch (size)
{
case 0: info.Mnemonic = "sub.b"; op2 = DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "sub.w"; op2 = DisassembleValue(mode, reg, 2, ref pc); break;
default: info.Mnemonic = "sub.l"; op2 = DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Args = dir == 0 ? (op2 + ", " + op1) : (op1 + ", " + op2);
info.Length = pc - info.PC;
}
void SUBI()
{
@ -533,30 +436,6 @@ namespace cpu.m68000
}
}
void SUBI_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0:
info.Mnemonic = "subi.b";
info.Args = DisassembleImmediate(1, ref pc) + ", " + DisassembleValue(mode, reg, 1, ref pc);
break;
case 1:
info.Mnemonic = "subi.w";
info.Args = DisassembleImmediate(2, ref pc) + ", " + DisassembleValue(mode, reg, 2, ref pc);
break;
case 2:
info.Mnemonic = "subi.l";
info.Args = DisassembleImmediate(4, ref pc) + ", " + DisassembleValue(mode, reg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void SUBQ()
{
@ -627,24 +506,6 @@ namespace cpu.m68000
}
}
void SUBQ_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int data = (op >> 9) & 7;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
data = data == 0 ? 8 : data; // range is 1-8; 0 represents 8
switch (size)
{
case 0: info.Mnemonic = "subq.b"; info.Args = data + ", " + DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "subq.w"; info.Args = data + ", " + DisassembleValue(mode, reg, 2, ref pc); break;
case 2: info.Mnemonic = "subq.l"; info.Args = data + ", " + DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Length = pc - info.PC;
}
void SUBA()
{
@ -670,20 +531,6 @@ namespace cpu.m68000
}
}
void SUBA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int aReg = (op >> 9) & 7;
int size = (op >> 8) & 1;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = (size == 0) ? "suba.w" : "suba.l";
info.Args = DisassembleValue(mode, reg, (size == 0) ? 2 : 4, ref pc) + ", A" + aReg;
info.Length = pc - info.PC;
}
void NEG()
{
@ -739,32 +586,6 @@ namespace cpu.m68000
}
}
void NEG_Disasm(DisassemblyInfo info)
{
int size = (op >> 6) & 0x03;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
int pc = info.PC + 2;
switch (size)
{
case 0: // Byte
info.Mnemonic = "neg.b";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
break;
case 1: // Word
info.Mnemonic = "neg.w";
info.Args = DisassembleValue(mode, reg, 2, ref pc);
break;
case 2: // Long
info.Mnemonic = "neg.l";
info.Args = DisassembleValue(mode, reg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void NBCD()
{
@ -795,15 +616,6 @@ namespace cpu.m68000
pendingCycles -= (mode == 0) ? 6 : 8 + EACyclesBW[mode, reg];
}
void NBCD_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "nbcd.b";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void ILLEGAL()
{
@ -811,22 +623,12 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void ILLEGAL_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "illegal";
info.Args = "";
}
void ILL()
{
TrapVector2(4);
}
void ILL_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "ill";
info.Args = "";
}
void STOP()
{
@ -844,13 +646,6 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void STOP_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "stop";
info.Args = DisassembleImmediate(2, ref pc);
info.Length = pc - info.PC;
}
void TRAPV()
{
@ -865,11 +660,6 @@ namespace cpu.m68000
}
}
void TRAPV_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "trapv";
info.Args = "";
}
void CHK()
{
@ -894,16 +684,6 @@ namespace cpu.m68000
}
}
void CHK_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dreg = (op >> 9) & 7;
int mode = (op >> 3) & 0x07;
int reg = op & 0x07;
info.Mnemonic = "chk.w";
info.Args = String.Format("{0}, D{1}", DisassembleValue(mode, reg, 2, ref pc), dreg);
info.Length = pc - info.PC;
}
void NEGX()
{
@ -959,20 +739,6 @@ namespace cpu.m68000
}
}
void NEGX_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0: info.Mnemonic = "negx.b"; info.Args = DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "negx.w"; info.Args = DisassembleValue(mode, reg, 2, ref pc); break;
case 2: info.Mnemonic = "negx.l"; info.Args = DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Length = pc - info.PC;
}
void SBCD0()
{
@ -1004,15 +770,6 @@ namespace cpu.m68000
pendingCycles -= 6;
}
void SBCD0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int srcReg = op & 0x07;
info.Mnemonic = "sbcd.b";
info.Args = DisassembleValue(0, srcReg, 1, ref pc) + "," + DisassembleValue(0, dstReg, 1, ref pc);
info.Length = pc - info.PC;
}
void SBCD1()
{
@ -1060,15 +817,6 @@ namespace cpu.m68000
pendingCycles -= 18;
}
void SBCD1_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int srcReg = op & 0x07;
info.Mnemonic = "sbcd.b";
info.Args = DisassembleValue(4, srcReg, 1, ref pc) + "," + DisassembleValue(4, dstReg, 1, ref pc);
info.Length = pc - info.PC;
}
void ABCD0()
{
@ -1097,15 +845,6 @@ namespace cpu.m68000
pendingCycles -= 6;
}
void ABCD0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int srcReg = op & 0x07;
info.Mnemonic = "abcd.b";
info.Args = DisassembleValue(0, srcReg, 1, ref pc) + "," + DisassembleValue(0, dstReg, 1, ref pc);
info.Length = pc - info.PC;
}
void ABCD1()
{
@ -1150,15 +889,6 @@ namespace cpu.m68000
pendingCycles -= 18;
}
void ABCD1_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int srcReg = op & 0x07;
info.Mnemonic = "abcd.b";
info.Args = DisassembleValue(4, srcReg, 1, ref pc) + "," + DisassembleValue(4, dstReg, 1, ref pc);
info.Length = pc - info.PC;
}
void EXGdd()
{
@ -1171,15 +901,6 @@ namespace cpu.m68000
pendingCycles -= 6;
}
void EXGdd_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int reg_a = (op >> 9) & 0x07;
int reg_b = op & 0x07;
info.Mnemonic = "exg";
info.Args = DisassembleValue(0, reg_a, 1, ref pc) + "," + DisassembleValue(0, reg_b, 1, ref pc);
info.Length = pc - info.PC;
}
void EXGaa()
{
@ -1192,15 +913,6 @@ namespace cpu.m68000
pendingCycles -= 6;
}
void EXGaa_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int reg_a = (op >> 9) & 0x07;
int reg_b = op & 0x07;
info.Mnemonic = "exg";
info.Args = DisassembleValue(1, reg_a, 1, ref pc) + "," + DisassembleValue(1, reg_b, 1, ref pc);
info.Length = pc - info.PC;
}
void EXGda()
{
@ -1213,15 +925,6 @@ namespace cpu.m68000
pendingCycles -= 6;
}
void EXGda_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int reg_a = (op >> 9) & 0x07;
int reg_b = op & 0x07;
info.Mnemonic = "exg";
info.Args = DisassembleValue(0, reg_a, 1, ref pc) + "," + DisassembleValue(1, reg_b, 1, ref pc);
info.Length = pc - info.PC;
}
void ADDX0()
{
@ -1277,29 +980,6 @@ namespace cpu.m68000
}
}
void ADDX0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcReg = op & 0x07;
switch (size)
{
case 0:
info.Mnemonic = "addx.b";
info.Args = DisassembleValue(0, srcReg, 1, ref pc) + ", D" + dstReg;
break;
case 1:
info.Mnemonic = "addx.w";
info.Args = DisassembleValue(0, srcReg, 2, ref pc) + ", D" + dstReg;
break;
case 2:
info.Mnemonic = "addx.l";
info.Args = DisassembleValue(0, srcReg, 4, ref pc) + ", D" + dstReg;
break;
}
info.Length = pc - info.PC;
}
void ADDX1()
{
@ -1375,30 +1055,6 @@ namespace cpu.m68000
}
}
void ADDX1_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcReg = op & 0x07;
switch (size)
{
case 0:
info.Mnemonic = "addx.b";
info.Args = DisassembleValue(4, srcReg, 1, ref pc) + ", " + DisassembleValue(4, dstReg, 1, ref pc);
break;
case 1:
info.Mnemonic = "addx.w";
info.Args = DisassembleValue(4, srcReg, 2, ref pc) + ", " + DisassembleValue(4, dstReg, 2, ref pc);
break;
case 2:
info.Mnemonic = "addx.l";
info.Args = DisassembleValue(4, srcReg, 4, ref pc) + ", " + DisassembleValue(4, dstReg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void SUBX0()
{
@ -1454,29 +1110,6 @@ namespace cpu.m68000
}
}
void SUBX0_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcReg = op & 0x07;
switch (size)
{
case 0:
info.Mnemonic = "subx.b";
info.Args = DisassembleValue(0, srcReg, 1, ref pc) + ", D" + dstReg;
break;
case 1:
info.Mnemonic = "subx.w";
info.Args = DisassembleValue(0, srcReg, 2, ref pc) + ", D" + dstReg;
break;
case 2:
info.Mnemonic = "subx.l";
info.Args = DisassembleValue(0, srcReg, 4, ref pc) + ", D" + dstReg;
break;
}
info.Length = pc - info.PC;
}
void SUBX1()
{
@ -1552,30 +1185,6 @@ namespace cpu.m68000
}
}
void SUBX1_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dstReg = (op >> 9) & 0x07;
int size = (op >> 6) & 0x03;
int srcReg = op & 0x07;
switch (size)
{
case 0:
info.Mnemonic = "subx.b";
info.Args = DisassembleValue(4, srcReg, 1, ref pc) + ", " + DisassembleValue(4, dstReg, 1, ref pc);
break;
case 1:
info.Mnemonic = "subx.w";
info.Args = DisassembleValue(4, srcReg, 2, ref pc) + ", " + DisassembleValue(4, dstReg, 2, ref pc);
break;
case 2:
info.Mnemonic = "subx.l";
info.Args = DisassembleValue(4, srcReg, 4, ref pc) + ", " + DisassembleValue(4, dstReg, 4, ref pc);
break;
}
info.Length = pc - info.PC;
}
void CMP()
{
@ -1625,32 +1234,6 @@ namespace cpu.m68000
}
}
void CMP_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0:
info.Mnemonic = "cmp.b";
info.Args = DisassembleValue(mode, reg, 1, ref pc) + ", D" + dReg;
break;
case 1:
info.Mnemonic = "cmp.w";
info.Args = DisassembleValue(mode, reg, 2, ref pc) + ", D" + dReg;
break;
case 2:
info.Mnemonic = "cmp.l";
info.Args = DisassembleValue(mode, reg, 4, ref pc) + ", D" + dReg;
break;
}
info.Length = pc - info.PC;
}
void CMPA()
{
@ -1688,28 +1271,6 @@ namespace cpu.m68000
}
}
void CMPA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int aReg = (op >> 9) & 7;
int size = (op >> 8) & 1;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0:
info.Mnemonic = "cmpa.w";
info.Args = DisassembleValue(mode, reg, 2, ref pc) + ", A" + aReg;
break;
case 1:
info.Mnemonic = "cmpa.l";
info.Args = DisassembleValue(mode, reg, 4, ref pc) + ", A" + aReg;
break;
}
info.Length = pc - info.PC;
}
void CMPM()
{
@ -1758,22 +1319,6 @@ namespace cpu.m68000
}
}
void CMPM_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int axReg = (op >> 9) & 7;
int size = (op >> 6) & 3;
int ayReg = (op >> 0) & 7;
switch (size)
{
case 0: info.Mnemonic = "cmpm.b"; break;
case 1: info.Mnemonic = "cmpm.w"; break;
case 2: info.Mnemonic = "cmpm.l"; break;
}
info.Args = string.Format("(A{0})+, (A{1})+", ayReg, axReg);
info.Length = pc - info.PC;
}
void CMPI()
{
@ -1825,34 +1370,6 @@ namespace cpu.m68000
}
}
void CMPI_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
int immediate;
switch (size)
{
case 0:
immediate = (byte)ReadOpWord(pc); pc += 2;
info.Mnemonic = "cmpi.b";
info.Args = String.Format("${0:X}, {1}", (sbyte)immediate, DisassembleValue(mode, reg, 1, ref pc));
break;
case 1:
immediate = ReadOpWord(pc); pc += 2;
info.Mnemonic = "cmpi.w";
info.Args = String.Format("${0:X}, {1}", (short)immediate, DisassembleValue(mode, reg, 2, ref pc));
break;
case 2:
immediate = ReadOpLong(pc); pc += 4;
info.Mnemonic = "cmpi.l";
info.Args = String.Format("${0:X}, {1}", immediate, DisassembleValue(mode, reg, 4, ref pc));
break;
}
info.Length = pc - info.PC;
}
void MULU()
{
@ -1871,17 +1388,6 @@ namespace cpu.m68000
pendingCycles -= 54 + EACyclesBW[mode, reg];
}
void MULU_Disasm(DisassemblyInfo info)
{
int dreg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
int pc = info.PC + 2;
info.Mnemonic = "mulu";
info.Args = String.Format("{0}, D{1}", DisassembleValue(mode, reg, 2, ref pc), dreg);
info.Length = pc - info.PC;
}
void MULS()
{
@ -1900,17 +1406,6 @@ namespace cpu.m68000
pendingCycles -= 54 + EACyclesBW[mode, reg];
}
void MULS_Disasm(DisassemblyInfo info)
{
int dreg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
int pc = info.PC + 2;
info.Mnemonic = "muls";
info.Args = String.Format("{0}, D{1}", DisassembleValue(mode, reg, 2, ref pc), dreg);
info.Length = pc - info.PC;
}
void DIVU()
{
@ -1945,17 +1440,6 @@ namespace cpu.m68000
pendingCycles -= 140 + EACyclesBW[mode, reg];
}
void DIVU_Disasm(DisassemblyInfo info)
{
int dreg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
int pc = info.PC + 2;
info.Mnemonic = "divu";
info.Args = String.Format("{0}, D{1}", DisassembleValue(mode, reg, 2, ref pc), dreg);
info.Length = pc - info.PC;
}
void DIVS()
{
@ -1990,16 +1474,5 @@ namespace cpu.m68000
pendingCycles -= 158 + EACyclesBW[mode, reg];
}
void DIVS_Disasm(DisassemblyInfo info)
{
int dreg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
int pc = info.PC + 2;
info.Mnemonic = "divs";
info.Args = String.Format("{0}, D{1}", DisassembleValue(mode, reg, 2, ref pc), dreg);
info.Length = pc - info.PC;
}
}
}

View File

@ -85,24 +85,6 @@ namespace cpu.m68000
}
}
void Bcc_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
sbyte displacement8 = (sbyte)op;
int cond = (op >> 8) & 0x0F;
info.Mnemonic = "b" + DisassembleCondition(cond);
if (displacement8 != 0)
{
info.Args = string.Format("${0:X}", pc + displacement8);
}
else
{
info.Args = string.Format("${0:X}", pc + ReadOpWord(pc));
pc += 2;
}
info.Length = pc - info.PC;
}
void BRA()
{
@ -119,21 +101,6 @@ namespace cpu.m68000
pendingCycles -= 10;
}
void BRA_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "bra";
sbyte displacement8 = (sbyte)op;
if (displacement8 != 0)
info.Args = String.Format("${0:X}", pc + displacement8);
else
{
info.Args = String.Format("${0:X}", pc + ReadOpWord(pc));
pc += 2;
}
info.Length = pc - info.PC;
}
void BSR()
{
@ -155,21 +122,6 @@ namespace cpu.m68000
pendingCycles -= 18;
}
void BSR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "bsr";
sbyte displacement8 = (sbyte)op;
if (displacement8 != 0)
info.Args = String.Format("${0:X}", pc + displacement8);
else
{
info.Args = String.Format("${0:X}", pc + ReadOpWord(pc));
pc += 2;
}
info.Length = pc - info.PC;
}
void DBcc()
{
@ -196,15 +148,6 @@ namespace cpu.m68000
}
}
void DBcc_Disasm(DisassemblyInfo info)
{
int cond = (op >> 8) & 0x0F;
info.Mnemonic = "db" + DisassembleCondition(cond);
int pc = info.PC + 2;
info.Args = String.Format("D{0}, ${1:X}", op & 7, pc + ReadWord(pc));
info.Length = 4;
}
void RTS()
{
@ -213,11 +156,6 @@ namespace cpu.m68000
pendingCycles -= 16;
}
void RTS_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "rts";
info.Args = "";
}
void RTR()
{
@ -229,12 +167,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void RTR_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "rtr";
info.Args = "";
}
void RESET()
{
if (S)
@ -247,12 +179,6 @@ namespace cpu.m68000
}
}
void RESET_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "reset";
info.Args = "";
}
void RTE()
{
short newSR = ReadWord(A[7].s32);
@ -263,12 +189,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void RTE_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "rte";
info.Args = "";
}
void TAS()
{
int mode = (op >> 3) & 0x07;
@ -288,16 +208,6 @@ namespace cpu.m68000
pendingCycles -= (mode == 0) ? 4 : 14 + EACyclesBW[mode, reg];
}
void TAS_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "tas.b";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void TST()
{
int size = (op >> 6) & 3;
@ -316,22 +226,6 @@ namespace cpu.m68000
Z = (value == 0);
}
void TST_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int size = (op >> 6) & 3;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
switch (size)
{
case 0: info.Mnemonic = "tst.b"; info.Args = DisassembleValue(mode, reg, 1, ref pc); break;
case 1: info.Mnemonic = "tst.w"; info.Args = DisassembleValue(mode, reg, 2, ref pc); break;
case 2: info.Mnemonic = "tst.l"; info.Args = DisassembleValue(mode, reg, 4, ref pc); break;
}
info.Length = pc - info.PC;
}
void BTSTi()
{
int bit = ReadOpWord(PC); PC += 2;
@ -354,18 +248,6 @@ namespace cpu.m68000
}
}
void BTSTi_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int bit = ReadOpWord(pc); pc += 2;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "btst";
info.Args = String.Format("${0:X}, {1}", bit, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BTSTr()
{
int dReg = (op >> 9) & 7;
@ -389,18 +271,6 @@ namespace cpu.m68000
}
}
void BTSTr_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "btst";
info.Args = String.Format("D{0}, {1}", dReg, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BCHGi()
{
int bit = ReadOpWord(PC); PC += 2;
@ -427,17 +297,6 @@ namespace cpu.m68000
}
}
void BCHGi_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int bit = ReadOpWord(pc); pc += 2;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bchg";
info.Args = String.Format("${0:X}, {1}", bit, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BCHGr()
{
@ -466,18 +325,6 @@ namespace cpu.m68000
}
}
void BCHGr_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bchg";
info.Args = String.Format("D{0}, {1}", dReg, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BCLRi()
{
int bit = ReadOpWord(PC); PC += 2;
@ -504,18 +351,6 @@ namespace cpu.m68000
}
}
void BCLRi_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int bit = ReadOpWord(pc); pc += 2;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bclr";
info.Args = String.Format("${0:X}, {1}", bit, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BCLRr()
{
int dReg = (op >> 9) & 7;
@ -543,17 +378,6 @@ namespace cpu.m68000
}
}
void BCLRr_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bclr";
info.Args = String.Format("D{0}, {1}", dReg, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BSETi()
{
@ -581,17 +405,6 @@ namespace cpu.m68000
}
}
void BSETi_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int bit = ReadOpWord(pc); pc += 2;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bset";
info.Args = String.Format("${0:X}, {1}", bit, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void BSETr()
{
@ -620,17 +433,6 @@ namespace cpu.m68000
}
}
void BSETr_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dReg = (op >> 9) & 7;
int mode = (op >> 3) & 7;
int reg = op & 7;
info.Mnemonic = "bset";
info.Args = String.Format("D{0}, {1}", dReg, DisassembleValue(mode, reg, 1, ref pc));
info.Length = pc - info.PC;
}
void JMP()
{
@ -658,15 +460,6 @@ namespace cpu.m68000
}
}
void JMP_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "jmp";
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
void JSR()
{
@ -695,15 +488,6 @@ namespace cpu.m68000
}
}
void JSR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "jsr";
info.Args = DisassembleAddress(mode, reg, ref pc);
info.Length = pc - info.PC;
}
void LINK()
{
@ -716,14 +500,6 @@ namespace cpu.m68000
pendingCycles -= 16;
}
void LINK_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int reg = op & 7;
info.Mnemonic = "link";
info.Args = "A" + reg + ", " + DisassembleImmediate(2, ref pc); // TODO need a DisassembleSigned or something
info.Length = pc - info.PC;
}
void UNLK()
{
@ -734,23 +510,12 @@ namespace cpu.m68000
pendingCycles -= 12;
}
void UNLK_Disasm(DisassemblyInfo info)
{
int reg = op & 7;
info.Mnemonic = "unlk";
info.Args = "A" + reg;
info.Length = 2;
}
void NOP()
{
pendingCycles -= 4;
}
void NOP_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "nop";
}
void Scc() // Set on condition
{
@ -774,16 +539,5 @@ namespace cpu.m68000
}
}
void Scc_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int cond = (op >> 8) & 0x0F;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "s" + DisassembleCondition(cond);
info.Args = DisassembleValue(mode, reg, 1, ref pc);
info.Length = pc - info.PC;
}
}
}

View File

@ -40,15 +40,6 @@ namespace cpu.m68000
// pendingCycles -= 12 + EACyclesBW[mode, reg];
//}
void MOVEtSR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "move";
info.Args = DisassembleValue(mode, reg, 2, ref pc) + ", SR";
info.Length = pc - info.PC;
}
void MOVEfSR()
{
@ -58,15 +49,6 @@ namespace cpu.m68000
pendingCycles -= (mode == 0) ? 6 : 8 + EACyclesBW[mode, reg];
}
void MOVEfSR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "move";
info.Args = "SR, " + DisassembleValue(mode, reg, 2, ref pc);
info.Length = pc - info.PC;
}
void MOVEUSP()
{
@ -91,15 +73,6 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void MOVEUSP_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int dir = (op >> 3) & 1;
int reg = op & 7;
info.Mnemonic = "move";
info.Args = (dir == 0) ? ("A" + reg + ", USP") : ("USP, A" + reg);
info.Length = pc - info.PC;
}
void ANDI_SR()
{
@ -109,13 +82,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void ANDI_SR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "andi";
info.Args = DisassembleImmediate(2, ref pc) + ", SR";
info.Length = pc - info.PC;
}
void EORI_SR()
{
@ -125,13 +91,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void EORI_SR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "eori";
info.Args = DisassembleImmediate(2, ref pc) + ", SR";
info.Length = pc - info.PC;
}
void ORI_SR()
{
@ -141,13 +100,6 @@ namespace cpu.m68000
pendingCycles -= 20;
}
void ORI_SR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
info.Mnemonic = "ori";
info.Args = DisassembleImmediate(2, ref pc) + ", SR";
info.Length = pc - info.PC;
}
void MOVECCR()
{
@ -162,15 +114,6 @@ namespace cpu.m68000
pendingCycles -= 12 + EACyclesBW[mode, reg];
}
void MOVECCR_Disasm(DisassemblyInfo info)
{
int pc = info.PC + 2;
int mode = (op >> 3) & 7;
int reg = (op >> 0) & 7;
info.Mnemonic = "move";
info.Args = DisassembleValue(mode, reg, 2, ref pc) + ", CCR";
info.Length = pc - info.PC;
}
void TRAP()
{
@ -179,11 +122,6 @@ namespace cpu.m68000
pendingCycles -= 4;
}
void TRAP_Disasm(DisassemblyInfo info)
{
info.Mnemonic = "trap";
info.Args = string.Format("${0:X}", op & 0xF);
}
void TrapVector(int vector)
{

View File

@ -160,15 +160,11 @@ namespace cpu.m68000
public Action<int, short> WriteWord;
public Action<int, int> WriteLong;
public delegate void debug_delegate();
//public debug_delegate debugger_start_cpu_hook_callback, debugger_stop_cpu_hook_callback;
// Initialization
public MC68000()
{
//倒是已经废弃
BuildOpcodeTable();
//BuildOpcodeTable();
}
@ -233,18 +229,15 @@ namespace cpu.m68000
{
int prevCycles = pendingCycles;
PPC = PC;
//debugger_start_cpu_hook_callback();
op = (ushort)ReadOpWord(PC); PC += 2;
//Opcodes[op]();
DoOpCode(op);
m68ki_check_interrupts();
//debugger_stop_cpu_hook_callback();
int delta = prevCycles - pendingCycles;
totalExecutedCycles += (ulong)delta;
}
while (pendingCycles > 0);
pendingCycles -= int_cycles;
//totalExecutedCycles += (ulong)int_cycles;
int_cycles = 0;
ran = cycles - pendingCycles;
return ran;

View File

@ -315,83 +315,6 @@ namespace cpu.m68000
throw new Exception("Invalid addressing mode!");
}
string DisassembleValue(int mode, int reg, int size, ref int pc)
{
string value;
int addr;
switch (mode)
{
case 0: return "D" + reg; // Dn
case 1: return "A" + reg; // An
case 2: return "(A" + reg + ")"; // (An)
case 3: return "(A" + reg + ")+"; // (An)+
case 4: return "-(A" + reg + ")"; // -(An)
case 5: value = string.Format("(${0:X},A{1})", ReadOpWord(pc), reg); pc += 2; return value; // (d16,An)
case 6: addr = ReadOpWord(pc); pc += 2; return DisassembleIndex("A" + reg, (short)addr); // (d8,An,Xn)
case 7:
switch (reg)
{
case 0: value = String.Format("(${0:X})", ReadOpWord(pc)); pc += 2; return value; // (imm).W
case 1: value = String.Format("(${0:X})", ReadOpLong(pc)); pc += 4; return value; // (imm).L
case 2: value = String.Format("(${0:X})", pc + ReadOpWord(pc)); pc += 2; return value; // (d16,PC)
case 3: addr = ReadOpWord(pc); pc += 2; return DisassembleIndex("PC", (short)addr); // (d8,PC,Xn)
case 4:
switch (size)
{
case 1: value = String.Format("${0:X}", (byte)ReadOpWord(pc)); pc += 2; return value;
case 2: value = String.Format("${0:X}", ReadOpWord(pc)); pc += 2; return value;
case 4: value = String.Format("${0:X}", ReadOpLong(pc)); pc += 4; return value;
}
break;
}
break;
}
throw new Exception("Invalid addressing mode!");
}
string DisassembleImmediate(int size, ref int pc)
{
int immed;
switch (size)
{
case 1:
immed = (byte)ReadOpWord(pc); pc += 2;
return String.Format("${0:X}", immed);
case 2:
immed = (ushort)ReadOpWord(pc); pc += 2;
return String.Format("${0:X}", immed);
case 4:
immed = ReadOpLong(pc); pc += 4;
return String.Format("${0:X}", immed);
}
throw new ArgumentException("Invalid size");
}
string DisassembleAddress(int mode, int reg, ref int pc)
{
int addr;
switch (mode)
{
case 0: return "INVALID"; // Dn
case 1: return "INVALID"; // An
case 2: return "(A" + reg + ")"; // (An)
case 3: return "(A" + reg + ")+"; // (An)+
case 4: return "-(A" + reg + ")"; // -(An)
case 5: addr = ReadOpWord(pc); pc += 2; return String.Format("(${0:X},A{1})", (short)addr, reg); // (d16,An)
case 6: addr = ReadOpWord(pc); pc += 2; return DisassembleIndex("A" + reg, (short)addr); // (d8,An,Xn)
case 7:
switch (reg)
{
case 0: addr = ReadOpWord(pc); pc += 2; return String.Format("${0:X}.w", addr); // (imm).w
case 1: addr = ReadOpLong(pc); pc += 4; return String.Format("${0:X}.l", addr); // (imm).l
case 2: addr = ReadOpWord(pc); pc += 2; return String.Format("(${0:X},PC)", addr); // (d16,PC)
case 3: addr = ReadOpWord(pc); pc += 2; return DisassembleIndex("PC", (short)addr); // (d8,PC,Xn)
case 4: return "INVALID"; // immediate
}
break;
}
throw new Exception("Invalid addressing mode!");
}
void WriteValueB(int mode, int reg, sbyte value)
{
@ -597,27 +520,5 @@ namespace cpu.m68000
return displacement + indexReg;
}
string DisassembleIndex(string baseRegister, short extension)
{
int d_a = (extension >> 15) & 0x1;
int reg = (extension >> 12) & 0x7;
int size = (extension >> 11) & 0x1;
int scale = (extension >> 9) & 0x3;
sbyte displacement = (sbyte)extension;
string scaleFactor;
switch (scale)
{
case 0: scaleFactor = ""; break;
case 1: scaleFactor = "2"; break;
case 2: scaleFactor = "4"; break;
default: scaleFactor = "8"; break;
}
string offsetRegister = (d_a == 0) ? "D" : "A";
string sizeStr = size == 0 ? ".w" : ".l";
string displacementStr = displacement == 0 ? "" : ("," + (displacement >= 0 ? "$" + displacement.ToString("X") : "-$" + (-displacement).ToString("X")));
return string.Format("({0},{1}{2}{3}{4}{5})", baseRegister, scaleFactor, offsetRegister, reg, sizeStr, displacementStr);
}
}
}

View File

@ -1,970 +0,0 @@
using MAME.Core;
using System;
using System.Collections.Generic;
namespace cpu.m68000
{
partial class MC68000
{
void BuildOpcodeTable()
{
//Assign("ill", ILL, "", "Data8", "Data8");//
//Assign("ori2ccr", ORI_CCR, "0000000000111100");//
//Assign("ori2sr", ORI_SR, "0000000001111100");
//Assign("ori", ORI, "00000000", "Size2_1", "OAmXn");
//Assign("andi2ccr", ANDI_CCR, "0000001000111100");//
//Assign("andi2sr", ANDI_SR, "0000001001111100");
//Assign("andi", ANDI, "00000010", "Size2_1", "OAmXn");
//Assign("subi", SUBI, "00000100", "Size2_1", "OAmXn");
//Assign("addi", ADDI, "00000110", "Size2_1", "OAmXn");
//Assign("eori2ccr", EORI_CCR, "0000101000111100");//
//Assign("eori2sr", EORI_SR, "0000101001111100");
//Assign("eori", EORI, "00001010", "Size2_1", "OAmXn");
//Assign("cmpi", CMPI, "00001100", "Size2_1", "OAmXn");
//Assign("btst", BTSTi, "0000100000", "BAmXn");
//Assign("bchg", BCHGi, "0000100001", "OAmXn");
//Assign("bclr", BCLRi, "0000100010", "OAmXn");
//Assign("bset", BSETi, "0000100011", "OAmXn");
//Assign("btst", BTSTr, "0000", "Xn", "100", "AmXn");
//Assign("bchg", BCHGr, "0000", "Xn", "101", "OAmXn");
//Assign("bclr", BCLRr, "0000", "Xn", "110", "OAmXn");
//Assign("bset", BSETr, "0000", "Xn", "111", "OAmXn");
//Assign("movep", MOVEP, "0000", "Xn", "1", "Data1", "Size1", "001", "Xn");//
//Assign("movea", MOVEA, "00", "Size2_2", "Xn", "001", "AmXn");
//Assign("move", MOVE, "00", "01", "OXnAm", "MAmXn");
//Assign("move", MOVE, "00", "Size2_2", "OXnAm", "AmXn");
//Assign("movefsr", MOVEfSR, "0100000011", "OAmXn");
//Assign("moveccr", MOVECCR, "0100010011", "MAmXn");
//Assign("move2sr", MOVEtSR, "0100011011", "MAmXn");
//Assign("negx", NEGX, "01000000", "Size2_1", "OAmXn");//
//Assign("clr", CLR, "01000010", "Size2_1", "OAmXn");
//Assign("neg", NEG, "01000100", "Size2_1", "OAmXn");
//Assign("not", NOT, "01000110", "Size2_1", "OAmXn");
//Assign("ext", EXT, "010010001", "Size1", "000", "Xn");
//Assign("nbcd", NBCD, "0100100000", "OAmXn");//
//Assign("swap", SWAP, "0100100001000", "Xn");
//Assign("pea", PEA, "0100100001", "LAmXn");
//Assign("illegal", ILLEGAL, "0100101011111100");//
//Assign("tas", TAS, "0100101011", "OAmXn");//
//Assign("tst", TST, "01001010", "Size2_1", "OAmXn");
//Assign("trap", TRAP, "010011100100", "Data4");
//Assign("link", LINK, "0100111001010", "Xn");
//Assign("unlk", UNLK, "0100111001011", "Xn");
//Assign("moveusp", MOVEUSP, "010011100110", "Data1", "Xn");
//Assign("reset", RESET, "0100111001110000");//
//Assign("nop", NOP, "0100111001110001");
//Assign("stop", STOP, "0100111001110010");//
//Assign("rte", RTE, "0100111001110011");
//Assign("rts", RTS, "0100111001110101");
//Assign("trapv", TRAPV, "0100111001110110");//
//Assign("rtr", RTR, "0100111001110111");
//Assign("jsr", JSR, "0100111010", "LAmXn");
//Assign("jmp", JMP, "0100111011", "LAmXn");
//Assign("movem", MOVEM0, "010010001", "Size1", "M2AmXn");
//Assign("movem", MOVEM1, "010011001", "Size1", "M3AmXn");
//Assign("lea", LEA, "0100", "Xn", "111", "LAmXn");
//Assign("chk", CHK, "0100", "Xn", "110", "MAmXn");//
//Assign("addq", ADDQ, "0101", "Data3", "0", "00", "OAmXn");
//Assign("addq", ADDQ, "0101", "Data3", "0", "Size2_3", "A2AmXn");
//Assign("subq", SUBQ, "0101", "Data3", "1", "00", "OAmXn");
//Assign("subq", SUBQ, "0101", "Data3", "1", "Size2_3", "A2AmXn");
//Assign("scc", Scc, "0101", "CondAll", "11", "OAmXn");
//Assign("dbcc", DBcc, "0101", "CondAll", "11001", "Xn");
//Assign("bra", BRA, "01100000", "Data8");
//Assign("bsr", BSR, "01100001", "Data8");
//Assign("bcc", Bcc, "0110", "CondMain", "Data8");
//Assign("moveq", MOVEQ, "0111", "Xn", "0", "Data8");
//Assign("divu", DIVU, "1000", "Xn", "011", "MAmXn");
//Assign("divs", DIVS, "1000", "Xn", "111", "MAmXn");
//Assign("sbcd", SBCD0, "1000", "Xn", "100000", "Xn");//
//Assign("sbcd", SBCD1, "1000", "Xn", "100001", "Xn");//
//Assign("or", OR0, "1000", "Xn", "0", "Size2_1", "MAmXn");
//Assign("or", OR1, "1000", "Xn", "1", "Size2_1", "O2AmXn");
//Assign("sub", SUB0, "1001", "Xn", "0", "00", "MAmXn");
//Assign("sub", SUB0, "1001", "Xn", "0", "Size2_3", "AmXn");
//Assign("sub", SUB1, "1001", "Xn", "1", "00", "O2AmXn");
//Assign("sub", SUB1, "1001", "Xn", "1", "Size2_3", "A2AmXn");
//Assign("subx", SUBX0, "1001", "Xn", "1", "Size2_1", "000", "Xn");//
//Assign("subx", SUBX1, "1001", "Xn", "1", "Size2_1", "001", "Xn");//
//Assign("suba", SUBA, "1001", "Xn", "Size1", "11", "AmXn");
//Assign("eor", EOR, "1011", "Xn", "1", "Size2_1", "OAmXn");
//Assign("cmpm", CMPM, "1011", "Xn", "1", "Size2_1", "001", "Xn");
//Assign("cmp", CMP, "1011", "Xn", "0", "00", "MAmXn");
//Assign("cmp", CMP, "1011", "Xn", "0", "Size2_3", "AmXn");
//Assign("cmpa", CMPA, "1011", "Xn", "Size1", "11", "AmXn");
//Assign("mulu", MULU, "1100", "Xn", "011", "MAmXn");
//Assign("muls", MULS, "1100", "Xn", "111", "MAmXn");
//Assign("abcd", ABCD0, "1100", "Xn", "100000", "Xn");//
//Assign("abcd", ABCD1, "1100", "Xn", "100001", "Xn");//
//Assign("exg", EXGdd, "1100", "Xn", "101000", "Xn");//
//Assign("exg", EXGaa, "1100", "Xn", "101001", "Xn");//
//Assign("exg", EXGda, "1100", "Xn", "110001", "Xn");//
//Assign("and", AND0, "1100", "Xn", "0", "Size2_1", "MAmXn");
//Assign("and", AND1, "1100", "Xn", "1", "Size2_1", "O2AmXn");
//Assign("add", ADD0, "1101", "Xn", "0", "00", "MAmXn");
//Assign("add", ADD0, "1101", "Xn", "0", "Size2_3", "AmXn");
//Assign("add", ADD1, "1101", "Xn", "1", "Size2_1", "O2AmXn");
//Assign("addx", ADDX0, "1101", "Xn", "1", "Size2_1", "000", "Xn");//
//Assign("addx", ADDX1, "1101", "Xn", "1", "Size2_1", "001", "Xn");//
//Assign("adda", ADDA, "1101", "Xn", "Size1", "11", "AmXn");
//Assign("asl", ASLd0, "1110000111", "O2AmXn");//
//Assign("asr", ASRd0, "1110000011", "O2AmXn");//
//Assign("lsl", LSLd0, "1110001111", "O2AmXn");//
//Assign("lsr", LSRd0, "1110001011", "O2AmXn");//
//Assign("roxl", ROXLd0, "1110010111", "O2AmXn");//
//Assign("roxr", ROXRd0, "1110010011", "O2AmXn");//
//Assign("rol", ROLd0, "1110011111", "O2AmXn");//
//Assign("ror", RORd0, "1110011011", "O2AmXn");//
//Assign("asl", ASLd, "1110", "Data3", "1", "Size2_1", "Data1", "00", "Xn");
//Assign("asr", ASRd, "1110", "Data3", "0", "Size2_1", "Data1", "00", "Xn");
//Assign("lsl", LSLd, "1110", "Data3", "1", "Size2_1", "Data1", "01", "Xn");
//Assign("lsr", LSRd, "1110", "Data3", "0", "Size2_1", "Data1", "01", "Xn");
//Assign("roxl", ROXLd, "1110", "Data3", "1", "Size2_1", "Data1", "10", "Xn");
//Assign("roxr", ROXRd, "1110", "Data3", "0", "Size2_1", "Data1", "10", "Xn");
//Assign("rol", ROLd, "1110", "Data3", "1", "Size2_1", "Data1", "11", "Xn");
//Assign("ror", RORd, "1110", "Data3", "0", "Size2_1", "Data1", "11", "Xn");
//string[] temp = new string[Opcodes.Length];
//HashSet<string> seen = new HashSet<string>();
//var sb = ObjectPoolAuto.AcquireStringBuilder();
//var sb2 = ObjectPoolAuto.AcquireStringBuilder();
//sb.Append("[");
//for (int i = 0; i < Opcodes.Length; i++)
//{
// temp[i] = Opcodes[i].Method.Name;
// sb.Append("MC68000Code.");
// sb.Append(temp[i]);
// sb.Append(",");
// if (!seen.Contains(temp[i]))
// {
// seen.Add(temp[i]);
// }
//}
//sb.Append("]");
//sb2.Append("[");
//foreach (var s in seen)
//{
// sb2.Append(s);
// sb2.Append(",");
//}
//sb2.Append("]");
//var all = sb.ToString();
//var all2 = sb2.ToString();
//ObjectPoolAuto.Release(sb);
}
//void Assign(string instr, Action exec, string root, params string[] bitfield)
//{
// List<string> opList = new List<string>();
// opList.Add(root);
// foreach (var component in bitfield)
// {
// if (IsBinary(component)) AppendConstant(opList, component);
// else if (component == "Size1") opList = AppendPermutations(opList, Size1);
// else if (component == "Size2_0") opList = AppendPermutations(opList, Size2_0);
// else if (component == "Size2_1") opList = AppendPermutations(opList, Size2_1);
// else if (component == "Size2_2") opList = AppendPermutations(opList, Size2_2);
// else if (component == "Size2_3") opList = AppendPermutations(opList, Size2_3);
// else if (component == "OXnAm") opList = AppendPermutations(opList, OXn3Am3);//0,2-6,7_0-7_1
// else if (component == "AmXn") opList = AppendPermutations(opList, Am3Xn3);//0-6,7_0-7_4
// else if (component == "OAmXn") opList = AppendPermutations(opList, OAm3Xn3);//0,2-6,7_0-7_1
// else if (component == "BAmXn") opList = AppendPermutations(opList, BAm3Xn3);//0,2-6,7_0-7_3
// else if (component == "MAmXn") opList = AppendPermutations(opList, MAm3Xn3);//0,2-6,7_0-7_4
// else if (component == "AAmXn") opList = AppendPermutations(opList, AAm3Xn3);//1-6,7_0-7_4
// else if (component == "LAmXn") opList = AppendPermutations(opList, LAm3Xn3);//2,5-6,7_0-7_3
// else if (component == "M2AmXn") opList = AppendPermutations(opList, M2Am3Xn3);//2,4-6,7_0-7_1
// else if (component == "M3AmXn") opList = AppendPermutations(opList, M3Am3Xn3);//2-3,5-6,7_0-7_3
// else if (component == "A2AmXn") opList = AppendPermutations(opList, A2Am3Xn3);//0-6,7_0-7_1
// else if (component == "O2AmXn") opList = AppendPermutations(opList, O2Am3Xn3);//2-6,7_0-7_1
// else if (component == "Xn") opList = AppendPermutations(opList, Xn3);
// else if (component == "CondMain") opList = AppendPermutations(opList, ConditionMain);
// else if (component == "CondAll") opList = AppendPermutations(opList, ConditionAll);
// else if (component == "Data1") opList = AppendData(opList, 1);
// else if (component == "Data3") opList = AppendData(opList, 3);
// else if (component == "Data4") opList = AppendData(opList, 4);
// else if (component == "Data8") opList = AppendData(opList, 8);
// }
// foreach (var opcode in opList)
// {
// int opc = Convert.ToInt32(opcode, 2);
// Opcodes[opc] = exec;
// }
//}
void Assign(string instr, Action exec, string root, params string[] bitfield)
{
//List<string> opList = ObjectPoolAuto.AcquireList<string>();
//opList.Add(root);
//foreach (var component in bitfield)
//{
// if (IsBinary(component)) AppendConstant(ref opList, component);
// else if (component == "Size1") AppendPermutations(ref opList, Size1);
// else if (component == "Size2_0") AppendPermutations(ref opList, Size2_0);
// else if (component == "Size2_1") AppendPermutations(ref opList, Size2_1);
// else if (component == "Size2_2") AppendPermutations(ref opList, Size2_2);
// else if (component == "Size2_3") AppendPermutations(ref opList, Size2_3);
// else if (component == "OXnAm") AppendPermutations(ref opList, OXn3Am3);//0,2-6,7_0-7_1
// else if (component == "AmXn") AppendPermutations(ref opList, Am3Xn3);//0-6,7_0-7_4
// else if (component == "OAmXn") AppendPermutations(ref opList, OAm3Xn3);//0,2-6,7_0-7_1
// else if (component == "BAmXn") AppendPermutations(ref opList, BAm3Xn3);//0,2-6,7_0-7_3
// else if (component == "MAmXn") AppendPermutations(ref opList, MAm3Xn3);//0,2-6,7_0-7_4
// else if (component == "AAmXn") AppendPermutations(ref opList, AAm3Xn3);//1-6,7_0-7_4
// else if (component == "LAmXn") AppendPermutations(ref opList, LAm3Xn3);//2,5-6,7_0-7_3
// else if (component == "M2AmXn") AppendPermutations(ref opList, M2Am3Xn3);//2,4-6,7_0-7_1
// else if (component == "M3AmXn") AppendPermutations(ref opList, M3Am3Xn3);//2-3,5-6,7_0-7_3
// else if (component == "A2AmXn") AppendPermutations(ref opList, A2Am3Xn3);//0-6,7_0-7_1
// else if (component == "O2AmXn") AppendPermutations(ref opList, O2Am3Xn3);//2-6,7_0-7_1
// else if (component == "Xn") AppendPermutations(ref opList, Xn3);
// else if (component == "CondMain") AppendPermutations(ref opList, ConditionMain);
// else if (component == "CondAll") AppendPermutations(ref opList, ConditionAll);
// else if (component == "Data1") AppendData(ref opList, 1);
// else if (component == "Data3") AppendData(ref opList, 3);
// else if (component == "Data4") AppendData(ref opList, 4);
// else if (component == "Data8") AppendData(ref opList, 8);
//}
//foreach (var opcode in opList)
//{
// int opc = Convert.ToInt32(opcode, 2);
// Opcodes[opc] = exec;
//}
//ObjectPoolAuto.Release(opList);
}
void AppendConstant(ref List<string> ops, string constant)
{
for (int i = 0; i < ops.Count; i++)
ops[i] = ops[i] + constant;
}
//List<string> AppendPermutations(List<string> ops, string[] permutations)
//{
// List<string> output = new List<string>();
// foreach (var input in ops)
// foreach (var perm in permutations)
// output.Add(input + perm);
// return output;
//}
void AppendPermutations(ref List<string> ops, string[] permutations)
{
List<string> output = ObjectPoolAuto.AcquireList<string>();
foreach (var input in ops)
foreach (var perm in permutations)
output.Add(input + perm);
ops.Clear();
ops.AddRange(output);
ObjectPoolAuto.Release(output);
}
//List<string> AppendData(List<string> ops, int bits)
//{
// List<string> output = new List<string>();
// foreach (var input in ops)
// for (int i = 0; i < BinaryExp(bits); i++)
// output.Add(input + Convert.ToString(i, 2).PadLeft(bits, '0'));
// return output;
//}
void AppendData(ref List<string> ops, int bits)
{
List<string> output = ObjectPoolAuto.AcquireList<string>();
foreach (var input in ops)
for (int i = 0; i < BinaryExp(bits); i++)
{
//output.Add(input + Convert.ToString(i, 2).PadLeft(bits, '0'));
var sb = ObjectPoolAuto.AcquireStringBuilder();
sb.Append(input);
sb.Append(Convert.ToString(i, 2).PadLeft(bits, '0'));
output.Add(sb.ToString());
ObjectPoolAuto.Release(sb);
}
ops.Clear();
ops.AddRange(output);
ObjectPoolAuto.Release(output);
}
int BinaryExp(int bits)
{
int res = 1;
for (int i = 0; i < bits; i++)
res *= 2;
return res;
}
bool IsBinary(string str)
{
for (int i = 0; i < str.Length; i++)
{
char c = str[i];
if (c == '0' || c == '1')
continue;
return false;
}
return true;
}
#region Tables
static readonly string[] Size2_0 = { "01", "11", "10" };
static readonly string[] Size2_1 = { "00", "01", "10" };
static readonly string[] Size2_2 = { "11", "10" };
static readonly string[] Size2_3 = { "01", "10" };
static readonly string[] Size1 = { "0", "1" };
static readonly string[] Xn3 = { "000", "001", "010", "011", "100", "101", "110", "111" };
static readonly string[] OXn3Am3 = {
"000000", // Dn Data register
"001000",
"010000",
"011000",
"100000",
"101000",
"110000",
"111000",
"000010", // (An) Address
"001010",
"010010",
"011010",
"100010",
"101010",
"110010",
"111010",
"000011", // (An)+ Address with Postincrement
"001011",
"010011",
"011011",
"100011",
"101011",
"110011",
"111011",
"000100", // -(An) Address with Predecrement
"001100",
"010100",
"011100",
"100100",
"101100",
"110100",
"111100",
"000101", // (d16, An) Address with Displacement
"001101",
"010101",
"011101",
"100101",
"101101",
"110101",
"111101",
"000110", // (d8, An, Xn) Address with Index
"001110",
"010110",
"011110",
"100110",
"101110",
"110110",
"111110",
"000111", // (xxx).W Absolute Short
"001111", // (xxx).L Absolute Long
};
static readonly string[] Am3Xn3 = {
"000000", // Dn Data register
"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
"000111",
"001000", // An Address register
"001001",
"001010",
"001011",
"001100",
"001101",
"001110",
"001111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
"111100", // #imm Immediate
};
static readonly string[] OAm3Xn3 = {
"000000", // Dn Data register
"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
"000111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] BAm3Xn3 = {
"000000", // Dn Data register
"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
"000111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] MAm3Xn3 = {
"000000", // Dn Data register
"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
"000111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
"111100", // #imm Immediate
};
static readonly string[] AAm3Xn3 = {
"001000", // An Address register
"001001",
"001010",
"001011",
"001100",
"001101",
"001110",
"001111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
"111100", // #imm Immediate
};
static readonly string[] LAm3Xn3 = {
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] M2Am3Xn3 = {
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] M3Am3Xn3 = {
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111010", // (d16, PC) PC with Displacement
"111011", // (d8, PC, Xn) PC with Index
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] A2Am3Xn3 = {
"000000", // Dn Data register
"000001",
"000010",
"000011",
"000100",
"000101",
"000110",
"000111",
"001000", // An Address register
"001001",
"001010",
"001011",
"001100",
"001101",
"001110",
"001111",
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] O2Am3Xn3 = {
"010000", // (An) Address
"010001",
"010010",
"010011",
"010100",
"010101",
"010110",
"010111",
"011000", // (An)+ Address with Postincrement
"011001",
"011010",
"011011",
"011100",
"011101",
"011110",
"011111",
"100000", // -(An) Address with Predecrement
"100001",
"100010",
"100011",
"100100",
"100101",
"100110",
"100111",
"101000", // (d16, An) Address with Displacement
"101001",
"101010",
"101011",
"101100",
"101101",
"101110",
"101111",
"110000", // (d8, An, Xn) Address with Index
"110001",
"110010",
"110011",
"110100",
"110101",
"110110",
"110111",
"111000", // (xxx).W Absolute Short
"111001", // (xxx).L Absolute Long
};
static readonly string[] ConditionMain = {
"0010", // HI Higher (unsigned)
"0011", // LS Lower or Same (unsigned)
"0100", // CC Carry Clear (aka Higher or Same, unsigned)
"0101", // CS Carry Set (aka Lower, unsigned)
"0110", // NE Not Equal
"0111", // EQ Equal
"1000", // VC Overflow Clear
"1001", // VS Overflow Set
"1010", // PL Plus
"1011", // MI Minus
"1100", // GE Greater or Equal (signed)
"1101", // LT Less Than (signed)
"1110", // GT Greater Than (signed)
"1111" // LE Less or Equal (signed)
};
static readonly string[] ConditionAll = {
"0000", // T True
"0001", // F False
"0010", // HI Higher (unsigned)
"0011", // LS Lower or Same (unsigned)
"0100", // CC Carry Clear (aka Higher or Same, unsigned)
"0101", // CS Carry Set (aka Lower, unsigned)
"0110", // NE Not Equal
"0111", // EQ Equal
"1000", // VC Overflow Clear
"1001", // VS Overflow Set
"1010", // PL Plus
"1011", // MI Minus
"1100", // GE Greater or Equal (signed)
"1101", // LT Less Than (signed)
"1110", // GT Greater Than (signed)
"1111" // LE Less or Equal (signed)
};
#endregion
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 3f558f03c67bd724291c979f90d0acff
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -564,7 +564,6 @@ namespace cpu.m6805
Interrupt();
}
}
//debugger_instruction_hook(Machine, PC);
ireg = ReadOp(pc.LowWord++);
switch (ireg)
{

View File

@ -1,604 +0,0 @@
namespace cpu.m6809
{
public partial class M6809
{
public class opcodeinfo
{
public byte opcode;
public int length;
public string name;
public m6809_addressing_modes mode;
public uint flags;
public opcodeinfo(byte _opcode, int _length, string _name, m6809_addressing_modes _mode)
{
opcode = _opcode;
length = _length;
name = _name;
mode = _mode;
}
public opcodeinfo(byte _opcode, int _length, string _name, m6809_addressing_modes _mode, uint _flags)
{
opcode = _opcode;
length = _length;
name = _name;
mode = _mode;
flags = _flags;
}
}
public static uint DASMFLAG_STEP_OVER = 0x20000000, DASMFLAG_SUPPORTED = 0x80000000;
public enum m6809_addressing_modes
{
INH, // Inherent
DIR, // Direct
IND, // Indexed
REL, // Relative (8 bit)
LREL, // Long relative (16 bit)
EXT, // Extended
IMM, // Immediate
IMM_RR, // Register-to-register
PG1, // Switch to page 1 opcodes
PG2 // Switch to page 2 opcodes
}
public opcodeinfo[] m6809_pg0opcodes = new opcodeinfo[]{
new opcodeinfo(0x00, 2, "NEG",m6809_addressing_modes.DIR),
new opcodeinfo(0x03, 2, "COM",m6809_addressing_modes.DIR),
new opcodeinfo(0x04, 2, "LSR",m6809_addressing_modes.DIR),
new opcodeinfo(0x06, 2, "ROR",m6809_addressing_modes.DIR),
new opcodeinfo(0x07, 2, "ASR",m6809_addressing_modes.DIR),
new opcodeinfo(0x08, 2, "ASL",m6809_addressing_modes.DIR),
new opcodeinfo(0x09, 2, "ROL",m6809_addressing_modes.DIR),
new opcodeinfo(0x0A, 2, "DEC",m6809_addressing_modes.DIR),
new opcodeinfo(0x0C, 2, "INC",m6809_addressing_modes.DIR),
new opcodeinfo(0x0D, 2, "TST",m6809_addressing_modes.DIR),
new opcodeinfo(0x0E, 2, "JMP",m6809_addressing_modes.DIR),
new opcodeinfo(0x0F, 2, "CLR",m6809_addressing_modes.DIR),
new opcodeinfo(0x10, 1, "page1",m6809_addressing_modes.PG1),
new opcodeinfo(0x11, 1, "page2",m6809_addressing_modes.PG2),
new opcodeinfo(0x12, 1, "NOP",m6809_addressing_modes.INH),
new opcodeinfo(0x13, 1, "SYNC",m6809_addressing_modes.INH),
new opcodeinfo(0x16, 3, "LBRA",m6809_addressing_modes.LREL),
new opcodeinfo(0x17, 3, "LBSR",m6809_addressing_modes.LREL,DASMFLAG_STEP_OVER),
new opcodeinfo(0x19, 1, "DAA",m6809_addressing_modes.INH),
new opcodeinfo(0x1A, 2, "ORCC",m6809_addressing_modes.IMM),
new opcodeinfo(0x1C, 2, "ANDCC",m6809_addressing_modes.IMM),
new opcodeinfo(0x1D, 1, "SEX",m6809_addressing_modes.INH),
new opcodeinfo(0x1E, 2, "EXG",m6809_addressing_modes.IMM_RR),
new opcodeinfo(0x1F, 2, "TFR",m6809_addressing_modes.IMM_RR),
new opcodeinfo(0x20, 2, "BRA",m6809_addressing_modes.REL),
new opcodeinfo(0x21, 2, "BRN",m6809_addressing_modes.REL),
new opcodeinfo(0x22, 2, "BHI",m6809_addressing_modes.REL),
new opcodeinfo(0x23, 2, "BLS",m6809_addressing_modes.REL),
new opcodeinfo(0x24, 2, "BCC",m6809_addressing_modes.REL),
new opcodeinfo(0x25, 2, "BCS",m6809_addressing_modes.REL),
new opcodeinfo(0x26, 2, "BNE",m6809_addressing_modes.REL),
new opcodeinfo(0x27, 2, "BEQ",m6809_addressing_modes.REL),
new opcodeinfo(0x28, 2, "BVC",m6809_addressing_modes.REL),
new opcodeinfo(0x29, 2, "BVS",m6809_addressing_modes.REL),
new opcodeinfo(0x2A, 2, "BPL",m6809_addressing_modes.REL),
new opcodeinfo(0x2B, 2, "BMI",m6809_addressing_modes.REL),
new opcodeinfo(0x2C, 2, "BGE",m6809_addressing_modes.REL),
new opcodeinfo(0x2D, 2, "BLT",m6809_addressing_modes.REL),
new opcodeinfo(0x2E, 2, "BGT",m6809_addressing_modes.REL),
new opcodeinfo(0x2F, 2, "BLE",m6809_addressing_modes.REL),
new opcodeinfo(0x30, 2, "LEAX",m6809_addressing_modes.IND),
new opcodeinfo(0x31, 2, "LEAY",m6809_addressing_modes.IND),
new opcodeinfo(0x32, 2, "LEAS",m6809_addressing_modes.IND),
new opcodeinfo(0x33, 2, "LEAU",m6809_addressing_modes.IND),
new opcodeinfo(0x34, 2, "PSHS",m6809_addressing_modes.INH),
new opcodeinfo(0x35, 2, "PULS",m6809_addressing_modes.INH),
new opcodeinfo(0x36, 2, "PSHU",m6809_addressing_modes.INH),
new opcodeinfo(0x37, 2, "PULU",m6809_addressing_modes.INH),
new opcodeinfo(0x39, 1, "RTS",m6809_addressing_modes.INH),
new opcodeinfo(0x3A, 1, "ABX",m6809_addressing_modes.INH),
new opcodeinfo(0x3B, 1, "RTI",m6809_addressing_modes.INH),
new opcodeinfo(0x3C, 2, "CWAI",m6809_addressing_modes.IMM),
new opcodeinfo(0x3D, 1, "MUL",m6809_addressing_modes.INH),
new opcodeinfo(0x3F, 1, "SWI",m6809_addressing_modes.INH),
new opcodeinfo(0x40, 1, "NEGA",m6809_addressing_modes.INH),
new opcodeinfo(0x43, 1, "COMA",m6809_addressing_modes.INH),
new opcodeinfo(0x44, 1, "LSRA",m6809_addressing_modes.INH),
new opcodeinfo(0x46, 1, "RORA",m6809_addressing_modes.INH),
new opcodeinfo(0x47, 1, "ASRA",m6809_addressing_modes.INH),
new opcodeinfo(0x48, 1, "ASLA",m6809_addressing_modes.INH),
new opcodeinfo(0x49, 1, "ROLA",m6809_addressing_modes.INH),
new opcodeinfo(0x4A, 1, "DECA",m6809_addressing_modes.INH),
new opcodeinfo(0x4C, 1, "INCA",m6809_addressing_modes.INH),
new opcodeinfo(0x4D, 1, "TSTA",m6809_addressing_modes.INH),
new opcodeinfo(0x4F, 1, "CLRA",m6809_addressing_modes.INH),
new opcodeinfo(0x50, 1, "NEGB",m6809_addressing_modes.INH),
new opcodeinfo(0x53, 1, "COMB",m6809_addressing_modes.INH),
new opcodeinfo(0x54, 1, "LSRB",m6809_addressing_modes.INH),
new opcodeinfo(0x56, 1, "RORB",m6809_addressing_modes.INH),
new opcodeinfo(0x57, 1, "ASRB",m6809_addressing_modes.INH),
new opcodeinfo(0x58, 1, "ASLB",m6809_addressing_modes.INH),
new opcodeinfo(0x59, 1, "ROLB",m6809_addressing_modes.INH),
new opcodeinfo(0x5A, 1, "DECB",m6809_addressing_modes.INH),
new opcodeinfo(0x5C, 1, "INCB",m6809_addressing_modes.INH),
new opcodeinfo(0x5D, 1, "TSTB",m6809_addressing_modes.INH),
new opcodeinfo(0x5F, 1, "CLRB",m6809_addressing_modes.INH),
new opcodeinfo(0x60, 2, "NEG",m6809_addressing_modes.IND),
new opcodeinfo(0x63, 2, "COM",m6809_addressing_modes.IND),
new opcodeinfo(0x64, 2, "LSR",m6809_addressing_modes.IND),
new opcodeinfo(0x66, 2, "ROR",m6809_addressing_modes.IND),
new opcodeinfo(0x67, 2, "ASR",m6809_addressing_modes.IND),
new opcodeinfo(0x68, 2, "ASL",m6809_addressing_modes.IND),
new opcodeinfo(0x69, 2, "ROL",m6809_addressing_modes.IND),
new opcodeinfo(0x6A, 2, "DEC",m6809_addressing_modes.IND),
new opcodeinfo(0x6C, 2, "INC",m6809_addressing_modes.IND),
new opcodeinfo(0x6D, 2, "TST",m6809_addressing_modes.IND),
new opcodeinfo(0x6E, 2, "JMP",m6809_addressing_modes.IND),
new opcodeinfo(0x6F, 2, "CLR",m6809_addressing_modes.IND),
new opcodeinfo(0x70, 3, "NEG",m6809_addressing_modes.EXT),
new opcodeinfo(0x73, 3, "COM",m6809_addressing_modes.EXT),
new opcodeinfo(0x74, 3, "LSR",m6809_addressing_modes.EXT),
new opcodeinfo(0x76, 3, "ROR",m6809_addressing_modes.EXT),
new opcodeinfo(0x77, 3, "ASR",m6809_addressing_modes.EXT),
new opcodeinfo(0x78, 3, "ASL",m6809_addressing_modes.EXT),
new opcodeinfo(0x79, 3, "ROL",m6809_addressing_modes.EXT),
new opcodeinfo(0x7A, 3, "DEC",m6809_addressing_modes.EXT),
new opcodeinfo(0x7C, 3, "INC",m6809_addressing_modes.EXT),
new opcodeinfo(0x7D, 3, "TST",m6809_addressing_modes.EXT),
new opcodeinfo(0x7E, 3, "JMP",m6809_addressing_modes.EXT),
new opcodeinfo(0x7F, 3, "CLR",m6809_addressing_modes.EXT),
new opcodeinfo(0x80, 2, "SUBA",m6809_addressing_modes.IMM),
new opcodeinfo(0x81, 2, "CMPA",m6809_addressing_modes.IMM),
new opcodeinfo(0x82, 2, "SBCA",m6809_addressing_modes.IMM),
new opcodeinfo(0x83, 3, "SUBD",m6809_addressing_modes.IMM),
new opcodeinfo(0x84, 2, "ANDA",m6809_addressing_modes.IMM),
new opcodeinfo(0x85, 2, "BITA",m6809_addressing_modes.IMM),
new opcodeinfo(0x86, 2, "LDA",m6809_addressing_modes.IMM),
new opcodeinfo(0x88, 2, "EORA",m6809_addressing_modes.IMM),
new opcodeinfo(0x89, 2, "ADCA",m6809_addressing_modes.IMM),
new opcodeinfo(0x8A, 2, "ORA",m6809_addressing_modes.IMM),
new opcodeinfo(0x8B, 2, "ADDA",m6809_addressing_modes.IMM),
new opcodeinfo(0x8C, 3, "CMPX",m6809_addressing_modes.IMM),
new opcodeinfo(0x8D, 2, "BSR",m6809_addressing_modes.REL,DASMFLAG_STEP_OVER),
new opcodeinfo(0x8E, 3, "LDX",m6809_addressing_modes.IMM),
new opcodeinfo(0x90, 2, "SUBA",m6809_addressing_modes.DIR),
new opcodeinfo(0x91, 2, "CMPA",m6809_addressing_modes.DIR),
new opcodeinfo(0x92, 2, "SBCA",m6809_addressing_modes.DIR),
new opcodeinfo(0x93, 2, "SUBD",m6809_addressing_modes.DIR),
new opcodeinfo(0x94, 2, "ANDA",m6809_addressing_modes.DIR),
new opcodeinfo(0x95, 2, "BITA",m6809_addressing_modes.DIR),
new opcodeinfo(0x96, 2, "LDA",m6809_addressing_modes.DIR),
new opcodeinfo(0x97, 2, "STA",m6809_addressing_modes.DIR),
new opcodeinfo(0x98, 2, "EORA",m6809_addressing_modes.DIR),
new opcodeinfo(0x99, 2, "ADCA",m6809_addressing_modes.DIR),
new opcodeinfo(0x9A, 2, "ORA",m6809_addressing_modes.DIR),
new opcodeinfo(0x9B, 2, "ADDA",m6809_addressing_modes.DIR),
new opcodeinfo(0x9C, 2, "CMPX",m6809_addressing_modes.DIR),
new opcodeinfo(0x9D, 2, "JSR",m6809_addressing_modes.DIR,DASMFLAG_STEP_OVER),
new opcodeinfo(0x9E, 2, "LDX",m6809_addressing_modes.DIR),
new opcodeinfo(0x9F, 2, "STX",m6809_addressing_modes.DIR),
new opcodeinfo(0xA0, 2, "SUBA",m6809_addressing_modes.IND),
new opcodeinfo(0xA1, 2, "CMPA",m6809_addressing_modes.IND),
new opcodeinfo(0xA2, 2, "SBCA",m6809_addressing_modes.IND),
new opcodeinfo(0xA3, 2, "SUBD",m6809_addressing_modes.IND),
new opcodeinfo(0xA4, 2, "ANDA",m6809_addressing_modes.IND),
new opcodeinfo(0xA5, 2, "BITA",m6809_addressing_modes.IND),
new opcodeinfo(0xA6, 2, "LDA",m6809_addressing_modes.IND),
new opcodeinfo(0xA7, 2, "STA",m6809_addressing_modes.IND),
new opcodeinfo(0xA8, 2, "EORA",m6809_addressing_modes.IND),
new opcodeinfo(0xA9, 2, "ADCA",m6809_addressing_modes.IND),
new opcodeinfo(0xAA, 2, "ORA",m6809_addressing_modes.IND),
new opcodeinfo(0xAB, 2, "ADDA",m6809_addressing_modes.IND),
new opcodeinfo(0xAC, 2, "CMPX",m6809_addressing_modes.IND),
new opcodeinfo(0xAD, 2, "JSR",m6809_addressing_modes.IND,DASMFLAG_STEP_OVER),
new opcodeinfo(0xAE, 2, "LDX",m6809_addressing_modes.IND),
new opcodeinfo(0xAF, 2, "STX",m6809_addressing_modes.IND),
new opcodeinfo(0xB0, 3, "SUBA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB1, 3, "CMPA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB2, 3, "SBCA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB3, 3, "SUBD",m6809_addressing_modes.EXT),
new opcodeinfo(0xB4, 3, "ANDA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB5, 3, "BITA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB6, 3, "LDA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB7, 3, "STA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB8, 3, "EORA",m6809_addressing_modes.EXT),
new opcodeinfo(0xB9, 3, "ADCA",m6809_addressing_modes.EXT),
new opcodeinfo(0xBA, 3, "ORA",m6809_addressing_modes.EXT),
new opcodeinfo(0xBB, 3, "ADDA",m6809_addressing_modes.EXT),
new opcodeinfo(0xBC, 3, "CMPX",m6809_addressing_modes.EXT),
new opcodeinfo(0xBD, 3, "JSR",m6809_addressing_modes.EXT,DASMFLAG_STEP_OVER),
new opcodeinfo(0xBE, 3, "LDX",m6809_addressing_modes.EXT),
new opcodeinfo(0xBF, 3, "STX",m6809_addressing_modes.EXT),
new opcodeinfo(0xC0, 2, "SUBB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC1, 2, "CMPB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC2, 2, "SBCB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC3, 3, "ADDD",m6809_addressing_modes.IMM),
new opcodeinfo(0xC4, 2, "ANDB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC5, 2, "BITB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC6, 2, "LDB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC8, 2, "EORB",m6809_addressing_modes.IMM),
new opcodeinfo(0xC9, 2, "ADCB",m6809_addressing_modes.IMM),
new opcodeinfo(0xCA, 2, "ORB",m6809_addressing_modes.IMM),
new opcodeinfo(0xCB, 2, "ADDB",m6809_addressing_modes.IMM),
new opcodeinfo(0xCC, 3, "LDD",m6809_addressing_modes.IMM),
new opcodeinfo(0xCE, 3, "LDU",m6809_addressing_modes.IMM),
new opcodeinfo(0xD0, 2, "SUBB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD1, 2, "CMPB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD2, 2, "SBCB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD3, 2, "ADDD",m6809_addressing_modes.DIR),
new opcodeinfo(0xD4, 2, "ANDB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD5, 2, "BITB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD6, 2, "LDB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD7, 2, "STB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD8, 2, "EORB",m6809_addressing_modes.DIR),
new opcodeinfo(0xD9, 2, "ADCB",m6809_addressing_modes.DIR),
new opcodeinfo(0xDA, 2, "ORB",m6809_addressing_modes.DIR),
new opcodeinfo(0xDB, 2, "ADDB",m6809_addressing_modes.DIR),
new opcodeinfo(0xDC, 2, "LDD",m6809_addressing_modes.DIR),
new opcodeinfo(0xDD, 2, "STD",m6809_addressing_modes.DIR),
new opcodeinfo(0xDE, 2, "LDU",m6809_addressing_modes.DIR),
new opcodeinfo(0xDF, 2, "STU",m6809_addressing_modes.DIR),
new opcodeinfo(0xE0, 2, "SUBB",m6809_addressing_modes.IND),
new opcodeinfo(0xE1, 2, "CMPB",m6809_addressing_modes.IND),
new opcodeinfo(0xE2, 2, "SBCB",m6809_addressing_modes.IND),
new opcodeinfo(0xE3, 2, "ADDD",m6809_addressing_modes.IND),
new opcodeinfo(0xE4, 2, "ANDB",m6809_addressing_modes.IND),
new opcodeinfo(0xE5, 2, "BITB",m6809_addressing_modes.IND),
new opcodeinfo(0xE6, 2, "LDB",m6809_addressing_modes.IND),
new opcodeinfo(0xE7, 2, "STB",m6809_addressing_modes.IND),
new opcodeinfo(0xE8, 2, "EORB",m6809_addressing_modes.IND),
new opcodeinfo(0xE9, 2, "ADCB",m6809_addressing_modes.IND),
new opcodeinfo(0xEA, 2, "ORB",m6809_addressing_modes.IND),
new opcodeinfo(0xEB, 2, "ADDB",m6809_addressing_modes.IND),
new opcodeinfo(0xEC, 2, "LDD",m6809_addressing_modes.IND),
new opcodeinfo(0xED, 2, "STD",m6809_addressing_modes.IND),
new opcodeinfo(0xEE, 2, "LDU",m6809_addressing_modes.IND),
new opcodeinfo(0xEF, 2, "STU",m6809_addressing_modes.IND),
new opcodeinfo(0xF0, 3, "SUBB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF1, 3, "CMPB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF2, 3, "SBCB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF3, 3, "ADDD",m6809_addressing_modes.EXT),
new opcodeinfo(0xF4, 3, "ANDB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF5, 3, "BITB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF6, 3, "LDB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF7, 3, "STB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF8, 3, "EORB",m6809_addressing_modes.EXT),
new opcodeinfo(0xF9, 3, "ADCB",m6809_addressing_modes.EXT),
new opcodeinfo(0xFA, 3, "ORB",m6809_addressing_modes.EXT),
new opcodeinfo(0xFB, 3, "ADDB",m6809_addressing_modes.EXT),
new opcodeinfo(0xFC, 3, "LDD",m6809_addressing_modes.EXT),
new opcodeinfo(0xFD, 3, "STD",m6809_addressing_modes.EXT),
new opcodeinfo(0xFE, 3, "LDU",m6809_addressing_modes.EXT),
new opcodeinfo(0xFF, 3, "STU",m6809_addressing_modes.EXT),
};
public opcodeinfo[] m6809_pg1opcodes = new opcodeinfo[]{
new opcodeinfo(0x21, 4, "LBRN",m6809_addressing_modes.LREL),
new opcodeinfo(0x22, 4, "LBHI",m6809_addressing_modes.LREL),
new opcodeinfo(0x23, 4, "LBLS",m6809_addressing_modes.LREL),
new opcodeinfo(0x24, 4, "LBCC",m6809_addressing_modes.LREL),
new opcodeinfo(0x25, 4, "LBCS",m6809_addressing_modes.LREL),
new opcodeinfo(0x26, 4, "LBNE",m6809_addressing_modes.LREL),
new opcodeinfo(0x27, 4, "LBEQ",m6809_addressing_modes.LREL),
new opcodeinfo(0x28, 4, "LBVC",m6809_addressing_modes.LREL),
new opcodeinfo(0x29, 4, "LBVS",m6809_addressing_modes.LREL),
new opcodeinfo(0x2A, 4, "LBPL",m6809_addressing_modes.LREL),
new opcodeinfo(0x2B, 4, "LBMI",m6809_addressing_modes.LREL),
new opcodeinfo(0x2C, 4, "LBGE",m6809_addressing_modes.LREL),
new opcodeinfo(0x2D, 4, "LBLT",m6809_addressing_modes.LREL),
new opcodeinfo(0x2E, 4, "LBGT",m6809_addressing_modes.LREL),
new opcodeinfo(0x2F, 4, "LBLE",m6809_addressing_modes.LREL),
new opcodeinfo(0x3F, 2, "SWI2",m6809_addressing_modes.INH),
new opcodeinfo(0x83, 4, "CMPD",m6809_addressing_modes.IMM),
new opcodeinfo(0x8C, 4, "CMPY",m6809_addressing_modes.IMM),
new opcodeinfo(0x8E, 4, "LDY",m6809_addressing_modes.IMM),
new opcodeinfo(0x93, 3, "CMPD",m6809_addressing_modes.DIR),
new opcodeinfo(0x9C, 3, "CMPY",m6809_addressing_modes.DIR),
new opcodeinfo(0x9E, 3, "LDY",m6809_addressing_modes.DIR),
new opcodeinfo(0x9F, 3, "STY",m6809_addressing_modes.DIR),
new opcodeinfo(0xA3, 3, "CMPD",m6809_addressing_modes.IND),
new opcodeinfo(0xAC, 3, "CMPY",m6809_addressing_modes.IND),
new opcodeinfo(0xAE, 3, "LDY",m6809_addressing_modes.IND),
new opcodeinfo(0xAF, 3, "STY",m6809_addressing_modes.IND),
new opcodeinfo(0xB3, 4, "CMPD",m6809_addressing_modes.EXT),
new opcodeinfo(0xBC, 4, "CMPY",m6809_addressing_modes.EXT),
new opcodeinfo(0xBE, 4, "LDY",m6809_addressing_modes.EXT),
new opcodeinfo(0xBF, 4, "STY",m6809_addressing_modes.EXT),
new opcodeinfo(0xCE, 4, "LDS",m6809_addressing_modes.IMM),
new opcodeinfo(0xDE, 3, "LDS",m6809_addressing_modes.DIR),
new opcodeinfo(0xDF, 3, "STS",m6809_addressing_modes.DIR),
new opcodeinfo(0xEE, 3, "LDS",m6809_addressing_modes.IND),
new opcodeinfo(0xEF, 3, "STS",m6809_addressing_modes.IND),
new opcodeinfo(0xFE, 4, "LDS",m6809_addressing_modes.EXT),
new opcodeinfo(0xFF, 4, "STS",m6809_addressing_modes.EXT)
};
public opcodeinfo[] m6809_pg2opcodes = new opcodeinfo[]{
new opcodeinfo(0x3F, 2, "SWI3",m6809_addressing_modes.INH),
new opcodeinfo(0x83, 4, "CMPU",m6809_addressing_modes.IMM),
new opcodeinfo(0x8C, 4, "CMPS",m6809_addressing_modes.IMM),
new opcodeinfo(0x93, 3, "CMPU",m6809_addressing_modes.DIR),
new opcodeinfo(0x9C, 3, "CMPS",m6809_addressing_modes.DIR),
new opcodeinfo(0xA3, 3, "CMPU",m6809_addressing_modes.IND),
new opcodeinfo(0xAC, 3, "CMPS",m6809_addressing_modes.IND),
new opcodeinfo(0xB3, 4, "CMPU",m6809_addressing_modes.EXT),
new opcodeinfo(0xBC, 4, "CMPS",m6809_addressing_modes.EXT)
};
public opcodeinfo[][] m6809_pgpointers;
public int[] m6809_numops;
public static string[] m6809_regs = new string[] { "X", "Y", "U", "S", "PC" };
public static string[] m6809_regs_te = new string[]
{
"D", "X", "Y", "U", "S", "PC", "inv", "inv",
"A", "B", "CC", "DP", "inv", "inv", "inv", "inv"
};
public byte op;
public void DisassemblerInit()
{
m6809_pgpointers = new opcodeinfo[3][] { m6809_pg0opcodes, m6809_pg1opcodes, m6809_pg2opcodes };
m6809_numops = new int[3] { m6809_pg0opcodes.Length, m6809_pg1opcodes.Length, m6809_pg2opcodes.Length };
}
public string m6809_dasm(int ppc)
{
string buffer = "";
byte opcode, pb, pbm, reg;
m6809_addressing_modes mode;
byte[] operandarray;
int ea;
uint flags;
int numoperands, offset;
int i, j, i1, page = 0;
ushort p = (ushort)ppc;
if (ppc == 0xc010)
{
i1 = 1;
}
buffer = ReadOp(p).ToString("X2");
bool indirect, opcode_found = false;
do
{
opcode = ReadOp(p);
p++;
for (i = 0; i < m6809_numops[page]; i++)
if (m6809_pgpointers[page][i].opcode == opcode)
break;
if (i < m6809_numops[page])
opcode_found = true;
else
{
buffer += " Illegal Opcode";
return buffer;
}
if (m6809_pgpointers[page][i].mode >= m6809_addressing_modes.PG1)
{
page = m6809_pgpointers[page][i].mode - m6809_addressing_modes.PG1 + 1;
opcode_found = false;
}
} while (!opcode_found);
if (page == 0)
numoperands = m6809_pgpointers[page][i].length - 1;
else
numoperands = m6809_pgpointers[page][i].length - 2;
operandarray = new byte[numoperands];
for (j = 0; j < numoperands; j++)
{
operandarray[j] = ReadOpArg((ushort)(p + j));
}
p += (ushort)numoperands;
ppc += numoperands;
mode = m6809_pgpointers[page][i].mode;
flags = m6809_pgpointers[page][i].flags;
buffer += m6809_pgpointers[page][i].name.PadLeft(6);
switch (mode)
{
case m6809_addressing_modes.INH:
switch (opcode)
{
case 0x34: // PSHS
case 0x36: // PSHU
pb = operandarray[0];
if ((pb & 0x80) != 0)
buffer += "PC";
if ((pb & 0x40) != 0)
buffer += (((pb & 0x80) != 0) ? "," : "") + ((opcode == 0x34) ? "U" : "S");
if ((pb & 0x20) != 0)
buffer += (((pb & 0xc0) != 0) ? "," : "") + "Y";
if ((pb & 0x10) != 0)
buffer += (((pb & 0xe0) != 0) ? "," : "") + "X";
if ((pb & 0x08) != 0)
buffer += (((pb & 0xf0) != 0) ? "," : "") + "DP";
if ((pb & 0x04) != 0)
buffer += (((pb & 0xf8) != 0) ? "," : "") + "B";
if ((pb & 0x02) != 0)
buffer += (((pb & 0xfc) != 0) ? "," : "") + "A";
if ((pb & 0x01) != 0)
buffer += (((pb & 0xfe) != 0) ? "," : "") + "CC";
break;
case 0x35: // PULS
case 0x37: // PULU
pb = operandarray[0];
if ((pb & 0x01) != 0)
buffer += "CC";
if ((pb & 0x02) != 0)
buffer += (((pb & 0x01) != 0) ? "," : "") + "A";
if ((pb & 0x04) != 0)
buffer += (((pb & 0x03) != 0) ? "," : "") + "B";
if ((pb & 0x08) != 0)
buffer += (((pb & 0x07) != 0) ? "," : "") + "DP";
if ((pb & 0x10) != 0)
buffer += (((pb & 0x0f) != 0) ? "," : "") + "X";
if ((pb & 0x20) != 0)
buffer += (((pb & 0x1f) != 0) ? "," : "") + "Y";
if ((pb & 0x40) != 0)
buffer += (((pb & 0x3f) != 0) ? "," : "") + ((opcode == 0x35) ? "U" : "S");
if ((pb & 0x80) != 0)
buffer += (((pb & 0x7f) != 0) ? "," : "") + "PC ; (PUL? PC=RTS)";
break;
default:
// No operands
break;
}
break;
case m6809_addressing_modes.DIR:
ea = operandarray[0];
buffer += ea.ToString("X2");
break;
case m6809_addressing_modes.REL:
offset = (sbyte)operandarray[0];
buffer += ((ppc + offset) & 0xffff).ToString("X4");
break;
case m6809_addressing_modes.LREL:
offset = (short)((operandarray[0] << 8) + operandarray[1]);
buffer += ((ppc + offset) & 0xffff).ToString("X4");
break;
case m6809_addressing_modes.EXT:
ea = ((operandarray[0] << 8) + operandarray[1]);
buffer += ea.ToString("X4");
break;
case m6809_addressing_modes.IND:
pb = operandarray[0];
reg = (byte)((pb >> 5) & 3);
pbm = (byte)(pb & 0x8f);
indirect = ((pb & 0x90) == 0x90) ? true : false;
// open brackets if indirect
if (indirect && pbm != 0x80 && pbm != 0x82)
buffer += "[";
switch (pbm)
{
case 0x80: // ,R+
if (indirect)
buffer = "Illegal Postbyte";
else
buffer += "," + m6809_regs[reg] + "+";
break;
case 0x81: // ,R++
buffer += "," + m6809_regs[reg] + "++";
break;
case 0x82: // ,-R
if (indirect)
buffer = "Illegal Postbyte";
else
buffer += ",-" + m6809_regs[reg];
break;
case 0x83: // ,--R
buffer += ",--" + m6809_regs[reg];
break;
case 0x84: // ,R
buffer += "," + m6809_regs[reg];
break;
case 0x85: // (+/- B),R
buffer += "B," + m6809_regs[reg];
break;
case 0x86: // (+/- A),R
buffer += "A," + m6809_regs[reg];
break;
case 0x87:
buffer = "Illegal Postbyte";
break;
case 0x88: // (+/- 7 bit offset),R
offset = (sbyte)ReadOpArg(p);
p++;
buffer += ((offset < 0) ? "-" : "");
buffer += ((offset < 0) ? -offset : offset).ToString("X2");
buffer += m6809_regs[reg];
break;
case 0x89: // (+/- 15 bit offset),R
offset = (short)((ReadOpArg(p) << 8) + ReadOpArg((ushort)(p + 1)));
p += 2;
buffer += ((offset < 0) ? "-" : "");
buffer += ((offset < 0) ? -offset : offset).ToString("X4");
buffer += m6809_regs[reg];
break;
case 0x8a:
buffer = "Illegal Postbyte";
break;
case 0x8b: // (+/- D),R
buffer += "D," + m6809_regs[reg];
break;
case 0x8c: // (+/- 7 bit offset),PC
offset = (sbyte)ReadOpArg(p);
p++;
buffer += ((offset < 0) ? "-" : "");
buffer += "$" + ((offset < 0) ? -offset : offset).ToString("X2") + ",PC";
break;
case 0x8d: // (+/- 15 bit offset),PC
offset = (short)((ReadOpArg(p) << 8) + ReadOpArg((ushort)(p + 1)));
p += 2;
buffer += ((offset < 0) ? "-" : "");
buffer += "$" + ((offset < 0) ? -offset : offset).ToString("X4") + ",PC";
break;
case 0x8e:
buffer = "Illegal Postbyte";
break;
case 0x8f: // address
ea = (short)((ReadOpArg(p) << 8) + ReadOpArg((ushort)(p + 1)));
p += 2;
buffer += "$" + ea.ToString("X4");
break;
default: // (+/- 4 bit offset),R
offset = pb & 0x1f;
if (offset > 15)
offset = offset - 32;
buffer += ((offset < 0) ? "-" : "");
buffer += "$" + ((offset < 0) ? -offset : offset).ToString("X") + ",";
buffer += m6809_regs[reg];
break;
}
// close brackets if indirect
if (indirect && pbm != 0x80 && pbm != 0x82)
buffer += "]";
break;
case m6809_addressing_modes.IMM:
if (numoperands == 2)
{
ea = (operandarray[0] << 8) + operandarray[1];
buffer += "#$" + ea.ToString("X4");
}
else
if (numoperands == 1)
{
ea = operandarray[0];
buffer += "#$" + ea.ToString("X2");
}
break;
case m6809_addressing_modes.IMM_RR:
pb = operandarray[0];
buffer += m6809_regs_te[(pb >> 4) & 0xf] + "," + m6809_regs_te[pb & 0xf];
break;
}
return buffer;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 05a5a82c4182e0f4082c1e8329ddde79
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -24,8 +24,6 @@ namespace cpu.m6809
public Action<ushort, byte> WriteIO;
public delegate int irq_delegate(int irqline);
public irq_delegate irq_callback;
public delegate void debug_delegate();
//public debug_delegate debugger_start_cpu_hook_callback, debugger_stop_cpu_hook_callback;
private ulong totalExecutedCycles;
private int pendingCycles;
public override ulong TotalExecutedCycles
@ -563,7 +561,6 @@ namespace cpu.m6809
extra_cycles = 0;
if ((int_state & (M6809_CWAI | M6809_SYNC)) != 0)
{
//debugger_instruction_hook(Machine, PCD);
pendingCycles = 0;
}
else
@ -572,13 +569,10 @@ namespace cpu.m6809
{
int prevCycles = pendingCycles;
PPC = PC;
//debugger_instruction_hook(Machine, PCD);
ireg = ReadOp(PC.LowWord);
PC.LowWord++;
//debugger_start_cpu_hook_callback();
insn[ireg]();
pendingCycles -= cycles_6809[ireg];
//debugger_stop_cpu_hook_callback();
int delta = prevCycles - pendingCycles;
totalExecutedCycles += (ulong)delta;
} while (pendingCycles > 0);

View File

@ -1,693 +0,0 @@
//http://www.zophar.net/fileuploads/2/10819kouzv/z80undoc.html
//TODO: ex. (IX+00h) could be turned into (IX)
//usage:
//VgMuseum.Z80.Disassembler disasm = new Disassembler();
//ushort pc = RegPC.Word;
//string str = disasm.Disassemble(() => ReadMemory(pc++));
//EmuLogger.Log(str);
//please note that however much youre tempted to, timings can't be put in a table here because they depend on how the instruction executes at runtime
using System;
namespace cpu.z80
{
public class Disassembler
{
public static sbyte[,] opcodeSizes = new sbyte[9, 256];
public static void GenerateOpcodeSizes()
{
Disassembler disasm = new Disassembler();
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[0, i] = (sbyte)pc;
}
opcodeSizes[0, 0xCB] = -1;
opcodeSizes[0, 0xED] = -2;
opcodeSizes[0, 0xDD] = -3;
opcodeSizes[0, 0xFD] = -4;
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xCB, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[1, i] = (sbyte)pc;
}
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xED, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[2, i] = (sbyte)pc;
}
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xDD, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[3, i] = (sbyte)pc;
}
opcodeSizes[3, 0xCB] = -5;
opcodeSizes[3, 0xED] = -2;
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xFD, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[4, i] = (sbyte)pc;
}
opcodeSizes[4, 0xCB] = -6;
opcodeSizes[4, 0xED] = -2;
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xDD, 0xCB, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[5, i] = (sbyte)pc;
}
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xFD, 0xCB, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[6, i] = (sbyte)pc;
}
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xDD, 0xED, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[7, i] = (sbyte)pc;
}
for (int i = 0; i < 256; i++)
{
int pc = 0;
byte[] opcode = { 0xFD, 0xED, (byte)i, 0, 0, 0 };
disasm.Disassemble(() => opcode[pc++]);
opcodeSizes[8, i] = (sbyte)pc;
}
}
static string Result(string format, Func<byte> read)
{
//d immediately succeeds the opcode
//n immediate succeeds the opcode and the displacement (if present)
//nn immediately succeeds the opcode and the displacement (if present)
if (format.IndexOf("nn") != -1)
{
byte B = read();
byte C = read();
format = format.Replace("nn", string.Format("{0:X4}h", B + C * 256));
}
if (format.IndexOf("n") != -1)
{
byte B = read();
format = format.Replace("n", string.Format("{0:X2}h", B));
}
if (format.IndexOf("+d") != -1) format = format.Replace("+d", "d");
if (format.IndexOf("d") != -1)
{
byte B = read();
bool neg = ((B & 0x80) != 0);
char sign = neg ? '-' : '+';
int val = neg ? 256 - B : B;
format = format.Replace("d", string.Format("{0}{1:X2}h", sign, val));
}
return format;
}
readonly static string[] mnemonics = new string[]
{
"NOP", "LD BC, nn", "LD (BC), A", "INC BC", //0x04
"INC B", "DEC B", "LD B, n", "RLCA", //0x08
"EX AF, AF'", "ADD HL, BC", "LD A, (BC)", "DEC BC", //0x0C
"INC C", "DEC C", "LD C, n", "RRCA", //0x10
"DJNZ d", "LD DE, nn", "LD (DE), A", "INC DE", //0x14
"INC D", "DEC D", "LD D, n", "RLA", //0x18
"JR d", "ADD HL, DE", "LD A, (DE)", "DEC DE", //0x1C
"INC E", "DEC E", "LD E, n", "RRA", //0x20
"JR NZ, d", "LD HL, nn", "LD (nn), HL", "INC HL", //0x24
"INC H", "DEC H", "LD H, n", "DAA", //0x28
"JR Z, d", "ADD HL, HL", "LD HL, (nn)", "DEC HL", //0x2C
"INC L", "DEC L", "LD L, n", "CPL", //0x30
"JR NC, d", "LD SP, nn", "LD (nn), A", "INC SP", //0x34
"INC (HL)", "DEC (HL)", "LD (HL), n", "SCF", //0x38
"JR C, d", "ADD HL, SP", "LD A, (nn)", "DEC SP", //0x3C
"INC A", "DEC A", "LD A, n", "CCF", //0x40
"LD B, B", "LD B, C", "LD B, D", "LD B, E", //0x44
"LD B, H", "LD B, L", "LD B, (HL)", "LD B, A", //0x48
"LD C, B", "LD C, C", "LD C, D", "LD C, E", //0x4C
"LD C, H", "LD C, L", "LD C, (HL)", "LD C, A", //0x50
"LD D, B", "LD D, C", "LD D, D", "LD D, E", //0x54
"LD D, H", "LD D, L", "LD D, (HL)", "LD D, A", //0x58
"LD E, B", "LD E, C", "LD E, D", "LD E, E", //0x5C
"LD E, H", "LD E, L", "LD E, (HL)", "LD E, A", //0x60
"LD H, B", "LD H, C", "LD H, D", "LD H, E", //0x64
"LD H, H", "LD H, L", "LD H, (HL)", "LD H, A", //0x68
"LD L, B", "LD L, B", "LD L, D", "LD L, E", //0x6C
"LD L, H", "LD L, L", "LD L, (HL)", "LD L, A", //0x70
"LD (HL), B", "LD (HL), C", "LD (HL), D", "LD (HL), E", //0x74
"LD (HL), H", "LD (HL), L", "HALT", "LD (HL), A", //0x78
"LD A, B", "LD A, C", "LD A, D", "LD A, E", //0x7C
"LD A, H", "LD A, L", "LD A, (HL)", "LD A, A", //0x80
"ADD A, B", "ADD A, C", "ADD A, D", "ADD A, E", //0x84
"ADD A, H", "ADD A, L", "ADD A, (HL)", "ADD A, A", //0x88
"ADC A, B", "ADC A, C", "ADC A, D", "ADC A, E", //0x8C
"ADC A, H", "ADC A, L", "ADC A, (HL)", "ADC A, A", //0x90
"SUB A, B", "SUB A, C", "SUB A, D", "SUB A, E", //0x94
"SUB A, H", "SUB A, L", "SUB A, (HL)", "SUB A, A", //0x98
"SBC A, B", "SBC A, C", "SBC A, D", "SBC A, E", //0x9C
"SBC A, H", "SBC A, L", "SBC A, (HL)", "SBC A, A", //0xA0
"AND B", "AND C", "AND D", "AND E", //0xA4
"AND H", "AND L", "AND (HL)", "AND A", //0xA8
"XOR B", "XOR C", "XOR D", "XOR E", //0xAC
"XOR H", "XOR L", "XOR (HL)", "XOR A", //0xB0
"OR B", "OR C", "OR D", "OR E", //0xB4
"OR H", "OR L", "OR (HL)", "OR A", //0xB8
"CP B", "CP C", "CP D", "CP E", //0xBC
"CP H", "CP L", "CP (HL)", "CP A", //0xC0
"RET NZ", "POP BC", "JP NZ, nn", "JP nn", //0xC4
"CALL NZ, nn", "PUSH BC", "ADD A, n", "RST $00", //0xC8
"RET Z", "RET", "JP Z, nn", "[CB]", //0xCC
"CALL Z, nn", "CALL nn", "ADC A, n", "RST $08", //0xD0
"RET NC", "POP DE", "JP NC, nn", "OUT n, A", //0xD4
"CALL NC, nn", "PUSH DE", "SUB n", "RST $10", //0xD8
"RET C", "EXX", "JP C, nn", "IN A, n", //0xDC
"CALL C, nn", "[DD]", "SBC A, n", "RST $18", //0xE0
"RET PO", "POP HL", "JP PO, nn", "EX (SP), HL", //0xE4
"CALL C, nn", "PUSH HL", "AND n", "RST $20", //0xE8
"RET PE", "JP HL", "JP PE, nn", "EX DE, HL", //0xEC
"CALL PE, nn", "[ED]", "XOR n", "RST $28", //0xF0
"RET P", "POP AF", "JP P, nn", "DI", //0xF4
"CALL P, nn", "PUSH AF", "OR n", "RST $30", //0xF8
"RET M", "LD SP, HL", "JP M, nn", "EI", //0xFC
"CALL M, nn", "[FD]", "CP n", "RST $38", //0x100
};
readonly static string[] mnemonicsDD = new string[]
{
"NOP", "LD BC, nn", "LD (BC), A", "INC BC", //0x04
"INC B", "DEC B", "LD B, n", "RLCA", //0x08
"EX AF, AF'", "ADD IX, BC", "LD A, (BC)", "DEC BC", //0x0C
"INC C", "DEC C", "LD C, n", "RRCA", //0x10
"DJNZ d", "LD DE, nn", "LD (DE), A", "INC DE", //0x14
"INC D", "DEC D", "LD D, n", "RLA", //0x18
"JR d", "ADD IX, DE", "LD A, (DE)", "DEC DE", //0x1C
"INC E", "DEC E", "LD E, n", "RRA", //0x20
"JR NZ, d", "LD IX, nn", "LD (nn), IX", "INC IX", //0x24
"INC IXH", "DEC IXH", "LD IXH, n", "DAA", //0x28
"JR Z, d", "ADD IX, IX", "LD IX, (nn)", "DEC IX", //0x2C
"INC IXL", "DEC IXL", "LD IXL, n", "CPL", //0x30
"JR NC, d", "LD SP, nn", "LD (nn), A", "INC SP", //0x34
"INC (IX+d)", "DEC (IX+d)", "LD (IX+d), n", "SCF", //0x38
"JR C, d", "ADD IX, SP", "LD A, (nn)", "DEC SP", //0x3C
"INC A", "DEC A", "LD A, n", "CCF", //0x40
"LD B, B", "LD B, C", "LD B, D", "LD B, E", //0x44
"LD B, IXH", "LD B, IXL", "LD B, (IX+d)", "LD B, A", //0x48
"LD C, B", "LD C, C", "LD C, D", "LD C, E", //0x4C
"LD C, IXH", "LD C, IXL", "LD C, (IX+d)", "LD C, A", //0x50
"LD D, B", "LD D, C", "LD D, D", "LD D, E", //0x54
"LD D, IXH", "LD D, IXL", "LD D, (IX+d)", "LD D, A", //0x58
"LD E, B", "LD E, C", "LD E, D", "LD E, E", //0x5C
"LD E, IXH", "LD E, IXL", "LD E, (IX+d)", "LD E, A", //0x60
"LD IXH, B", "LD IXH, C", "LD IXH, D", "LD IXH, E", //0x64
"LD IXH, IXH", "LD IXH, IXL", "LD H, (IX+d)", "LD IXH, A", //0x68
"LD IXL, B", "LD IXL, C", "LD IXL, D", "LD IXL, E", //0x6C
"LD IXL, IXH", "LD IXL, IXL", "LD L, (IX+d)", "LD IXL, A", //0x70
"LD (IX+d), B", "LD (IX+d), C", "LD (IX+d), D", "LD (IX+d), E", //0x74
"LD (IX+d), H", "LD (IX+d), L", "HALT", "LD (IX+d), A", //0x78
"LD A, B", "LD A, C", "LD A, D", "LD A, E", //0x7C
"LD A, IXH", "LD A, IXL", "LD A, (IX+d)", "LD A, A", //0x80
"ADD A, B", "ADD A, C", "ADD A, D", "ADD A, E", //0x84
"ADD A, IXH", "ADD A, IXL", "ADD A, (IX+d)", "ADD A, A", //0x88
"ADC A, B", "ADC A, C", "ADC A, D", "ADC A, E", //0x8C
"ADC A, IXH", "ADC A, IXL", "ADC A, (IX+d)", "ADC A, A", //0x90
"SUB A, B", "SUB A, C", "SUB A, D", "SUB A, E", //0x94
"SUB A, IXH", "SUB A, IXL", "SUB A, (IX+d)", "SUB A, A", //0x98
"SBC A, B", "SBC A, C", "SBC A, D", "SBC A, E", //0x9C
"SBC A, IXH", "SBC A, IXL", "SBC A, (IX+d)", "SBC A, A", //0xA0
"AND B", "AND C", "AND D", "AND E", //0xA4
"AND IXH", "AND IXL", "AND (IX+d)", "AND A", //0xA8
"XOR B", "XOR C", "XOR D", "XOR E", //0xAC
"XOR IXH", "XOR IXL", "XOR (IX+d)", "XOR A", //0xB0
"OR B", "OR C", "OR D", "OR E", //0xB4
"OR IXH", "OR IXL", "OR (IX+d)", "OR A", //0xB8
"CP B", "CP C", "CP D", "CP E", //0xBC
"CP IXH", "CP IXL", "CP (IX+d)", "CP A", //0xC0
"RET NZ", "POP BC", "JP NZ, nn", "JP nn", //0xC4
"CALL NZ, nn", "PUSH BC", "ADD A, n", "RST $00", //0xC8
"RET Z", "RET", "JP Z, nn", "[DD CB]", //0xCC
"CALL Z, nn", "CALL nn", "ADC A, n", "RST $08", //0xD0
"RET NC", "POP DE", "JP NC, nn", "OUT n, A", //0xD4
"CALL NC, nn", "PUSH DE", "SUB n", "RST $10", //0xD8
"RET C", "EXX", "JP C, nn", "IN A, n", //0xDC
"CALL C, nn", "[!DD DD!]", "SBC A, n", "RST $18", //0xE0
"RET PO", "POP IX", "JP PO, nn", "EX (SP), IX", //0xE4
"CALL C, nn", "PUSH IX", "AND n", "RST $20", //0xE8
"RET PE", "JP IX", "JP PE, nn", "EX DE, HL", //0xEC
"CALL PE, nn", "[DD ED]", "XOR n", "RST $28", //0xF0
"RET P", "POP AF", "JP P, nn", "DI", //0xF4
"CALL P, nn", "PUSH AF", "OR n", "RST $30", //0xF8
"RET M", "LD SP, IX", "JP M, nn", "EI", //0xFC
"CALL M, nn", "[!!DD FD!!]", "CP n", "RST $38", //0x100
};
readonly static string[] mnemonicsFD = new string[]
{
"NOP", "LD BC, nn", "LD (BC), A", "INC BC", //0x04
"INC B", "DEC B", "LD B, n", "RLCA", //0x08
"EX AF, AF'", "ADD IY, BC", "LD A, (BC)", "DEC BC", //0x0C
"INC C", "DEC C", "LD C, n", "RRCA", //0x10
"DJNZ d", "LD DE, nn", "LD (DE), A", "INC DE", //0x14
"INC D", "DEC D", "LD D, n", "RLA", //0x18
"JR d", "ADD IY, DE", "LD A, (DE)", "DEC DE", //0x1C
"INC E", "DEC E", "LD E, n", "RRA", //0x20
"JR NZ, d", "LD IY, nn", "LD (nn), IY", "INC IY", //0x24
"INC IYH", "DEC IYH", "LD IYH, n", "DAA", //0x28
"JR Z, d", "ADD IY, IY", "LD IY, (nn)", "DEC IY", //0x2C
"INC IYL", "DEC IYL", "LD IYL, n", "CPL", //0x30
"JR NC, d", "LD SP, nn", "LD (nn), A", "INC SP", //0x34
"INC (IY+d)", "DEC (IY+d)", "LD (IY+d), n", "SCF", //0x38
"JR C, d", "ADD IY, SP", "LD A, (nn)", "DEC SP", //0x3C
"INC A", "DEC A", "LD A, n", "CCF", //0x40
"LD B, B", "LD B, C", "LD B, D", "LD B, E", //0x44
"LD B, IYH", "LD B, IYL", "LD B, (IY+d)", "LD B, A", //0x48
"LD C, B", "LD C, C", "LD C, D", "LD C, E", //0x4C
"LD C, IYH", "LD C, IYL", "LD C, (IY+d)", "LD C, A", //0x50
"LD D, B", "LD D, C", "LD D, D", "LD D, E", //0x54
"LD D, IYH", "LD D, IYL", "LD D, (IY+d)", "LD D, A", //0x58
"LD E, B", "LD E, C", "LD E, D", "LD E, E", //0x5C
"LD E, IYH", "LD E, IYL", "LD E, (IY+d)", "LD E, A", //0x60
"LD IYH, B", "LD IYH, C", "LD IYH, D", "LD IYH, E", //0x64
"LD IYH, IYH", "LD IYH, IYL", "LD H, (IY+d)", "LD IYH, A", //0x68
"LD IYL, B", "LD IYL, C", "LD IYL, D", "LD IYL, E", //0x6C
"LD IYL, IYH", "LD IYL, IYL", "LD L, (IY+d)", "LD IYL, A", //0x70
"LD (IY+d), B", "LD (IY+d), C", "LD (IY+d), D", "LD (IY+d), E", //0x74
"LD (IY+d), H", "LD (IY+d), L", "HALT", "LD (IY+d), A", //0x78
"LD A, B", "LD A, C", "LD A, D", "LD A, E", //0x7C
"LD A, IYH", "LD A, IYL", "LD A, (IY+d)", "LD A, A", //0x80
"ADD A, B", "ADD A, C", "ADD A, D", "ADD A, E", //0x84
"ADD A, IYH", "ADD A, IYL", "ADD A, (IY+d)", "ADD A, A", //0x88
"ADC A, B", "ADC A, C", "ADC A, D", "ADC A, E", //0x8C
"ADC A, IYH", "ADC A, IYL", "ADC A, (IY+d)", "ADC A, A", //0x90
"SUB A, B", "SUB A, C", "SUB A, D", "SUB A, E", //0x94
"SUB A, IYH", "SUB A, IYL", "SUB A, (IY+d)", "SUB A, A", //0x98
"SBC A, B", "SBC A, C", "SBC A, D", "SBC A, E", //0x9C
"SBC A, IYH", "SBC A, IYL", "SBC A, (IY+d)", "SBC A, A", //0xA0
"AND B", "AND C", "AND D", "AND E", //0xA4
"AND IYH", "AND IYL", "AND (IY+d)", "AND A", //0xA8
"XOR B", "XOR C", "XOR D", "XOR E", //0xAC
"XOR IYH", "XOR IYL", "XOR (IY+d)", "XOR A", //0xB0
"OR B", "OR C", "OR D", "OR E", //0xB4
"OR IYH", "OR IYL", "OR (IY+d)", "OR A", //0xB8
"CP B", "CP C", "CP D", "CP E", //0xBC
"CP IYH", "CP IYL", "CP (IY+d)", "CP A", //0xC0
"RET NZ", "POP BC", "JP NZ, nn", "JP nn", //0xC4
"CALL NZ, nn", "PUSH BC", "ADD A, n", "RST $00", //0xC8
"RET Z", "RET", "JP Z, nn", "[DD CB]", //0xCC
"CALL Z, nn", "CALL nn", "ADC A, n", "RST $08", //0xD0
"RET NC", "POP DE", "JP NC, nn", "OUT n, A", //0xD4
"CALL NC, nn", "PUSH DE", "SUB n", "RST $10", //0xD8
"RET C", "EXX", "JP C, nn", "IN A, n", //0xDC
"CALL C, nn", "[!FD DD!]", "SBC A, n", "RST $18", //0xE0
"RET PO", "POP IY", "JP PO, nn", "EX (SP), IY", //0xE4
"CALL C, nn", "PUSH IY", "AND n", "RST $20", //0xE8
"RET PE", "JP IY", "JP PE, nn", "EX DE, HL", //0xEC
"CALL PE, nn", "[FD ED]", "XOR n", "RST $28", //0xF0
"RET P", "POP AF", "JP P, nn", "DI", //0xF4
"CALL P, nn", "PUSH AF", "OR n", "RST $30", //0xF8
"RET M", "LD SP, IY", "JP M, nn", "EI", //0xFC
"CALL M, nn", "[!FD FD!]", "CP n", "RST $38", //0x100
};
readonly static string[] mnemonicsDDCB = new string[]
{
"RLC (IX+d)->B", "RLC (IX+d)->C", "RLC (IX+d)->D", "RLC (IX+d)->E", "RLC (IX+d)->H", "RLC (IX+d)->L", "RLC (IX+d)", "RLC (IX+d)->A",
"RRC (IX+d)->B", "RRC (IX+d)->C", "RRC (IX+d)->D", "RRC (IX+d)->E", "RRC (IX+d)->H", "RRC (IX+d)->L", "RRC (IX+d)", "RRC (IX+d)->A",
"RL (IX+d)->B", "RL (IX+d)->C", "RL (IX+d)->D", "RL (IX+d)->E", "RL (IX+d)->H", "RL (IX+d)->L", "RL (IX+d)", "RL (IX+d)->A",
"RR (IX+d)->B", "RR (IX+d)->C", "RR (IX+d)->D", "RR (IX+d)->E", "RR (IX+d)->H", "RR (IX+d)->L", "RR (IX+d)", "RR (IX+d)->A",
"SLA (IX+d)->B", "SLA (IX+d)->C", "SLA (IX+d)->D", "SLA (IX+d)->E", "SLA (IX+d)->H", "SLA (IX+d)->L", "SLA (IX+d)", "SLA (IX+d)->A",
"SRA (IX+d)->B", "SRA (IX+d)->C", "SRA (IX+d)->D", "SRA (IX+d)->E", "SRA (IX+d)->H", "SRA (IX+d)->L", "SRA (IX+d)", "SRA (IX+d)->A",
"SL1 (IX+d)->B", "SL1 (IX+d)->C", "SL1 (IX+d)->D", "SL1 (IX+d)->E", "SL1 (IX+d)->H", "SL1 (IX+d)->L", "SL1 (IX+d)", "SL1 (IX+d)->A",
"SRL (IX+d)->B", "SRL (IX+d)->C", "SRL (IX+d)->D", "SRL (IX+d)->E", "SRL (IX+d)->H", "SRL (IX+d)->L", "SRL (IX+d)", "SRL (IX+d)->A",
"BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)", "BIT 0, (IX+d)",
"BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)", "BIT 1, (IX+d)",
"BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)", "BIT 2, (IX+d)",
"BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)", "BIT 3, (IX+d)",
"BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)", "BIT 4, (IX+d)",
"BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)", "BIT 5, (IX+d)",
"BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)", "BIT 6, (IX+d)",
"BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)", "BIT 7, (IX+d)",
"RES 0 (IX+d)->B", "RES 0 (IX+d)->C", "RES 0 (IX+d)->D", "RES 0 (IX+d)->E", "RES 0 (IX+d)->H", "RES 0 (IX+d)->L", "RES 0 (IX+d)", "RES 0 (IX+d)->A",
"RES 1 (IX+d)->B", "RES 1 (IX+d)->C", "RES 1 (IX+d)->D", "RES 1 (IX+d)->E", "RES 1 (IX+d)->H", "RES 1 (IX+d)->L", "RES 1 (IX+d)", "RES 1 (IX+d)->A",
"RES 2 (IX+d)->B", "RES 2 (IX+d)->C", "RES 2 (IX+d)->D", "RES 2 (IX+d)->E", "RES 2 (IX+d)->H", "RES 2 (IX+d)->L", "RES 2 (IX+d)", "RES 2 (IX+d)->A",
"RES 3 (IX+d)->B", "RES 3 (IX+d)->C", "RES 3 (IX+d)->D", "RES 3 (IX+d)->E", "RES 3 (IX+d)->H", "RES 3 (IX+d)->L", "RES 3 (IX+d)", "RES 3 (IX+d)->A",
"RES 4 (IX+d)->B", "RES 4 (IX+d)->C", "RES 4 (IX+d)->D", "RES 4 (IX+d)->E", "RES 4 (IX+d)->H", "RES 4 (IX+d)->L", "RES 4 (IX+d)", "RES 4 (IX+d)->A",
"RES 5 (IX+d)->B", "RES 5 (IX+d)->C", "RES 5 (IX+d)->D", "RES 5 (IX+d)->E", "RES 5 (IX+d)->H", "RES 5 (IX+d)->L", "RES 5 (IX+d)", "RES 5 (IX+d)->A",
"RES 6 (IX+d)->B", "RES 6 (IX+d)->C", "RES 6 (IX+d)->D", "RES 6 (IX+d)->E", "RES 6 (IX+d)->H", "RES 6 (IX+d)->L", "RES 6 (IX+d)", "RES 6 (IX+d)->A",
"RES 7 (IX+d)->B", "RES 7 (IX+d)->C", "RES 7 (IX+d)->D", "RES 7 (IX+d)->E", "RES 7 (IX+d)->H", "RES 7 (IX+d)->L", "RES 7 (IX+d)", "RES 7 (IX+d)->A",
"SET 0 (IX+d)->B", "SET 0 (IX+d)->C", "SET 0 (IX+d)->D", "SET 0 (IX+d)->E", "SET 0 (IX+d)->H", "SET 0 (IX+d)->L", "SET 0 (IX+d)", "SET 0 (IX+d)->A",
"SET 1 (IX+d)->B", "SET 1 (IX+d)->C", "SET 1 (IX+d)->D", "SET 1 (IX+d)->E", "SET 1 (IX+d)->H", "SET 1 (IX+d)->L", "SET 1 (IX+d)", "SET 1 (IX+d)->A",
"SET 2 (IX+d)->B", "SET 2 (IX+d)->C", "SET 2 (IX+d)->D", "SET 2 (IX+d)->E", "SET 2 (IX+d)->H", "SET 2 (IX+d)->L", "SET 2 (IX+d)", "SET 2 (IX+d)->A",
"SET 3 (IX+d)->B", "SET 3 (IX+d)->C", "SET 3 (IX+d)->D", "SET 3 (IX+d)->E", "SET 3 (IX+d)->H", "SET 3 (IX+d)->L", "SET 3 (IX+d)", "SET 3 (IX+d)->A",
"SET 4 (IX+d)->B", "SET 4 (IX+d)->C", "SET 4 (IX+d)->D", "SET 4 (IX+d)->E", "SET 4 (IX+d)->H", "SET 4 (IX+d)->L", "SET 4 (IX+d)", "SET 4 (IX+d)->A",
"SET 5 (IX+d)->B", "SET 5 (IX+d)->C", "SET 5 (IX+d)->D", "SET 5 (IX+d)->E", "SET 5 (IX+d)->H", "SET 5 (IX+d)->L", "SET 5 (IX+d)", "SET 5 (IX+d)->A",
"SET 6 (IX+d)->B", "SET 6 (IX+d)->C", "SET 6 (IX+d)->D", "SET 6 (IX+d)->E", "SET 6 (IX+d)->H", "SET 6 (IX+d)->L", "SET 6 (IX+d)", "SET 6 (IX+d)->A",
"SET 7 (IX+d)->B", "SET 7 (IX+d)->C", "SET 7 (IX+d)->D", "SET 7 (IX+d)->E", "SET 7 (IX+d)->H", "SET 7 (IX+d)->L", "SET 7 (IX+d)", "SET 7 (IX+d)->A",
};
readonly static string[] mnemonicsFDCB = new string[]
{
"RLC (IY+d)->B", "RLC (IY+d)->C", "RLC (IY+d)->D", "RLC (IY+d)->E", "RLC (IY+d)->H", "RLC (IY+d)->L", "RLC (IY+d)", "RLC (IY+d)->A",
"RRC (IY+d)->B", "RRC (IY+d)->C", "RRC (IY+d)->D", "RRC (IY+d)->E", "RRC (IY+d)->H", "RRC (IY+d)->L", "RRC (IY+d)", "RRC (IY+d)->A",
"RL (IY+d)->B", "RL (IY+d)->C", "RL (IY+d)->D", "RL (IY+d)->E", "RL (IY+d)->H", "RL (IY+d)->L", "RL (IY+d)", "RL (IY+d)->A",
"RR (IY+d)->B", "RR (IY+d)->C", "RR (IY+d)->D", "RR (IY+d)->E", "RR (IY+d)->H", "RR (IY+d)->L", "RR (IY+d)", "RR (IY+d)->A",
"SLA (IY+d)->B", "SLA (IY+d)->C", "SLA (IY+d)->D", "SLA (IY+d)->E", "SLA (IY+d)->H", "SLA (IY+d)->L", "SLA (IY+d)", "SLA (IY+d)->A",
"SRA (IY+d)->B", "SRA (IY+d)->C", "SRA (IY+d)->D", "SRA (IY+d)->E", "SRA (IY+d)->H", "SRA (IY+d)->L", "SRA (IY+d)", "SRA (IY+d)->A",
"SL1 (IY+d)->B", "SL1 (IY+d)->C", "SL1 (IY+d)->D", "SL1 (IY+d)->E", "SL1 (IY+d)->H", "SL1 (IY+d)->L", "SL1 (IY+d)", "SL1 (IY+d)->A",
"SRL (IY+d)->B", "SRL (IY+d)->C", "SRL (IY+d)->D", "SRL (IY+d)->E", "SRL (IY+d)->H", "SRL (IY+d)->L", "SRL (IY+d)", "SRL (IY+d)->A",
"BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)", "BIT 0, (IY+d)",
"BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)", "BIT 1, (IY+d)",
"BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)", "BIT 2, (IY+d)",
"BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)", "BIT 3, (IY+d)",
"BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)", "BIT 4, (IY+d)",
"BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)", "BIT 5, (IY+d)",
"BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)", "BIT 6, (IY+d)",
"BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)", "BIT 7, (IY+d)",
"RES 0 (IY+d)->B", "RES 0 (IY+d)->C", "RES 0 (IY+d)->D", "RES 0 (IY+d)->E", "RES 0 (IY+d)->H", "RES 0 (IY+d)->L", "RES 0 (IY+d)", "RES 0 (IY+d)->A",
"RES 1 (IY+d)->B", "RES 1 (IY+d)->C", "RES 1 (IY+d)->D", "RES 1 (IY+d)->E", "RES 1 (IY+d)->H", "RES 1 (IY+d)->L", "RES 1 (IY+d)", "RES 1 (IY+d)->A",
"RES 2 (IY+d)->B", "RES 2 (IY+d)->C", "RES 2 (IY+d)->D", "RES 2 (IY+d)->E", "RES 2 (IY+d)->H", "RES 2 (IY+d)->L", "RES 2 (IY+d)", "RES 2 (IY+d)->A",
"RES 3 (IY+d)->B", "RES 3 (IY+d)->C", "RES 3 (IY+d)->D", "RES 3 (IY+d)->E", "RES 3 (IY+d)->H", "RES 3 (IY+d)->L", "RES 3 (IY+d)", "RES 3 (IY+d)->A",
"RES 4 (IY+d)->B", "RES 4 (IY+d)->C", "RES 4 (IY+d)->D", "RES 4 (IY+d)->E", "RES 4 (IY+d)->H", "RES 4 (IY+d)->L", "RES 4 (IY+d)", "RES 4 (IY+d)->A",
"RES 5 (IY+d)->B", "RES 5 (IY+d)->C", "RES 5 (IY+d)->D", "RES 5 (IY+d)->E", "RES 5 (IY+d)->H", "RES 5 (IY+d)->L", "RES 5 (IY+d)", "RES 5 (IY+d)->A",
"RES 6 (IY+d)->B", "RES 6 (IY+d)->C", "RES 6 (IY+d)->D", "RES 6 (IY+d)->E", "RES 6 (IY+d)->H", "RES 6 (IY+d)->L", "RES 6 (IY+d)", "RES 6 (IY+d)->A",
"RES 7 (IY+d)->B", "RES 7 (IY+d)->C", "RES 7 (IY+d)->D", "RES 7 (IY+d)->E", "RES 7 (IY+d)->H", "RES 7 (IY+d)->L", "RES 7 (IY+d)", "RES 7 (IY+d)->A",
"SET 0 (IY+d)->B", "SET 0 (IY+d)->C", "SET 0 (IY+d)->D", "SET 0 (IY+d)->E", "SET 0 (IY+d)->H", "SET 0 (IY+d)->L", "SET 0 (IY+d)", "SET 0 (IY+d)->A",
"SET 1 (IY+d)->B", "SET 1 (IY+d)->C", "SET 1 (IY+d)->D", "SET 1 (IY+d)->E", "SET 1 (IY+d)->H", "SET 1 (IY+d)->L", "SET 1 (IY+d)", "SET 1 (IY+d)->A",
"SET 2 (IY+d)->B", "SET 2 (IY+d)->C", "SET 2 (IY+d)->D", "SET 2 (IY+d)->E", "SET 2 (IY+d)->H", "SET 2 (IY+d)->L", "SET 2 (IY+d)", "SET 2 (IY+d)->A",
"SET 3 (IY+d)->B", "SET 3 (IY+d)->C", "SET 3 (IY+d)->D", "SET 3 (IY+d)->E", "SET 3 (IY+d)->H", "SET 3 (IY+d)->L", "SET 3 (IY+d)", "SET 3 (IY+d)->A",
"SET 4 (IY+d)->B", "SET 4 (IY+d)->C", "SET 4 (IY+d)->D", "SET 4 (IY+d)->E", "SET 4 (IY+d)->H", "SET 4 (IY+d)->L", "SET 4 (IY+d)", "SET 4 (IY+d)->A",
"SET 5 (IY+d)->B", "SET 5 (IY+d)->C", "SET 5 (IY+d)->D", "SET 5 (IY+d)->E", "SET 5 (IY+d)->H", "SET 5 (IY+d)->L", "SET 5 (IY+d)", "SET 5 (IY+d)->A",
"SET 6 (IY+d)->B", "SET 6 (IY+d)->C", "SET 6 (IY+d)->D", "SET 6 (IY+d)->E", "SET 6 (IY+d)->H", "SET 6 (IY+d)->L", "SET 6 (IY+d)", "SET 6 (IY+d)->A",
"SET 7 (IY+d)->B", "SET 7 (IY+d)->C", "SET 7 (IY+d)->D", "SET 7 (IY+d)->E", "SET 7 (IY+d)->H", "SET 7 (IY+d)->L", "SET 7 (IY+d)", "SET 7 (IY+d)->A",
};
readonly static string[] mnemonicsCB = new string[]
{
"RLC B", "RLC C", "RLC D", "RLC E", "RLC H", "RLC L", "RLC (HL)", "RLC A",
"RRC B", "RRC C", "RRC D", "RRC E", "RRC H", "RRC L", "RRC (HL)", "RRC A",
"RL B", "RL C", "RL D", "RL E", "RL H", "RL L", "RL (HL)", "RL A",
"RR B", "RR C", "RR D", "RR E", "RR H", "RR L", "RR (HL)", "RR A",
"SLA B", "SLA C", "SLA D", "SLA E", "SLA H", "SLA L", "SLA (HL)", "SLA A",
"SRA B", "SRA C", "SRA D", "SRA E", "SRA H", "SRA L", "SRA (HL)", "SRA A",
"SL1 B", "SL1 C", "SL1 D", "SL1 E", "SL1 H", "SL1 L", "SL1 (HL)", "SL1 A",
"SRL B", "SRL C", "SRL D", "SRL E", "SRL H", "SRL L", "SRL (HL)", "SRL A",
"BIT 0, B", "BIT 0, C", "BIT 0, D", "BIT 0, E", "BIT 0, H", "BIT 0, L", "BIT 0, (HL)", "BIT 0, A",
"BIT 1, B", "BIT 1, C", "BIT 1, D", "BIT 1, E", "BIT 1, H", "BIT 1, L", "BIT 1, (HL)", "BIT 1, A",
"BIT 2, B", "BIT 2, C", "BIT 2, D", "BIT 2, E", "BIT 2, H", "BIT 2, L", "BIT 2, (HL)", "BIT 2, A",
"BIT 3, B", "BIT 3, C", "BIT 3, D", "BIT 3, E", "BIT 3, H", "BIT 3, L", "BIT 3, (HL)", "BIT 3, A",
"BIT 4, B", "BIT 4, C", "BIT 4, D", "BIT 4, E", "BIT 4, H", "BIT 4, L", "BIT 4, (HL)", "BIT 4, A",
"BIT 5, B", "BIT 5, C", "BIT 5, D", "BIT 5, E", "BIT 5, H", "BIT 5, L", "BIT 5, (HL)", "BIT 5, A",
"BIT 6, B", "BIT 6, C", "BIT 6, D", "BIT 6, E", "BIT 6, H", "BIT 6, L", "BIT 6, (HL)", "BIT 6, A",
"BIT 7, B", "BIT 7, C", "BIT 7, D", "BIT 7, E", "BIT 7, H", "BIT 7, L", "BIT 7, (HL)", "BIT 7, A",
"RES 0, B", "RES 0, C", "RES 0, D", "RES 0, E", "RES 0, H", "RES 0, L", "RES 0, (HL)", "RES 0, A",
"RES 1, B", "RES 1, C", "RES 1, D", "RES 1, E", "RES 1, H", "RES 1, L", "RES 1, (HL)", "RES 1, A",
"RES 2, B", "RES 2, C", "RES 2, D", "RES 2, E", "RES 2, H", "RES 2, L", "RES 2, (HL)", "RES 2, A",
"RES 3, B", "RES 3, C", "RES 3, D", "RES 3, E", "RES 3, H", "RES 3, L", "RES 3, (HL)", "RES 3, A",
"RES 4, B", "RES 4, C", "RES 4, D", "RES 4, E", "RES 4, H", "RES 4, L", "RES 4, (HL)", "RES 4, A",
"RES 5, B", "RES 5, C", "RES 5, D", "RES 5, E", "RES 5, H", "RES 5, L", "RES 5, (HL)", "RES 5, A",
"RES 6, B", "RES 6, C", "RES 6, D", "RES 6, E", "RES 6, H", "RES 6, L", "RES 6, (HL)", "RES 6, A",
"RES 7, B", "RES 7, C", "RES 7, D", "RES 7, E", "RES 7, H", "RES 7, L", "RES 7, (HL)", "RES 7, A",
"SET 0, B", "SET 0, C", "SET 0, D", "SET 0, E", "SET 0, H", "SET 0, L", "SET 0, (HL)", "SET 0, A",
"SET 1, B", "SET 1, C", "SET 1, D", "SET 1, E", "SET 1, H", "SET 1, L", "SET 1, (HL)", "SET 1, A",
"SET 2, B", "SET 2, C", "SET 2, D", "SET 2, E", "SET 2, H", "SET 2, L", "SET 2, (HL)", "SET 2, A",
"SET 3, B", "SET 3, C", "SET 3, D", "SET 3, E", "SET 3, H", "SET 3, L", "SET 3, (HL)", "SET 3, A",
"SET 4, B", "SET 4, C", "SET 4, D", "SET 4, E", "SET 4, H", "SET 4, L", "SET 4, (HL)", "SET 4, A",
"SET 5, B", "SET 5, C", "SET 5, D", "SET 5, E", "SET 5, H", "SET 5, L", "SET 5, (HL)", "SET 5, A",
"SET 6, B", "SET 6, C", "SET 6, D", "SET 6, E", "SET 6, H", "SET 6, L", "SET 6, (HL)", "SET 6, A",
"SET 7, B", "SET 7, C", "SET 7, D", "SET 7, E", "SET 7, H", "SET 7, L", "SET 7, (HL)", "SET 7, A",
};
readonly static string[] mnemonicsED = new string[]
{
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP",
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP",
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP",
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP",
"IN B, C", "OUT C, B", "SBC HL, BC", "LD (nn), BC", //0x44
"NEG", "RETN", "IM $0", "LD I, A", //0x48
"IN C, C", "OUT C, C", "ADC HL, BC", "LD BC, (nn)", //0x4C
"NEG", "RETI", "IM $0", "LD R, A", //0x50
"IN D, C", "OUT C, D", "SBC HL, DE", "LD (nn), DE", //0x54
"NEG", "RETN", "IM $1", "LD A, I", //0x58
"IN E, C", "OUT C, E", "ADC HL, DE", "LD DE, (nn)", //0x5C
"NEG", "RETI", "IM $2", "LD A, R", //0x60
"IN H, C", "OUT C, H", "SBC HL, HL", "LD (nn), HL", //0x64
"NEG", "RETN", "IM $0", "RRD", //0x68
"IN L, C", "OUT C, L", "ADC HL, HL", "LD HL, (nn)", //0x6C
"NEG", "RETI", "IM $0", "RLD", //0x70
"IN 0, C", "OUT C, 0", "SBC HL, SP", "LD (nn), SP", //0x74
"NEG", "RETN", "IM $1", "NOP", //0x78
"IN A, C", "OUT C, A", "ADC HL, SP", "LD SP, (nn)", //0x7C
"NEG", "RETI", "IM $2", "NOP", //0x80
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0x90
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0xA0
"LDI", "CPI", "INI", "OUTI", //0xA4
"NOP", "NOP", "NOP", "NOP", //0xA8
"LDD", "CPD", "IND", "OUTD", //0xAC
"NOP", "NOP", "NOP", "NOP", //0xB0
"LDIR", "CPIR", "INIR", "OTIR", //0xB4
"NOP", "NOP", "NOP", "NOP", //0xB8
"LDDR", "CPDR", "INDR", "OTDR", //0xBC
"NOP", "NOP", "NOP", "NOP", //0xC0
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0xD0
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0xE0
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0xF0
"NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", "NOP", //0x100
};
string DisassembleInternal(Func<byte> read)
{
byte A = read();
string format;
switch (A)
{
case 0xCB:
A = read();
format = mnemonicsCB[A];
break;
case 0xDD:
A = read();
switch (A)
{
case 0xCB: format = mnemonicsDDCB[A]; break;
case 0xED: format = mnemonicsED[A]; break;
default: format = mnemonicsDD[A]; break;
}
break;
case 0xED:
A = read();
format = mnemonicsED[A];
break;
case 0xFD:
A = read();
switch (A)
{
case 0xCB: format = mnemonicsFDCB[A]; break;
case 0xED: format = mnemonicsED[A]; break;
default: format = mnemonicsFD[A]; break;
}
break;
default: format = mnemonics[A]; break;
}
return format;
}
public string Disassemble(Func<byte> read)
{
return Result(DisassembleInternal(read), read);
}
public string DisassembleInternal2(byte[] code)
{
byte A = code[0];
string format;
switch (A)
{
case 0xCB:
A = code[1];
format = mnemonicsCB[A];
break;
case 0xDD:
A = code[1];
switch (A)
{
case 0xCB: format = mnemonicsDDCB[A]; break;
case 0xED: format = mnemonicsED[A]; break;
default: format = mnemonicsDD[A]; break;
}
break;
case 0xED:
A = code[1];
format = mnemonicsED[A];
break;
case 0xFD:
A = code[1];
switch (A)
{
case 0xCB: format = mnemonicsFDCB[A]; break;
case 0xED: format = mnemonicsED[A]; break;
default: format = mnemonicsFD[A]; break;
}
break;
default: format = mnemonics[A]; break;
}
return format;
}
static string Result2(string format, byte[] code, int offset)
{
//d immediately succeeds the opcode
//n immediate succeeds the opcode and the displacement (if present)
//nn immediately succeeds the opcode and the displacement (if present)
if (format.IndexOf("nn") != -1)
{
byte B = code[offset];
byte C = code[offset + 1];
format = format.Replace("nn", string.Format("{0:X4}h", B + C * 256));
}
if (format.IndexOf("n") != -1)
{
byte B = code[offset];
format = format.Replace("n", string.Format("{0:X2}h", B));
}
if (format.IndexOf("+d") != -1) format = format.Replace("+d", "d");
if (format.IndexOf("d") != -1)
{
byte B = code[offset];
bool neg = ((B & 0x80) != 0);
char sign = neg ? '-' : '+';
int val = neg ? 256 - B : B;
format = format.Replace("d", string.Format("{0}{1:X2}h", sign, val));
}
return format;
}
public string Disassemble2(byte[] code, int offset)
{
return Result2(DisassembleInternal2(code), code, offset);
}
public string GetDisassembleInfo(ushort ushort1)
{
byte[] opcode = null, opcode2 = null;
byte byte1, byte2, byte3;
string s1 = "", s2;
int i, length = 0, offset = 0;
string sDisassemble;
byte1 = Z80A.zz1[0].ReadOp(ushort1);
if (byte1 != 0xCB && byte1 != 0xED && byte1 != 0xDD && byte1 != 0xFD)
{
opcode2 = new byte[] { byte1, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 1)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)) };
length = Disassembler.opcodeSizes[0, byte1];
offset = 1;
}
else if (byte1 == 0xCB)
{
opcode2 = new byte[] { byte1, Z80A.zz1[0].ReadOp((ushort)(ushort1 + 1)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)) };
length = Disassembler.opcodeSizes[1, byte1];
offset = 2;
}
else if (byte1 == 0xED)
{
opcode2 = new byte[] { byte1, Z80A.zz1[0].ReadOp((ushort)(ushort1 + 1)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)) };
length = Disassembler.opcodeSizes[2, byte1];
offset = 2;
}
else if (byte1 == 0xDD)
{
byte2 = Z80A.zz1[0].ReadOp((ushort)(ushort1 + 1));
if (byte2 != 0xCB && byte2 != 0xED)
{
opcode2 = new byte[] { byte1, byte2, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)) };
length = Disassembler.opcodeSizes[3, byte2];
offset = 2;
}
else if (byte2 == 0xCB)
{
byte3 = Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2));
opcode2 = new byte[] { byte1, byte2, byte3, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 5)) };
length = Disassembler.opcodeSizes[5, byte3];
offset = 2;
}
else if (byte2 == 0xED)
{
byte3 = Z80A.zz1[0].ReadOp((ushort)(ushort1 + 2));
opcode2 = new byte[] { byte1, byte2, byte3, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 5)) };
length = Disassembler.opcodeSizes[7, byte3];
offset = 2;
}
}
else if (byte1 == 0xFD)
{
byte2 = Z80A.zz1[0].ReadOp((ushort)(ushort1 + 1));
if (byte2 != 0xCB && byte2 != 0xED)
{
opcode2 = new byte[] { byte1, byte2, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)) };
length = Disassembler.opcodeSizes[4, byte2];
offset = 2;
}
else if (byte2 == 0xCB)
{
byte3 = Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 2));
opcode2 = new byte[] { byte1, byte2, byte3, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 5)) };
length = Disassembler.opcodeSizes[6, byte3];
offset = 2;
}
else if (byte2 == 0xED)
{
byte3 = Z80A.zz1[0].ReadOp((ushort)(ushort1 + 2));
opcode2 = new byte[] { byte1, byte2, byte3, Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 3)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 4)), Z80A.zz1[0].ReadOpArg((ushort)(ushort1 + 5)) };
length = Disassembler.opcodeSizes[8, byte3];
offset = 2;
}
}
opcode = new byte[length];
Array.Copy(opcode2, opcode, length);
s2 = Disassemble2(opcode, offset);
for (i = 0; i < length; i++)
{
s1 += opcode[i].ToString("X2") + " ";
}
sDisassemble = s1.PadRight(20, ' ') + s2;
return sDisassemble;
}
}
}

View File

@ -1,11 +0,0 @@
fileFormatVersion: 2
guid: 5068ca330bee2044293e8006ad23fc35
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -87,7 +87,6 @@
PPC = RegPC.Word;
OP = ReadOp(PPC);
RegPC.Word++;
//debugger_start_cpu_hook_callback();
switch (OP)//ReadMemory(RegPC.Word++))
{
case 0x00: // NOP
@ -11699,7 +11698,6 @@
totalExecutedCycles += 11; pendingCycles -= 11;
break;
}
//debugger_stop_cpu_hook_callback();
}
}
while (pendingCycles > 0);

View File

@ -119,8 +119,6 @@ namespace cpu.z80
public Func<ushort, byte> ReadMemory;
public Action<ushort, byte> WriteMemory;
public delegate void debug_delegate();
//public debug_delegate debugger_start_cpu_hook_callback, debugger_stop_cpu_hook_callback;
public void UnregisterMemoryMapper()
{

View File

@ -2117,46 +2117,17 @@ namespace MAME.Core
case "Neo Geo":
case "PGM":
case "Taito B":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
case "Tehkan":
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[1].debugger_start_cpu_hook_callback = null_callback;
//Z80A.zz1[1].debugger_stop_cpu_hook_callback = null_callback;
break;
case "IGS011":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
break;
case "SunA8":
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[1].debugger_start_cpu_hook_callback = null_callback;
//Z80A.zz1[1].debugger_stop_cpu_hook_callback = null_callback;
break;
case "Namco System 1":
M6809Motion.m6809State = CPUState.RUN;
M6809.mm1[0].DisassemblerInit();
//M6809.mm1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.m6809motion.m6809_start_debug;
//M6809.mm1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.m6809motion.m6809_stop_debug;
//M6809.mm1[1].debugger_start_cpu_hook_callback = null_callback;
//M6809.mm1[1].debugger_stop_cpu_hook_callback = null_callback;
//M6809.mm1[2].debugger_start_cpu_hook_callback = null_callback;
//M6809.mm1[2].debugger_stop_cpu_hook_callback = null_callback;
//M6809.mm1[0].DisassemblerInit();
break;
case "M72":
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
case "M92":
break;
@ -2185,35 +2156,14 @@ namespace MAME.Core
case "boblcave":
case "bublcave11":
case "bublcave10":
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[1].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[1].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[2].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[2].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
case "opwolf":
case "opwolfa":
case "opwolfj":
case "opwolfu":
case "opwolfp":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
case "opwolfb":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[1].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[1].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
}
break;
@ -2221,17 +2171,7 @@ namespace MAME.Core
switch (Machine.sName)
{
case "cuebrick":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
break;
default:
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
}
break;
@ -2249,13 +2189,6 @@ namespace MAME.Core
case "makaimurc":
case "makaimurg":
case "diamond":
M6809Motion.m6809State = CPUState.RUN;
M6809.mm1[0].DisassemblerInit();
//M6809.mm1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.m6809motion.m6809_start_debug;
//M6809.mm1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.m6809motion.m6809_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
case "sf":
case "sfua":
@ -2263,14 +2196,6 @@ namespace MAME.Core
case "sfjan":
case "sfan":
case "sfp":
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
//MC68000.m1.debugger_start_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_start_debug;
//MC68000.m1.debugger_stop_cpu_hook_callback = Machine.mainMotion.m68000motion.m68000_stop_debug;
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
//Z80A.zz1[0].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[0].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
//Z80A.zz1[1].debugger_start_cpu_hook_callback = Machine.mainMotion.z80motion.z80_start_debug;
//Z80A.zz1[1].debugger_stop_cpu_hook_callback = Machine.mainMotion.z80motion.z80_stop_debug;
break;
}
break;
@ -2471,10 +2396,10 @@ namespace MAME.Core
cpu[icpu].eatcycles = cpu[icpu].nexteatcycles;
}
EmuTimer.timer_set_global_time(target);
if (EmuTimer.global_basetime.attoseconds == 0 && Machine.mainMotion.cheatmotion.lockState == CheatMotion.LockState.LOCK_SECOND)
{
Machine.mainMotion.cheatmotion.ApplyCheat();
}
//if (EmuTimer.global_basetime.attoseconds == 0 && Machine.mainMotion.cheatmotion.lockState == CheatMotion.LockState.LOCK_SECOND)
//{
// Machine.mainMotion.cheatmotion.ApplyCheat();
//}
}
public static void cpu_boost_interleave(Atime timeslice_time, Atime boost_duration)
{

View File

@ -283,8 +283,6 @@ namespace MAME.Core
}
public static byte[] GetRom(string sFile)
{
byte[] bb1 = null;
int n1;
foreach (string s1 in lsParents)
{
string path = System.IO.Path.Combine(Mame.RomRoot + "/" + s1 + "/", sFile);
@ -292,19 +290,13 @@ namespace MAME.Core
{
EmuLogger.Log($"Had File => {path}");
return File.ReadAllBytes(path);
//FileStream fs1 = new FileStream(path, FileMode.Open);
//n1 = (int)fs1.Length;
//bb1 = new byte[n1];
//fs1.Read(bb1, 0, n1);
//fs1.Close();
break;
}
else
{
EmuLogger.Log($"Miss File => {path}");
}
}
return bb1;
return null;
}
}
}

View File

@ -1,8 +1,4 @@
using MAME.Core;
using System;
using System.Reflection;
using System.Runtime.InteropServices;
using UnityEngine.UIElements;
using System;
namespace MAME.Core
{
@ -158,29 +154,29 @@ namespace MAME.Core
else
{
for (y = startY; y < endY; y++)
{
int stepIndex = y * Video.fullwidth;
for (x = startX; x < endX; x++, target_i++)
{
i = stepIndex + x;
bitmapcolorRect[target_i] = (int)entry_color[curbitmap[i]];
}
}
//for (y = startY; y < endY; y++)
//{
// int stepIndex = y * Video.fullwidth;
// for (x = startX; x < endX; x++, target_i++)
// {
// i = stepIndex + x;
// bitmapcolorRect[target_i] = (int)entry_color[curbitmap[i]];
// }
// // 使用Marshal.Copy进行内存拷贝
// Marshal.Copy(Palette.entry_color_Ptr,, Video.bitmapcolorRect_Ptr, endX - startX);
//}
for (y = startY; y < endY; y++)
{
int stepIndex = y * Video.fullwidth;
//for (x = startX; x < endX; x++, target_i++)
//{
// i = stepIndex + x;
// //bitmapcolorRect[target_i] = (int)entry_color[curbitmap[i]];
//}
int stepStartIdx = stepIndex + startX;
int linelenght = endX - startX;
Array.Copy(Palette.entry_color, stepStartIdx, Video.bitmapcolorRect, 0, linelenght);
target_i += linelenght;
}
}
}
}
@ -627,10 +623,6 @@ namespace MAME.Core
}
public static void cpurun()
{
M68000Motion.m68000State = M68000Motion.M68000State.M68000_RUN;
Machine.mainMotion.m68000motion.mTx_tsslStatus = "run";
Z80Motion.z80State = Z80Motion.Z80AState.Z80A_RUN;
Machine.mainMotion.z80motion.mTx_tsslStatus = "run";
}
private static double ui_get_line_height()
{

View File

@ -1,7 +1,5 @@
using MAME.Core.AxiBitmap;
using System;
using System.Runtime.InteropServices;
using System;
using Color = MAME.Core.AxiBitmap.AxiColor;
namespace MAME.Core
{
@ -16,7 +14,7 @@ namespace MAME.Core
public static float[] entry_contrast;
private static uint trans_uint;
private static int numcolors, numgroups;
public static Color trans_color;
//public static Color trans_color;
public delegate void palette_delegate(int index, uint rgb);
public static palette_delegate palette_set_callback;
public static void palette_init()
@ -28,59 +26,59 @@ namespace MAME.Core
case "CPS-1(QSound)":
case "CPS2":
//trans_color = Color.Magenta;
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0xc00;
palette_set_callback = palette_entry_set_color1;
break;
case "Data East":
//trans_color = Color.Magenta;
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x200;
palette_set_callback = palette_entry_set_color2;
break;
case "Tehkan":
//trans_color = Color.Magenta;
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x100;
palette_set_callback = palette_entry_set_color2;
break;
case "SunA8":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x100;
palette_set_callback = palette_entry_set_color2;
break;
case "Namco System 1":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x2001;
palette_set_callback = palette_entry_set_color1;
break;
case "IGS011":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x800;
palette_set_callback = palette_entry_set_color1;
break;
case "PGM":
//trans_color = Color.Magenta;
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x901;
palette_set_callback = palette_entry_set_color2;
break;
case "M72":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x201;
palette_set_callback = palette_entry_set_color1;
break;
case "M92":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x801;
palette_set_callback = palette_entry_set_color2;
break;
@ -110,7 +108,7 @@ namespace MAME.Core
case "bublcave11":
case "bublcave10":
//trans_color = Color.Magenta;
trans_color = Color.Black;
//trans_color = Color.Black;
numcolors = 0x100;
break;
case "opwolf":
@ -119,23 +117,23 @@ namespace MAME.Core
case "opwolfu":
case "opwolfb":
case "opwolfp":
trans_color = Color.Black;
//trans_color = Color.Black;
numcolors = 0x2000;
break;
}
trans_uint = (uint)trans_color.ToArgb();
trans_uint = 0x0;//(uint)trans_color.ToArgb();
palette_set_callback = palette_entry_set_color2;
break;
case "Taito B":
//trans_color = Color.Magenta;
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x1000;
palette_set_callback = palette_entry_set_color3;
break;
case "Konami 68000":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x800;
palette_set_callback = palette_entry_set_color3;
break;
@ -153,8 +151,8 @@ namespace MAME.Core
case "makaimurc":
case "makaimurg":
case "diamond":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x100;
palette_set_callback = palette_entry_set_color2;
break;
@ -164,8 +162,8 @@ namespace MAME.Core
case "sfjan":
case "sfan":
case "sfp":
trans_color = Color.Black;
trans_uint = (uint)trans_color.ToArgb();
//trans_color = Color.Black;
trans_uint = 0x0;//(uint)trans_color.ToArgb();
numcolors = 0x400;
palette_set_callback = palette_entry_set_color3;
break;

View File

@ -24,15 +24,6 @@ namespace MAME.Core
if (!dictName2Rom.TryGetValue(s1, out RomInfo info))
return null;
return info;
//foreach (RomInfo ri in romList)
//{
// if (s1 == ri.Name)
// {
// return ri;
// }
//}
//return null;
}
public static string GetParent(string s1)
{

View File

@ -29,9 +29,7 @@ namespace MAME.Core
private static int PAUSED_REFRESH_RATE = 30, VIDEO_UPDATE_AFTER_VBLANK = 4;
public static EmuTimer.emu_timer vblank_begin_timer, vblank_end_timer;
public static EmuTimer.emu_timer scanline0_timer, scanline_timer;
private static Atime throttle_emutime, throttle_realtime, speed_last_emutime, overall_emutime;
private static long throttle_last_ticks;
private static long average_oversleep;
private static Atime speed_last_emutime, overall_emutime;
private static long speed_last_realtime, overall_real_ticks;
private static double speed_percent;
private static uint throttle_history, overall_valid_counter, overall_real_seconds;
@ -956,10 +954,10 @@ namespace MAME.Core
Mouse.Update();
Inptport.frame_update_callback();
Motion.ui_update_and_render();
if (Machine.mainMotion.cheatmotion.lockState == CheatMotion.LockState.LOCK_FRAME)
{
Machine.mainMotion.cheatmotion.ApplyCheat();
}
//if (Machine.mainMotion.cheatmotion.lockState == CheatMotion.LockState.LOCK_FRAME)
//{
// Machine.mainMotion.cheatmotion.ApplyCheat();
//}
GDIDraw();
if (effective_throttle())

View File

@ -1,6 +1,4 @@
using MAME.Core.AxiBitmap;
using System;
using Color = MAME.Core.AxiBitmap.AxiColor;
using System;
namespace MAME.Core
{
@ -55,30 +53,30 @@ namespace MAME.Core
}*/
/// <summary>
///
/// </summary>
/// <param name="bitmap"></param>
/// <param name="factor"></param>
/// <returns></returns>
public static int[] MultiplyAlpha(int[] bitmap, float factor)
{
int[] result = (int[])bitmap.Clone();
for (int i = 0; i < result.Length; i++)
{
Color originalColor = AxiColor.FromArgb(result[i]);
byte newAlpha = (byte)Math.Min(255, (int)(originalColor.a * factor));
Color newColor = new Color
{
r = originalColor.r,
g = originalColor.g,
b = originalColor.b,
a = newAlpha
};
result[i] = AxiColor.ToArgb(newColor);
}
return result;
}
///// <summary>
/////
///// </summary>
///// <param name="bitmap"></param>
///// <param name="factor"></param>
///// <returns></returns>
//public static int[] MultiplyAlpha(int[] bitmap, float factor)
//{
// int[] result = (int[])bitmap.Clone();
// for (int i = 0; i < result.Length; i++)
// {
// Color originalColor = AxiColor.FromArgb(result[i]);
// byte newAlpha = (byte)Math.Min(255, (int)(originalColor.a * factor));
// Color newColor = new Color
// {
// r = originalColor.r,
// g = originalColor.g,
// b = originalColor.b,
// a = newAlpha
// };
// result[i] = AxiColor.ToArgb(newColor);
// }
// return result;
//}
//public static void GDIDraw()
//{

View File

@ -2,7 +2,7 @@
{
public class Window
{
private static MameMainMotion _myParentForm;
//private static MameMainMotion _myParentForm;
//[DllImport("kernel32.dll ")]
//private static extern uint GetTickCount();

View File

@ -400,6 +400,7 @@ namespace MAME.Core
}
return result;
}
public static void ZCWriteMemory(ushort address, byte value)
{
if (address >= 0xd000 && address <= 0xd7ff)

View File

@ -419,8 +419,6 @@ namespace MAME.Core
public static void MWriteByte(int address, sbyte value)
{
address &= 0xffffff;
M68000Motion.iWAddress = address;
M68000Motion.iWOp = 0x01;
if (address >= 0x100000 && address <= 0x1fffff)
{
if (address == 0x100d0b && value == 0x06)//&&MC68000.m1.TotalExecutedCycles>0x3F6FC8C)
@ -496,8 +494,6 @@ namespace MAME.Core
public static void MWriteWord(int address, short value)
{
address &= 0xffffff;
M68000Motion.iWAddress = address;
M68000Motion.iWOp = 0x02;
if (address >= 0x100000 && address + 1 <= 0x1fffff)
{
if (address == 0x1007c4 && value == unchecked((short)0xb102))
@ -549,8 +545,6 @@ namespace MAME.Core
public static void MWriteLong(int address, int value)
{
address &= 0xffffff;
M68000Motion.iWAddress = address;
M68000Motion.iWOp = 0x03;
if (address >= 0x100000 && address + 3 <= 0x1fffff)
{
if (address == 0x1051e4 && value == 0x00130070)

View File

@ -56,7 +56,7 @@ namespace MAME.Core
UNKNOW_T = 1<< 31,
UNKNOW_M = 1<< 31,
UNKNOW_V = 1<< 31,
UNKNOW_B = 1<< 12
UNKNOW_B = 1<< 31
//EMU_PAUSED = (1 << 36),
//F10 = (1 << 37),

View File

@ -1739,70 +1739,6 @@ namespace MAME.Core
{
////只需要这部分逻辑
SubmitSamples(buffer, samples_this_frame);
return;
//TODO后面才考虑原样的处理
int play_position, write_position;
int stream_in;
byte[] buffer1, buffer2;
int length1, length2;
//buf2.GetCurrentPosition(out play_position, out write_position);
GetCurrentPosition(out play_position, out write_position);
if (write_position < play_position)
{
write_position += 0x9400;
}
stream_in = stream_buffer_in;
if (stream_in < write_position)
{
stream_in += 0x9400;
}
while (stream_in < write_position)
{
//buffer_underflows++;
stream_in += 0xf00;
}
if (stream_in + 0xf00 > play_position + 0x9400)
{
//buffer_overflows++;
return;
}
stream_buffer_in = stream_in % 0x9400;
if (stream_buffer_in + 0xf00 < 0x9400)
{
length1 = 0xf00;
length2 = 0;
buffer1 = new byte[length1];
Array.Copy(buffer, buffer1, length1);
//buf2.Write(stream_buffer_in, buffer1, LockFlag.None);
BufferWirte(stream_buffer_in, buffer1);
stream_buffer_in = stream_buffer_in + 0xf00;
}
else if (stream_buffer_in + 0xf00 == 0x9400)
{
length1 = 0xf00;
length2 = 0;
buffer1 = new byte[length1];
Array.Copy(buffer, buffer1, length1);
//buf2.Write(stream_buffer_in, buffer1, LockFlag.None);
BufferWirte(stream_buffer_in, buffer1);
stream_buffer_in = 0;
}
else if (stream_buffer_in + 0xf00 > 0x9400)
{
length1 = 0x9400 - stream_buffer_in;
length2 = 0xf00 - length1;
buffer1 = new byte[length1];
buffer2 = new byte[length2];
Array.Copy(buffer, buffer1, length1);
Array.Copy(buffer, length1, buffer2, 0, length2);
//buf2.Write(stream_buffer_in, buffer1, LockFlag.None);
BufferWirte(stream_buffer_in, buffer1);
//buf2.Write(0, buffer2, LockFlag.None);
BufferWirte(0, buffer2);
stream_buffer_in = length2;
}
}
}
}

View File

@ -1779,6 +1779,9 @@ namespace MAME.Core
// }
// }
//}
static bool skiprun_update_one;
static int run_update_one_Index;
public unsafe static void ym2151_update_one(int offset, int length)
{
fixed (uint* PSGpanPtr = &PSG.pan[0])
@ -1812,6 +1815,48 @@ namespace MAME.Core
chanout[5] = 0;
chanout[6] = 0;
chanout[7] = 0;
//二分交替混音
//skiprun_update_one = !skiprun_update_one;
//if (!skiprun_update_one)
//{
// chan_calc(PSGoper, chanout, imem, 0);
// chan_calc(PSGoper, chanout, imem, 2);
// chan_calc(PSGoper, chanout, imem, 4);
// chan_calc(PSGoper, chanout, imem, 6);
//}
//else
//{
// chan_calc(PSGoper, chanout, imem, 1);
// chan_calc(PSGoper, chanout, imem, 3);
// chan_calc(PSGoper, chanout, imem, 5);
// chan7_calc(PSGoper, chanout, imem);
//}
//三分交替混音
//run_update_one_Index++;
//if (run_update_one_Index > 2)
// run_update_one_Index = 0;
//switch (run_update_one_Index)
//{
// case 0:
// chan_calc(PSGoper, chanout, imem, 0);
// chan_calc(PSGoper, chanout, imem, 2);
// chan_calc(PSGoper, chanout, imem, 4);
// break;
// case 1:
// chan_calc(PSGoper, chanout, imem, 1);
// chan_calc(PSGoper, chanout, imem, 3);
// chan7_calc(PSGoper, chanout, imem);
// break;
// case 2:
// chan_calc(PSGoper, chanout, imem, 0);
// chan_calc(PSGoper, chanout, imem, 5);
// chan_calc(PSGoper, chanout, imem, 6);
// break;
//}
//完全渲染混音
chan_calc(PSGoper, chanout, imem, 0);
chan_calc(PSGoper, chanout, imem, 1);
chan_calc(PSGoper, chanout, imem, 2);
@ -1820,6 +1865,7 @@ namespace MAME.Core
chan_calc(PSGoper, chanout, imem, 5);
chan_calc(PSGoper, chanout, imem, 6);
chan7_calc(PSGoper, chanout, imem);
outl = (int)(chanout[0] & PSGpan[0]);
outr = (int)(chanout[0] & PSGpan[1]);
outl += (int)(chanout[1] & PSGpan[2]);