From: Martin Perner Date: Mon, 1 Nov 2010 13:14:13 +0000 (+0100) Subject: sim: set reg/ram X-Git-Tag: bootrom_v1~196 X-Git-Url: http://wien.tomnetworks.com/gitweb/?p=calu.git;a=commitdiff_plain;h=6f2569cbc2ca48c055c0fa023ee073259f1b86b5 sim: set reg/ram added unsigned value to display reg/ram --- diff --git a/3b_sim/sim.cpp b/3b_sim/sim.cpp index dd0343e..6471712 100644 --- a/3b_sim/sim.cpp +++ b/3b_sim/sim.cpp @@ -198,7 +198,35 @@ void printReg(const vector& in) } for(i = start; i <= end; i++) { - cout << setw(2) << setfill('0') << i << ": 0x" << std::hex << setw(8) << setfill('0') << global_cpu->getRegister(i) << " " << std::dec << setw(10) << setfill(' ') << global_cpu->getRegister(i) << endl; + cout << setw(2) << setfill('0') << i << ": 0x"; + cout << std::hex << setw(8) << setfill('0') << global_cpu->getRegister(i) << " "; + cout << std::dec << setw(10) << setfill(' ') << global_cpu->getRegister(i) << " "; + cout << std::dec << setw(10) << setfill(' ') << (int)global_cpu->getRegister(i) << endl; + } +} + +void setReg(const vector& in) +{ + int reg = 0; + CDat val = 0; + + if(in.size() >= 3) { + try { + reg = convertStringToNum(in[1]); + if(reg < 0 || reg > (REG_COUNT-1)) { + cerr << "register is out of range" << endl; + return; + } + + val = convertStringToNum(in[2]); + + cout << "Setting register " << reg << " to 0x" << std::hex << setw(8) << setfill('0') << val << std::dec << endl; + global_cpu->setRegister(reg,val); + } + catch(bad_cast&) { + cerr << "given parameter is not a number" << endl; + return; + } } } @@ -245,10 +273,38 @@ void printRAM(const vector& in) } } for(i = start*BYTE_COUNT; i <= end*BYTE_COUNT; i += BYTE_COUNT) { - cout << std::hex << "0x" << setw(8) << setfill('0') << i << ": 0x" << std::hex << setw(8) << setfill('0') << global_cpu->getRAM(i) << " " << std::dec << setw(10) << setfill(' ') << global_cpu->getRAM(i) << endl; + cout << std::hex << "0x" << setw(8) << setfill('0') << i << ": 0x"; + cout << std::hex << setw(8) << setfill('0') << global_cpu->getRAM(i) << " "; + cout << std::dec << setw(10) << setfill(' ') << global_cpu->getRAM(i) << " "; + cout << std::dec << setw(10) << setfill(' ') << (int)global_cpu->getRAM(i) << endl; } } +void setRam(const vector& in) +{ + int addr = 0; + CDat val = 0; + + if(in.size() >= 3) { + try { + addr = convertStringToNum(in[1]); + if(addr < 0 || addr > (RAM_END-1)) { + cerr << "RAM-Address is out of range" << endl; + return; + } + + addr = (addr & (~(BYTE_COUNT-1))) / BYTE_COUNT; + val = convertStringToNum(in[2]); + + cout << "Setting RAM-Address " << addr << " to 0x" << std::hex << setw(8) << setfill('0') << val << std::dec << endl; + global_cpu->setRAM(addr,val); + } + catch(bad_cast&) { + cerr << "given parameter is not a number" << endl; + return; + } + } +} void printPROG(const vector& in) { int i, start = 0, end = 15; @@ -536,6 +592,8 @@ int main(int argc, char* argv[]) Completers.push_back(CompleterElement("listbreaks",&listBreaks, "Lists all breakpoints.")); Completers.push_back(CompleterElement("run",&execRun, "Runs till next breakpoint or end of program.")); Completers.push_back(CompleterElement("setpc [num]",&setPC, "Sets PC to num. if num is omitted 0 is used.")); + Completers.push_back(CompleterElement("setreg [s] [num]",&setReg, "Sets Register s to num.")); + Completers.push_back(CompleterElement("setdata [s] [num]",&setRam, "Sets RAM-Addr s to num.")); Completers.push_back(CompleterElement("status",&printStatus, "Prints status of CPU.")); Reader.RegisterCompletions(Completers);