mirror of
https://github.com/kanjitalk755/macemu.git
synced 2024-11-23 04:33:24 +00:00
No need to map ROM executable on emulated/ppc. Make sure to detect unaligned
EA for lmw/stmw with real addr instead of relying on the signal number.
This commit is contained in:
parent
7f13ce6fed
commit
0665ab1139
@ -561,7 +561,7 @@ int main(int argc, char **argv)
|
|||||||
ErrorAlert(str);
|
ErrorAlert(str);
|
||||||
goto quit;
|
goto quit;
|
||||||
}
|
}
|
||||||
#if !EMULATED_PPC || defined(__powerpc__)
|
#if !EMULATED_PPC
|
||||||
if (vm_protect((char *)ROM_BASE, ROM_AREA_SIZE, VM_PAGE_READ | VM_PAGE_WRITE | VM_PAGE_EXECUTE) < 0) {
|
if (vm_protect((char *)ROM_BASE, ROM_AREA_SIZE, VM_PAGE_READ | VM_PAGE_WRITE | VM_PAGE_EXECUTE) < 0) {
|
||||||
sprintf(str, GetString(STR_ROM_MMAP_ERR), strerror(errno));
|
sprintf(str, GetString(STR_ROM_MMAP_ERR), strerror(errno));
|
||||||
ErrorAlert(str);
|
ErrorAlert(str);
|
||||||
@ -1627,8 +1627,8 @@ static void sigsegv_handler(int sig, siginfo_t *sip, void *scp)
|
|||||||
transfer_type = TYPE_STORE; transfer_size = SIZE_HALFWORD; addr_mode = MODE_U; break;
|
transfer_type = TYPE_STORE; transfer_size = SIZE_HALFWORD; addr_mode = MODE_U; break;
|
||||||
#if EMULATE_UNALIGNED_LOADSTORE_MULTIPLE
|
#if EMULATE_UNALIGNED_LOADSTORE_MULTIPLE
|
||||||
case 46: // lmw
|
case 46: // lmw
|
||||||
if (sig == SIGBUS) {
|
if ((addr % 4) != 0) {
|
||||||
uint32 ea = (ra == 0 ? 0 : r->gpr(ra)) + imm;
|
uint32 ea = addr;
|
||||||
D(bug("WARNING: unaligned lmw to EA=%08x from IP=%08x\n", ea, r->pc()));
|
D(bug("WARNING: unaligned lmw to EA=%08x from IP=%08x\n", ea, r->pc()));
|
||||||
for (int i = rd; i <= 31; i++) {
|
for (int i = rd; i <= 31; i++) {
|
||||||
r->gpr(i) = ReadMacInt32(ea);
|
r->gpr(i) = ReadMacInt32(ea);
|
||||||
@ -1639,8 +1639,8 @@ static void sigsegv_handler(int sig, siginfo_t *sip, void *scp)
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 47: // stmw
|
case 47: // stmw
|
||||||
if (sig == SIGBUS) {
|
if ((addr % 4) != 0) {
|
||||||
uint32 ea = (ra == 0 ? 0 : r->gpr(ra)) + imm;
|
uint32 ea = addr;
|
||||||
D(bug("WARNING: unaligned stmw to EA=%08x from IP=%08x\n", ea, r->pc()));
|
D(bug("WARNING: unaligned stmw to EA=%08x from IP=%08x\n", ea, r->pc()));
|
||||||
for (int i = rd; i <= 31; i++) {
|
for (int i = rd; i <= 31; i++) {
|
||||||
WriteMacInt32(ea, r->gpr(i));
|
WriteMacInt32(ea, r->gpr(i));
|
||||||
|
Loading…
Reference in New Issue
Block a user