mirror of
https://github.com/vortexgpgpu/vortex.git
synced 2025-04-24 22:07:41 -04:00
57 lines
1.7 KiB
C++
57 lines
1.7 KiB
C++
/*******************************************************************************
|
|
HARPtools by Chad D. Kersey, Summer 2011
|
|
*******************************************************************************/
|
|
#include "include/qsim-harp.h"
|
|
|
|
#include <iostream>
|
|
#include <string>
|
|
|
|
using namespace Harp;
|
|
using namespace Qsim;
|
|
using namespace std;
|
|
|
|
Harp::OSDomain* Harp::OSDomain::osDomain(NULL);
|
|
|
|
Harp::OSDomain::OSDomain(ArchDef &archref, string imgFile) :
|
|
/* TODO: Move the mu to the Cpu. They're sharing a TLB now! */
|
|
arch(archref), mu(4096, arch.getWordSize()),
|
|
ram(imgFile.c_str(), arch.getWordSize()),
|
|
cpus(0)
|
|
{
|
|
if (osDomain != NULL) {
|
|
cout << "Error: OSDomain is a singleton.";
|
|
exit(1);
|
|
}
|
|
osDomain = this;
|
|
|
|
std::cout << "Constructing an OSDomain with archref, " << archref.getNPRegs() << '\n';
|
|
|
|
std::cout << "Pushing back a Cpu in OSDomain constructor.\n";
|
|
cpus.push_back(Cpu(*this));
|
|
|
|
console = new ConsoleMemDevice(arch.getWordSize(), cout, *cpus[0].core);
|
|
|
|
mu.attach(ram, 0);
|
|
mu.attach(*console, 1ll<<(arch.getWordSize()*8 - 1));
|
|
}
|
|
|
|
void Harp::OSDomain::connect_console(std::ostream &s) {
|
|
/* For now this does nothing. ConsoleMemDevice is not redirectable. */
|
|
std::cout << "in connect_console\n";
|
|
}
|
|
|
|
Harp::OSDomain::Cpu::Cpu(Harp::OSDomain &o) :
|
|
/* TODO: This should support non-word decoders! */
|
|
osd(&o), dec(new WordDecoder(osd->arch)),
|
|
core(new Core(osd->arch, *dec, osd->mu))
|
|
{
|
|
std::cout << "Constructing a new Cpu.\n";
|
|
}
|
|
|
|
uint64_t Harp::OSDomain::Cpu::run(uint64_t n) {
|
|
uint64_t i;
|
|
std::cout << "pc=0x" << std::hex << core->pc << ", " << std::dec << sizeof(*core) << '\n';
|
|
//osd->console->poll();
|
|
for (i = 0; i < n; ++i) core->step();
|
|
return i;
|
|
}
|