minscay / mupen64plus

Automatically exported from code.google.com/p/mupen64plus
0 stars 0 forks source link

San Francisco Rush 2049 freezes after start of game in pure interpreter #278

Closed GoogleCodeExporter closed 8 years ago

GoogleCodeExporter commented 8 years ago
Describe your system:
 - Linux distribution: Debian sid
 - Machine type: 64-bit
 - Mupen64Plus version: 1416
 - Plugins used: glide64

San Francisco Rush 2049 (E) (M6) [!]
MD5 02B16AC23998F78F09AF6513F4ACB664

Describe the problem:
When the game starts it will show countdown and freezes right after with
pure interpreter and the screen turns black. It works with dynamic
recompiler and interpreter.

The address is
0x800CE07C lw $r0, 0x0000($t8)

$t8 is 0xFFFFFFFF8002EB04

after the execution
$r0 is 0x000000003D75C28F in pure interpreter mode

$r0 is 0x0000000000000000 in interpreter mode

Save right before the interesting instruction can be found at
http://www.mediafire.com/?jnjzdmtnzjn

Original issue reported on code.google.com by sven@narfation.org on 3 Oct 2009 at 9:06

GoogleCodeExporter commented 8 years ago
The interpreter mode starts in NOT_COMPILED. The block gets recompiled
"recompile_block((int *) rdram+(((paddr-(PC->addr-blocks[PC->addr>>12]->start)) 
&
0x1FFFFFFF)>>2)," and the PC->ops(); now calls NOP r4300/special.c:33

RLW seems to set "dst->ops = LW;"  and then recompile_standard_i_type() sets
"dst->f.i.rt = reg + ((src >> 16) & 0x1F);"... which means that dst->f.i.rt is 
reg
and this means that we want to write to r0... which is of course not possible. 
This
is handled in that RLW function using a check with "if (dst->f.i.rt == reg) 
RNOP();".
This must also be implemented inside the pure interpreter as it will just write 
into
r0... which is evil. This instruction is complete valid but must be interpreted 
as
"result not written.

Original comment by sven@narfation.org on 3 Oct 2009 at 10:06

GoogleCodeExporter commented 8 years ago
[deleted comment]
GoogleCodeExporter commented 8 years ago
Following functions must be checked in pure interpreter:
f.r.rd: SLL SRL SRA SLLV SRLV SRAV MFHI MFLO DSLLV DSRLV DSRAV ADD ADDU SUB 
SUBU AND
OR XOR NOR SLT SLTU DADD DADDU DSUB DSUBU DSLL DSRL DSRA DSLL32 DSRL32 DSRA32
f.r.rt: MFC0 MFC1 DMFC1 CFC1
f.i.rt: ADDI ADDIU SLTI SLTIU ANDI ORI XORI LUI DADDI DADDIU LDL LDR LB LH LWL 
LW LBU
LHU LWR LWU LL LD SC

Original comment by sven@narfation.org on 3 Oct 2009 at 11:12

Attachments:

GoogleCodeExporter commented 8 years ago
patches applied to Mupen64Plus v2.0 Hg repository

Original comment by richard...@gmail.com on 14 Nov 2009 at 6:10

GoogleCodeExporter commented 8 years ago

Original comment by richard...@gmail.com on 13 Jan 2010 at 1:18

GoogleCodeExporter commented 8 years ago

Original comment by sven@narfation.org on 5 Jun 2011 at 9:19