# define D(x)
#endif
-debug_module_t::debug_module_t() :
+debug_module_t::debug_module_t(sim_t *sim) :
+ sim(sim),
dmcontrol(1 << DMI_DMCONTROL_VERSION_OFFSET |
1 << DMI_DMCONTROL_AUTHENTICATED_OFFSET),
abstractcs(datacount << DMI_ABSTRACTCS_DATACOUNT_OFFSET)
} else {
switch (address) {
case DMI_DMCONTROL:
- *value = dmcontrol;
+ {
+ processor_t *proc = sim->get_core(get_field(dmcontrol,
+ DMI_DMCONTROL_HARTSEL));
+ if (proc) {
+ D(fprintf(stderr, "(halted=%d) ", proc->halted()));
+ if (proc->halted()) {
+ dmcontrol = set_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS, 0);
+ } else {
+ dmcontrol = set_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS, 1);
+ }
+ } else {
+ dmcontrol = set_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS, 3);
+ }
+ *value = dmcontrol;
+ }
break;
case DMI_ABSTRACTCS:
*value = abstractcs;