diff options
author | Tom Stellard <tstellar@gmail.com> | 2010-12-28 16:42:21 -0800 |
---|---|---|
committer | Tom Stellard <tstellar@gmail.com> | 2010-12-28 16:42:21 -0800 |
commit | 0d5cc6062bd4d69445d1804183a5cf8fbb2fa271 (patch) | |
tree | 36ac3e56fc1edbf8620fa1876e25775784abaf97 | |
parent | 2a0ffd147e0158f9eb16ad173603da9eddd691a1 (diff) |
emulator: Add input registers
-rw-r--r-- | emulator.cpp | 13 | ||||
-rw-r--r-- | emulator.h | 4 |
2 files changed, 13 insertions, 4 deletions
diff --git a/emulator.cpp b/emulator.cpp index 607ec63..a2f663a 100644 --- a/emulator.cpp +++ b/emulator.cpp @@ -13,12 +13,14 @@ emulator::emulator( program_loader * loader, int num_temp_regs, int num_const_regs, - int num_out_regs) + int num_out_regs, + int num_input_regs) : m_loader(loader), m_temp_regs(num_temp_regs), m_const_regs(num_const_regs, new float_value()), - m_out_regs(num_out_regs) + m_out_regs(num_out_regs), + m_input_regs(num_input_regs, new float_value()) { } bool @@ -45,6 +47,9 @@ emulator::set_constants(float value) for(it = m_const_regs.begin(); it < m_const_regs.end(); ++it) { (*it)->set_value(value); } + for(it = m_input_regs.begin(); it < m_input_regs.end(); ++it) { + (*it)->set_value(value); + } } value * @@ -66,8 +71,10 @@ emulator::get_value(register_address addr) } case REGISTER_TYPE_OUT: return m_out_regs[index]->clone(); case REGISTER_TYPE_IMMEDIATE: return m_immediate_regs[index]->clone(); + case REGISTER_TYPE_IN: return m_input_regs[index]->clone(); default: - assert(0); + std::cerr << __FUNCTION__ << " unknown register type: " + << addr.m_type << "\n"; return NULL; } } @@ -14,7 +14,8 @@ public: program_loader * loader, int num_temp_regs, int num_const_regs, - int num_out_regs); + int num_out_regs, + int num_input_regs); bool run(); @@ -32,6 +33,7 @@ private: std::vector<value *> m_out_regs; std::vector<value *> m_private_regs; std::vector<float_value*> m_immediate_regs; + std::vector<float_value*> m_input_regs; }; #endif //EMULATOR_H |