aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qtmips_machine/peripheral.cpp8
-rw-r--r--qtmips_machine/peripheral.h5
-rw-r--r--qtmips_machine/qtmipsexception.h3
3 files changed, 14 insertions, 2 deletions
diff --git a/qtmips_machine/peripheral.cpp b/qtmips_machine/peripheral.cpp
index 161f760..ac74c2a 100644
--- a/qtmips_machine/peripheral.cpp
+++ b/qtmips_machine/peripheral.cpp
@@ -50,13 +50,19 @@ bool SimplePeripheral::wword(std::uint32_t address, std::uint32_t value) {
printf("SimplePeripheral::wword address 0x%08lx data 0x%08lx\n",
(unsigned long)address, (unsigned long)value);
#endif
+ emit write_notification(address, value);
+
return true;
}
std::uint32_t SimplePeripheral::rword(std::uint32_t address) const {
+ std::uint32_t value = 0x12345678;
#if 0
printf("SimplePeripheral::rword address 0x%08lx\n",
(unsigned long)address);
#endif
- return 0x12345678;
+
+ emit read_notification(address, &value);
+
+ return value;
}
diff --git a/qtmips_machine/peripheral.h b/qtmips_machine/peripheral.h
index dfc4db7..92df1d7 100644
--- a/qtmips_machine/peripheral.h
+++ b/qtmips_machine/peripheral.h
@@ -51,6 +51,11 @@ public:
SimplePeripheral();
~SimplePeripheral();
+signals:
+ void write_notification(std::uint32_t address, std::uint32_t value);
+ void read_notification(std::uint32_t address, std::uint32_t *value) const;
+
+public:
bool wword(std::uint32_t address, std::uint32_t value);
std::uint32_t rword(std::uint32_t address) const;
};
diff --git a/qtmips_machine/qtmipsexception.h b/qtmips_machine/qtmipsexception.h
index e48bf1c..e592ef0 100644
--- a/qtmips_machine/qtmipsexception.h
+++ b/qtmips_machine/qtmipsexception.h
@@ -90,7 +90,8 @@ protected:
EXCEPTION(UnalignedJump, Runtime) \
EXCEPTION(UnknownMemoryControl, Runtime) \
EXCEPTION(OutOfMemoryAccess, Runtime) \
- EXCEPTION(Sanity,)
+ EXCEPTION(Sanity,) \
+ EXCEPTION(SyscallUnknown, Runtime) \
#define EXCEPTION(NAME, PARENT) \
class QtMipsException##NAME : public QtMipsException##PARENT { \