mirror of
https://github.com/RKX1209/nsemu.git
synced 2024-06-23 14:43:16 -04:00
Fixed bug of memory read method
This commit is contained in:
parent
4659837b5e
commit
cadf55e7f1
|
@ -5,7 +5,7 @@ Interpreter *Interpreter::inst = nullptr;
|
|||
IntprCallback *Interpreter::disas_cb = nullptr;
|
||||
|
||||
int Interpreter::SingleStep() {
|
||||
uint32_t inst = byte_swap32_uint (ARMv8::ReadInst (PC));
|
||||
uint32_t inst = ARMv8::ReadInst (PC);
|
||||
debug_print ("Run Code: 0x%lx: 0x%08lx\n", PC, inst);
|
||||
//ns_print ("Run Code: 0x%lx: 0x%08lx\n", PC, inst);
|
||||
Disassembler::DisasA64 (inst, disas_cb);
|
||||
|
@ -389,6 +389,7 @@ static void _LoadReg(unsigned int rd_idx, uint64_t addr, int size, bool extend)
|
|||
/* 128-bit Qt */
|
||||
VREG(rd_idx).d[0] = ARMv8::ReadU64 (addr + 8);
|
||||
VREG(rd_idx).d[1] = ARMv8::ReadU64 (addr);
|
||||
//ns_debug("Read: Q = 0x%lx, 0x%lx\n", VREG(rd_idx).d[0], VREG(rd_idx).d[1]);
|
||||
}
|
||||
|
||||
/* TODO: if (extend)
|
||||
|
@ -405,6 +406,7 @@ static void _StoreReg(unsigned int rd_idx, uint64_t addr, int size, bool extend)
|
|||
/* 128-bit Qt */
|
||||
ARMv8::WriteU64 (addr + 8, VREG(rd_idx).d[0]);
|
||||
ARMv8::WriteU64 (addr, VREG(rd_idx).d[1]);
|
||||
//ns_debug("Write: Q = 0x%lx, 0x%lx\n", VREG(rd_idx).d[0], VREG(rd_idx).d[1]);
|
||||
}
|
||||
/* TODO: if (extend)
|
||||
ExtendReg(rd_idx, rd_idx, type, true); */
|
||||
|
|
|
@ -10,25 +10,26 @@ uint32_t ReadInst(uint64_t gva) {
|
|||
template<typename T>
|
||||
static T ReadFromRAM(const uint64_t gpa) {
|
||||
T value = 0;
|
||||
//ns_print("ReadFromRAM: 0x%lx, (%d)\n", gpa, sizeof(T));
|
||||
for (uint64_t addr = gpa; addr < gpa + sizeof(T); addr++) {
|
||||
uint8_t byte;
|
||||
std::memcpy (&byte, &Memory::pRAM[addr], sizeof(uint8_t));
|
||||
value = (value << 8) | byte;
|
||||
value = value | ((uint64_t)byte << (8 * (addr - gpa)));
|
||||
}
|
||||
// uint8_t *ptr = &Memory::pRAM[gpa];
|
||||
// bindump (ptr, 2 * sizeof(T));
|
||||
uint8_t *ptr = &Memory::pRAM[gpa];
|
||||
bindump (ptr, sizeof(T));
|
||||
return value;
|
||||
}
|
||||
|
||||
template<typename T>
|
||||
static void WriteToRAM(const uint64_t gpa, T value) {
|
||||
for (uint64_t addr = gpa + sizeof(T) - 1; addr >= gpa; addr--) {
|
||||
for (uint64_t addr = gpa; addr < gpa + sizeof(T); addr++) {
|
||||
uint8_t byte = value & 0xff;
|
||||
std::memcpy (&Memory::pRAM[addr], &byte, sizeof(uint8_t));
|
||||
value >>= 8;
|
||||
}
|
||||
// uint8_t *ptr = &Memory::pRAM[gpa];
|
||||
// bindump (ptr, 2 * sizeof(T));
|
||||
uint8_t *ptr = &Memory::pRAM[gpa];
|
||||
bindump (ptr, sizeof(T));
|
||||
}
|
||||
|
||||
uint8_t ReadU8(const uint64_t gva) {
|
||||
|
|
Loading…
Reference in a new issue