projects
/
calu.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
sim: brr fix, interrupt
[calu.git]
/
3b_sim
/
sim.cpp
diff --git
a/3b_sim/sim.cpp
b/3b_sim/sim.cpp
index 09808a0d25ba085233574376b3971ee181c4854f..d93e11e44be4c717c9f4a809dcf15907a0465535 100644
(file)
--- a/
3b_sim/sim.cpp
+++ b/
3b_sim/sim.cpp
@@
-21,6
+21,8
@@
#include "extensions/cprog.hpp"
#include "extensions/cuart.hpp"
#include "extensions/cprog.hpp"
#include "extensions/cuart.hpp"
+#include <signal.h>
+
#include "SReadline/SReadline.h"
using namespace swift;
#include "SReadline/SReadline.h"
using namespace swift;
@@
-90,6
+92,11
@@
bool ignoreBreak = false;
bool exitProg = false;
bool exitProg = false;
+void signalCpuBreak(int)
+{
+ global_cpu->breakNext();
+}
+
void doExit(const vector<string>&)
{
exitProg = true;
void doExit(const vector<string>&)
{
exitProg = true;
@@
-142,7
+149,7
@@
void execRun(const vector<string>&)
while(1) {
try {
auto breakp = find(breakpoints.begin(), breakpoints.end(), global_cpu->getNextPC());
while(1) {
try {
auto breakp = find(breakpoints.begin(), breakpoints.end(), global_cpu->getNextPC());
- if(
breakp == breakpoints.end() || ignoreBreak
) {
+ if(
(breakp == breakpoints.end() || ignoreBreak) && !global_cpu->shouldBreak()
) {
global_cpu->tick();
ignoreBreak = false;
}
global_cpu->tick();
ignoreBreak = false;
}
@@
-547,6
+554,7
@@
int main(int argc, char* argv[])
global_cpu = &cpu;
global_cpu = &cpu;
+ signal(SIGINT, signalCpuBreak);
Iinstr::setCPU(&cpu);
Iext::setCPU(&cpu);
Iinstr::setCPU(&cpu);
Iext::setCPU(&cpu);