⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cc

📁 一个mips虚拟机非常好代码,使用C++来编写的,希望大家多学学,
💻 CC
字号:
#include <stdlib.h>#include <string.h>#include <unistd.h>#include <fcntl.h>#include <sys/mman.h>#include <serial.hh>#include <sulima.hh>#include "rtc.hh"// Serialization information.SerialType<MT48Tx2> MT48Tx2::type(    "MT48Tx2",    "T48T02/12 Timekeeper(R) RAM");// Runtime constructor.MT48Tx2::MT48Tx2(const SimArgs &args)    : Module(args), Device(8), file_name(0){    define("fileName", conf.file_name);    define("readLatency", conf.read_latency, 150);    define("writeLatency", conf.write_latency, 150);}// Serialized constructor.MT48Tx2::MT48Tx2(Checkpoint &cp)    : Module(cp), Device(8), file_name(extract_word(cp)){    define("fileName", conf.file_name, file_name);    cp >> conf.read_latency >> conf.write_latency >> '\n';    define("readLatency", conf.read_latency, conf.read_latency);    define("writeLatency", conf.write_latency, conf.write_latency);    reset(false);}// Checkpointing interface.voidMT48Tx2::checkpoint(Checkpoint &cp, bool parent) const{    ClockValue rl = nanoseconds(read_latency, freq);    ClockValue wl = nanoseconds(write_latency, freq);    if (parent)	cp << type << ' ' << id << '\n';    cp << file_name << ' ' << rl << ' ' << wl << '\n';    if (file_name[0]) {	FILE *fp = fopen(conf.file_name, "wb");	if (!fp)	    throw FileError(conf.file_name);	fwrite(data, 1, size, fp);	if (ferror(fp) || fclose(fp)) {	    fclose(fp);	    throw FileError(conf.file_name);	}	fclose(fp);    }}// Destructor.MT48Tx2::~MT48Tx2(){    delete file_name;}// Module interface.voidMT48Tx2::reset(bool warm){    if (!warm) {#ifdef USE_MMAP	int fd = open(conf.file_name, O_RDWR|O_CREAT, 0600);	if (fd != -1)	{		ftruncate(fd, size);		data = (char *)mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);	}	else	{#endif	data = new char[size];	memset(data, 0, size);	if (conf.file_name[0]) {	    FILE *fp = fopen(conf.file_name, "rb");	    if (!fp)		throw FileError(conf.file_name);	    fread(data, 1, size, fp);	    if (ferror(fp)) {		fclose(fp);		throw FileError(conf.file_name);	    }	    fclose(fp);	}	delete file_name;#ifdef USE_MMAP	}#endif	file_name = copy(conf.file_name);	read_latency = conf.read_latency;	write_latency = conf.write_latency;	// initially latencies are specified in nanoseconds	freq = nanoseconds(1,1);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -