Twili

load_symbols.c

Nov 24th, 2020 (edited)
1,671
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 126.33 KB | None | 0 0
  1. #define sign(imm)    (unsigned short)(imm&0x8000)
  2. #define op(inst)     (unsigned char)(inst>>26)
  3. #define target(inst) (unsigned int)((inst&0x03ffffff)<<2)
  4. #define imm(inst)    (unsigned int)(inst&0xffff)
  5. #define funct(inst)  (unsigned char)(inst&0x3f)
  6. #define rs(inst)     (unsigned char)((inst&0x03e00000)>>21)
  7. #define rt(inst)     (unsigned char)((inst&0x001f0000)>>16)
  8. #define rd(inst)     (unsigned char)((inst&0xf800)>>11)
  9. #define sa(inst)     (unsigned char)((inst&0x07c0)>>6)
  10.  
  11. #define R0 0
  12. #define AT 1
  13. #define V0 2
  14. #define V1 3
  15. #define A0 4
  16. #define A1 5
  17. #define A2 6
  18. #define A3 7
  19. #define T0 8
  20. #define T1 9
  21. #define T2 10
  22. #define T3 11
  23. #define T4 12
  24. #define T5 13
  25. #define T6 14
  26. #define T7 15
  27. #define S0 16
  28. #define S1 17
  29. #define S2 18
  30. #define S3 19
  31. #define S4 20
  32. #define S5 21
  33. #define S6 22
  34. #define S7 23
  35. #define T8 24
  36. #define T9 25
  37. #define K0 26
  38. #define K1 27
  39. #define GP 28
  40. #define SP 29
  41. #define FP 30
  42. #define RA 31
  43.  
  44. #define SPECIAL 0
  45. #define REGIMM  1
  46. #define J       2
  47. #define JAL     3
  48. #define BEQ     4
  49. #define BNE     5
  50. #define BLEZ    6
  51. #define BGTZ    7
  52. #define ADDI    8
  53. #define ADDIU   9
  54. #define SLTI    10
  55. #define SLTIU   11
  56. #define ANDI    12
  57. #define ORI     13
  58. #define XORI    14
  59. #define LUI     15
  60. #define COP0    16
  61. #define COP1    17
  62. #define COP2    18
  63. #define BEQL    20
  64. #define BNEL    21
  65. #define BLEZL   22
  66. #define BGTZL   23
  67. #define DADDI   24
  68. #define DADDIU  25
  69. #define LDL     26
  70. #define LDR     27
  71. #define LB      32
  72. #define LH      33
  73. #define LWL     34
  74. #define LW      35
  75. #define LBU     36
  76. #define LHU     37
  77. #define LWR     38
  78. #define LWU     39
  79. #define SB      40
  80. #define SH      41
  81. #define SWL     42
  82. #define SW      43
  83. #define SDL     44
  84. #define SDR     45
  85. #define SWR     46
  86. #define CACHE   47
  87. #define LL      48
  88. #define LWC1    49
  89. #define LWC2    50
  90. #define LLD     52
  91. #define LDC1    53
  92. #define LDC2    54
  93. #define LD      55
  94. #define SC      56
  95. #define SWC1    57
  96. #define SWC2    58
  97. #define SCD     60
  98. #define SDC1    61
  99. #define SDC2    62
  100. #define SD      63
  101.  
  102. #define SLL     0
  103. #define SRL     2
  104. #define SRA     3
  105. #define SLLV    4
  106. #define SRLV    6
  107. #define SRAV    7
  108. #define JR      8
  109. #define JALR    9
  110. #define SYSCALL 12
  111. /*#define BREAK 13*/
  112. #define SYNC    15
  113. #define MFHI    16
  114. #define MTHI    17
  115. #define MFLO    18
  116. #define MTLO    19
  117. #define DSLLV   20
  118. #define DSRLV   22
  119. #define DSRAV   23
  120. #define MULT    24
  121. #define MULTU   25
  122. #define DIV     26
  123. #define DIVU    27
  124. #define DMULT   28
  125. #define DMULTU  29
  126. #define DDIV    30
  127. #define DDIVU   31
  128. #define ADD     32
  129. #define ADDU    33
  130. #define SUB     34
  131. #define SUBU    35
  132. #define AND     36
  133. #define OR      37
  134. #define XOR     38
  135. #define NOR     39
  136. #define SLT     42
  137. #define SLTU    43
  138. #define DADD    44
  139. #define DADDU   45
  140. #define DSUB    46
  141. #define DSUBU   47
  142. #define TGE     48
  143. #define TGEU    49
  144. #define TLT     50
  145. #define TLTU    51
  146. #define TEQ     52
  147. #define TNE     54
  148. #define DSLL    56
  149. #define DSRL    58
  150. #define DSRA    59
  151. #define DSLL32  60
  152. #define DSRL32  62
  153. #define DSRA32  63
  154. #define CART 0
  155. #include <stdio.h>
  156. #define DISK 1
  157. unsigned int addiu_jump[2]={4};
  158. int ovl_b=4,ovl_e=8,regs;
  159. char mapped=0;
  160. unsigned int extend(unsigned short imm);
  161. unsigned int extend(unsigned short imm)
  162. {
  163.      unsigned int extended;
  164.      if(sign(imm)==0x8000)
  165.      {
  166.           extended=0xffff0000|imm;
  167.      }
  168.      else
  169.      {
  170.           extended=imm;
  171.      }
  172.      return extended;
  173. }
  174.  
  175. unsigned int read32(unsigned char *RAM, int ptr);
  176. unsigned int read32(unsigned char *RAM, int ptr)
  177. {
  178.     return (unsigned int)((RAM[ptr]<<24)|(RAM[ptr+1]<<16)|(RAM[ptr+2]<<8)|RAM[ptr+3]);
  179. }
  180.  
  181. #define F3D_GBI     0
  182. #define F3DEX_GBI   1
  183. #define S2DEX_GBI   2
  184. #define F3DEX_GBI_2 3
  185.  
  186. void decompile_gfx(int map[8192], unsigned char gbi, int num_symb, int cmd_hi);
  187. void decompile_gfx(int map[8192], unsigned char gbi, int num_symb, int cmd_hi)
  188. {
  189.     int x;
  190.     char MV[4]={16, 16, 0, 0}, MW[4]={0, 0, 0, 16}, ucode=F3D_GBI;
  191.     for(x=0;x<num_symb;x+=1) //loop to detect which microcode the game uses
  192.     {
  193.         if(map[x]==0x0C){ucode=4;break;} //ZSort
  194.         if(map[x]==0xAF){ucode=F3DEX_GBI;break;}
  195.         if(map[x]==0xC1)
  196.         {
  197.             if(gbi==0x01){ucode=F3DEX_GBI;break;}
  198.             if(gbi>=0x02&&gbi<0x06){ucode=S2DEX_GBI;break;}
  199.             if(gbi==0x06){ucode=F3DEX_GBI;break;}
  200.             if(gbi==0xAF){ucode=F3DEX_GBI;break;}
  201.             if(gbi==0xB0){ucode=S2DEX_GBI;break;}
  202.             if(gbi==0xB1)
  203.             {
  204.                 if(cmd_hi>0x40){ucode=F3DEX_GBI;break;}
  205.                 if(cmd_hi<=0x40){ucode=S2DEX_GBI;break;}
  206.             }
  207.             if(gbi==0xB2){ucode=S2DEX_GBI;break;}
  208.             if(gbi>=0xB5&&gbi<0xC1){ucode=F3DEX_GBI;break;}
  209.             if(gbi>=0xC1){ucode=S2DEX_GBI;break;}
  210.         }
  211.         if(map[x]==0xE3){ucode=F3DEX_GBI_2;break;}
  212.     }
  213.     switch(gbi) //first try the hardwired commands
  214.     {
  215.         case 0xE4:
  216.             printf("gSPTextureRectangle");
  217.             break;
  218.         case 0xE5:
  219.             printf("gSPTextureRectangleFlip");
  220.             break;
  221.         case 0xE6:
  222.             printf("gDPLoadSync");
  223.             break;
  224.         case 0xE7:
  225.             printf("gDPPipeSync");
  226.             break;
  227.         case 0xE8:
  228.             printf("gDPTileSync");
  229.             break;
  230.         case 0xE9:
  231.             printf("gDPFullSync");
  232.             break;
  233.         case 0xEA:
  234.             printf("gDPSetKeyGB");
  235.             break;
  236.         case 0xEB:
  237.             printf("gDPSetKeyR");
  238.             break;
  239.         case 0xEC:
  240.             printf("gDPSetConvert");
  241.             break;
  242.         case 0xED:
  243.             printf("gDPSetScissor");
  244.             break;
  245.         case 0xEE:
  246.             printf("gDPSetPrimDepth");
  247.             break;
  248.         case 0xEF:
  249.             printf("gDPSetOtherMode");
  250.             break;
  251.         case 0xF0:
  252.             printf("gDPLoadTLUT");
  253.             break;
  254.         case 0xF2:
  255.             printf("gDPSetTileSize");
  256.             break;
  257.         case 0xF3:
  258.             printf("gDPLoadBlock");
  259.             break;
  260.         case 0xF4:
  261.             printf("gDPLoadTile");
  262.             break;
  263.         case 0xF5:
  264.             printf("gDPSetTile");
  265.             break;
  266.         case 0xF6:
  267.             printf("gDPFillRectangle");
  268.             break;
  269.         case 0xF7:
  270.             printf("gDPSetFillColor");
  271.             break;
  272.         case 0xF8:
  273.             printf("gDPSetFogColor");
  274.             break;
  275.         case 0xF9:
  276.             printf("gDPSetBlendColor");
  277.             break;
  278.         case 0xFA:
  279.             printf("gDPSetPrimColor");
  280.             break;
  281.         case 0xFB:
  282.             printf("gDPSetEnvColor");
  283.             break;
  284.         case 0xFC:
  285.             printf("gDPSetCombine");
  286.             break;
  287.         case 0xFD:
  288.             printf("gDPSetTextureImage");
  289.             break;
  290.         case 0xFE:
  291.             printf("gDPSetDepthImage");
  292.             break;
  293.         case 0xFF:
  294.             printf("gDPSetColorImage");
  295.             break;
  296.     }
  297.     if(ucode==F3D_GBI||ucode==F3DEX_GBI)
  298.     {
  299.         if(gbi==0x01){printf("gSPMatrix");return;}
  300.         if(gbi==0x03){goto MOVEMEM;}
  301.         if(gbi==0x04){printf("gSPVertex");return;}
  302.         if(gbi==0x06)
  303.         {
  304.             switch(cmd_hi>>16&0xff)
  305.             {
  306.                 case 0:
  307.                     printf("gSPDisplayList");
  308.                     break;
  309.                 case 1:
  310.                     printf("gSPBranchList");
  311.                     break;
  312.             }
  313.             return;
  314.         }
  315.         if(gbi==0xAF){printf("gSPLoadUcodeEx");return;}
  316.         if(gbi==0xB0){printf("gSPBranchLessZ");return;}
  317.         if(gbi==0xB1){printf("gSP2Triangles");return;}
  318.         if(gbi==0xB2){printf("gSPModifyVertex");return;}
  319.         if(gbi==0xB5){printf("gSP1Quadrangle");return;}
  320.         if(gbi==0xB6){printf("gSPClearGeometryMode");return;}
  321.         if(gbi==0xB7){printf("gSPSetGeometryMode");return;}
  322.         if(gbi==0xB8){printf("gSPEndDisplayList");return;}
  323.         if(gbi==0xB9)
  324.         {
  325.             x=cmd_hi>>8;
  326.             goto SETOTHERMODE_L;
  327.         }
  328.         if(gbi==0xBA)
  329.         {
  330.             x=cmd_hi>>8;
  331.             goto SETOTHERMODE_H;
  332.         }
  333.         if(gbi==0xBB){printf("gSPTexture");return;}
  334.         if(gbi==0xBC){goto MOVEWORD;}
  335.         if(gbi==0xBD){printf("gSPPopMatrix");return;}
  336.         if(gbi==0xBE){printf("gSPCullDisplayList");return;}
  337.         if(gbi==0xBF){printf("gSP1Triangle");return;}
  338.     }
  339.     else if(ucode==S2DEX_GBI)
  340.     {
  341.         if(gbi==0x01){printf("gSPBgRect1Cyc");}
  342.         if(gbi==0x02){printf("gSPBgRectCopy");}
  343.         if(gbi==0x03){printf("gSPObjRectangle");}
  344.         if(gbi==0x04){printf("gSPObjSprite");}
  345.         if(gbi==0x05)
  346.         {
  347.             switch(cmd_hi&0xffff)
  348.             {
  349.                 case 0:
  350.                     printf("gSPObjMatrix");
  351.                     break;
  352.                 case 2:
  353.                     printf("gSPObjSubMatrix");
  354.                     break;
  355.                 case 8:
  356.                     printf("gSPViewport");
  357.                     break;
  358.             }
  359.         }
  360.         if(gbi==0xB0)
  361.         {
  362.             switch(cmd_hi>>16&0xff)
  363.             {
  364.                 case 0:
  365.                     printf("gSPDisplayList");
  366.                     break;
  367.                 case 1:
  368.                     printf("gSPBranchList");
  369.                     break;
  370.             }
  371.         }
  372.         if(gbi==0xB1){printf("gSPObjRenderMode");}
  373.         if(gbi==0xB2){printf("gSPObjRectangleR");}
  374.         if(gbi==0xC1){printf("gSPObjLoadTxtr");}
  375.         if(gbi==0xC2){printf("gSPObjLoadTxSprite");}
  376.         if(gbi==0xC3){printf("gSPObjLoadTxRect");}
  377.         if(gbi==0xC4){printf("gSPObjLoadTxRectR");}
  378.         return;
  379.     }
  380.     else if(ucode==F3DEX_GBI_2)
  381.     {
  382.         if(gbi==0x01){printf("gSPVertex");return;}
  383.         if(gbi==0x02){printf("gSPModifyVertex");return;}
  384.         if(gbi==0x03){printf("gSPCullDisplayList");return;}
  385.         if(gbi==0x04){printf("gSPBranchLessZ");return;}
  386.         if(gbi==0x05){printf("gSP1Triangle");return;}
  387.         if(gbi==0x06){printf("gSP2Triangles");return;}
  388.         if(gbi==0x07){printf("gSP1Quadrangle");return;}
  389.         if(gbi==0xD7){printf("gSPTexture");return;}
  390.         if(gbi==0xD8){printf("gSPPopMatrix");return;}
  391.         if(gbi==0xD9){printf("gSPGeometryMode");return;}
  392.         if(gbi==0xDA){printf("gSPMatrix");return;}
  393.         if(gbi==0xDB){goto MOVEWORD;}
  394.         if(gbi==0xDC){goto MOVEMEM;}
  395.         if(gbi==0xDD){printf("gSPLoadUcodeEx");return;}
  396.         if(gbi==0xDE)
  397.         {
  398.             switch(cmd_hi>>16&0xff)
  399.             {
  400.                 case 0:
  401.                     printf("gSPDisplayList");
  402.                     break;
  403.                 case 1:
  404.                     printf("gSPBranchList");
  405.                     break;
  406.             }
  407.             return;
  408.         }
  409.         if(gbi==0xDF){printf("gSPEndDisplayList");return;}
  410.         if(gbi==0xE2)
  411.         {
  412.             x=32-(cmd_hi>>8);
  413.             cmd_hi&=0xFF;
  414.             x-=cmd_hi+1;
  415.             goto SETOTHERMODE_L;
  416.         }
  417.         if(gbi==0xE3)
  418.         {
  419.             x=32-(cmd_hi>>8);
  420.             cmd_hi&=0xFF;
  421.             x-=cmd_hi+1;
  422.             goto SETOTHERMODE_H;
  423.         }
  424.     }
  425.     else
  426.     {
  427.         if(gbi==0x04)
  428.         {
  429.             switch(cmd_hi&0xfff)
  430.             {
  431.                 case 0:
  432.                     printf("gSPZViewPort");
  433.                     break;
  434.                 case 0x830:
  435.                 case 0x870:
  436.                 case 0x8b0:
  437.                     if((cmd_hi>>23)&1==0)
  438.                     {
  439.                         printf("gSPZSetMtx");
  440.                     }
  441.                     else
  442.                     {
  443.                         printf("gSPZGetMtx");
  444.                     }
  445.                     break;
  446.                 default:
  447.                     printf("Unknown Move");
  448.                     break;
  449.             }
  450.         }
  451.         if(gbi==0x08){printf("gSPZMtxTrnsp3x3");}
  452.         if(gbi==0x0A){printf("gSPZMtxCat");}
  453.         if(gbi==0x0C){printf("gSPZMultMPMtx");}
  454.         if(gbi==0x0E){printf("gSPZRdpCmd");}
  455.         if(gbi==0x10){printf("gSPZSendMessage");}
  456.         if(gbi==0x12){printf("gSPZWaitSignal");}
  457.         if(gbi==0x14)
  458.         {
  459.             if((cmd_hi>>12)&0xfff>0)
  460.             {
  461.                 printf("gSPZLightMaterial");
  462.             }
  463.             else
  464.             {
  465.                 printf("gSPZLight");
  466.             }
  467.         }
  468.         if(gbi==0xE2){printf("Other Mode (L)");}
  469.         if(gbi==0xE3){printf("Other Mode (H)");}
  470.         return;
  471.     }
  472.     MOVEMEM:
  473.     switch(cmd_hi>>MV[ucode]&0xff)
  474.     {
  475.         case 0x08:
  476.         case 0x80:
  477.             printf("gSPViewport");
  478.             break;
  479.         case 0x0A:
  480.         case 0x86:
  481.         case 0x88:
  482.         case 0x8A:
  483.         case 0x8C:
  484.         case 0x8E:
  485.         case 0x90:
  486.         case 0x92:
  487.         case 0x94:
  488.             printf("gSPLight");
  489.             break;
  490.         case 0x0E:
  491.         case 0x9E:
  492.             printf("gSPForceMatrix");
  493.             break;
  494.     }
  495.     return;
  496.     SETOTHERMODE_L:
  497.     switch(x)
  498.     {
  499.         case 0:
  500.             printf("gDPSetAlphaCompare");
  501.             break;
  502.         case 2:
  503.             printf("gDPSetDepthSource");
  504.             break;
  505.         case 3:
  506.             printf("gDPSetRenderMode");
  507.             break;
  508.     }
  509.     return;
  510.     SETOTHERMODE_H:
  511.     switch(x)
  512.     {
  513.         case 4:
  514.             printf("gDPSetAlphaDither");
  515.             break;
  516.         case 6:
  517.             printf("gDPSetColorDither");
  518.             break;
  519.         case 8:
  520.             printf("gDPSetCombineKey");
  521.             break;
  522.         case 9:
  523.             printf("gDPSetTextureConvert");
  524.             break;
  525.         case 12:
  526.             printf("gDPSetTextureFilter");
  527.             break;
  528.         case 14:
  529.             printf("gDPSetTextureLUT");
  530.             break;
  531.         case 16:
  532.             printf("gDPSetTextureLOD");
  533.             break;
  534.         case 17:
  535.             printf("gDPSetTextureDetail");
  536.             break;
  537.         case 19:
  538.             printf("gDPSetTexturePersp");
  539.             break;
  540.         case 20:
  541.             printf("gDPSetCycleType");
  542.             break;
  543.         case 23:
  544.             printf("gDPPipelineMode");
  545.             break;
  546.     }
  547.     return;
  548.     MOVEWORD:
  549.     switch(cmd_hi>>MW[ucode]&0xff)
  550.     {
  551.         case 0x0:
  552.             printf("gSPInsertMatrix");
  553.             break;
  554.         case 0x2:
  555.             printf("gSPNumLights");
  556.             break;
  557.         case 0x4:
  558.             printf("gSPClipRatio");
  559.             break;
  560.         case 0x6:
  561.             printf("gSPSegment");
  562.             break;
  563.         case 0x8:
  564.             printf("gSPFogFactor");
  565.             break;
  566.         case 0xA:
  567.             printf("gSPLightColor");
  568.             break;
  569.         case 0xC:
  570.             printf("gSPModifyVertex");
  571.             break;
  572.         case 0xE:
  573.             printf("gSPPerspNormalize");
  574.             break;
  575.     }
  576. }
  577.  
  578. void message_set(unsigned char *RAM, unsigned int id)
  579. {
  580.     int found=0;
  581.     int seek=0;
  582.     int temp=0;
  583.     if(read32(RAM,0x3C)!=0x444C4500&&read32(RAM,0x3C)!=0x5A4C450F){return;}
  584.     if(read32(RAM,0x3C)==0x444C4500)
  585.     {
  586.     while(found!=id)
  587.     {
  588.         found=(int)((RAM[0xC5D2D8+seek]<<8)|RAM[0xC5D2D9+seek]);
  589.         seek+=8;
  590.         if(seek==0x8F58){break;}
  591.     }
  592.     if(seek==0x8F58){return;}
  593.     found=read32(RAM,0xC5D2D4+seek)&0xffffff;
  594.     found+=0xAD200B;
  595.     seek=1;
  596.     while(seek!=0xBF)
  597.     {
  598.         seek=RAM[found+temp];
  599.         switch(seek)
  600.         {
  601.             case 0:
  602.             case 1:
  603.             case 2:
  604.             case 3:
  605.             case 4:
  606.             case 5:
  607.             case 6:
  608.             case 7:
  609.             case 8:
  610.             case 0xB:
  611.             case 0xC:
  612.             case 0xD:
  613.             case 0x13:
  614.             case 0x15:
  615.             case 0x16:
  616.             case 0x17:
  617.             case 0x18:
  618.             case 0x19:
  619.             case 0x1A:
  620.             case 0xC2:
  621.             case 0xC3:
  622.             case 0xC4:
  623.             case 0xC8:
  624.             case 0xCC:
  625.             case 0xCD:
  626.             case 0xCE:
  627.             case 0xCF:
  628.             case 0xD0:
  629.             case 0xD1:
  630.             case 0xD2:
  631.             case 0xD4:
  632.             case 0xD5:
  633.             case 0xD7:
  634.             case 0xD8:
  635.             case 0xD9:
  636.             case 0xDA:
  637.             case 0xDB:
  638.             case 0xDC:
  639.             case 0xDD:
  640.             case 0xDE:
  641.             case 0xDF:
  642.             case 0xE0:
  643.             case 0xE1:
  644.             case 0xE2:
  645.             case 0xE3:
  646.             case 0xE4:
  647.             case 0xE5:
  648.             case 0xE6:
  649.             case 0xE7:
  650.             case 0xE8:
  651.             case 0xF6:
  652.             case 0xF9:
  653.             case 0xFA:
  654.             case 0xFB:
  655.             case 0xFC:
  656.                 temp+=1;
  657.                 break;
  658.             case 0x10:
  659.             case 0x12:
  660.                 temp+=1;
  661.                 printf("\n==\n");
  662.                 break;
  663.             case 0x11:
  664.                 temp+=1;
  665.                 printf("\n");
  666.                 break;
  667.             case 0x1B:
  668.             case 0x1C:
  669.             case 0x1D:
  670.             case 0x1F:
  671.                 temp+=3;
  672.                 break;
  673.             case 0x1E:
  674.                 temp+=3;
  675.                 break;
  676.             case 0xBF:
  677.                 temp+=1;
  678.                 printf("\n\n\n");
  679.                 break;
  680.             default:
  681.                 temp+=1;
  682.                 printf("%c",seek);
  683.                 break;
  684.         }
  685.     }
  686.     system("pause");
  687.     return;
  688.     }
  689.     while(found!=id)
  690.     {
  691.         found=(int)((RAM[0xBC24C0+seek]<<8)|RAM[0xBC24C1+seek]);
  692.         seek+=8;
  693.         if(seek==0x4210){break;}
  694.     }
  695.     if(seek==0x4210){return;}
  696.     found=read32(RAM,0xBC24BC+seek)&0xffffff;
  697.     found+=0x8C6000;
  698.     seek=1;
  699.     while(seek!=2)
  700.     {
  701.         seek=RAM[found+temp];
  702.         switch(seek)
  703.         {
  704.             case 3:
  705.             case 8:
  706.             case 9:
  707.             case 0xA:
  708.             case 0xB:
  709.             case 0xD:
  710.             case 0xF:
  711.             case 0x10:
  712.             case 0x11:
  713.             case 0x16:
  714.             case 0x17:
  715.             case 0x18:
  716.             case 0x19:
  717.             case 0x1A:
  718.             case 0x1B:
  719.             case 0x1C:
  720.             case 0x1D:
  721.             case 0x1F:
  722.                 temp+=1;
  723.                 break;
  724.             case 1:
  725.                 temp+=1;
  726.                 printf("\n");
  727.                 break;
  728.             case 2:
  729.                 temp+=1;
  730.                 printf("\n\n\n");
  731.                 break;
  732.             case 4:
  733.                 temp+=1;
  734.                 printf("\n==\n");
  735.                 break;
  736.             case 7:
  737.                 temp+=3;
  738.                 break;
  739.             case 0x12:
  740.                 temp+=3;
  741.                 break;
  742.             case 0x15:
  743.                 temp+=4;
  744.                 break;
  745.             case 5:
  746.             case 6:
  747.             case 0xC:
  748.             case 0xE:
  749.             case 0x13:
  750.             case 0x14:
  751.             case 0x1E:
  752.                 temp+=2;
  753.                 break;
  754.             default:
  755.                 temp+=1;
  756.                 printf("%c",seek);
  757.                 break;
  758.         }
  759.     }
  760.     system("pause");
  761. }
  762.  
  763. void map(unsigned char *RAM, unsigned char *REG, unsigned char *DEMO, int add, int start, int offset)
  764. {
  765.     unsigned int CPU[32], inst, tgt;
  766.     int loop, newvar, newvar2;
  767.     int found=0, there;
  768.     CPU[0]=0;
  769.     newvar=offset-read32(RAM,offset-4);
  770.     int len=read32(RAM,newvar);
  771.     newvar2=len;
  772.     newvar2+=read32(RAM,newvar+4);
  773.     newvar2+=read32(RAM,newvar+8);
  774.     regs=start-add+newvar2;
  775.     for(loop=0;loop<len;loop+=4)
  776.     {
  777.         inst=read32(RAM,start+loop);
  778.         switch(op(inst))
  779.         {
  780.             case ADDIU:
  781.                 tgt=rt(inst);
  782.                 CPU[tgt]=CPU[rs(inst)]+extend(imm(inst));
  783.                 break;
  784.             case LUI:
  785.                 tgt=imm(inst);
  786.                 CPU[rt(inst)]=tgt<<16;
  787.                 break;
  788.             case SB:
  789.                 tgt=CPU[rs(inst)]+extend(imm(inst));
  790.                 if(rs(inst)==AT&&tgt>=(regs|0x80000000))
  791.                 {
  792.                     tgt&=0x1fffffff;
  793.                     tgt-=regs;
  794.                     REG[tgt]=CPU[rt(inst)];
  795.                 }
  796.                 break;
  797.             case SH:
  798.                 tgt=CPU[rs(inst)]+extend(imm(inst));
  799.                 if(rs(inst)==AT&&tgt>=(regs|0x80000000))
  800.                 {
  801.                     tgt&=0x1fffffff;
  802.                     tgt-=regs;
  803.                     REG[tgt]=CPU[rt(inst)]>>8;
  804.                     REG[tgt+1]=CPU[rt(inst)]&0xff;
  805.                 }
  806.                 break;
  807.             case SW:
  808.                 tgt=CPU[rs(inst)]+extend(imm(inst));
  809.                 if(rs(inst)==AT&&tgt>=(regs|0x80000000))
  810.                 {
  811.                     tgt&=0x1fffffff;
  812.                     tgt-=regs;
  813.                     REG[tgt]=CPU[rt(inst)]>>24;
  814.                     REG[tgt+1]=(CPU[rt(inst)]>>16)&0xff;
  815.                     REG[tgt+2]=(CPU[rt(inst)]>>8)&0xff;
  816.                     REG[tgt+3]=CPU[rt(inst)]&0xff;
  817.                 }
  818.                 break;
  819.         }
  820.     }
  821.     scan:
  822.     if(RAM[0x3C]==0x5A&&RAM[0x3D]==0x53)
  823.     {
  824.         if(found!=1)
  825.         {
  826.             found=0;
  827.             there=start+len;
  828.         }
  829.         while(RAM[there]!=0x80)
  830.         {
  831.             if(RAM[there]==0x0E)
  832.             {
  833.                 if(RAM[there+3]==0x0C&&RAM[there+5]==0)
  834.                 {
  835.                     found=there;
  836.                     break;
  837.                 }
  838.                 if(RAM[there+3]==0x2D&&RAM[there+4]==0)
  839.                 {
  840.                     found=there;
  841.                     break;
  842.                 }
  843.             }
  844.             there+=1;
  845.         }
  846.         if(found==0)
  847.         {
  848.             while(RAM[there]==0x80)
  849.             {
  850.                 there+=4;
  851.             }
  852.             found=1;
  853.             goto scan;
  854.            
  855.         }
  856.         if(found>1)
  857.         {
  858.             there=found;
  859.             while(RAM[there]!=0x80) //PROCESS THE SCRIPT
  860.             {
  861.                 switch(RAM[there])
  862.                 {
  863.                     case 0x0E:
  864.                     case 0x0F:
  865.                     case 0x2C:
  866.                         if((unsigned short)((RAM[there+1]<<8)|RAM[there+2])>0)
  867.                         {
  868.                             printf("================================\n0x%04x\n\n",(unsigned short)(RAM[there+1]<<8)|RAM[there+2]);
  869.                             message_set(DEMO,(unsigned short)(RAM[there+1]<<8)|RAM[there+2]);
  870.                             printf("\n");
  871.                             there+=2;
  872.                         }
  873.                         break;
  874.                     case 0x2D:
  875.                         printf("\n\n");
  876.                         there+=2;
  877.                 }
  878.                 there+=1;
  879.             }
  880.         }
  881.     }
  882. }
  883.  
  884. int ovl_adapt(unsigned char *RAM, unsigned char *REG, unsigned char *DEMO, int func, unsigned int magic)
  885. {
  886.     int loop, add;
  887.     add=0;
  888.     if(magic!=0x5A4C450F){goto ZS;}
  889.     for(loop=0;loop<0x1FC;loop+=1)
  890.     {
  891.         if(loop>=0x1D7)
  892.         {
  893.             RAM[0xB897D4+0x1C*loop]=0;
  894.             if(func>=read32(RAM,0xB897CC+0x1C*loop)&&func<read32(RAM,0xB897D0+0x1C*loop))
  895.             {
  896.                 add=read32(RAM,0xB897CC+0x1C*loop)-read32(RAM,0xB897D4+0x1C*loop);
  897.                 break;
  898.             }
  899.         }
  900.         else
  901.         {
  902.             RAM[0xB8D448+0x20*loop]=0;
  903.             RAM[0xB8D458+0x20*loop]=0;
  904.             if(func>=read32(RAM,0xB8D440+0x20*loop)&&func<read32(RAM,0xB8D444+0x20*loop))
  905.             {
  906.                 add=read32(RAM,0xB8D440+0x20*loop)-read32(RAM,0xB8D448+0x20*loop);
  907.                 break;
  908.             }
  909.         }
  910.     }
  911.     if(mapped==1)
  912.     {
  913.         if(func<ovl_b||func>=ovl_e)
  914.         {
  915.             for(magic=0;magic<0x40000;magic+=1)
  916.             {
  917.                 REG[magic]=0;
  918.             }
  919.             mapped=0;
  920.         }
  921.     }
  922.     if(mapped==0)
  923.     {
  924.         if(loop>=0x1D7)
  925.         {
  926.             ovl_b=read32(RAM,0xB897CC+0x1C*loop);
  927.             ovl_e=read32(RAM,0xB897D0+0x1C*loop);
  928.         }
  929.         else
  930.         {
  931.             if(loop<0x1FC)
  932.             {
  933.             ovl_b=read32(RAM,0xB8D440+0x20*loop);
  934.             ovl_e=read32(RAM,0xB8D444+0x20*loop);
  935.             }
  936.         }
  937.         if(loop<0x1FC)
  938.         {
  939.             map(RAM,REG,DEMO,add,ovl_b,ovl_e);
  940.             mapped=1;
  941.         }
  942.     }
  943.     return add;
  944.     ZS:
  945.     for(loop=0;loop<0x2B2;loop+=1)
  946.     {
  947.         RAM[0xC617C8+0x20*loop]=0;
  948.         RAM[0xC617D8+0x20*loop]=0;
  949.         if(func>=read32(RAM,0xC617C0+0x20*loop)&&func<read32(RAM,0xC617C4+0x20*loop))
  950.         {
  951.             add=read32(RAM,0xC617C0+0x20*loop)-read32(RAM,0xC617C8+0x20*loop);
  952.             break;
  953.         }
  954.     }
  955.     if(mapped==1)
  956.     {
  957.         if(func<ovl_b||func>=ovl_e)
  958.         {
  959.             for(magic=0;magic<0x40000;magic+=1)
  960.             {
  961.                 REG[magic]=0;
  962.             }
  963.             mapped=0;
  964.         }
  965.     }
  966.     if(mapped==0)
  967.     {
  968.         if(loop<0x2B2)
  969.         {
  970.         ovl_b=read32(RAM,0xC617C0+0x20*loop);
  971.         ovl_e=read32(RAM,0xC617C4+0x20*loop);
  972.         }
  973.         if(loop<0x2B2)
  974.         {
  975.             map(RAM,REG,DEMO,add,ovl_b,ovl_e);
  976.             mapped=1;
  977.         }
  978.     }
  979.     return add;
  980. }
  981.  
  982. char pointers[1532][64]={0};
  983. unsigned short exit_list[31];
  984. int scene_start;
  985.  
  986. void exits(unsigned char *RAM, int start_offset, char mode, short x_doord, short y_doord, short z_doord)
  987. {
  988.     int exit_table, pointer;
  989.     int edge_where, poly_where, type_where, x;
  990.     short highest=0, poly_load, poly_type, x_coord, y_coord, z_coord;
  991.     int scene_depth=start_offset;
  992.     while(RAM[scene_depth]!=0x14)
  993.     {
  994.         if(RAM[scene_depth]==3)
  995.         {
  996.             pointer=scene_start+(read32(RAM,scene_depth+4)&0xffffff);
  997.         }
  998.         if(RAM[scene_depth]==0x13)
  999.         {
  1000.             exit_table=scene_start+(read32(RAM,scene_depth+4)&0xffffff);
  1001.         }
  1002.         scene_depth+=8;
  1003.     }
  1004.     if(mode<2)
  1005.     {
  1006.     edge_where=scene_start+(read32(RAM,pointer+16)&0xffffff);
  1007.     poly_load=(short)((RAM[pointer+20]<<8)|RAM[pointer+21]);
  1008.     poly_where=scene_start+(read32(RAM,pointer+24)&0xffffff);
  1009.     type_where=scene_start+(read32(RAM,pointer+28)&0xffffff);
  1010.     if(mode==0)
  1011.     {
  1012.     for(x=0;x<31;x+=1){exit_list[x]=0xFFFF;}
  1013.     for(x=0;x<(poly_load*16);x+=16)
  1014.     {
  1015.         poly_type=(short)((RAM[poly_where+x]<<8)|RAM[1+poly_where+x]);
  1016.         scene_depth=RAM[2+type_where+poly_type*8]&0x1f;
  1017.         if(scene_depth>highest)
  1018.         {
  1019.             highest=scene_depth;
  1020.         }
  1021.     }
  1022.     for(x=0;x<(highest*2);x+=2)
  1023.     {
  1024.         exit_list[(x/2)]=(short)((RAM[exit_table+x]<<8)|RAM[1+exit_table+x]);
  1025.     }
  1026.     }
  1027.     if(mode==1)
  1028.     {
  1029.     for(x=0;x<(poly_load*16);x+=16)
  1030.     {
  1031.         poly_type=(short)((RAM[poly_where+x]<<8)|RAM[1+poly_where+x]);
  1032.         scene_depth=RAM[2+type_where+poly_type*8]&0x1f;
  1033.         exit_table=(short)((RAM[2+poly_where+x]<<8)|RAM[3+poly_where+x]);
  1034.         exit_table&=0x1fff;
  1035.         x_coord=(short)((RAM[edge_where+exit_table*6]<<8)|RAM[1+edge_where+exit_table*6]);
  1036.         y_coord=(short)((RAM[2+edge_where+exit_table*6]<<8)|RAM[3+edge_where+exit_table*6]);
  1037.         z_coord=(short)((RAM[4+edge_where+exit_table*6]<<8)|RAM[5+edge_where+exit_table*6]);
  1038.         if(y_coord>=y_doord&&y_coord<(y_doord+16))
  1039.         {
  1040.             if(z_coord>=(z_doord-32)&&z_coord<(z_doord+32))
  1041.             {
  1042.             if(scene_depth>0&&exit_list[scene_depth-1]<0xFFFF)
  1043.             {
  1044.                 if(read32(RAM,0x3C)==0x5A534A00)
  1045.                 {
  1046.                 RAM[0xC77F88+0xC*(exit_list[scene_depth-1]>>9)]=0;
  1047.                 RAM[0xC77F8C+0xC*(exit_list[scene_depth-1]>>9)]=0;
  1048.                 exit_table=0xAB7960+read32(RAM,0xC77F88+0xC*(exit_list[scene_depth-1]>>9));
  1049.                 pointer=0xAB7960+read32(RAM,0xC77F8C+0xC*(exit_list[scene_depth-1]>>9));
  1050.                 RAM[exit_table]=0;
  1051.                 edge_where=0xAB7960+read32(RAM,exit_table);
  1052.                 exit_table=RAM[edge_where];
  1053.                 if(exit_table>127)
  1054.                 {
  1055.                     exit_table=256-exit_table;
  1056.                 }
  1057.                 printf("->%04X %02X ",exit_list[scene_depth-1],exit_table);
  1058.                 exit_table=1;
  1059.                 edge_where=0;
  1060.                 while(exit_table!=0)
  1061.                 {
  1062.                     exit_table=RAM[pointer+edge_where];
  1063.                     edge_where+=1;
  1064.                     printf("%c",exit_table);
  1065.                 }
  1066.                 printf("(%02X)",scene_depth-1);
  1067.                 }
  1068.                 else
  1069.                 {
  1070.                 pointer=RAM[0xB9F360+exit_list[scene_depth-1]*4];
  1071.                 exit_table=read32(RAM,0xBA0BB0+pointer*0x14);
  1072.                 for(x_coord=0;x_coord<1532;x_coord+=1)
  1073.                 {
  1074.                     if(read32(RAM,0x12F70+x_coord*16)==exit_table)
  1075.                     {
  1076.                         break;
  1077.                     }
  1078.                 }
  1079.                 printf("->%04X %02X %s %08X %02X",exit_list[scene_depth-1],pointer,pointers[x_coord],0xB9F360+exit_list[scene_depth-1]*4,scene_depth-1);
  1080.                 }
  1081.                 exit_list[scene_depth-1]=0xFFFF;
  1082.                 break;
  1083.             }
  1084.             }
  1085.         }
  1086.     }
  1087.     }
  1088.     }
  1089.     if(mode==2)
  1090.     {
  1091.         for(x=0;x<31;x+=1)
  1092.         {
  1093.             if(exit_list[x]<0xFFFF)
  1094.             {
  1095.                 if(read32(RAM,0x3C)==0x5A534A00)
  1096.                 {
  1097.                 RAM[0xC77F88+0xC*(exit_list[x]>>9)]=0;
  1098.                 RAM[0xC77F8C+0xC*(exit_list[x]>>9)]=0;
  1099.                 exit_table=0xAB7960+read32(RAM,0xC77F88+0xC*(exit_list[x]>>9));
  1100.                 pointer=0xAB7960+read32(RAM,0xC77F8C+0xC*(exit_list[x]>>9));
  1101.                 RAM[exit_table]=0;
  1102.                 edge_where=0xAB7960+read32(RAM,exit_table);
  1103.                 exit_table=RAM[edge_where];
  1104.                 if(exit_table>127)
  1105.                 {
  1106.                     exit_table=256-exit_table;
  1107.                 }
  1108.                 printf("%04X %02X ",exit_list[x],exit_table);
  1109.                 exit_table=1;
  1110.                 edge_where=0;
  1111.                 while(exit_table!=0)
  1112.                 {
  1113.                     exit_table=RAM[pointer+edge_where];
  1114.                     edge_where+=1;
  1115.                     printf("%c",exit_table);
  1116.                 }
  1117.                 printf("(%02X)\n",x);
  1118.                 }
  1119.                 else
  1120.                 {
  1121.                 pointer=RAM[0xB9F360+exit_list[x]*4];
  1122.                 exit_table=read32(RAM,0xBA0BB0+pointer*0x14);
  1123.                 for(x_coord=0;x_coord<1532;x_coord+=1)
  1124.                 {
  1125.                     if(read32(RAM,0x12F70+x_coord*16)==exit_table)
  1126.                     {
  1127.                         break;
  1128.                     }
  1129.                 }
  1130.                 printf("%04X %02X %s %08X %02X\n",exit_list[x],pointer,pointers[x_coord],0xB9F360+exit_list[x]*4,x);
  1131.                 }
  1132.             }
  1133.         }
  1134.     }
  1135. }
  1136.  
  1137. void doors(unsigned char *RAM, unsigned char *DEMO, int start_offset, int zenum_add[8192], char zenum_sym[8192][128])
  1138. {
  1139.     int scene_depth=start_offset;
  1140.     int offset, offset2, offset3, offset4, loop;
  1141.     unsigned short type;
  1142.     unsigned char doors;
  1143.     if(read32(RAM,0x3C)==0x5A534A00)
  1144.     {
  1145.         goto MM;
  1146.     }
  1147.     while(RAM[scene_depth]!=0x14)
  1148.     {
  1149.         if(RAM[scene_depth]==0xE)
  1150.         {
  1151.             doors=RAM[scene_depth+1];
  1152.             offset=scene_start+(read32(RAM,scene_depth+4)&0xffffff);
  1153.             for(offset2=offset;offset2<(offset+doors*0x10);offset2+=0x10)
  1154.             {
  1155.                 for(loop=0;loop<0x1AD;loop+=1)
  1156.                 {
  1157.                     if((unsigned short)((RAM[4+offset2]<<8)|RAM[5+offset2])==zenum_add[loop])
  1158.                     {
  1159.                         printf("%08X %s",offset2,zenum_sym[loop]);
  1160.                         exits(RAM,start_offset,1,(short)((RAM[6+offset2]<<8)|RAM[7+offset2]),(short)((RAM[8+offset2]<<8)|RAM[9+offset2]),(short)((RAM[10+offset2]<<8)|RAM[11+offset2]));
  1161.                         printf("\n");
  1162.                         switch(zenum_add[loop])
  1163.                         {
  1164.                             case 9:
  1165.                                 type=(unsigned short)(((RAM[14+offset2]&3)<<1)|(RAM[15+offset2]>>7));
  1166.                                 if(type>=4&&type<7)
  1167.                                 {
  1168.                                     message_set(RAM,0x200+(RAM[15+offset2]&0x3f));
  1169.                                 }
  1170.                         }
  1171.                         break;
  1172.                     }
  1173.                 }
  1174.             }
  1175.             break;
  1176.         }
  1177.         scene_depth+=8;
  1178.     }
  1179.     return;
  1180.     MM:
  1181.     while(RAM[scene_depth]!=0x14)
  1182.     {
  1183.         if(RAM[scene_depth]==0xE)
  1184.         {
  1185.             doors=RAM[scene_depth+1];
  1186.             offset=scene_start+(read32(RAM,scene_depth+4)&0xffffff);
  1187.             for(offset2=offset;offset2<(offset+doors*0x10);offset2+=0x10)
  1188.             {
  1189.                 for(loop=0x1AD;loop<0x3EC;loop+=1)
  1190.                 {
  1191.                     if((unsigned short)((RAM[4+offset2]<<8)|RAM[5+offset2])==zenum_add[loop])
  1192.                     {
  1193.                         printf("%08X %s",offset2,zenum_sym[loop]);
  1194.                         exits(RAM,start_offset,1,(short)((RAM[6+offset2]<<8)|RAM[7+offset2]),(short)((RAM[8+offset2]<<8)|RAM[9+offset2]),(short)((RAM[10+offset2]<<8)|RAM[11+offset2]));
  1195.                         printf("\n");
  1196.                         switch(zenum_add[loop])
  1197.                         {
  1198.                             case 5:
  1199.                                 type=(unsigned short)(((RAM[14+offset2]&3)<<1)|(RAM[15+offset2]>>7));
  1200.                                 if(type==5)
  1201.                                 {
  1202.                                     offset3=0x49B570+(read32(RAM,0xD0327C+(RAM[15+offset2]&0x7F)*4)&0xffffff);
  1203.                                     offset4=0x49B570+(read32(RAM,0xD03280+(RAM[15+offset2]&0x7F)*4)&0xffffff);
  1204.                                     while(type!=9)
  1205.                                     {
  1206.                                         type=RAM[offset3];
  1207.                                         switch(type)
  1208.                                         {
  1209.                                             case 0xE:
  1210.                                             case 0xF:
  1211.                                             case 0x2C:
  1212.                                             case 0x2D:
  1213.                                                 offset3+=2;
  1214.                                         }
  1215.                                         offset3+=1;
  1216.                                         if((RAM[15+offset2]&0x7F)<0x1F&&offset3>=offset4){break;}
  1217.                                     }
  1218.                                     if(type==9){message_set(DEMO,0x1800+RAM[offset3]);}
  1219.                                 }
  1220.                         }
  1221.                         break;
  1222.                     }
  1223.                 }
  1224.             }
  1225.             break;
  1226.         }
  1227.         scene_depth+=8;
  1228.     }
  1229. }
  1230.  
  1231. void scene(unsigned char *RAM, unsigned char *DEMO, int func, int zenum_add[8192], char zenum_sym[8192][128])
  1232. {
  1233.     char objects[0x283][39]={
  1234.     "Object_Bank_Non",
  1235.     "Object_Bank_Keep",
  1236.     "Object_Bank_F_Keep",
  1237.     "Object_Bank_D_Keep",
  1238.     "Object_Bank_Nb",
  1239.     "Object_Bank_Okuta",
  1240.     "Object_Bank_Crow",
  1241.     "Object_Bank_Ah",
  1242.     "Object_Bank_Dy_Obj",
  1243.     "Object_Bank_Wallmaster",
  1244.     "Object_Bank_Dodongo",
  1245.     "Object_Bank_Firefly",
  1246.     "Object_Bank_Box",
  1247.     "Object_Bank_Al",
  1248.     "Object_Bank_Bubble",
  1249.     "Object_Bank_Niw",
  1250.     "Object_Bank_Link_Boy",
  1251.     "Object_Bank_Link_Child",
  1252.     "Object_Bank_Tite",
  1253.     "Object_Bank_Tab",
  1254.     "Object_Bank_Peehat",
  1255.     "Object_Bank_And",
  1256.     "Object_Bank_Msmo",
  1257.     "Object_Bank_Dinofos",
  1258.     "Object_Bank_Drs",
  1259.     "Object_Bank_Zl1",
  1260.     "Object_Bank_An4",
  1261.     "__dummy__Object_Bank_Dodojr",
  1262.     "Object_Bank_Torch2",
  1263.     "Object_Bank_Famos",
  1264.     "__dummy__Object_Bank_Tp",
  1265.     "__dummy__Object_Bank_OAX",
  1266.     "Object_Bank_St",
  1267.     "__dummy__Object_Bank_Bw",
  1268.     "Object_Bank_Thiefbird",
  1269.     "__dummy__Object_Bank_Horse_Normal",
  1270.     "__dummy__Object_Bank_OBX",
  1271.     "__dummy__Object_Bank_O_Anime",
  1272.     "__dummy__Object_Bank_Horse_Ganon",
  1273.     "__dummy__Object_Bank_OA2",
  1274.     "__dummy__Object_Bank_Spot00_Objects",
  1275.     "__dummy__Object_Bank_Mb",
  1276.     "Object_Bank_Bombf",
  1277.     "__dummy__Object_Bank_Sk2",
  1278.     "__dummy__Object_Bank_OE1",
  1279.     "__dummy__Object_Bank_OE_Anime",
  1280.     "__dummy__Object_Bank_OE2",
  1281.     "__dummy__Object_Bank_Boss_Ganondrof",
  1282.     "Object_Bank_Am",
  1283.     "Object_Bank_Dekubaba",
  1284.     "__dummy__Object_Bank_OA3",
  1285.     "__dummy__Object_Bank_OA4",
  1286.     "__dummy__Object_Bank_OA5",
  1287.     "__dummy__Object_Bank_OA6",
  1288.     "__dummy__Object_Bank_OA7",
  1289.     "__dummy__Object_Bank_OA8",
  1290.     "__dummy__Object_Bank_OA9",
  1291.     "__dummy__Object_Bank_OB2",
  1292.     "__dummy__Object_Bank_OB3",
  1293.     "__dummy__Object_Bank_OB4",
  1294.     "__dummy__Object_Bank_Horse_Zelda",
  1295.     "__dummy__Object_Bank_Opening_Demo1",
  1296.     "Object_Bank_Warp1",
  1297.     "Object_Bank_B_Heart",
  1298.     "Object_Bank_Dekunuts",
  1299.     "__dummy__Object_Bank_OE3",
  1300.     "__dummy__Object_Bank_OE4",
  1301.     "__dummy__Object_Bank_Menkuri_Objects",
  1302.     "__dummy__Object_Bank_OE5",
  1303.     "__dummy__Object_Bank_OE6",
  1304.     "__dummy__Object_Bank_OE7",
  1305.     "__dummy__Object_Bank_OE8",
  1306.     "__dummy__Object_Bank_OE9",
  1307.     "__dummy__Object_Bank_OE10",
  1308.     "__dummy__Object_Bank_OE11",
  1309.     "__dummy__Object_Bank_OE12",
  1310.     "__dummy__Object_Bank_Vali",
  1311.     "__dummy__Object_Bank_OA10",
  1312.     "__dummy__Object_Bank_OA11",
  1313.     "__dummy__Object_Bank_fHG",
  1314.     "__dummy__Object_Bank_Ossan",
  1315.     "Object_Bank_Bb",
  1316.     "Object_Bank_Death",
  1317.     "__dummy__Object_Bank_Zl2",
  1318.     "__dummy__Object_Bank_Mjin",
  1319.     "__dummy__Object_Bank_Mjin_flash",
  1320.     "__dummy__Object_Bank_Mjin_dark",
  1321.     "__dummy__Object_Bank_Mjin_flame",
  1322.     "__dummy__Object_Bank_Mjin_ice",
  1323.     "__dummy__Object_Bank_Mjin_soul",
  1324.     "__dummy__Object_Bank_Mjin_wind",
  1325.     "__dummy__Object_Bank_Mjin_oka",
  1326.     "Object_Bank_F40_Obj",
  1327.     "Object_Bank_Po_Composer",
  1328.     "__dummy__Object_Bank_Warp2",
  1329.     "Object_Bank_Hata",
  1330.     "__dummy__Object_Bank_Bird",
  1331.     "Object_Bank_Wood02",
  1332.     "__dummy__Object_Bank_Lightbox",
  1333.     "__dummy__Object_Bank_Pu_box",
  1334.     "Object_Bank_Trap",
  1335.     "__dummy__Object_Bank_Vase",
  1336.     "__dummy__Object_Bank_Im",
  1337.     "__dummy__Object_Bank_Ta",
  1338.     "__dummy__Object_Bank_Tk",
  1339.     "__dummy__Object_Bank_Xc",
  1340.     "Object_Bank_Vm",
  1341.     "__dummy__Object_Bank_Bv",
  1342.     "__dummy__Object_Bank_efc_crystal_light",
  1343.     "__dummy__Object_Bank_efc_fire_ball",
  1344.     "__dummy__Object_Bank_Flash",
  1345.     "__dummy__Object_Bank_efc_lgt_shower",
  1346.     "Object_Bank_efc_star_field",
  1347.     "__dummy__Object_Bank_god_lgt",
  1348.     "__dummy__Object_Bank_light_ring",
  1349.     "__dummy__Object_Bank_triforce_spot",
  1350.     "__dummy__Object_Bank_Sd",
  1351.     "Object_Bank_Rd",
  1352.     "Object_Bank_Yukimura_Obj",
  1353.     "__dummy__Object_Bank_Heavy_Object",
  1354.     "__dummy__Object_Bank_Gnd",
  1355.     "__dummy__Object_Bank_Boss_Fd",
  1356.     "__dummy__Object_Bank_Du",
  1357.     "__dummy__Object_Bank_Fd",
  1358.     "__dummy__Object_Bank_medal",
  1359.     "Object_Bank_Horse_Link_Child",
  1360.     "__dummy__Object_Bank_Haka",
  1361.     "__dummy__Object_Bank_Ru1",
  1362.     "Object_Bank_Syokudai",
  1363.     "__dummy__Object_Bank_Boss_Fd2",
  1364.     "__dummy__Object_Bank_Dh",
  1365.     "__dummy__Object_Bank_Rl",
  1366.     "Object_Bank_efc_tw",
  1367.     "__dummy__Object_Bank_Demo_Tre_Lgt",
  1368.     "Object_Bank_Gi_Key",
  1369.     "Object_Bank_Mir_Ray",
  1370.     "Object_Bank_Ctower_Rot",
  1371.     "__dummy__Object_Bank_Gi_Jewel",
  1372.     "Object_Bank_Bdoor",
  1373.     "__dummy__Object_Bank_Shop_Tana",
  1374.     "__dummy__Object_Bank_Nb",
  1375.     "__dummy__Object_Bank_Mo",
  1376.     "Object_Bank_Sb",
  1377.     "Object_Bank_Gi_Melody",
  1378.     "Object_Bank_Gi_Heart",
  1379.     "Object_Bank_Gi_Compass",
  1380.     "Object_Bank_Gi_Bosskey",
  1381.     "__dummy__Object_Bank_Gi_Medal",
  1382.     "Object_Bank_Gi_Nuts",
  1383.     "__dummy__Object_Bank_Sa",
  1384.     "Object_Bank_Gi_Hearts",
  1385.     "Object_Bank_Gi_Arrowcase",
  1386.     "Object_Bank_Gi_Bombpouch",
  1387.     "Object_Bank_In",
  1388.     "__dummy__Object_Bank_Tr",
  1389.     "__dummy__Object_Bank_OE1s",
  1390.     "__dummy__Object_Bank_OE4s",
  1391.     "Object_Bank_OEs_anime",
  1392.     "Object_Bank_Gi_Bottle",
  1393.     "Object_Bank_Gi_Stick",
  1394.     "Object_Bank_Gi_Map",
  1395.     "Object_Bank_OF1d_Map",
  1396.     "Object_Bank_Ru2",
  1397.     "__dummy__Object_Bank_Gi_Shield_1",
  1398.     "Object_Bank_Gi_Magicpot",
  1399.     "Object_Bank_Gi_Bomb_1",
  1400.     "__dummy__Object_Bank_OF1s",
  1401.     "Object_Bank_Ma2",
  1402.     "Object_Bank_Gi_Purse",
  1403.     "__dummy__Object_Bank_Hni",
  1404.     "__dummy__Object_Bank_Tw",
  1405.     "Object_Bank_Rr",
  1406.     "__dummy__Object_Bank_Bxa",
  1407.     "__dummy__Object_Bank_Anubice",
  1408.     "__dummy__Object_Bank_Gi_Gerudo",
  1409.     "Object_Bank_Gi_Arrow",
  1410.     "Object_Bank_Gi_Bomb_2",
  1411.     "__dummy__Object_Bank_Gi_Egg",
  1412.     "__dummy__Object_Bank_Gi_Scale",
  1413.     "Object_Bank_Gi_Shield_2",
  1414.     "Object_Bank_Gi_Hookshot",
  1415.     "Object_Bank_Gi_Ocarina",
  1416.     "Object_Bank_Gi_Milk",
  1417.     "Object_Bank_Ma1",
  1418.     "__dummy__Object_Bank_Ganon",
  1419.     "__dummy__Object_Bank_Sst",
  1420.     "__dummy__Object_Bank_Go2",
  1421.     "Object_Bank_Ny",
  1422.     "Object_Bank_Fr",
  1423.     "__dummy__Object_Bank_Gi_Pachinko",
  1424.     "__dummy__Object_Bank_Gi_Boomerang",
  1425.     "Object_Bank_Gi_Bow",
  1426.     "Object_Bank_Gi_Glasses",
  1427.     "Object_Bank_Gi_Liquid",
  1428.     "Object_Bank_Ani",
  1429.     "Object_Bank_Gi_Shield_3",
  1430.     "__dummy__Object_Bank_Gi_Letter",
  1431.     "__dummy__Object_Bank_Gi_Clothes",
  1432.     "Object_Bank_Gi_Bean",
  1433.     "Object_Bank_Gi_Fish",
  1434.     "__dummy__Object_Bank_Gi_Saw",
  1435.     "__dummy__Object_Bank_Gi_Hammer",
  1436.     "__dummy__Object_Bank_Gi_Grass",
  1437.     "Object_Bank_Gi_Longsword",
  1438.     "__dummy__Object_Bank_Gate",
  1439.     "__dummy__Object_Bank_Md",
  1440.     "__dummy__Object_Bank_Km1",
  1441.     "__dummy__Object_Bank_Kw1",
  1442.     "Object_Bank_Zo",
  1443.     "__dummy__Object_Bank_Kzdd",
  1444.     "Object_Bank_Umajump",
  1445.     "__dummy__Object_Bank_Masterkokiri",
  1446.     "__dummy__Object_Bank_Masterkokirihead",
  1447.     "Object_Bank_Mastergolon",
  1448.     "Object_Bank_Masterzoora",
  1449.     "Object_Bank_Aob",
  1450.     "Object_Bank_Ik",
  1451.     "Object_Bank_Ahg",
  1452.     "Object_Bank_Cne",
  1453.     "__dummy__Object_Bank_Gi_Niwatori",
  1454.     "__dummy__Object_Bank_Skj",
  1455.     "Object_Bank_An3",
  1456.     "Object_Bank_Bji",
  1457.     "Object_Bank_Bba",
  1458.     "Object_Bank_An2",
  1459.     "__dummy__Object_Bank_Ds",
  1460.     "Object_Bank_An1",
  1461.     "Object_Bank_Boj",
  1462.     "Object_Bank_Fz",
  1463.     "Object_Bank_Bob",
  1464.     "Object_Bank_Ge1",
  1465.     "Object_Bank_Yabusame_Point",
  1466.     "__dummy__Object_Bank_Gi_Boots_2",
  1467.     "__dummy__Object_Bank_Gi_Seed",
  1468.     "__dummy__Object_Bank_Gnd_Magic",
  1469.     "__dummy__Object_Bank_D_Elevator",
  1470.     "Object_Bank_D_Hsblock",
  1471.     "Object_Bank_D_lift",
  1472.     "Object_Bank_Mamenoki",
  1473.     "Object_Bank_Goroiwa",
  1474.     "Object_Bank_Toryo",
  1475.     "Object_Bank_Daiku",
  1476.     "Object_Bank_Nwc",
  1477.     "Object_Bank_Gm",
  1478.     "Object_Bank_Ms",
  1479.     "Object_Bank_Hs",
  1480.     "__dummy__Object_Bank_Ingate",
  1481.     "Object_Bank_Lightswitch",
  1482.     "Object_Bank_Kusa",
  1483.     "Object_Bank_Tsubo",
  1484.     "__dummy__Object_Bank_Gi_Gloves",
  1485.     "__dummy__Object_Bank_Gi_Coin",
  1486.     "Object_Bank_Kanban",
  1487.     "Object_Bank_Owl",
  1488.     "Object_Bank_Mk",
  1489.     "Object_Bank_Fu",
  1490.     "Object_Bank_Gi_Ki_Tan_Mask",
  1491.     "__dummy__Object_Bank_Gi_Redead_Mask",
  1492.     "Object_Bank_Gi_Skj_Mask",
  1493.     "Object_Bank_Gi_Rabit_Mask",
  1494.     "Object_Bank_Gi_Truth_Mask",
  1495.     "__dummy__Object_Bank_Siofuki",
  1496.     "Object_Bank_Stream",
  1497.     "Object_Bank_Mm",
  1498.     "__dummy__Object_Bank_Fa",
  1499.     "__dummy__Object_Bank_Os",
  1500.     "__dummy__Object_Bank_Gi_Eye_Lotion",
  1501.     "__dummy__Object_Bank_Gi_Powder",
  1502.     "__dummy__Object_Bank_Gi_Mushroom",
  1503.     "__dummy__Object_Bank_Gi_Ticketstone",
  1504.     "__dummy__Object_Bank_Gi_Brokensword",
  1505.     "Object_Bank_Js",
  1506.     "Object_Bank_Cs",
  1507.     "__dummy__Object_Bank_Gi_Prescription",
  1508.     "__dummy__Object_Bank_Gi_Bracelet",
  1509.     "Object_Bank_Gi_Soldout",
  1510.     "__dummy__Object_Bank_Gi_Frog",
  1511.     "Object_Bank_Mag",
  1512.     "__dummy__Object_Bank_Efc_Erupc",
  1513.     "__dummy__Object_Bank_Zl2_Anime1",
  1514.     "__dummy__Object_Bank_Zl2_Anime2",
  1515.     "Object_Bank_Gi_Golonmask",
  1516.     "Object_Bank_Gi_Zoramask",
  1517.     "__dummy__Object_Bank_Gi_Gerudomask",
  1518.     "__dummy__Object_Bank_Ganon2",
  1519.     "Object_Bank_Ka",
  1520.     "__dummy__Object_Bank_Ts",
  1521.     "Object_Bank_Zg",
  1522.     "__dummy__Object_Bank_Gi_Hoverboots",
  1523.     "Object_Bank_Gi_M_Arrow",
  1524.     "Object_Bank_Ds2",
  1525.     "__dummy__Object_Bank_Ec",
  1526.     "Object_Bank_Fish",
  1527.     "Object_Bank_Gi_Sutaru",
  1528.     "__dummy__Object_Bank_Gi_Goddess",
  1529.     "Object_Bank_Ssh",
  1530.     "Object_Bank_Bigslime",
  1531.     "Object_Bank_Bg",
  1532.     "Object_Bank_Bombiwa",
  1533.     "Object_Bank_Hintnuts",
  1534.     "Object_Bank_Rs",
  1535.     "__dummy__Object_Bank_Spot00_Break",
  1536.     "Object_Bank_Gla",
  1537.     "__dummy__Object_Bank_Shopnuts",
  1538.     "Object_Bank_Gelb",
  1539.     "__dummy__Object_Bank_Gr",
  1540.     "Object_Bank_Dog",
  1541.     "Object_Bank_Kibako2",
  1542.     "Object_Bank_Dns",
  1543.     "Object_Bank_Dnk",
  1544.     "__dummy__Object_Bank_Gi_Fire",
  1545.     "Object_Bank_Gi_Insect",
  1546.     "__dummy__Object_Bank_Gi_Butterfly",
  1547.     "Object_Bank_Gi_Ghost",
  1548.     "Object_Bank_Gi_Soul",
  1549.     "__dummy__Object_Bank_Gi_Dekupouch",
  1550.     "__dummy__Object_Bank_Ganon_Anime1",
  1551.     "__dummy__Object_Bank_Ganon_Anime2",
  1552.     "__dummy__Object_Bank_Ganon_Anime3",
  1553.     "Object_Bank_Gi_Rupy",
  1554.     "Object_Bank_Mu",
  1555.     "Object_Bank_Wf",
  1556.     "Object_Bank_Skb",
  1557.     "Object_Bank_Gs",
  1558.     "Object_Bank_Ps",
  1559.     "Object_Bank_Bwall",
  1560.     "Object_Bank_Cow",
  1561.     "__dummy__Object_Bank_Cob",
  1562.     "Object_Bank_Gi_Sword_1",
  1563.     "__dummy__Object_Bank_Door_Killer",
  1564.     "__dummy__Object_Bank_Timeblock",
  1565.     "Object_Bank_Zl4",
  1566.     "Object_Bank_Link_Goron",
  1567.     "Object_Bank_Link_Zora",
  1568.     "Object_Bank_Grasshopper",
  1569.     "Object_Bank_Boyo",
  1570.     "__dummy__Object_Bank_Fence",
  1571.     "__dummy__Object_Bank_Hampost",
  1572.     "__dummy__Object_Bank_Swfl",
  1573.     "Object_Bank_Fire_wall",
  1574.     "Object_Bank_Link_Nuts",
  1575.     "Object_Bank_Jso",
  1576.     "Object_Bank_Knight",
  1577.     "Object_Bank_Icicle",
  1578.     "Object_Bank_Spdweb",
  1579.     "__dummy__Object_Bank_Yh",
  1580.     "Object_Bank_Boss01",
  1581.     "Object_Bank_Boss02",
  1582.     "Object_Bank_Boss03",
  1583.     "Object_Bank_Boss04",
  1584.     "Object_Bank_Boss05",
  1585.     "Object_Bank_Boss06",
  1586.     "Object_Bank_Boss07",
  1587.     "Object_Bank_Raf",
  1588.     "Object_Bank_Funen",
  1589.     "Object_Bank_Raillift",
  1590.     "Object_Bank_Numa_Obj",
  1591.     "Object_Bank_Flowerpot",
  1592.     "Object_Bank_Spinyroll",
  1593.     "Object_Bank_Ice_Block",
  1594.     "__dummy__Object_Bank_Dblue_Room",
  1595.     "Object_Bank_Op_map",
  1596.     "Object_Bank_Slime",
  1597.     "Object_Bank_Pr",
  1598.     "Object_Bank_F52_Obj",
  1599.     "Object_Bank_F53_Obj",
  1600.     "__dummy__Object_Bank_Yama_Obj",
  1601.     "Object_Bank_Kibako",
  1602.     "Object_Bank_Tsg",
  1603.     "Object_Bank_Gmo",
  1604.     "Object_Bank_Bat",
  1605.     "Object_Bank_SekihiL",
  1606.     "Object_Bank_SekihiG",
  1607.     "Object_Bank_SekihiN",
  1608.     "Object_Bank_SekihiZ",
  1609.     "__dummy__Object_Bank_Dnc",
  1610.     "Object_Bank_Wiz",
  1611.     "Object_Bank_Ladder",
  1612.     "Object_Bank_Mkk",
  1613.     "__dummy__Object_Bank_Skje",
  1614.     "__dummy__Object_Bank_Stain",
  1615.     "__dummy__Object_Bank_M_Stone",
  1616.     "Object_Bank_Keikoku_Obj",
  1617.     "Object_Bank_Sichitai_Obj",
  1618.     "Object_Bank_Dekucity_Ana_Obj",
  1619.     "Object_Bank_Rat",
  1620.     "Object_Bank_Water_Effect",
  1621.     "__dummy__Object_Bank_TimeTime",
  1622.     "Object_Bank_Dblue_Object",
  1623.     "Object_Bank_Bal",
  1624.     "Object_Bank_Warp_Uzu",
  1625.     "Object_Bank_Driftice",
  1626.     "Object_Bank_Fall",
  1627.     "Object_Bank_Hanareyama_Obj",
  1628.     "Object_Bank_Crace_Object",
  1629.     "Object_Bank_Dno",
  1630.     "Object_Bank_Obj_Moguri",
  1631.     "Object_Bank_Eg",
  1632.     "Object_Bank_Tru",
  1633.     "Object_Bank_Trt",
  1634.     "Object_Bank_Hakugin_Obj",
  1635.     "Object_Bank_Horse_Game_Check",
  1636.     "Object_Bank_Stk",
  1637.     "__dummy__Object_Bank_Hakugin_051",
  1638.     "__dummy__Object_Bank_Hakugin_081",
  1639.     "Object_Bank_Mnk",
  1640.     "Object_Bank_Gi_Bottle_Red",
  1641.     "Object_Bank_Tokei_Tobira",
  1642.     "Object_Bank_Az",
  1643.     "Object_Bank_Twig",
  1644.     "Object_Bank_Dekucity_Obj",
  1645.     "Object_Bank_Po_Fusen",
  1646.     "Object_Bank_Racetsubo",
  1647.     "Object_Bank_Ha",
  1648.     "Object_Bank_Bigokuta",
  1649.     "Object_Bank_Open_Obj",
  1650.     "Object_Bank_Fu_Kaiten",
  1651.     "Object_Bank_Fu_Mato",
  1652.     "Object_Bank_Mtoride",
  1653.     "Object_Bank_Osn",
  1654.     "Object_Bank_Tokei_Step",
  1655.     "Object_Bank_Lotus",
  1656.     "Object_Bank_Tl",
  1657.     "Object_Bank_Dkjail_Obj",
  1658.     "Object_Bank_Visiblock",
  1659.     "Object_Bank_Tsn",
  1660.     "Object_Bank_Ds2n",
  1661.     "Object_Bank_Fsn",
  1662.     "Object_Bank_Shn",
  1663.     "Object_Bank_Bigicicle",
  1664.     "Object_Bank_Gi_Bottle_15",
  1665.     "Object_Bank_Tk",
  1666.     "Object_Bank_Market_Obj",
  1667.     "Object_Bank_Gi_Moon_Stone",
  1668.     "Object_Bank_Gi_Kenrisyo",
  1669.     "Object_Bank_Lightblock",
  1670.     "Object_Bank_Takaraya_Objects",
  1671.     "Object_Bank_Wdhand",
  1672.     "Object_Bank_Sdn",
  1673.     "Object_Bank_Snowwd",
  1674.     "Object_Bank_Giant",
  1675.     "Object_Bank_Comb",
  1676.     "Object_Bank_Hana",
  1677.     "Object_Bank_Boss_Hakugin",
  1678.     "Object_Bank_Meganeana_Obj",
  1679.     "Object_Bank_Gi_Nutsmask",
  1680.     "Object_Bank_Stk2",
  1681.     "Object_Bank_Spot11_Obj",
  1682.     "Object_Bank_Danpei_Object",
  1683.     "Object_Bank_Dhouse",
  1684.     "Object_Bank_Hakaisi",
  1685.     "Object_Bank_Poh",
  1686.     "Object_Bank_Snowman",
  1687.     "Object_Bank_Po_Sisters",
  1688.     "Object_Bank_Pp",
  1689.     "Object_Bank_Goronswitch",
  1690.     "Object_Bank_Delf",
  1691.     "Object_Bank_Botihasira",
  1692.     "Object_Bank_Gi_Bigbomb",
  1693.     "Object_Bank_Pst",
  1694.     "Object_Bank_Bsmask",
  1695.     "Object_Bank_Spidertent",
  1696.     "Object_Bank_Zoraegg",
  1697.     "Object_Bank_Kbt",
  1698.     "Object_Bank_Gg",
  1699.     "Object_Bank_Maruta",
  1700.     "Object_Bank_Ghaka",
  1701.     "Object_Bank_Oyu",
  1702.     "Object_Bank_Dnq",
  1703.     "Object_Bank_Dai",
  1704.     "Object_Bank_Kgy",
  1705.     "Object_Bank_Fb",
  1706.     "Object_Bank_Taisou",
  1707.     "Object_Bank_Link_Mask_Bu_san",
  1708.     "Object_Bank_Link_Mask_Ki_Tan",
  1709.     "Object_Bank_Link_Mask_Rabit",
  1710.     "Object_Bank_Link_Mask_Skj",
  1711.     "Object_Bank_Link_Mask_Bakuretu",
  1712.     "Object_Bank_Link_Mask_Truth",
  1713.     "Object_Bank_Gk",
  1714.     "Object_Bank_Haka_Obj",
  1715.     "Object_Bank_Link_Mask_Goron",
  1716.     "Object_Bank_Link_Mask_Zora",
  1717.     "Object_Bank_Link_Mask_Nuts",
  1718.     "Object_Bank_Link_Mask_Boy",
  1719.     "Object_Bank_Dnt",
  1720.     "Object_Bank_Yukiyama",
  1721.     "Object_Bank_Icefloe",
  1722.     "Object_Bank_Gi_Gold_Dust",
  1723.     "Object_Bank_Gi_Bottle_16",
  1724.     "Object_Bank_Gi_Bottle_22",
  1725.     "Object_Bank_Bee",
  1726.     "Object_Bank_Ot",
  1727.     "Object_Bank_Utubo",
  1728.     "Object_Bank_Dora",
  1729.     "Object_Bank_Gi_Loach",
  1730.     "Object_Bank_Gi_Sea_Horse",
  1731.     "Object_Bank_Bigpo",
  1732.     "Object_Bank_Hariko",
  1733.     "Object_Bank_Dnj",
  1734.     "Object_Bank_Sinkai_Kabe",
  1735.     "Object_Bank_Kin2_Obj",
  1736.     "Object_Bank_Ishi",
  1737.     "Object_Bank_Hakugin_Demo",
  1738.     "Object_Bank_Jg",
  1739.     "Object_Bank_Gi_Sword_2",
  1740.     "Object_Bank_Gi_Sword_3",
  1741.     "Object_Bank_Gi_Sword_4",
  1742.     "Object_Bank_Obj_Um",
  1743.     "Object_Bank_Link_Mask_Gibudo",
  1744.     "Object_Bank_Link_Mask_Json",
  1745.     "Object_Bank_Link_Mask_Kerfay",
  1746.     "Object_Bank_Link_Mask_Bigelf",
  1747.     "Object_Bank_Rb",
  1748.     "Object_Bank_Mbar_Obj",
  1749.     "Object_Bank_Ikana_Obj",
  1750.     "Object_Bank_Kz",
  1751.     "Object_Bank_Tokei_Turret",
  1752.     "Object_Bank_Zog",
  1753.     "Object_Bank_Rotlift",
  1754.     "Object_Bank_Posthouse_Obj",
  1755.     "Object_Bank_Gi_Jsonmask",
  1756.     "Object_Bank_Gi_Bigelfmask",
  1757.     "Object_Bank_Gi_Gibudomask",
  1758.     "Object_Bank_Inibs_Object",
  1759.     "Object_Bank_Tree",
  1760.     "Object_Bank_Kaizoku_Obj",
  1761.     "Object_Bank_Gi_Inn_Key",
  1762.     "Object_Bank_Gi_C_Letter",
  1763.     "Object_Bank_Zob",
  1764.     "Object_Bank_Milkbar",
  1765.     "Object_Bank_Dmask",
  1766.     "Object_Bank_Link_Mask_Kyojin",
  1767.     "Object_Bank_Gi_Pendant",
  1768.     "Object_Bank_Zod",
  1769.     "Object_Bank_Kumo30",
  1770.     "Object_Bank_Yasi",
  1771.     "Object_Bank_Link_Mask_Romerny",
  1772.     "Object_Bank_Tanron1",
  1773.     "Object_Bank_Tanron2",
  1774.     "Object_Bank_Tanron3",
  1775.     "Object_Bank_Gi_Mushroom2",
  1776.     "Object_Bank_Chan",
  1777.     "Object_Bank_Gi_Romanimask",
  1778.     "Object_Bank_Zos",
  1779.     "Object_Bank_Link_Mask_Posthat",
  1780.     "Object_Bank_F40_Switch",
  1781.     "Object_Bank_Lod_Moon",
  1782.     "Object_Bank_Tro",
  1783.     "Object_Bank_Gi_Posthat",
  1784.     "Object_Bank_Gi_Giantmask",
  1785.     "Object_Bank_Gi_Syatoromani",
  1786.     "Object_Bank_Gi_Picturebox",
  1787.     "Object_Bank_Kamejima",
  1788.     "Object_Bank_Hg",
  1789.     "Object_Bank_Zov",
  1790.     "Object_Bank_Hgdr",
  1791.     "__dummy__Object_Bank_Cs2",
  1792.     "__dummy__Object_Bank_Cs3",
  1793.     "__dummy__Object_Bank_Cs4",
  1794.     "Object_Bank_Dor01",
  1795.     "Object_Bank_Dor02",
  1796.     "Object_Bank_Dor03",
  1797.     "Object_Bank_Dor04",
  1798.     "Object_Bank_Last_Obj",
  1799.     "Object_Bank_Redead_Obj",
  1800.     "Object_Bank_Ikninside",
  1801.     "Object_Bank_Iknv_Obj",
  1802.     "Object_Bank_Pamera",
  1803.     "Object_Bank_HsStump",
  1804.     "Object_Bank_Zm",
  1805.     "Object_Bank_Big_Fwall",
  1806.     "Object_Bank_Secom_Obj",
  1807.     "Object_Bank_Hunsui",
  1808.     "Object_Bank_Uch",
  1809.     "Object_Bank_Tanron4",
  1810.     "Object_Bank_Tanron5",
  1811.     "Object_Bank_Dt",
  1812.     "Object_Bank_Gi_Yusyamask",
  1813.     "Object_Bank_Cha",
  1814.     "Object_Bank_Dinner",
  1815.     "Object_Bank_Gi_Sokutatsu",
  1816.     "Object_Bank_Lastday",
  1817.     "Object_Bank_Bai",
  1818.     "Object_Bank_In2",
  1819.     "Object_Bank_Ikndemo",
  1820.     "Object_Bank_Yb",
  1821.     "Object_Bank_Rz",
  1822.     "Object_Bank_Link_Mask_Zacho",
  1823.     "Object_Bank_Gi_Fieldmap",
  1824.     "Object_Bank_Link_Mask_Stone",
  1825.     "Object_Bank_Bjt",
  1826.     "Object_Bank_Taru",
  1827.     "Object_Bank_Moonston",
  1828.     "Object_Bank_Link_Mask_Bree",
  1829.     "Object_Bank_Gi_Techo",
  1830.     "Object_Bank_Gi_Stone_Mask",
  1831.     "Object_Bank_Zoraband",
  1832.     "Object_Bank_Kepn_Koya",
  1833.     "Object_Bank_Usiyane",
  1834.     "Object_Bank_Gi_Kerfay_Mask",
  1835.     "Object_Bank_Gi_Zacho_Mask",
  1836.     "Object_Bank_Gi_Bree_Mask",
  1837.     "Object_Bank_Nnh",
  1838.     "Object_Bank_Link_Mask_Gero",
  1839.     "Object_Bank_Link_Mask_Yofukasi",
  1840.     "Object_Bank_Link_Mask_Meoto",
  1841.     "Object_Bank_Link_Mask_Dancer",
  1842.     "Object_Bank_Kzsaku",
  1843.     "Object_Bank_Obj_Milk_Bin",
  1844.     "Object_Bank_Random_Obj",
  1845.     "Object_Bank_Kujiya",
  1846.     "Object_Bank_Kitan",
  1847.     "Object_Bank_Gi_Yofukashi_Mask",
  1848.     "Object_Bank_Gi_Ge_Ro_Mask",
  1849.     "Object_Bank_Astr_Obj",
  1850.     "Object_Bank_Bsb",
  1851.     "Object_Bank_Fall2",
  1852.     "Object_Bank_Sth",
  1853.     "Object_Bank_Gi_Sun_Mask",
  1854.     "Object_Bank_Smtower",
  1855.     "Object_Bank_Gi_Bakuretsu_Mask",
  1856.     "Object_Bank_Yado_Obj",
  1857.     "Object_Bank_Syoten",
  1858.     "Object_Bank_Moonend",
  1859.     "Object_Bank_Ob",
  1860.     "Object_Bank_Gi_Fairy",
  1861.     "Object_Bank_Obj_Danpeilift",
  1862.     "Object_Bank_Wdor01",
  1863.     "Object_Bank_Wdor02",
  1864.     "Object_Bank_Wdor03",
  1865.     "Object_Bank_Stk3",
  1866.     "Object_Bank_Kinsta1_Obj",
  1867.     "Object_Bank_Kinsta2_Obj",
  1868.     "Object_Bank_Bh",
  1869.     "Object_Bank_Wdor04",
  1870.     "Object_Bank_Wdor05",
  1871.     "Object_Bank_Gi_Dancer_Mask",
  1872.     "Object_Bank_Gi_Buusan_Mask",
  1873.     "Object_Bank_Lbfshot",
  1874.     "Object_Bank_Fusen",
  1875.     "Object_Bank_Ending_Obj",
  1876.     "Object_Bank_Gi_Meoto_Mask"};
  1877.     int setup[0x80]={0},offset2,offset3,object_list=0;
  1878.     unsigned char count=0, count2, object_count=0;
  1879.     int offset, loop, loop2, loop3;
  1880.     unsigned short day;
  1881.     if(read32(RAM,0x3C)==0x5A534A00)
  1882.     {
  1883.         offset=read32(RAM,0xC76510+func*0x10);
  1884.     }
  1885.     else
  1886.     {
  1887.         offset=read32(RAM,0xBA0BB0+func*0x14);
  1888.         if(func>=0x6E){return;}
  1889.     }
  1890.     int scene_depth=offset;
  1891.     int start_offset2=offset;
  1892.     scene_start=offset;
  1893.     exits(RAM,start_offset2,0,0,0,0);
  1894.     while(RAM[scene_depth]!=4)
  1895.     {
  1896.         scene_depth+=8;
  1897.     }
  1898.     unsigned char rooms=RAM[scene_depth+1];
  1899.     offset+=read32(RAM,scene_depth+4)&0xffffff;
  1900.     pick:
  1901.     if(rooms>1)
  1902.     {
  1903.         printf("Pick a room (0 - %d)\n?",rooms-1);
  1904.         scanf("%d",&scene_depth);
  1905.         if(scene_depth>=rooms){goto pick;}
  1906.     }
  1907.     else
  1908.     {
  1909.         scene_depth=0;
  1910.     }
  1911.     offset=read32(RAM,(int)(offset+scene_depth*8));
  1912.     int start_offset=offset;
  1913.     rooms=0;
  1914.     scan_again:
  1915.     if(count>0)
  1916.     {
  1917.         count=0;
  1918.         loop=0;
  1919.         exits(RAM,start_offset2,0,0,0,0);
  1920.     }
  1921.     scene_depth=offset;
  1922.     while(RAM[scene_depth]!=0x14)
  1923.     {
  1924.         switch(RAM[scene_depth])
  1925.         {
  1926.             case 0x01:
  1927.                 count2=RAM[scene_depth+1];
  1928.                 offset3=read32(RAM,scene_depth+4)&0xffffff;
  1929.                 offset3+=start_offset;
  1930.                 break;
  1931.             case 0x0B:
  1932.                 object_count=RAM[scene_depth+1];
  1933.                 object_list=read32(RAM,scene_depth+4)&0xffffff;
  1934.                 object_list+=start_offset;
  1935.                 break;
  1936.             case 0x18:
  1937.                 offset2=0xC+(read32(RAM,scene_depth+4)&0xffffff);
  1938.                 if(RAM[0x3f]==0)
  1939.                 {
  1940.                     offset2=read32(RAM,scene_depth+4)&0xffffff;
  1941.                 }
  1942.                 offset2+=offset;
  1943.                 while(rooms<4)
  1944.                 {
  1945.                     rooms=RAM[offset2];
  1946.                     if(rooms!=3){break;}
  1947.                     setup[count]=(read32(RAM,offset2)&0xffffff)+offset;
  1948.                     count+=1;
  1949.                     offset2+=4;
  1950.                 }
  1951.                 break;
  1952.         }
  1953.         scene_depth+=8;
  1954.     }
  1955.     pick2:
  1956.     if(count>0)
  1957.     {
  1958.         printf("Use a setup? (0 - %d) (Enter %d to refuse!)\n",(count-1),count);
  1959.         scanf("%d",&scene_depth);
  1960.     }
  1961.     if(count>0&&scene_depth>=(count+1)){goto pick2;}
  1962.     if(count>0&&scene_depth<count)
  1963.     {
  1964.         offset=setup[scene_depth];
  1965.         loop=start_offset2;
  1966.         while(RAM[loop]!=0x14)
  1967.         {
  1968.             if(RAM[loop]==0x18)
  1969.             {
  1970.                 offset2=0xC+(read32(RAM,loop+4)&0xffffff)+scene_depth*4;
  1971.                 if(RAM[0x3f]==1)
  1972.                 {
  1973.                     offset2=(read32(RAM,loop+4)&0xffffff)+scene_depth*4;
  1974.                 }
  1975.                 offset2+=start_offset2;
  1976.                 start_offset2+=read32(RAM,offset2)&0xffffff;
  1977.                 break;
  1978.             }
  1979.             loop+=8;
  1980.         }
  1981.         goto scan_again;
  1982.     }
  1983.     printf("%08X (%08X)\n",start_offset2-scene_start,start_offset2);
  1984.     doors(RAM,DEMO,start_offset2,zenum_add,zenum_sym);
  1985.     exits(RAM,start_offset2,2,0,0,0);
  1986.     if(read32(RAM,0x3C)==0x5A534A00)
  1987.     {
  1988.         goto majora;
  1989.     }
  1990.     for(scene_depth=0;scene_depth<count2;scene_depth+=1)
  1991.     {
  1992.         for(offset=0;offset<0x1AD;offset+=1)
  1993.         {
  1994.             if((unsigned short)((RAM[offset3+scene_depth*16]<<8)|RAM[1+offset3+scene_depth*16])==zenum_add[offset])
  1995.             {
  1996.                 printf("%08X %s\n",(offset3+scene_depth*16),zenum_sym[offset]);
  1997.                 switch(zenum_add[offset])
  1998.                 {
  1999.                     case 0x39:
  2000.                         if(RAM[15+offset3+scene_depth*16]==9||RAM[15+offset3+scene_depth*16]==10)
  2001.                         {
  2002.                             message_set(RAM,0x300+RAM[14+offset3+scene_depth*16]);
  2003.                         }
  2004.                         break;
  2005.                     case 0x141:
  2006.                         message_set(RAM,0x300+RAM[15+offset3+scene_depth*16]);
  2007.                         break;
  2008.                     case 0x11B:
  2009.                         message_set(RAM,0x100+RAM[15+offset3+scene_depth*16]);
  2010.                         break;
  2011.                     case 0x185:
  2012.                         message_set(RAM,0x200+(unsigned char)((RAM[14+offset3+scene_depth*16]<<2)|(RAM[15+offset3+scene_depth*16]>>6)));
  2013.                         break;
  2014.                     case 0x1B9:
  2015.                         message_set(RAM,0x400+RAM[15+offset3+scene_depth*16]);
  2016.                 }
  2017.                 break;
  2018.             }
  2019.         }
  2020.     }
  2021.     for(loop=object_list;loop<(object_list+object_count*2);loop+=2)
  2022.     {
  2023.         loop2=read32(RAM,0xB9E6C8+(unsigned short)((RAM[loop]<<8)|RAM[loop+1])*8);
  2024.         for(loop3=0x12F70;loop3<0x18F30;loop3+=0x10)
  2025.         {
  2026.             if(read32(RAM,loop3)==loop2)
  2027.             {
  2028.                 printf("%08X %s\n",loop,pointers[(loop3-0x12F70)/0x10]);
  2029.                 break;
  2030.             }
  2031.         }
  2032.     }
  2033.     return;
  2034.     majora:
  2035.     for(scene_depth=0;scene_depth<count2;scene_depth+=1)
  2036.     {
  2037.         for(offset=0x1AD;offset<0x3EC;offset+=1)
  2038.         {
  2039.             if((unsigned short)(((RAM[offset3+scene_depth*16]&0xF)<<8)|RAM[1+offset3+scene_depth*16])==zenum_add[offset])
  2040.             {
  2041.                 if(zenum_add[offset]!=0xEF)
  2042.                 {
  2043.                     day=(unsigned short)(((RAM[9+offset3+scene_depth*16]&7)<<7)|(RAM[13+offset3+scene_depth*16]&0x7F));
  2044.                     printf("%08X ",(offset3+scene_depth*16));
  2045.                     if((day&(unsigned short)(1<<9))==(unsigned short)(1<<9))
  2046.                     {
  2047.                         printf("Day 0 | ");
  2048.                     }
  2049.                     if((day&(unsigned short)(1<<8))==(unsigned short)(1<<8))
  2050.                     {
  2051.                         printf("Night 0 | ");
  2052.                     }
  2053.                     if((day&(unsigned short)(1<<7))==(unsigned short)(1<<7))
  2054.                     {
  2055.                         printf("Day 1 | ");
  2056.                     }
  2057.                     if((day&(unsigned short)(1<<6))==(unsigned short)(1<<6))
  2058.                     {
  2059.                         printf("Night 1 | ");
  2060.                     }
  2061.                     if((day&(unsigned short)(1<<5))==(unsigned short)(1<<5))
  2062.                     {
  2063.                         printf("Day 2 | ");
  2064.                     }
  2065.                     if((day&(unsigned short)(1<<4))==(unsigned short)(1<<4))
  2066.                     {
  2067.                         printf("Night 2 | ");
  2068.                     }
  2069.                     if((day&(unsigned short)(1<<3))==(unsigned short)(1<<3))
  2070.                     {
  2071.                         printf("Day 3 | ");
  2072.                     }
  2073.                     if((day&(unsigned short)(1<<2))==(unsigned short)(1<<2))
  2074.                     {
  2075.                         printf("Night 3 | ");
  2076.                     }
  2077.                     if((day&(unsigned short)(1<<1))==(unsigned short)(1<<1))
  2078.                     {
  2079.                         printf("Day 4 | ");
  2080.                     }
  2081.                     if((day&1)==1)
  2082.                     {
  2083.                         printf("Night 4 ");
  2084.                     }
  2085.                     printf("%s\n",zenum_sym[offset]);
  2086.                 }
  2087.                 switch(zenum_add[offset])
  2088.                 {
  2089.                     case 0x26:
  2090.                         if(RAM[15+offset3+scene_depth*16]==9||RAM[15+offset3+scene_depth*16]==10)
  2091.                         {
  2092.                             message_set(DEMO,0x300+RAM[14+offset3+scene_depth*16]);
  2093.                         }
  2094.                         break;
  2095.                     case 0xA8:
  2096.                         message_set(DEMO,0x300+(unsigned short)((RAM[14+offset3+scene_depth*16]<<8)|RAM[15+offset3+scene_depth*16]));
  2097.                         break;
  2098.                     case 0xEF:
  2099.                         printf("%08X En_Gs ",(offset3+scene_depth*16));
  2100.                         //printf("GOSSIP STONE\n");
  2101.                         if((RAM[14+offset3+scene_depth*16]&0xF0)==0)
  2102.                         {
  2103.                             printf("(ENGS_0)\n");
  2104.                             message_set(DEMO,0x20D3+(RAM[15+offset3+scene_depth*16]&0x1F));
  2105.                         }
  2106.                         if((RAM[14+offset3+scene_depth*16]&0xF0)==0x10)
  2107.                         {
  2108.                             printf("(ENGS_1)\n");
  2109.                             message_set(DEMO,0x20F3+(RAM[15+offset3+scene_depth*16]&0x1F));
  2110.                         }
  2111.                         if((RAM[14+offset3+scene_depth*16]&0xF0)==0x20)
  2112.                         {
  2113.                             printf("(ENGS_2)\n");
  2114.                             message_set(DEMO,0x20F7+(RAM[15+offset3+scene_depth*16]&0x1F));
  2115.                         }
  2116.                         if((RAM[14+offset3+scene_depth*16]&0xF0)==0x30)
  2117.                         {
  2118.                             printf("(ENGS_3)\n");
  2119.                             message_set(DEMO,0x20B0+(RAM[15+offset3+scene_depth*16]&0x1F));
  2120.                         }
  2121.                         break;
  2122.                     case 0x146:
  2123.                         message_set(DEMO,RAM[15+offset3+scene_depth*16]);
  2124.                         break;
  2125.                     case 0x1D7:
  2126.                         message_set(DEMO,RAM[15+offset3+scene_depth*16]);
  2127.                         break;
  2128.                     case 0x261:
  2129.                         message_set(DEMO,0x1C00+(RAM[15+offset3+scene_depth*16]&0x3F));
  2130.                         break;
  2131.                 }
  2132.                 break;
  2133.             }
  2134.         }
  2135.     }
  2136.     for(loop=object_list;loop<(object_list+object_count*2);loop+=2)
  2137.     {
  2138.         printf("%08X %s\n",loop,objects[(unsigned short)((RAM[loop]<<8)|RAM[loop+1])]);
  2139.     }
  2140. }
  2141.  
  2142. int ovl_funcs[4]={0}, ovl_tracker;
  2143.  
  2144. int main(int argc, char **argv)
  2145. {
  2146.     const char names[32][3]=
  2147.     {
  2148.         "r0", "at", "v0", "v1",
  2149.         "a0", "a1", "a2", "a3",
  2150.         "t0", "t1", "t2", "t3",
  2151.         "t4", "t5", "t6", "t7",
  2152.         "s0", "s1", "s2", "s3",
  2153.         "s4", "s5", "s6", "s7",
  2154.         "t8", "t9", "k0", "k1",
  2155.         "gp", "sp", "fp", "ra"
  2156.     };
  2157.     char choice[2], filename[9], code[5]={0};
  2158.     FILE *ROM=fopen(argv[1],"rb");
  2159.     unsigned int CPU[32]={0}, inst=0, tgt;
  2160.     int addr_db[8192],base[2]={0x1000, 0x738C0},num=0,func_end=0,sum=0,addr,func,pc,loop;
  2161.     int zenum_add[8192],prev_tgt=0,znum=0,add,ext; //426 MM
  2162.     char LUIWATCH[32]={0},symb[64],symb_db[8192][64],zenum_sym[8192][128],actor[33],mode=CART;
  2163.     fseek(ROM,0,SEEK_END);
  2164.     int end=ftell(ROM);
  2165.     fseek(ROM,0,SEEK_SET);
  2166.     unsigned char *RAM=malloc(end);
  2167.     fread(RAM,1,end,ROM);
  2168.     fclose(ROM);
  2169.     FILE *ROM2=fopen("rom_out_mm_preview.z64","rb");
  2170.     fseek(ROM2,0,SEEK_END);
  2171.     end=ftell(ROM2);
  2172.     fseek(ROM2,0,SEEK_SET);
  2173.     unsigned char *DEMO=malloc(end);
  2174.     fread(DEMO,1,end,ROM2);
  2175.     fclose(ROM2);
  2176.     if(read32(RAM,0x3C)==0x5A4C450F)
  2177.     {
  2178.         RAM[0xB8D721]=0xBC;RAM[0xB8D722]=0xFA;RAM[0xB8D723]=0xC0;
  2179.         RAM[0xB8D725]=0xBD;RAM[0xB8D726]=0x2B;RAM[0xB8D727]=0x20;
  2180.         RAM[0xB8D729]=0x80;RAM[0xB8D72A]=0x0B;RAM[0xB8D72B]=0x90;
  2181.  
  2182.         RAM[0xB8D461]=0xBC;RAM[0xB8D462]=0xEF;RAM[0xB8D463]=0x30;
  2183.         RAM[0xB8D465]=0xBC;RAM[0xB8D466]=0xFA;RAM[0xB8D467]=0xC0;
  2184.         RAM[0xB8D469]=0x80;
  2185.  
  2186.         RAM[0xB8D4A1]=0xBD;RAM[0xB8D4A2]=0x2B;RAM[0xB8D4A3]=0x20;
  2187.         RAM[0xB8D4A5]=0xBD;RAM[0xB8D4A6]=0x2C;RAM[0xB8D4A7]=0x70;
  2188.         RAM[0xB8D4A9]=0x80;RAM[0xB8D4AA]=0x3B;RAM[0xB8D4AB]=0xF0;
  2189.  
  2190.         RAM[0xB8D4E1]=0xBD;RAM[0xB8D4E2]=0x2C;RAM[0xB8D4E3]=0x70;
  2191.         RAM[0xB8D4E5]=0xBE;RAM[0xB8D4E6]=0x27;RAM[0xB8D4E7]=0x30;
  2192.         RAM[0xB8D4E9]=0x80;RAM[0xB8D4EA]=0x3D;RAM[0xB8D4EB]=0x40;
  2193.  
  2194.         RAM[0xB8D501]=0xC2;RAM[0xB8D502]=0x79;RAM[0xB8D503]=0x40;
  2195.         RAM[0xB8D505]=0xC2;RAM[0xB8D506]=0xE4;RAM[0xB8D507]=0x20;
  2196.         RAM[0xB8D509]=0x85;RAM[0xB8D50A]=0x8B;RAM[0xB8D50B]=0x70;
  2197.  
  2198.         RAM[0xB8D6E1]=0xBE;RAM[0xB8D6E2]=0x27;RAM[0xB8D6E3]=0x30;
  2199.         RAM[0xB8D6E5]=0xC0;RAM[0xB8D6E6]=0x10;RAM[0xB8D6E7]=0xB0;
  2200.         RAM[0xB8D6E9]=0x81;RAM[0xB8D6EA]=0x38;RAM[0xB8D6EB]=0x20;
  2201.  
  2202.         RAM[0xB8D441]=0xC0;RAM[0xB8D442]=0x10;RAM[0xB8D443]=0xB0;
  2203.         RAM[0xB8D445]=0xC2;RAM[0xB8D446]=0x79;RAM[0xB8D447]=0x40;
  2204.         RAM[0xB8D449]=0x83;RAM[0xB8D44A]=0x22;RAM[0xB8D44B]=0x10;
  2205.         addr=0xBE80;
  2206.         for(loop=0;loop<1532;loop+=1)
  2207.         {
  2208.             add=0;
  2209.             while(RAM[addr]!=0)
  2210.             {
  2211.                 pointers[loop][add]=RAM[addr];
  2212.                 add+=1;
  2213.                 addr+=1;
  2214.             }
  2215.             while(RAM[addr]==0)
  2216.             {
  2217.                 addr+=1;
  2218.             }
  2219.         }
  2220.     }
  2221.     if(RAM[0]!=0x80){mode=DISK;}
  2222.     if(mode==CART)
  2223.     {
  2224.         code[0]=RAM[0x3C];
  2225.         code[1]=RAM[0x3D];
  2226.         code[2]=RAM[0x3E];
  2227.         code[3]=RAM[0x3F];
  2228.         if(code[0]==0)
  2229.         {
  2230.             code[0]=RAM[0x20];
  2231.             code[1]=RAM[0x21];
  2232.             code[2]=RAM[0x22];
  2233.             code[3]=RAM[0x23];
  2234.             if(read32(RAM,0x10)==0xA04237B9)
  2235.             {
  2236.                 code[0]=0x57;
  2237.                 code[1]=0x69;
  2238.                 code[2]=0x6C;
  2239.                 code[3]=0x64;
  2240.             }
  2241.             if(read32(RAM,0x20)==0x53796432&&read32(RAM,0x10)!=0x80A78080)
  2242.             {
  2243.                 return -1;
  2244.             }
  2245.             goto after;
  2246.         }
  2247.     }
  2248.     else
  2249.     {
  2250.         code[0]=RAM[0x43670];
  2251.         code[1]=RAM[0x43671];
  2252.         code[2]=RAM[0x43672];
  2253.         code[3]=RAM[0x43673];
  2254.         if(code[0]==0)
  2255.         {
  2256.             if(read32(RAM,0x738C8)==0x25085690)
  2257.             {
  2258.                 code[0]=0x44;
  2259.                 code[1]=0x53;
  2260.                 code[2]=0x4D;
  2261.                 code[3]=0x4A;
  2262.             }
  2263.             else
  2264.             {
  2265.                 code[0]=0x54;
  2266.                 code[1]=0x45;
  2267.                 code[2]=0x53;
  2268.                 code[3]=0x54;
  2269.             }
  2270.         }
  2271.         goto after;
  2272.     }
  2273.     if(code[3]<0xA)
  2274.     {
  2275.         code[3]+=0x30;
  2276.     }
  2277.     else
  2278.     {
  2279.         code[3]+=0x37;
  2280.     }
  2281.     after:
  2282.     if(code[0]==0){return -1;}
  2283.     sprintf(filename,"%s.txt",code);
  2284.     FILE *symbols=fopen(filename,"r");
  2285.     while(!feof(symbols))
  2286.     {
  2287.         fscanf(symbols,"%x %s\n",&addr,symb);
  2288.         addr_db[num]=addr;
  2289.         strcpy(symb_db[num],symb);
  2290.         num+=1;
  2291.     }
  2292.     fclose(symbols);
  2293.     if((read32(RAM,0x3C)>>24)==0x5A)
  2294.     {
  2295.         FILE *zenum=fopen("znum.txt","r");
  2296.         while(!feof(zenum))
  2297.         {
  2298.             fscanf(zenum,"%x %s\n",&addr,symb);
  2299.             zenum_add[znum]=addr;
  2300.             strcpy(zenum_sym[znum],symb);
  2301.             znum+=1;
  2302.         }
  2303.         fclose(zenum);
  2304.     }
  2305.     if(mode==CART)
  2306.     {
  2307.         for(loop=0x40;loop<0x1000;loop+=1)
  2308.         {
  2309.             sum+=RAM[loop];
  2310.         }
  2311.         pc=read32(RAM,8)&0x1FFFFFFF;
  2312.         if(sum==0x357D0){pc-=0x100000;}
  2313.         if(sum==0x371CC){pc-=0x200000;}
  2314.     }
  2315.     else
  2316.     {
  2317.         pc=read32(RAM,0x1C)&0x1FFFFFFF;
  2318.         if(pc==0)
  2319.         {
  2320.             pc=read32(RAM,0x9A2C)&0x1FFFFFFF;
  2321.         }
  2322.     }
  2323.     unsigned char *REG=malloc(0x40000);
  2324.     again:
  2325.     add=0;
  2326.     if(ovl_funcs[0]>0||ovl_funcs[1]>0||ovl_funcs[2]>0||ovl_funcs[3]>0)
  2327.     {
  2328.         ovl_tracker+=1;
  2329.         while(ovl_funcs[ovl_tracker]==0)
  2330.         {
  2331.             ovl_tracker+=1;
  2332.         }
  2333.         if(ovl_tracker<4)
  2334.         {
  2335.             func=ovl_funcs[ovl_tracker];
  2336.             goto func_len;
  2337.         }
  2338.         ovl_funcs[0]=0;
  2339.         ovl_funcs[1]=0;
  2340.         ovl_funcs[2]=0;
  2341.         ovl_funcs[3]=0;
  2342.         ovl_tracker=0;
  2343.         goto choose;
  2344.     }
  2345.     printf("Where? ");
  2346.     scanf("%x",&func);
  2347.     if(read32(RAM,0x3C)==0x5A4C450F||read32(RAM,0x3C)==0x5A534A00)
  2348.     {
  2349.         if(func<113)
  2350.         {
  2351.         scene(RAM,DEMO,func,zenum_add,zenum_sym);
  2352.         goto choose;
  2353.         }
  2354.         if(func>=0x10AE670)
  2355.         {
  2356.             ovl_funcs[0]=0;
  2357.             ovl_funcs[1]=0;
  2358.             ovl_funcs[2]=0;
  2359.             ovl_funcs[3]=0;
  2360.             ovl_tracker=0;
  2361.             loop=((RAM[func]<<8)|RAM[1+func])&0xFFF;
  2362.             switch(RAM[0x3F])
  2363.             {
  2364.                 case 0:
  2365.                     if(loop<=0x2B1)
  2366.                     {
  2367.                         addr=read32(RAM,0xC617D4+0x20*loop)&0xffffff;
  2368.                         add=read32(RAM,0xC617C0+0x20*loop);
  2369.                         add-=(read32(RAM,0xC617C8+0x20*loop)&0xffffff);
  2370.                         addr+=add+0x10;
  2371.                         ovl_funcs[0]=read32(RAM,addr+12)&0xffffff;
  2372.                         ovl_funcs[1]=read32(RAM,addr)&0xffffff;
  2373.                         ovl_funcs[2]=read32(RAM,addr+4)&0xffffff;
  2374.                         ovl_funcs[3]=read32(RAM,addr+8)&0xffffff;
  2375.                         while(ovl_funcs[ovl_tracker]==0)
  2376.                         {
  2377.                             ovl_tracker+=1;
  2378.                         }
  2379.                         if(ovl_funcs[0]>0){ovl_funcs[0]+=add;}
  2380.                         if(ovl_funcs[1]>0){ovl_funcs[1]+=add;}
  2381.                         if(ovl_funcs[2]>0){ovl_funcs[2]+=add;}
  2382.                         if(ovl_funcs[3]>0){ovl_funcs[3]+=add;}
  2383.                     }
  2384.                     break;
  2385.                 case 15:
  2386.                     if(loop<=0x1D6)
  2387.                     {
  2388.                         addr=read32(RAM,0xB8D454+0x20*loop)&0xffffff;
  2389.                         add=read32(RAM,0xB8D440+0x20*loop);
  2390.                         add-=(read32(RAM,0xB8D448+0x20*loop)&0xffffff);
  2391.                         addr+=add+0x10;
  2392.                         ovl_funcs[0]=read32(RAM,addr+12)&0xffffff;
  2393.                         ovl_funcs[1]=read32(RAM,addr)&0xffffff;
  2394.                         ovl_funcs[2]=read32(RAM,addr+4)&0xffffff;
  2395.                         ovl_funcs[3]=read32(RAM,addr+8)&0xffffff;
  2396.                         while(ovl_funcs[ovl_tracker]==0)
  2397.                         {
  2398.                             ovl_tracker+=1;
  2399.                         }
  2400.                         if(ovl_funcs[0]>0){ovl_funcs[0]+=add;}
  2401.                         if(ovl_funcs[1]>0){ovl_funcs[1]+=add;}
  2402.                         if(ovl_funcs[2]>0){ovl_funcs[2]+=add;}
  2403.                         if(ovl_funcs[3]>0){ovl_funcs[3]+=add;}
  2404.                     }
  2405.             }
  2406.             add=0;
  2407.             if(ovl_funcs[ovl_tracker]>0)
  2408.             {
  2409.                 func=ovl_funcs[ovl_tracker];
  2410.             }
  2411.         }
  2412.     }
  2413.     func_len:
  2414.     if(ovl_funcs[ovl_tracker]>0)
  2415.     {
  2416.         switch(ovl_tracker)
  2417.         {
  2418.             case 0:
  2419.                 printf("\nactor->draw_proc\n");
  2420.                 break;
  2421.             case 1:
  2422.                 printf("\nactor->constract_proc\n");
  2423.                 break;
  2424.             case 2:
  2425.                 printf("\nactor->destruct_proc\n");
  2426.                 break;
  2427.             case 3:
  2428.                 printf("\nactor->move_proc\n");
  2429.                
  2430.         }
  2431.         system("pause");
  2432.     }
  2433.     if((func&3)!=0){goto again;}
  2434.     if(func<0x40||func>=end){goto again;}
  2435.     if(read32(RAM,0x3C)==0x5A4C450F||read32(RAM,0x3C)==0x5A534A00)
  2436.     {
  2437.         add=ovl_adapt(RAM,REG,DEMO,func,read32(RAM,0x3C));
  2438.         if(add>0)
  2439.         {
  2440.             ext=0;
  2441.             if(read32(RAM,0x3C)==0x5A4C450F)
  2442.             {
  2443.                 goto ZL;
  2444.             }
  2445.             for(addr=0;addr<0x2B2;addr+=1)
  2446.             {
  2447.                 if(func>=read32(RAM,0xDD5A50+0x20*addr)&&func<read32(RAM,0xDD5A54+0x20*addr))
  2448.                 {
  2449.                     inst=0xAB7960+read32(RAM,0xDD5A68+0x20*addr);
  2450.                     break;
  2451.                 }
  2452.             }
  2453.             goto skip;
  2454.             ZL:
  2455.             if(func>=0xD583E0&&func<0xD66150)
  2456.             {
  2457.                 inst=0xCD60;
  2458.                 goto skip;
  2459.             }
  2460.             for(addr=0;addr<0x1D7;addr+=1)
  2461.             {
  2462.                 if(func>=read32(RAM,0xB8D440+0x20*addr)&&func<read32(RAM,0xB8D444+0x20*addr))
  2463.                 {
  2464.                     inst=0xA771A0+read32(RAM,0xB8D458+0x20*addr);
  2465.                     break;
  2466.                 }
  2467.             }
  2468.             skip:
  2469.             addr=1;
  2470.             while(addr!=0)
  2471.             {
  2472.                 addr=RAM[inst+ext];
  2473.                 actor[ext]=addr;
  2474.                 ext+=1;
  2475.             }
  2476.         }
  2477.     }
  2478.     while(inst!=0x03E00008)
  2479.     {
  2480.         inst=read32(RAM,func+func_end);
  2481.         func_end+=4;
  2482.         if(inst==0x02A00008){break;}
  2483.     }
  2484.     func_end+=4;
  2485.     for(addr=0;addr<(func_end/4);addr+=1)
  2486.     {
  2487.         ext=0;
  2488.         tgt=func+addr*4;
  2489.         inst=read32(RAM,tgt);
  2490.         if(inst!=0&&op(inst)!=J&&op(inst)!=JAL&&op(inst)!=LUI&&op(inst)!=BNEL)
  2491.         {
  2492.             printf("%08X ",tgt);
  2493.         }
  2494.         switch(op(inst))
  2495.         {
  2496.             case SPECIAL:
  2497.                 switch(funct(inst))
  2498.                 {
  2499.                     case OR:
  2500.                         tgt=rd(inst);
  2501.                         CPU[tgt]=CPU[rs(inst)]|CPU[rt(inst)];
  2502.                         if(tgt>=S0&&tgt<T8)
  2503.                         {
  2504.                         if(rs(inst)>=A0&&rs(inst)<T0&&rt(inst)==R0)
  2505.                         {
  2506.                             if(read32(RAM,0x3C)==0x5A4C450F)
  2507.                             {
  2508.                                 CPU[tgt]=0x80212020;
  2509.                             }
  2510.                         }
  2511.                         }
  2512.                         for(loop=0;loop<num;loop+=1)
  2513.                         {
  2514.                             if(addr_db[loop]==CPU[tgt])
  2515.                             {
  2516.                                 if(CPU[tgt]>0xFFF&&tgt<T0)
  2517.                                 {
  2518.                                     printf("%s = %s\n",names[tgt],symb_db[loop]);
  2519.                                     break;
  2520.                                 }
  2521.                                 else if(CPU[tgt]>0xFFF&&tgt>=T0)
  2522.                                 {
  2523.                                     if(CPU[tgt]<0x80000000)
  2524.                                     {
  2525.                                         printf("%s = %s\n",names[tgt],symb_db[loop]);
  2526.                                         break;
  2527.                                     }
  2528.                                 }
  2529.                                 else
  2530.                                 {
  2531.                                     if(tgt<T0)
  2532.                                     {
  2533.                                         printf("%s = 0x%X\n",names[tgt],CPU[tgt]);
  2534.                                         break;
  2535.                                     }
  2536.                                     else
  2537.                                     {
  2538.                                         if(CPU[tgt]<0x80000000)
  2539.                                         {
  2540.                                             printf("%08X\n",inst);
  2541.                                             break;
  2542.                                         }
  2543.                                     }
  2544.                                 }
  2545.                             }
  2546.                         }
  2547.                         if(loop==num)
  2548.                         {
  2549.                             if(tgt<T0)
  2550.                             {
  2551.                                 printf("%s = 0x%X\n",names[tgt],CPU[tgt]);
  2552.                             }
  2553.                             else
  2554.                             {
  2555.                                 printf("%08X\n",inst);
  2556.                             }
  2557.                         }
  2558.                         break;
  2559.                     default:
  2560.                         if(inst!=0)
  2561.                         {
  2562.                             printf("%08X\n",inst);
  2563.                         }
  2564.                         break;
  2565.                 }
  2566.                 break;
  2567.             case J:
  2568.             case JAL:
  2569.                 tgt=(unsigned int)((inst&0x03ffffff)<<2);
  2570.                 if(tgt<0x800000&&prev_tgt>=0x800000)
  2571.                 {
  2572.                     system("pause");
  2573.                 }
  2574.                 prev_tgt=tgt;
  2575.                 if(read32(RAM,0x3C)==0x242C343C&&tgt>=0x510000)
  2576.                 {
  2577.                     if(read32(RAM,0x738C8)==0x25085690)
  2578.                     {
  2579.                         ext=1;
  2580.                         tgt-=0x3E70B0;
  2581.                     }
  2582.                     else
  2583.                     {
  2584.                         tgt-=pc;
  2585.                         tgt+=base[mode];
  2586.                     }
  2587.                 }
  2588.                 else if(read32(RAM,0x3C)==0x41464A00&&tgt>=0x051A80) //Doubutsu no Mori (Japan)
  2589.                 {
  2590.                     if(tgt>>24==4)
  2591.                     {
  2592.                         if(func>=0x675720){tgt-=0x38E0090;}
  2593.                         else{tgt-=0x3FEA0C0;}
  2594.                     }
  2595.                     else
  2596.                     {
  2597.                         ext=1;
  2598.                         tgt+=0x623CA0;
  2599.                     }
  2600.                 }
  2601.                 else if(read32(RAM,0x3C)==0x46444500&&tgt>=0x4001000) //Flying Dragon
  2602.                 {
  2603.                     tgt-=0x3F803E0;
  2604.                 }
  2605.                 else if(read32(RAM,0x3C)==0x465A4A00&&tgt>=0x4001000) //F-Zero X
  2606.                 {
  2607.                     tgt-=0x3F9F620;
  2608.                 }
  2609.                 else if(read32(RAM,0x3C)==0x47354500&&tgt>=0x4001000) //Mystical Ninja Starring Goemon
  2610.                 {
  2611.                     tgt-=0x3FADE00;
  2612.                 }
  2613.                 else if(read32(RAM,0x3C)==0x47414500&&tgt>=0x4001000) //Deadly Arts
  2614.                 {
  2615.                     tgt-=0x3FD1BE0;
  2616.                 }
  2617.                 else if(read32(RAM,0x3C)==0x474D4500&&tgt>=0x4001000) //Goemon's Great Adventure
  2618.                 {
  2619.                     tgt-=0x3FDBF40;
  2620.                 }
  2621.                 else if(read32(RAM,0x3C)==0x4B414500&&tgt>=0x4001000) //Fighter's Destiny
  2622.                 {
  2623.                     tgt-=0x3FB88A0;
  2624.                 }
  2625.                 else if(read32(RAM,0x3C)==0x4B544A00&&tgt>=0x280000) //Mario Kart 64 (J) (V1.0) [!]
  2626.                 {
  2627.                     if(tgt>>24==4)
  2628.                     {
  2629.                         tgt-=0x3F26B70;
  2630.                     }
  2631.                     else
  2632.                     {
  2633.                         ext=1;
  2634.                         tgt-=0x15BF90;    //map_ram(0x280000, 0x124070, 0x007490);
  2635.                         if(tgt+0x15BF90>=0x28DF00)
  2636.                         {
  2637.                             ext=2;
  2638.                             tgt-=0x39FB0; //map_ram(0x28DF00, 0x0F7FC0, 0x02C0B0);
  2639.                         }
  2640.                     }
  2641.                 }
  2642.                 else if(read32(RAM,0x3C)==0x4D454500&&tgt>=0x4001000) //Mace - The Dark Age
  2643.                 {
  2644.                     tgt-=0x3F85C00;
  2645.                 }
  2646.                 else if(read32(RAM,0x3C)==0x4D514A00&&tgt>=0x0DC4E0) //Mario Story (Japan)
  2647.                 {
  2648.                     if(tgt>>24==4)
  2649.                     {
  2650.                         tgt-=0x4000440;
  2651.                     }
  2652.                     else
  2653.                     {
  2654.                         ext=1;
  2655.                         tgt-=0x066B50;               //map_ram(0x0DC4E0, 0x075990, 0x030600);
  2656.                         if(tgt+0x066B50>=0x10F890)
  2657.                         {
  2658.                             ext=2;
  2659.                             tgt-=0x002DB0;           //map_ram(0x10F890, 0x0A5F90, 0x0037E0);
  2660.                             if(tgt+0x069900>=0x1148E0)
  2661.                             {
  2662.                                 ext=3;
  2663.                                 tgt-=0x001870;       //map_ram(0x1148E0, 0x0A9770, 0x041A30);
  2664.                                 if(tgt+0x06B170>=0x2C3000)
  2665.                                 {
  2666.                                     ext=4;
  2667.                                     tgt-=0x16CCF0;   //map_ram(0x2C3000, 0x0EB1A0, 0x017480);
  2668.                                 }
  2669.                             }
  2670.                         }
  2671.                     }
  2672.                 }
  2673.                 else if(read32(RAM,0x3C)==0x534D4A00&&tgt>=0x378800) //Super Mario 64 (J) [!]
  2674.                 {
  2675.                     if(tgt>>24==4)
  2676.                     {
  2677.                         tgt-=0x3F1BC90;
  2678.                     }
  2679.                     else
  2680.                     {
  2681.                         ext=1;
  2682.                         tgt-=0x2845F0; //map_ram(0x378800, 0x0F4210, 0x013490);
  2683.                     }
  2684.                 }
  2685.                 else if(read32(RAM,0x3C)==0x57414500&&tgt>=0x4001000) //War Gods
  2686.                 {
  2687.                     tgt-=0x3F63240;
  2688.                 }
  2689.                 else if(read32(RAM,0x3C)==0x574F4500&&tgt>=0x4001000) //World Driver Championship
  2690.                 {
  2691.                     tgt-=0x3F83D00;
  2692.                 }
  2693.                 else if(read32(RAM,0x3C)==0x5A4C450F&&tgt>=0x01CE60) //ZELOOTMA
  2694.                 {
  2695.                     if(tgt>>24==4)
  2696.                     {
  2697.                         if(func>=0xA94000){tgt-=0x3477DA0;}
  2698.                         else{tgt-=0x3FF7090;}
  2699.                     }
  2700.                     else
  2701.                     {
  2702.                         if(add>0&&tgt>=0x800000)
  2703.                         {
  2704.                             tgt+=add;
  2705.                         }
  2706.                         else
  2707.                         {
  2708.                             ext=1;
  2709.                             tgt+=0xA771A0;
  2710.                         }
  2711.                     }
  2712.                 }
  2713.                 else if(read32(RAM,0x3C)==0x5A4C4A00&&tgt>=0x0110A0) //Zelda no Densetsu - Toki no Ocarina (Japan)
  2714.                 {
  2715.                     if(tgt>>24==4)
  2716.                     {
  2717.                         tgt-=0x34A80E0;
  2718.                     }
  2719.                     else
  2720.                     {
  2721.                         ext=1;
  2722.                         tgt+=0xA75F60;
  2723.                     }
  2724.                 }
  2725.                 else if(read32(RAM,0x3C)==0x5A534A00&&tgt>=0x0A76A0) //mm_debug
  2726.                 {
  2727.                     if(tgt>>24==4)
  2728.                     {
  2729.                         tgt-=0x322FA50;
  2730.                     }
  2731.                     else
  2732.                     {
  2733.                         if(add>0&&tgt>=0x800000)
  2734.                         {
  2735.                             tgt+=add;
  2736.                         }
  2737.                         else
  2738.                         {
  2739.                             ext=1;
  2740.                             tgt+=0xAB7960;
  2741.                         }
  2742.                     }
  2743.                 }
  2744.                 else
  2745.                 {
  2746.                     tgt-=pc;
  2747.                     tgt+=base[mode];
  2748.                     if(func>=0xB8A210&&func<0xB8BAD0)   //S2DEX2
  2749.                     {
  2750.                         if(read32(RAM,0x3C)==0x5A4C450F)
  2751.                         {
  2752.                         if(tgt>=0x2A00)             //1E00 - 1FFF is static
  2753.                         {
  2754.                             tgt+=0xB88590;
  2755.                         }
  2756.                         if(tgt>=0x1C98&&tgt<0x22D0) //1180 - 16CF is static but
  2757.                         {                           //1098 doesn't have conflicts
  2758.                             tgt+=0xB88590;
  2759.                         }
  2760.                         }
  2761.                     }
  2762.                     if(func>=0xBCD0F0&&func<0xBCE720)   //F3DEX2
  2763.                     {
  2764.                         if(read32(RAM,0x3C)==0x5A4C450F)
  2765.                         {
  2766.                         if(tgt>=0x2380)             //1780 - 1FFF is static
  2767.                         {
  2768.                             tgt+=0xBCB470;
  2769.                         }
  2770.                         if(tgt>=0x1C00&&tgt<0x1D70) //1000 - 116F is ovl0, ovl1 and init
  2771.                         {
  2772.                             tgt+=0xBCC508;    //assume it's ovl1
  2773.                             if(tgt==0xBCE128) //fix 1020
  2774.                             {
  2775.                                 tgt-=0x98;    //(the only part of ovl0 J/JAL'd to)
  2776.                             }
  2777.                             if(tgt==0xBCE270) //fix 1168
  2778.                             {
  2779.                                 tgt-=0x1098;  //(the only part of init J/JAL'd to)
  2780.                             }
  2781.                         }
  2782.                         if(tgt>=0x1D70&&tgt<0x1ED8) //1170 - 12D7 is static
  2783.                         {
  2784.                             tgt+=0xBCB470;
  2785.                         }
  2786.                         if(tgt>=0x1ED8&&tgt<0x2380) //12D8 - 177F is ovl2 and ovl3
  2787.                         {
  2788.                             tgt+=0xBCC3A0;    //assume it's ovl2
  2789.                             if(tgt==0xBCE2C0) //fix 1320
  2790.                             {
  2791.                                 tgt-=0xF30;   //(the only part of ovl3 J/JAL'd to)
  2792.                             }
  2793.                         }
  2794.                         }
  2795.                     }
  2796.                 }
  2797.                 ext=0;
  2798.                 if(read32(RAM,0x3C)==0x5A4C450F)
  2799.                 {
  2800.                     switch(tgt)
  2801.                     {
  2802.                         case 0xaa1b94:
  2803.                             for(loop=0;loop<num;loop+=1)
  2804.                             {
  2805.                                 if(addr_db[loop]==tgt)
  2806.                                 {
  2807.                                     if(op(inst)==J){printf("J %s //",symb_db[loop]);}
  2808.                                     else{printf("JAL <%s> //",symb_db[loop]);}
  2809.                                     break;
  2810.                                 }
  2811.                             }
  2812.                             if(loop==num)
  2813.                             {
  2814.                                 if(op(inst)==J){printf("J %08X",tgt);}
  2815.                                 else{printf("JAL %08X",tgt);}
  2816.                                 if(add>0&&tgt>=func-0x30000)
  2817.                                 {
  2818.                                     printf(" //%s",actor);
  2819.                                 }
  2820.                                 if(ext>0)
  2821.                                 {
  2822.                                     printf(" //External file %d",ext);
  2823.                                 }
  2824.                             }
  2825.                             ext=1;
  2826.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A2))
  2827.                             {
  2828.                                 CPU[A2]=read32(RAM,func+(addr+1)*4)&0xffff;
  2829.                             }
  2830.                             for(loop=1004;loop<znum;loop+=1)
  2831.                             {
  2832.                                 if(zenum_add[loop]==CPU[A2]||(zenum_add[loop]-0x800)==CPU[A2])
  2833.                                 {
  2834.                                     if(zenum_add[loop]==CPU[A2])
  2835.                                     {
  2836.                                         printf(" %s\n",zenum_sym[loop]);
  2837.                                     }
  2838.                                     else if((zenum_add[loop]-0x800)==CPU[A2])
  2839.                                     {
  2840.                                         printf(" %s - SFX_FLAG\n",zenum_sym[loop]);
  2841.                                     }
  2842.                                     break;
  2843.                                 }
  2844.                             }
  2845.                             system("pause");
  2846.                             break;
  2847.                         case 0xAA697C:
  2848.                         case 0xAA69C8:
  2849.                         case 0xAA6A90:
  2850.                         case 0xAA6ABC:
  2851.                         case 0xAA6AE8:
  2852.                         case 0xAA6B14:
  2853.                         case 0xAEFAB4:
  2854.                         case 0xB6B50C:
  2855.                             for(loop=0;loop<num;loop+=1)
  2856.                             {
  2857.                                 if(addr_db[loop]==tgt)
  2858.                                 {
  2859.                                     if(op(inst)==J){printf("J %s //",symb_db[loop]);}
  2860.                                     else{printf("JAL <%s> //",symb_db[loop]);}
  2861.                                     break;
  2862.                                 }
  2863.                             }
  2864.                             if(loop==num)
  2865.                             {
  2866.                                 if(op(inst)==J){printf("J %08X",tgt);}
  2867.                                 else{printf("JAL %08X",tgt);}
  2868.                                 if(add>0&&tgt>=func-0x30000)
  2869.                                 {
  2870.                                     printf(" //%s",actor);
  2871.                                 }
  2872.                                 if(ext>0)
  2873.                                 {
  2874.                                     printf(" //External file %d",ext);
  2875.                                 }
  2876.                             }
  2877.                             ext=1;
  2878.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A1))
  2879.                             {
  2880.                                 CPU[A1]=read32(RAM,func+(addr+1)*4)&0xffff;
  2881.                             }
  2882.                             for(loop=1004;loop<znum;loop+=1)
  2883.                             {
  2884.                                 if(zenum_add[loop]==CPU[A1]||(zenum_add[loop]-0x800)==CPU[A1])
  2885.                                 {
  2886.                                     if(zenum_add[loop]==CPU[A1])
  2887.                                     {
  2888.                                         printf(" %s\n",zenum_sym[loop]);
  2889.                                     }
  2890.                                     else if((zenum_add[loop]-0x800)==CPU[A1])
  2891.                                     {
  2892.                                         printf(" %s - SFX_FLAG\n",zenum_sym[loop]);
  2893.                                     }
  2894.                                     break;
  2895.                                 }
  2896.                             }
  2897.                             system("pause");
  2898.                             break;
  2899.                         case 0xAE2C78:
  2900.                             for(loop=0;loop<num;loop+=1)
  2901.                             {
  2902.                                 if(addr_db[loop]==tgt)
  2903.                                 {
  2904.                                     if(op(inst)==J){printf("J %s //",symb_db[loop]);}
  2905.                                     else{printf("JAL <%s> //",symb_db[loop]);}
  2906.                                     break;
  2907.                                 }
  2908.                             }
  2909.                             if(loop==num)
  2910.                             {
  2911.                                 if(op(inst)==J){printf("J %08X",tgt);}
  2912.                                 else{printf("JAL %08X",tgt);}
  2913.                                 if(add>0&&tgt>=func-0x30000)
  2914.                                 {
  2915.                                     printf(" //%s",actor);
  2916.                                 }
  2917.                                 if(ext>0)
  2918.                                 {
  2919.                                     printf(" //External file %d",ext);
  2920.                                 }
  2921.                             }
  2922.                             ext=1;
  2923.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A3))
  2924.                             {
  2925.                                 CPU[A3]=read32(RAM,func+(addr+1)*4)&0xffff;
  2926.                             }
  2927.                             for(loop=1004;loop<znum;loop+=1)
  2928.                             {
  2929.                                 if(zenum_add[loop]==CPU[A3]||(zenum_add[loop]-0x800)==CPU[A3])
  2930.                                 {
  2931.                                     if(zenum_add[loop]==CPU[A3])
  2932.                                     {
  2933.                                         printf(" %s\n",zenum_sym[loop]);
  2934.                                     }
  2935.                                     else if((zenum_add[loop]-0x800)==CPU[A3])
  2936.                                     {
  2937.                                         printf(" %s - SFX_FLAG\n",zenum_sym[loop]);
  2938.                                     }
  2939.                                     break;
  2940.                                 }
  2941.                             }
  2942.                             system("pause");
  2943.                             break;
  2944.                         case 0xAEFA24:
  2945.                         case 0xAEFA6C:
  2946.                         case 0xB6E52C:
  2947.                             for(loop=0;loop<num;loop+=1)
  2948.                             {
  2949.                                 if(addr_db[loop]==tgt)
  2950.                                 {
  2951.                                     if(op(inst)==J){printf("J %s //",symb_db[loop]);}
  2952.                                     else{printf("JAL <%s> //",symb_db[loop]);}
  2953.                                     break;
  2954.                                 }
  2955.                             }
  2956.                             if(loop==num)
  2957.                             {
  2958.                                 if(op(inst)==J){printf("J %08X",tgt);}
  2959.                                 else{printf("JAL %08X",tgt);}
  2960.                                 if(add>0&&tgt>=func-0x30000)
  2961.                                 {
  2962.                                     printf(" //%s",actor);
  2963.                                 }
  2964.                                 if(ext>0)
  2965.                                 {
  2966.                                     printf(" //External file %d",ext);
  2967.                                 }
  2968.                             }
  2969.                             ext=1;
  2970.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A0))
  2971.                             {
  2972.                                 CPU[A0]=read32(RAM,func+(addr+1)*4)&0xffff;
  2973.                             }
  2974.                             for(loop=1004;loop<znum;loop+=1)
  2975.                             {
  2976.                                 if(zenum_add[loop]==CPU[A0]||(zenum_add[loop]-0x800)==CPU[A0])
  2977.                                 {
  2978.                                     if(zenum_add[loop]==CPU[A0])
  2979.                                     {
  2980.                                         printf(" %s\n",zenum_sym[loop]);
  2981.                                     }
  2982.                                     else if((zenum_add[loop]-0x800)==CPU[A0])
  2983.                                     {
  2984.                                         printf(" %s - SFX_FLAG\n",zenum_sym[loop]);
  2985.                                     }
  2986.                                     break;
  2987.                                 }
  2988.                             }
  2989.                             system("pause");
  2990.                             break;
  2991.                         case 0xAA90F0:
  2992.                             for(loop=0;loop<num;loop+=1)
  2993.                             {
  2994.                                 if(addr_db[loop]==tgt)
  2995.                                 {
  2996.                                     if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  2997.                                     else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  2998.                                     break;
  2999.                                 }
  3000.                             }
  3001.                             if(loop==num)
  3002.                             {
  3003.                                 if(op(inst)==J){printf("J %08X",tgt);}
  3004.                                 else{printf("JAL %08X",tgt);}
  3005.                                 if(add>0&&tgt>=func-0x30000)
  3006.                                 {
  3007.                                     printf(" //%s",actor);
  3008.                                 }
  3009.                                 if(ext>0)
  3010.                                 {
  3011.                                     printf(" //External file %d",ext);
  3012.                                 }
  3013.                             }
  3014.                             ext=1;
  3015.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A2))
  3016.                             {
  3017.                                 CPU[A2]=read32(RAM,func+(addr+1)*4)&0xffff;
  3018.                             }
  3019.                             for(loop=0;loop<429;loop+=1)
  3020.                             {
  3021.                                 if(zenum_add[loop]==CPU[A2])
  3022.                                 {
  3023.                                     printf(" %s\n",zenum_sym[loop]);
  3024.                                     break;
  3025.                                 }
  3026.                             }
  3027.                             break;
  3028.                         case 0xAA95F8:
  3029.                             for(loop=0;loop<num;loop+=1)
  3030.                             {
  3031.                                 if(addr_db[loop]==tgt)
  3032.                                 {
  3033.                                     if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  3034.                                     else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  3035.                                     break;
  3036.                                 }
  3037.                             }
  3038.                             if(loop==num)
  3039.                             {
  3040.                                 if(op(inst)==J){printf("J %08X",tgt);}
  3041.                                 else{printf("JAL %08X",tgt);}
  3042.                                 if(add>0&&tgt>=func-0x30000)
  3043.                                 {
  3044.                                     printf(" //%s",actor);
  3045.                                 }
  3046.                                 if(ext>0)
  3047.                                 {
  3048.                                     printf(" //External file %d",ext);
  3049.                                 }
  3050.                             }
  3051.                             ext=1;
  3052.                             if(read32(RAM,func+(addr+1)*4)>>16==(0x2400|A3))
  3053.                             {
  3054.                                 CPU[A3]=read32(RAM,func+(addr+1)*4)&0xffff;
  3055.                             }
  3056.                             for(loop=0;loop<429;loop+=1)
  3057.                             {
  3058.                                 if(zenum_add[loop]==CPU[A3])
  3059.                                 {
  3060.                                     printf(" %s\n",zenum_sym[loop]);
  3061.                                     break;
  3062.                                 }
  3063.                             }
  3064.                             break;
  3065.                         case 0xB82820:
  3066.                             printf("%08X ",func+addr*4);
  3067.                             for(loop=0;loop<num;loop+=1)
  3068.                             {
  3069.                                 if(addr_db[loop]==tgt)
  3070.                                 {
  3071.                                     if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  3072.                                     else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  3073.                                     break;
  3074.                                 }
  3075.                             }
  3076.                             if(loop==num)
  3077.                             {
  3078.                                 if(op(inst)==J){printf("J %08X",tgt);}
  3079.                                 else{printf("JAL %08X",tgt);}
  3080.                                 if(add>0&&tgt>=func-0x30000)
  3081.                                 {
  3082.                                     printf(" //%s",actor);
  3083.                                 }
  3084.                                 if(ext>0)
  3085.                                 {
  3086.                                     printf(" //External file %d",ext);
  3087.                                 }
  3088.                             }
  3089.                             ext=1;
  3090.                             printf("\n");
  3091.                             message_set(RAM,CPU[A1]);
  3092.                             break;
  3093.                         case 0xB828C0:
  3094.                             printf("%08X ",func+addr*4);
  3095.                             for(loop=0;loop<num;loop+=1)
  3096.                             {
  3097.                                 if(addr_db[loop]==tgt)
  3098.                                 {
  3099.                                     if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  3100.                                     else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  3101.                                     break;
  3102.                                 }
  3103.                             }
  3104.                             if(loop==num)
  3105.                             {
  3106.                                 if(op(inst)==J){printf("J %08X",tgt);}
  3107.                                 else{printf("JAL %08X",tgt);}
  3108.                                 if(add>0&&tgt>=func-0x30000)
  3109.                                 {
  3110.                                     printf(" //%s",actor);
  3111.                                 }
  3112.                                 if(ext>0)
  3113.                                 {
  3114.                                     printf(" //External file %d",ext);
  3115.                                 }
  3116.                             }
  3117.                             ext=1;
  3118.                             if((read32(RAM,func+addr*4+4)>>16)==0x2405)
  3119.                             {
  3120.                                 CPU[A1]=imm(read32(RAM,func+addr*4+4));
  3121.                             }
  3122.                             if(op(read32(RAM,func+addr*4+4))==ANDI)
  3123.                             {
  3124.                                 CPU[rt(read32(RAM,func+addr*4+4))]=CPU[rs(read32(RAM,func+addr*4+4))]&imm(read32(RAM,func+addr*4+4));
  3125.                             }
  3126.                             printf("\n");
  3127.                             message_set(RAM,CPU[A1]);
  3128.                             break;
  3129.                     }
  3130.                 }
  3131.                 if(read32(RAM,0x3C)==0x5A534A00)
  3132.                 {
  3133.                     switch(tgt)
  3134.                     {
  3135.                         case 0xC0A18C:
  3136.                             printf("%08X ",func+addr*4);
  3137.                             for(loop=0;loop<num;loop+=1)
  3138.                             {
  3139.                                 if(addr_db[loop]==tgt)
  3140.                                 {
  3141.                                     if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  3142.                                     else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  3143.                                     break;
  3144.                                 }
  3145.                             }
  3146.                             if(loop==num)
  3147.                             {
  3148.                                 if(op(inst)==J){printf("J %08X",tgt);}
  3149.                                 else{printf("JAL %08X",tgt);}
  3150.                                 if(add>0&&tgt>=func-0x30000)
  3151.                                 {
  3152.                                     printf(" //actor");
  3153.                                 }
  3154.                                 if(ext>0)
  3155.                                 {
  3156.                                     printf(" //External file %d",ext);
  3157.                                 }
  3158.                             }
  3159.                             ext=1;
  3160.                             if((read32(RAM,func+addr*4+4)>>16)==0x2405)
  3161.                             {
  3162.                                 CPU[A1]=imm(read32(RAM,func+addr*4+4));
  3163.                             }
  3164.                             if(op(read32(RAM,func+addr*4+4))==ANDI)
  3165.                             {
  3166.                                 CPU[rt(read32(RAM,func+addr*4+4))]=CPU[rs(read32(RAM,func+addr*4+4))]&imm(read32(RAM,func+addr*4+4));
  3167.                             }
  3168.                             printf("\n");
  3169.                             message_set(DEMO,CPU[A1]);
  3170.                             break;
  3171.                     }
  3172.                 }
  3173.                 if(ext!=1)
  3174.                 {
  3175.                     printf("%08X ",func+addr*4);
  3176.                     for(loop=0;loop<num;loop+=1)
  3177.                     {
  3178.                         if(addr_db[loop]==tgt)
  3179.                         {
  3180.                             if(op(inst)==J){printf("J %s //%08X",symb_db[loop],tgt);}
  3181.                             else{printf("JAL <%s> //%08X",symb_db[loop],tgt);}
  3182.                             break;
  3183.                         }
  3184.                     }
  3185.                     if(loop==num)
  3186.                     {
  3187.                         if(op(inst)==J){printf("J %08X",tgt);}
  3188.                         else{printf("JAL %08X",tgt);}
  3189.                         if(add>0&&tgt>=func-0x30000)
  3190.                         {
  3191.                             if(read32(RAM,0x3C)==0x5A4C450F){printf(" //%s",actor);}
  3192.                             else{printf(" //actor");}
  3193.                         }
  3194.                         if(ext>0)
  3195.                         {
  3196.                             printf(" //External file %d",ext);
  3197.                         }
  3198.                     }
  3199.                     printf("\n");
  3200.                 }
  3201.                 ext=0;
  3202.                 break;
  3203.             case BEQ:
  3204.                 tgt=extend(imm(inst)<<2)+func+addr*4+4;
  3205.                 if(rs(inst)==R0 && rt(inst)==R0)
  3206.                 {
  3207.                     if(tgt<func+addr*4)
  3208.                     {
  3209.                         printf("break;   //%08X\n",tgt);
  3210.                     }
  3211.                     else
  3212.                     {
  3213.                         printf("(%s)\n",names[rs(inst)]);
  3214.                         printf("         case %s: //%08X\n",names[rt(inst)],tgt);
  3215.                     }
  3216.                 }
  3217.                 else
  3218.                 {
  3219.                     printf("(%s)\n",names[rs(inst)]);
  3220.                     printf("         case %s: //%08X\n",names[rt(inst)],tgt);
  3221.                 }
  3222.                 break;
  3223.             case ADDIU:
  3224.                 tgt=rt(inst);
  3225.                 if((func+addr*4)==addiu_jump[0]||(func+addr*4)==(addiu_jump[0]+4))
  3226.                 {
  3227.                     CPU[tgt]=addiu_jump[1];
  3228.                 }
  3229.                 CPU[tgt]=CPU[rs(inst)]+extend(imm(inst));
  3230.                 for(loop=0;loop<num;loop+=1)
  3231.                 {
  3232.                     if(addr_db[loop]==CPU[tgt])
  3233.                     {
  3234.                         if(CPU[tgt]>0xFFF&&tgt<T0)
  3235.                         {
  3236.                             if(CPU[tgt]<0x10000&&rs(inst)==R0){printf("%s = %s\n",names[tgt],symb_db[loop]);}
  3237.                             else
  3238.                             {
  3239.                                 if(CPU[tgt]>=0x80000000){printf("%s = %s\n",names[tgt],symb_db[loop]);}
  3240.                                 if(CPU[tgt]<0x80000000){printf("%s = 0x%X\n",names[tgt],CPU[tgt]);}
  3241.                             }
  3242.                             break;
  3243.                         }
  3244.                         else if(CPU[tgt]>0xFFF&&tgt>=T0)
  3245.                         {
  3246.                             if(CPU[tgt]<0x80000000)
  3247.                             {
  3248.                                 printf("%s = %s\n",names[tgt],symb_db[loop]);
  3249.                                 break;
  3250.                             }
  3251.                         }
  3252.                         else
  3253.                         {
  3254.                             if(tgt<T0)
  3255.                             {
  3256.                                 printf("%s = 0x%X\n",names[tgt],CPU[tgt]);
  3257.                                 break;
  3258.                             }
  3259.                             else
  3260.                             {
  3261.                                 if(CPU[tgt]<0x80000000)
  3262.                                 {
  3263.                                     printf("%08X\n",inst);
  3264.                                     break;
  3265.                                 }
  3266.                             }
  3267.                         }
  3268.                     }
  3269.                 }
  3270.                 if(loop==num)
  3271.                 {
  3272.                     if(CPU[tgt]>>24==0x80)
  3273.                     {
  3274.                         CPU[tgt]&=0x1FFFFFFF;
  3275.                         if(read32(RAM,0x3C)==0x242C343C&&CPU[tgt]>=0x510000)
  3276.                         {
  3277.                             if(read32(RAM,0x738C8)==0x25085690)
  3278.                             {
  3279.                                 CPU[tgt]-=0x3E70B0;
  3280.                             }
  3281.                             else
  3282.                             {
  3283.                                 CPU[tgt]-=pc;
  3284.                                 CPU[tgt]+=base[mode];
  3285.                             }
  3286.                         }
  3287.                         else if(read32(RAM,0x3C)==0x41464A00&&CPU[tgt]>=0x051A80)
  3288.                         {
  3289.                             CPU[tgt]+=0x623CA0;
  3290.                         }
  3291.                         else if(read32(RAM,0x3C)==0x534D4A00&&CPU[tgt]>=0x378800)
  3292.                         {
  3293.                             CPU[tgt]-=0x2845F0;
  3294.                         }
  3295.                         else if(read32(RAM,0x3C)==0x5A4C450F&&CPU[tgt]>=0x01CE60)
  3296.                         {
  3297.                             if(add>0&&CPU[tgt]>=0x800000)
  3298.                             {
  3299.                                 CPU[tgt]+=add;
  3300.                             }
  3301.                             else
  3302.                             {
  3303.                                 CPU[tgt]+=0xA771A0;
  3304.                             }
  3305.                         }
  3306.                         else if(read32(RAM,0x3C)==0x5A4C4A00&&CPU[tgt]>=0x0110A0)
  3307.                         {
  3308.                             CPU[tgt]+=0xA75F60;
  3309.                         }
  3310.                         else if(read32(RAM,0x3C)==0x5A534A00&&CPU[tgt]>=0x0A76A0)
  3311.                         {
  3312.                             if(add>0&&CPU[tgt]>=0x800000)
  3313.                             {
  3314.                                 CPU[tgt]+=add;
  3315.                             }
  3316.                             else
  3317.                             {
  3318.                                 CPU[tgt]+=0xAB7960;
  3319.                             }
  3320.                         }
  3321.                         else
  3322.                         {
  3323.                             if(CPU[tgt]>=pc&&CPU[tgt]<=end-4)
  3324.                             {
  3325.                                 CPU[tgt]-=pc;
  3326.                                 CPU[tgt]+=base[mode];
  3327.                             }
  3328.                             else
  3329.                             {
  3330.                                 goto label;
  3331.                             }
  3332.                         }
  3333.                         for(sum=0;sum<4;sum+=1)
  3334.                         {
  3335.                             if(RAM[CPU[tgt]+sum]<0x0A||RAM[CPU[tgt]+sum]>0x7E)
  3336.                             {
  3337.                                 break;
  3338.                             }
  3339.                         }
  3340.                         if(sum==4)
  3341.                         {
  3342.                             printf("%s = \"",names[tgt]);
  3343.                             while(sum!=0)
  3344.                             {
  3345.                                 sum=RAM[CPU[tgt]+ext];
  3346.                                 ext+=1;
  3347.                                 if(sum==0){break;}
  3348.                                 printf("%c",sum);
  3349.                             }
  3350.                             printf("\"\n");
  3351.                         }
  3352.                         if(read32(RAM,0x3C)==0x242C343C&&CPU[tgt]>=0x128F50)
  3353.                         {
  3354.                             if(read32(RAM,0x738C8)==0x25085690)
  3355.                             {
  3356.                                 CPU[tgt]+=0x3E70B0;
  3357.                             }
  3358.                             else
  3359.                             {
  3360.                                 CPU[tgt]-=base[mode];
  3361.                                 CPU[tgt]+=pc;
  3362.                             }
  3363.                         }
  3364.                         else if(read32(RAM,0x3C)==0x41464A00&&CPU[tgt]>=0x675720)
  3365.                         {
  3366.                             CPU[tgt]-=0x623CA0;
  3367.                         }
  3368.                         else if(read32(RAM,0x3C)==0x534D4A00&&CPU[tgt]>=0xF4210)
  3369.                         {
  3370.                             CPU[tgt]+=0x2845F0;
  3371.                         }
  3372.                         else if(read32(RAM,0x3C)==0x5A4C450F&&CPU[tgt]>=0xA94000)
  3373.                         {
  3374.                             if(CPU[tgt]>=ovl_b&&CPU[tgt]<ovl_e)
  3375.                             {
  3376.                                 CPU[tgt]-=add;
  3377.                             }
  3378.                             else
  3379.                             {
  3380.                                 CPU[tgt]-=0xA771A0;
  3381.                             }
  3382.                         }
  3383.                         else if(read32(RAM,0x3C)==0x5A4C4A00&&CPU[tgt]>=0xA87000)
  3384.                         {
  3385.                             CPU[tgt]-=0xA75F60;
  3386.                         }
  3387.                         else if(read32(RAM,0x3C)==0x5A534A00&&CPU[tgt]>=0xB5F000)
  3388.                         {
  3389.                             if(CPU[tgt]>=ovl_b&&CPU[tgt]<ovl_e)
  3390.                             {
  3391.                                 CPU[tgt]-=add;
  3392.                             }
  3393.                             else
  3394.                             {
  3395.                                 CPU[tgt]-=0xAB7960;
  3396.                             }
  3397.                         }
  3398.                         else
  3399.                         {
  3400.                             CPU[tgt]-=base[mode];
  3401.                             CPU[tgt]+=pc;
  3402.                         }
  3403.                         label:
  3404.                         CPU[tgt]|=0x80000000;
  3405.                     }
  3406.                     if(ext==0)
  3407.                     {
  3408.                         if(tgt<T0)
  3409.                         {
  3410.                             if((CPU[tgt]&0xffffff)>=(ovl_b-add)&&(CPU[tgt]&0xffffff)<(ovl_e-add))
  3411.                             {
  3412.                                 CPU[tgt]&=0xffffff;
  3413.                                 for(loop=0;loop<num;loop+=1)
  3414.                                 {
  3415.                                     if(addr_db[loop]==CPU[tgt]+add)
  3416.                                     {
  3417.                                         printf("%s = %s\n",names[tgt],symb_db[loop]);
  3418.                                         break;
  3419.                                     }
  3420.                                 }
  3421.                                 if(loop==num){CPU[tgt]|=0x80000000;printf("%s = 0x%X\n",names[tgt],CPU[tgt]);}
  3422.                             }
  3423.                             else{printf("%s = 0x%X\n",names[tgt],CPU[tgt]);}
  3424.                         }
  3425.                         else
  3426.                         {
  3427.                             for(loop=0;loop<num;loop+=1)
  3428.                             {
  3429.                                 if(add==0){break;}
  3430.                                 if(addr_db[loop]==(CPU[tgt]&0x1FFFFFFF)+add)
  3431.                                 {
  3432.                                     CPU[tgt]=loop; //new
  3433.                                     for(ext=addr+1;ext<(func_end/4);ext+=1)
  3434.                                     {
  3435.                                         if(op(read32(RAM,func+ext*4))>=40&&rt(read32(RAM,func+ext*4))==tgt)
  3436.                                         {
  3437.                                             if(rs(read32(RAM,func+ext*4))==SP)
  3438.                                             {
  3439.                                                 printf("%s = %s\n",names[tgt],symb_db[loop]);
  3440.                                             }
  3441.                                             else
  3442.                                             {
  3443.                                                 printf("%08X\n",inst);
  3444.                                             }
  3445.                                             break;
  3446.                                         }
  3447.                                     }
  3448.                                     break;
  3449.                                 }
  3450.                             }
  3451.                             if(loop==num||loop==0||ext==(func_end/4)){printf("%08X\n",inst);}
  3452.                             ext=0;
  3453.                         }
  3454.                     }
  3455.                 }
  3456.                 if(rs(inst)==R0&&rt(inst)==A0)
  3457.                 {
  3458.                 for(loop=addr+1;loop<(func_end/4);loop+=1)
  3459.                 {
  3460.                     if(rs(inst)==R0&&rt(inst)==A0)
  3461.                     {
  3462.                     if(read32(RAM,func+loop*4)==0x00801025)
  3463.                     {
  3464.                         message_set(RAM,CPU[A0]);
  3465.                     }
  3466.                     }
  3467.                     else{break;}
  3468.                 }
  3469.                 }
  3470.                 if((func+addr*4)==addiu_jump[0]||(func+addr*4)==(addiu_jump[0]+4))
  3471.                 {
  3472.                     addiu_jump[0]=4;
  3473.                 }
  3474.                 break;
  3475.             case ANDI:
  3476.                 tgt=rt(inst);
  3477.                 CPU[tgt]=CPU[rs(inst)]&imm(inst);
  3478.                 printf("%s = 0x%x\n",names[tgt],CPU[tgt]);
  3479.                 break;
  3480.             case ORI:
  3481.                 tgt=rt(inst);
  3482.                 CPU[tgt]=CPU[rs(inst)]|imm(inst);
  3483.                 for(loop=0;loop<num;loop+=1)
  3484.                 {
  3485.                     if(addr_db[loop]==CPU[tgt]&&CPU[tgt]>0xFFF)
  3486.                     {
  3487.                         printf("%s = %s\n",names[tgt],symb_db[loop]);
  3488.                         break;
  3489.                     }
  3490.                 }
  3491.                 if(loop==num)
  3492.                 {
  3493.                     printf("%08X\n",inst);
  3494.                 }
  3495.                 break;
  3496.             case LUI:
  3497.                 if(LUIWATCH[rt(inst)]==1){LUIWATCH[rt(inst)]=0;}
  3498.                 tgt=imm(inst);
  3499.                 CPU[rt(inst)]=tgt<<16;
  3500.                 for(loop=0;loop<num;loop+=1)
  3501.                 {
  3502.                     if(addr_db[loop]==tgt>>8)
  3503.                     {
  3504.                         for(tgt=addr+1;tgt<(func_end/4);tgt+=1)
  3505.                         {
  3506.                             if(op(read32(RAM,func+tgt*4))==SW&&rt(read32(RAM,func+tgt*4))==rt(inst)&&imm(read32(RAM,func+tgt*4))==0)
  3507.                             {
  3508.                                 if(op(read32(RAM,func+tgt*4+8))==SW)
  3509.                                 {
  3510.                                     if(rt(read32(RAM,func+tgt*4+8))!=rt(inst))
  3511.                                     {
  3512.                                         LUIWATCH[rt(inst)]=1;
  3513.                                     }
  3514.                                     else if(rt(read32(RAM,func+tgt*4+8))==rt(inst))
  3515.                                     {
  3516.                                         if((imm(read32(RAM,func+tgt*4+8))&0xF)==0)
  3517.                                         {
  3518.                                             LUIWATCH[rt(inst)]=1;
  3519.                                         }
  3520.                                     }
  3521.                                 }
  3522.                                 else if(op(read32(RAM,func+tgt*4+8))!=SW)
  3523.                                 {
  3524.                                     LUIWATCH[rt(inst)]=1;
  3525.                                 }
  3526.                                 break;
  3527.                             }
  3528.                         }
  3529.                         break;
  3530.                     }
  3531.                 }
  3532.                 if(op(read32(RAM,func+(addr+1)*4))>=BEQ&&op(read32(RAM,func+(addr+1)*4))<ADDI)
  3533.                 {
  3534.                     addiu_jump[0]=extend(imm(read32(RAM,func+(addr+1)*4))<<2)+func+addr*4+8;
  3535.                     addiu_jump[1]=CPU[rt(inst)];
  3536.                 }
  3537.                 break;
  3538.             case BNEL:
  3539.                 tgt=func+addr*4+4;
  3540.                 RAM[tgt]=0;
  3541.                 RAM[tgt+1]=0;
  3542.                 RAM[tgt+2]=0;
  3543.                 RAM[tgt+3]=0;
  3544.                 printf("%08X\n",inst);
  3545.                 break;
  3546.             case LB:
  3547.                 tgt=rt(inst);
  3548.                 CPU[tgt]=CPU[rs(inst)]+extend(imm(inst));
  3549.                 for(loop=0;loop<num;loop+=1)
  3550.                 {
  3551.                     if(addr_db[loop]==CPU[tgt]&&CPU[tgt]>0xFFF)
  3552.                     {
  3553.                         printf("%s = %s\n",names[tgt],symb_db[loop]);
  3554.                         break;
  3555.                     }
  3556.                 }
  3557.                 if(loop==num)
  3558.                 {
  3559.                     printf("%08X\n",inst);
  3560.                 }
  3561.                 break;
  3562.             case LW:
  3563.                 tgt=rt(inst);
  3564.                 CPU[tgt]=CPU[rs(inst)]+extend(imm(inst));
  3565.                 if(rs(inst)==SP)
  3566.                 {
  3567.                     printf("%s = sp%x\n",names[tgt],extend(imm(inst)));
  3568.                 }
  3569.                 else
  3570.                 {
  3571.                     for(loop=0;loop<num;loop+=1)
  3572.                     {
  3573.                         if(addr_db[loop]==CPU[tgt]&&CPU[tgt]>0xFFF)
  3574.                         {
  3575.                             printf("%s = %s\n",names[tgt],symb_db[loop]);
  3576.                             break;
  3577.                         }
  3578.                     }
  3579.                     if(loop==num)
  3580.                     {
  3581.                         printf("%08X\n",inst);
  3582.                     }
  3583.                 }
  3584.                 break;
  3585.             case LH:
  3586.             case LHU:
  3587.                 tgt=CPU[rs(inst)]+extend(imm(inst));
  3588.                 if(rs(inst)>=A0&&rs(inst)<T0&&tgt>=(regs|0x80000000)&&ovl_b>4)
  3589.                 {
  3590.                     if(func>=ovl_b&&func<ovl_e)
  3591.                     {
  3592.                     tgt&=0x1fffffff;
  3593.                     tgt-=regs;
  3594.                     if(tgt<=0x3FFFE){CPU[rt(inst)]=(REG[tgt]<<8)|REG[tgt+1];}
  3595.                     for(loop=0;loop<num;loop+=1)
  3596.                     {
  3597.                         if(addr_db[loop]==((tgt+regs)|0x80000000))
  3598.                         {
  3599.                             printf("%s = %s",names[rt(inst)],symb_db[loop]);
  3600.                             break;
  3601.                         }
  3602.                     }
  3603.                     if(loop==num)
  3604.                     {
  3605.                         printf("%s = 0x%X",names[rt(inst)],((tgt+regs)|0x80000000));
  3606.                     }
  3607.                     }
  3608.                 }
  3609.                 if(add>0)
  3610.                 {
  3611.                     switch(imm(inst))
  3612.                     {
  3613.                         case 0x10E:
  3614.                         case 0x2C4:
  3615.                             if(read32(RAM,0x3C)==0x5A4C450F)
  3616.                             {
  3617.                                 if(rt(inst)!=A1){CPU[rt(inst)]=0x10E;}
  3618.                             }
  3619.                             if(read32(RAM,0x3C)==0x5A534A00)
  3620.                             {
  3621.                                 if(rt(inst)!=A1){CPU[rt(inst)]=0x2C4;}
  3622.                             }
  3623.                     }
  3624.                 }
  3625.                 //if(add>0&&imm(inst)==0x10E)
  3626.                 //{
  3627.                 //    if(rt(inst)!=A1){CPU[rt(inst)]=0x10E;}
  3628.                 //}
  3629.                 if(op(inst)==LH||op(inst)==LHU)
  3630.                 {
  3631.                     if(tgt>=((ovl_b-add)|0x80000000)&&ovl_b>4)
  3632.                     {
  3633.                         if(func>=ovl_b&&func<ovl_e&&tgt<(regs|0x80000000))
  3634.                         {
  3635.                             tgt&=0x1fffffff;
  3636.                             tgt+=add;
  3637.                             if(tgt<(end-1))
  3638.                             {
  3639.                                 CPU[rt(inst)]=((RAM[tgt]<<8)|RAM[tgt+1]);
  3640.                                 if(op(inst)==LH)
  3641.                                 {
  3642.                                     CPU[rt(inst)]=extend((unsigned short)(CPU[rt(inst)]));
  3643.                                 }
  3644.                             }
  3645.                         }
  3646.                     }
  3647.                 }
  3648.                 printf("\n");
  3649.                 break;
  3650.             case SB:
  3651.             case SH:
  3652.             case SW:
  3653.                 tgt=CPU[rs(inst)]+extend(imm(inst));
  3654.                 if(LUIWATCH[rt(inst)]==1){goto gfx;}
  3655.                 for(loop=0;loop<num;loop+=1)
  3656.                 {
  3657.                     if(addr_db[loop]==tgt&&tgt>0xFFF)
  3658.                     {
  3659.                         printf("%s = %s",symb_db[loop],names[rt(inst)]);
  3660.                         break;
  3661.                     }
  3662.                 }
  3663.                 goto exit;
  3664.                 gfx:
  3665.                 for(loop=0;loop<num;loop+=1)
  3666.                 {
  3667.                     if(addr_db[loop]==CPU[rt(inst)]>>24&&imm(inst)==0)
  3668.                     {
  3669.                         printf("%08X //",inst);
  3670.                         decompile_gfx(addr_db,addr_db[loop],num,CPU[rt(inst)]&0xFFFFFF);
  3671.                         printf(" (%02X %06X)",addr_db[loop],CPU[rt(inst)]&0xFFFFFF);
  3672.                         break;
  3673.                     }
  3674.                 }
  3675.                 exit:
  3676.                 if(loop==num)
  3677.                 {
  3678.                 loop=0;
  3679.                 if(rt(inst)>=T0&&rt(inst)<K0&&add>0)
  3680.                 {
  3681.                     for(loop=0;loop<num;loop+=1)
  3682.                     {
  3683.                         if(addr_db[loop]==imm(inst)&&addr_db[loop]>0xFF)
  3684.                         {
  3685.                             if(CPU[rt(inst)]<num)
  3686.                             {
  3687.                                 printf("%s = %s",symb_db[loop],symb_db[CPU[rt(inst)]]);//names[rt(inst)]);
  3688.                             }
  3689.                             else
  3690.                             {
  3691.                                 printf("%s = 0x%X //add = %X",symb_db[loop],CPU[rt(inst)],add);
  3692.                             }
  3693.                             break;
  3694.                         }
  3695.                     }
  3696.                 }
  3697.                 if(loop==0||loop==num){printf("%08X",inst);}
  3698.                 }
  3699.                 printf("\n");
  3700.                 if(imm(inst)==0x10E||imm(inst)==0x2C4){CPU[A1]=CPU[rt(inst)];}
  3701.                 if(imm(inst)==0x116&&op(inst)==SH&&rt(inst)!=V0)
  3702.                 {
  3703.                     message_set(DEMO,CPU[rt(inst)]);
  3704.                 }
  3705.                 break;
  3706.             default:
  3707.                 if(inst!=0)
  3708.                 {
  3709.                     printf("%08X\n",inst);
  3710.                 }
  3711.                 break;
  3712.         }
  3713.         if(op(read32(RAM,func+addr*4+4))==JAL)
  3714.         {
  3715.             printf("\n");
  3716.         }
  3717.         if(op(read32(RAM,func+addr*4-4))==JAL)
  3718.         {
  3719.             printf("\n\n");
  3720.         }
  3721.         if(((inst>>16)&0xFFF)==0x441)
  3722.         {
  3723.             if(CPU[rs(inst)]==0x10E)
  3724.             {
  3725.                 message_set(RAM,CPU[AT]);
  3726.             }
  3727.         }
  3728.     }
  3729.     choose:
  3730.     func_end=0;
  3731.     if(ovl_funcs[ovl_tracker]==0)
  3732.     {
  3733.     system("pause");
  3734.     printf("Go again? (y/n) ");
  3735.     scanf("%s",choice);
  3736.     if(choice[0]==0x79){goto again;}
  3737.     }
  3738.     else
  3739.     {
  3740.     goto again;
  3741.     }
  3742.     free(RAM);
  3743.     free(REG);
  3744.     free(DEMO);
  3745.     return 0;
  3746. }
  3747.  
Add Comment
Please, Sign In to add comment