Changed memory map logic

This commit is contained in:
rkx1209 2018-03-18 02:17:00 +09:00
parent bfbd53300d
commit 2f69bb9140
3 changed files with 14 additions and 39 deletions

View file

@ -30,11 +30,6 @@ void InitMemmap(Nsemu *nsemu) {
ns_abort ("Failed to allocate host memory\n");
}
pRAM = (uint8_t *) data;
int num = sizeof(mem_map) / sizeof(RAMBlock);
for (int n = 0; n < num; n++) {
std::string sec_name = mem_map[n].name;
nsemu->rams[sec_name] = mem_map[n];
}
}
RAMBlock *FindRAMBlock(Nsemu *nsemu, uint64_t addr, size_t len) {
@ -63,30 +58,8 @@ bool CopytoEmu(Nsemu *nsemu, void *data, uint64_t gpa, size_t len) {
return _CopyMemEmu (data, gpa, len, true);
}
bool CopytoEmuByName(Nsemu *nsemu, void *data, std::string name, size_t len) {
if (nsemu->rams.find (name) == nsemu->rams.end ()) {
return false;
}
RAMBlock *as = &nsemu->rams[name];
if (len > as->length) {
return false;
}
return _CopyMemEmu (data, as->addr, len, true);
}
bool CopyfromEmu(Nsemu *nsemu, void *data, uint64_t gpa, size_t len) {
return _CopyMemEmu (data, gpa, len, false);
}
bool CopyfromEmuByName(Nsemu *nsemu, void *data, std::string name, size_t len) {
if (nsemu->rams.find (name) == nsemu->rams.end ()) {
return false;
}
RAMBlock *as = &nsemu->rams[name];
if (len > as->length) {
return false;
}
return _CopyMemEmu (data, as->addr, len, false);
}
}

View file

@ -34,28 +34,30 @@ int Nso::load(Nsemu *nsemu) {
if (size & 0xfff) {
size = (size & ~0xfff) + 0x1000;
}
uint64_t base = 0;
char *text = decompress (fp, hdr.textOff, hdr.rdataOff - hdr.textOff, hdr.textSize);
if (!Memory::CopytoEmuByName (nsemu, (void *) text, ".text", hdr.textSize)) {
if (!Memory::CopytoEmu (nsemu, (void *) text, base + hdr.textLoc, hdr.textSize)) {
delete[] text;
ns_abort ("Failed to copy to .text\n");
}
/* --- For test --- */
uint8_t *txt_dump = new uint8_t[hdr.textSize];
Memory::CopyfromEmuByName (nsemu, (void *) txt_dump, ".text", hdr.textSize);
bindump (txt_dump, 105);
/* ---------------- */
delete[] text;
// uint8_t *txt_dump = new uint8_t[hdr.textSize];
// Memory::CopyfromEmuByName (nsemu, (void *) txt_dump, ".text", hdr.textSize);
// bindump (txt_dump, 105);
// /* ---------------- */
// delete[] text;
ns_print(".text[0x%x] size = 0x%x\n", hdr.textOff, hdr.textSize);
ns_print(".rdata[0x%x] size = 0x%x\n", hdr.rdataOff, hdr.rdataSize);
ns_print(".data[0x%x] size = 0x%x\n", hdr.dataOff, hdr.dataSize);
char *rdata = decompress (fp, hdr.rdataOff, hdr.dataOff - hdr.rdataOff, hdr.rdataSize);
if (!Memory::CopytoEmuByName (nsemu, (void *) rdata, ".rdata", hdr.rdataSize)) {
if (!Memory::CopytoEmu (nsemu, (void *) rdata, base + hdr.rdataLoc, hdr.rdataSize)) {
delete[] rdata;
ns_abort ("Failed to copy to .rdata\n");
}
delete[] rdata;
char *data = decompress (fp, hdr.dataOff, length - hdr.dataOff, hdr.dataSize);
if (!Memory::CopytoEmuByName (nsemu, (void *) data, ".data", hdr.dataSize)) {
if (!Memory::CopytoEmu (nsemu, (void *) data, base + hdr.dataLoc, hdr.dataSize)) {
delete[] data;
ns_abort ("Failed to copy to .data\n");
}

View file

@ -13,8 +13,8 @@ enum RunLevel {
RUN_LEVEL_DEBUG,
};
static RunLevel curlevel = RUN_LEVEL_DEBUG;
//static RunLevel curlevel = RUN_LEVEL_RELEASE;
//static RunLevel curlevel = RUN_LEVEL_DEBUG;
static RunLevel curlevel = RUN_LEVEL_RELEASE;
static void util_print(RunLevel level, FILE *fp, const char *format, ...) {
if (curlevel >= level) {