using cpu.m68000; using System; using System.Collections.Generic; 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 lsAddr = new List(); private List lsPPC = new List(); #region string[] mTxList_tbDs; string[] mTxList_tbAs; Boolean[] mBList_cbDs; Boolean[] mBList_cbAs; List 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 mTxList_tbResult = new List(); 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(); 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[0xd1b]==0x05) { iStatus = 1; GetData(); m68000State = M68000State.M68000_STOP; tsslStatus.Text = "m68000 stop"; }*/ } } } }