#ifndef EMULATOR_H_ #define EMULATOR_H_ #include #include #include "value.h" class program_loader; class emulator { public: emulator( program_loader * loader, int num_temp_regs, int num_const_regs, int num_out_regs, int num_input_regs); bool run(); void set_constants(float value); value * get_value(register_address addr); value * get_output_value(unsigned int index); void queue_write( register_address addr, value * val); void dump_regs(); private: class write { public: write(register_address addr, value * val); register_address m_addr; value * m_val; }; value * get_const_value( std::vector & registers, unsigned int index, register_address addr); void set_value( register_address addr, value * val); void set_value( std::vector & vector, unsigned int index, value * val); void dump_regs( std::vector & registers, enum register_type type); void dump_regs( std::vector & registers, enum register_type type); void print_reg( enum register_type type, unsigned int index, value * val); program_loader * m_loader; std::vector m_temp_regs; std::vector m_const_regs; std::vector m_out_regs; std::vector m_private_regs; std::vector m_immediate_regs; std::vector m_input_regs; std::queue m_write_queue; }; #endif //EMULATOR_H