git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1687 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
60 lines
1.7 KiB
C++
60 lines
1.7 KiB
C++
#include <sstream>
|
|
|
|
#include "QEMUController.hpp"
|
|
#include "QEMUMemory.hpp"
|
|
#include "QEMURegister.hpp"
|
|
#include "../Register.hpp"
|
|
#include "../SALInst.hpp"
|
|
|
|
namespace fail {
|
|
|
|
QEMUController::QEMUController()
|
|
: SimulatorController(new QEMURegisterManager(), new QEMUMemoryManager()),
|
|
m_cpuenv(0)
|
|
{
|
|
// TODO: probably do additional RegisterManager initializations
|
|
}
|
|
|
|
QEMUController::~QEMUController()
|
|
{
|
|
delete m_Regs;
|
|
delete m_Mem;
|
|
}
|
|
|
|
// FIXME: copied from BochsController; remove redundancy!
|
|
void QEMUController::onIOPort(unsigned char data, unsigned port, bool out)
|
|
{
|
|
// Check for active IOPortListeners:
|
|
ListenerManager::iterator it = m_LstList.begin();
|
|
while (it != m_LstList.end()) {
|
|
IOPortListener* pIOPt = dynamic_cast<IOPortListener *>(*it);
|
|
if (pIOPt != NULL && pIOPt->isMatching(port, out)) {
|
|
pIOPt->setData(data);
|
|
it = m_LstList.makeActive(it);
|
|
// "it" has already been set to the next element (by calling
|
|
// makeActive()):
|
|
continue; // -> skip iterator increment
|
|
}
|
|
it++;
|
|
}
|
|
m_LstList.triggerActiveListeners();
|
|
}
|
|
|
|
void QEMUController::onTimerTrigger(TimerListener *pli)
|
|
{
|
|
// FIXME: The timer logic can be modified to use only one timer in QEMU.
|
|
// (For now, this suffices.)
|
|
|
|
// Check for a matching TimerListener. (In fact, we are only
|
|
// interessted in the iterator pointing at pli.)
|
|
ListenerManager::iterator it = std::find(m_LstList.begin(),
|
|
simulator.m_LstList.end(), pli);
|
|
// TODO: This has O(|m_LstList|) time complexity. We can further improve this
|
|
// by creating a method such that makeActive(pli) works as well,
|
|
// reducing the time complexity to O(1).
|
|
m_LstList.makeActive(it);
|
|
m_LstList.triggerActiveListeners();
|
|
}
|
|
|
|
} // end-of-namespace: fail
|