Commit acac1cfd authored by Wesley W. Terpstra's avatar Wesley W. Terpstra

Support single-step

parent 2020a563
......@@ -273,7 +273,19 @@ void GDB_RSP::cmdDetach(const std::string& str) {
}
void GDB_RSP::cmdContinue(const std::string& str) {
run();
const char* ptr = str.c_str() + 1;
uint64_t address;
if (fromHex(ptr, address) == 0) {
register_address(Bits(PC));
register_write(Bits(address));
}
if (str[0] == 's')
run(Bits(static_cast<uint8_t>(1)));
else
run(Bits(static_cast<uint8_t>(0)));
cmdStatus(str);
}
......
......@@ -38,8 +38,8 @@ class GDB_RSP : public Component {
SlavePort& breakpoint_del; /* width -> void */
#endif
/* Run processor */
SlavePort& run; /* 0-bit -> void */
/* Run processor: 1 = single-step, 0 = continue */
SlavePort& run; /* 8-bit -> void */
protected:
uint8_t registers, PC, SP, SIG;
......
......@@ -3,7 +3,7 @@
#include "gdb-serial.h"
#include "pinouts/pinouts.h"
// #define DEBUG_GDB 1
#define DEBUG_GDB 1
GDB_Serial::GDB_Serial(Interconnect* ic)
: Component(ic),
......
......@@ -86,6 +86,11 @@ SendQueue::const_iterator LM32DROM::send(SendQueue::const_iterator i, SendQueue:
--i;
} else {
assert (i->master == &run);
if (i->bits[0])
setReg(DC, getReg(DC) | 1);
else
setReg(DC, getReg(DC) & ~1);
update();
uart_write(Bits(static_cast<uint8_t>(0)));
state = RUNNING;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment