mirror of
https://github.com/holub/mame
synced 2025-05-19 12:18:56 +03:00
Fixed an ARM7 R15 bit ignoring behaviour while in ARM state, fixes Lupin the Third: the Typing ARM crashing when you coin it up. [Tim Schuerewegen]
This commit is contained in:
parent
b663d1a0bb
commit
b931b12a30
@ -57,7 +57,10 @@
|
|||||||
INT32 offs;
|
INT32 offs;
|
||||||
|
|
||||||
pc = R15;
|
pc = R15;
|
||||||
|
|
||||||
|
// "In Thumb state, bit [0] is undefined and must be ignored. Bits [31:1] contain the PC."
|
||||||
raddr = pc & (~1);
|
raddr = pc & (~1);
|
||||||
|
|
||||||
if ( COPRO_CTRL & COPRO_CTRL_MMU_EN )
|
if ( COPRO_CTRL & COPRO_CTRL_MMU_EN )
|
||||||
{
|
{
|
||||||
raddr = arm7_tlb_translate(cpustate, raddr, ARM7_TLB_ABORT_P);
|
raddr = arm7_tlb_translate(cpustate, raddr, ARM7_TLB_ABORT_P);
|
||||||
@ -1169,12 +1172,17 @@
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
UINT32 raddr;
|
||||||
|
|
||||||
/* load 32 bit instruction */
|
/* load 32 bit instruction */
|
||||||
pc = GET_PC;
|
pc = GET_PC;
|
||||||
|
|
||||||
|
// "In ARM state, bits [1:0] of r15 are undefined and must be ignored. Bits [31:2] contain the PC."
|
||||||
|
raddr = pc & (~3);
|
||||||
|
|
||||||
if ( COPRO_CTRL & COPRO_CTRL_MMU_EN )
|
if ( COPRO_CTRL & COPRO_CTRL_MMU_EN )
|
||||||
{
|
{
|
||||||
pc = arm7_tlb_translate(cpustate, pc, ARM7_TLB_ABORT_P);
|
raddr = arm7_tlb_translate(cpustate, raddr, ARM7_TLB_ABORT_P);
|
||||||
if (cpustate->pendingAbtP != 0)
|
if (cpustate->pendingAbtP != 0)
|
||||||
{
|
{
|
||||||
goto skip_exec;
|
goto skip_exec;
|
||||||
@ -1191,7 +1199,7 @@
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
insn = cpustate->direct->read_decrypted_dword(pc);
|
insn = cpustate->direct->read_decrypted_dword(raddr);
|
||||||
|
|
||||||
/* process condition codes for this instruction */
|
/* process condition codes for this instruction */
|
||||||
switch (insn >> INSN_COND_SHIFT)
|
switch (insn >> INSN_COND_SHIFT)
|
||||||
|
Loading…
Reference in New Issue
Block a user