private void dataMemory(string _addr, string write_data, bool MemWrite, bool MemRead, int datawidth, // datawidth = 8/16/32 out string read_data) { read_data = string.Empty; if (!MemRead && !MemRead) { return; } UInt32 addr = Convert.ToUInt32(_addr, 2); DataSeg targetSeg = new DataSeg(0xFFFFFFFF); foreach (var dataseg in dataSegs) { if (addr >= dataseg.addr && addr < (dataseg.addr + dataseg.size)) { targetSeg = dataseg; } } if (addr >= stackSeg.addr && addr < stackSeg.addr + defStackSize) { targetSeg = stackSeg; } if (targetSeg.addr == 0xFFFFFFFF) { throw new Exception("Data Segment Not Found"); } if (MemRead) { for (int i = 0; i < datawidth / 8; i++) { read_data += Convert.ToString(targetSeg.data[(int)(addr - targetSeg.addr + i)], 2); } Console.WriteLine("read_data at 0x" + Convert.ToString(addr, 16) + " = " + read_data); } if (MemWrite) { for (int i = 0; i < datawidth / 8; i++) { targetSeg.data[(int)(addr - targetSeg.addr + i)] = Convert.ToByte(write_data.Substring(i * 8, 8), 2); } Console.WriteLine("Data at 0x" + Convert.ToString(addr, 16) + " = " + write_data); } return; }
public void Init(List <string> _lines) { executeLines = new List <string>( ); originLines = new List <string>( ); // Original lines displayed in the SourceCode view isBreakPoint = new Dictionary <UInt32, bool>( ); constants = new Dictionary <string, UInt32>( ); segAddr = new Dictionary <string, UInt32>( ) { //{"main", CodeSegStart }, }; dataSegs = new List <DataSeg>( ); stackSeg = new DataSeg(StackSegEnd - defStackSize); //ctrlSignal.init( ); PreCompile(_lines); ReInit( ); }