mirror of
https://github.com/RKX1209/nsemu.git
synced 2024-06-15 18:57:39 -04:00
Changed memory map logic
This commit is contained in:
parent
bfbd53300d
commit
2f69bb9140
27
Memory.cpp
27
Memory.cpp
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -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");
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue