Page 1 of 1

[wh1] World Heroes

Posted: Sun Jan 01, 2023 2:35 am
by jman

Code: Select all

<cheat desc="no hit (test)">
    <!-- disable for trap in death match mode -->
    <parameter>
        <item value="0x01">P1          </item>
        <item value="0x02">P2          </item>
        <item value="0x03">both players</item>
    </parameter>
    <script state="on">
        <action>maincpu.rd@62bc2 =         00071f80</action> <!-- direct attack -->
        <action>maincpu.rd@62dc8 =         00071f80</action> <!-- firearms -->
        <action>maincpu.rq@1c00e = 4eb900071f8e4e71</action> <!-- throw -->
        <action>maincpu.rq@1beda = 4eb900071fa06700</action> <!-- throw (air) -->
        <action>maincpu.rq@71f70 = b1fc001000006706</action>
        <action>maincpu.rq@71f78 = b1fc001001004e75</action>
        <action>maincpu.rq@71f80 = 4eb9000f409e61e8</action>
        <action>maincpu.rq@71f88 = 67024a464e7561e0</action>
        <action>maincpu.rq@71f90 = 660470014e75102d</action>
        <action>maincpu.rq@71f98 = 60d6020000c04e75</action>
        <action>maincpu.rq@71fa0 = 61ce670608280000</action>
        <action>maincpu.rq@71fa8 = 60d54e7500000000</action>
        <!--
        71f70 | b1fc 0010 0000 : cmpa.l #$100000,A0    // player check routine
        71f76 | 6706           : beq    $71f7e
        71f78 | b1fc 0010 0100 : cmpa.l #$100100,A0
        71f7e | 4e75           : rts
        71f80 | 4eb9 000f 409e : jsr    $f409e.l       // direct attack, firearms
        71f86 | 61e8           : bsr    $71f70
        71f88 | 6702           : beq    $71f8c
        71f8a | 4a46           : tst.w  D6
        71f8c | 4e75           : rts
        71f8e | 61e0           : bsr    $71f70         // throw
        71f90 | 6604           : bne    $71f96
        71f92 | 7001           : moveq  #$1,D0
        71f94 | 4e75           : rts
        71f96 | 102d 60d6      : move.b ($60d6,A5),D0
        71f9a | 0200 00c0      : andi.b #$c0,D0
        71f9e | 4e75           : rts
        71fa0 | 61ce           : bsr    $71f70         // throw (air)
        71fa2 | 6706           : beq    $71faa
        71fa4 | 0828 0000 60d5 : btst   #$0,($60d5,A0)
        71faa | 4e75           : rts
        -->
    </script>
    <script state="change">
        <action                                  >maincpu.rd@71f72 = 00000000</action>
        <action                                  >maincpu.rd@71f7a = 00000000</action>
        <action condition="(param band 01) != 00">maincpu.rd@71f72 = 00100000</action>
        <action condition="(param band 02) != 00">maincpu.rd@71f7a = 00100100</action>
    </script>
    <script state="off">
        <action>maincpu.rd@62bc2 =         000f409e</action>
        <action>maincpu.rd@62dc8 =         000f409e</action>
        <action>maincpu.rq@1c00e = 102d60d6020000c0</action>
        <action>maincpu.rq@1beda = 0828000060d56700</action>
        <action>maincpu.rq@71f70 = 0000000000000000</action>
        <action>maincpu.rq@71f78 = 0000000000000000</action>
        <action>maincpu.rq@71f80 = 0000000000000000</action>
        <action>maincpu.rq@71f88 = 0000000000000000</action>
        <action>maincpu.rq@71f90 = 0000000000000000</action>
        <action>maincpu.rq@71f98 = 0000000000000000</action>
        <action>maincpu.rq@71fa0 = 0000000000000000</action>
        <action>maincpu.rq@71fa8 = 0000000000000000</action>
    </script>
</cheat>

<cheat desc="auto fire">
    <parameter>
        <item value="0x01">P1          </item>
        <item value="0x02">P2          </item>
        <item value="0x03">both players</item>
    </parameter>
    <script state="on">
        <action>maincpu.rq@1a46a = 4eb900071fc04e71</action>
        <action>maincpu.rq@71fb0 = 102d6001bbfc0010</action>
        <action>maincpu.rq@71fb8 = 00006708bbfc0010</action>
        <action>maincpu.rq@71fc0 = 01006604102d6000</action>
        <action>maincpu.rq@71fc8 = 080000044e750000</action>
        <!--
        71fb0 | 102d 6001      : move.b ($6001,A5),D0
        71fb4 | bbfc 0010 0000 : cmpa.l #$100000,A5
        71fba | 6708           : beq    $71fc4
        71fbc | bbfc 0010 0100 : cmpa.l #$100100,A5
        71fc2 | 6604           : bne    $71fc8
        71fc4 | 102d 6000      : move.b ($6000,A5),D0
        71fc8 | 0800 0004      : btst   #$4, D0
        71fcc | 4e75           : rts
        -->
    </script>
    <script state="change">
        <action                                  >maincpu.rd@71fb6 = 00000000</action>
        <action                                  >maincpu.rd@71fbe = 00000000</action>
        <action condition="(param band 01) != 00">maincpu.rd@71fb6 = 00100000</action>
        <action condition="(param band 02) != 00">maincpu.rd@71fbe = 00100100</action>
    </script>
    <script state="off">
        <action>maincpu.rq@1a46a = 102d600108000004</action>
        <action>maincpu.rq@71fb0 = 0000000000000000</action>
        <action>maincpu.rq@71fb8 = 0000000000000000</action>
        <action>maincpu.rq@71fc0 = 0000000000000000</action>
        <action>maincpu.rq@71fc8 = 0000000000000000</action>
    </script>
</cheat>

<cheat desc="attack speed up">
    <parameter>
        <item value="0x01">P1          </item>
        <item value="0x02">P2          </item>
        <item value="0x03">both players</item>
    </parameter>
    <script state="on">
        <action>maincpu.rq@794dc = 4eb900071fd04e71</action>
        <action>maincpu.rq@71fd0 = 30360000bbfc0010</action>
        <action>maincpu.rq@71fd8 = 00006708bbfc0010</action>
        <action>maincpu.rq@71fe0 = 01006606003c0001</action>
        <action>maincpu.rq@71fe8 = 4e75916d60e04e75</action>
        <!--
        71fd0 | 3036 0000      : move.w (A6,D0.w),D0
        71fd4 | bbfc 0010 0000 : cmpa.l #$100000,A5
        71fda | 6708           : beq    $71fe4
        71fdc | bbfc 0010 0100 : cmpa.l #$100100,A5
        71fe2 | 6606           : bne    $71fea
        71fe4 | 003c 0001      : ori    #$1,CCR
        71fe8 | 4e75           : rts
        71fea | 916d 60e0      : sub.w  D0,($60e0,A5)
        71fee | 4e75           : rts
        -->
    </script>
    <script state="change">
        <action                                  >maincpu.rd@71fd6 = 00000000</action>
        <action                                  >maincpu.rd@71fde = 00000000</action>
        <action condition="(param band 01) != 00">maincpu.rd@71fd6 = 00100000</action>
        <action condition="(param band 02) != 00">maincpu.rd@71fde = 00100100</action>
    </script>
    <script state="off">
        <action>maincpu.rq@794dc = 30360000916d60e0</action>
        <action>maincpu.rq@71fd0 = 0000000000000000</action>
        <action>maincpu.rq@71fd8 = 0000000000000000</action>
        <action>maincpu.rq@71fe0 = 0000000000000000</action>
        <action>maincpu.rq@71fe8 = 0000000000000000</action>
    </script>
</cheat>

<cheat desc="timer speed">
    <parameter>
        <item value="0x7f">01 (slow)</item>
        <item value="0x60">02       </item>
        <item value="0x40">03       </item>
        <item value="0x1e">04       </item>
        <item value="0x00">05 (fast)</item>
    </parameter>
    <script state="on">
        <action>maincpu.rq@1e1c4 = 1d7c000030094eb9</action>
    </script>
    <script state="change">
        <action>maincpu.rw@1e1c6 = param</action>
    </script>
    <script state="off">
        <action>maincpu.rq@1e1c4 = 1d6e30c530094eb9</action>
    </script>
</cheat>

<cheat desc="sound test mode">
    <!-- don't play code 0x01 because of no sound response -->
    <!-- valid bank number seems to be 0x00 only? -->
    <script state="on">
        <action>maincpu.rd@f00b6 =         000f09ac</action> <!-- enable sound code check in interrupt -->
        <action>maincpu.rd@f4c32 =         00071ff0</action>
        <action>maincpu.rq@71ff0 = 41ee010043e80001</action>
        <action>maincpu.rq@71ff8 = 247c000f09701401</action>
        <action>maincpu.rq@72000 = 123900300000b401</action>
        <action>maincpu.rq@72008 = 67f40c0100fb6602</action>
        <action>maincpu.rq@72010 = 53100c0100f76602</action>
        <action>maincpu.rq@72018 = 52100c0100fd6604</action>
        <action>maincpu.rq@72020 = 041000100c0100fe</action>
        <action>maincpu.rq@72028 = 6604061000100c01</action>
        <action>maincpu.rq@72030 = 00bb660253110c01</action>
        <action>maincpu.rq@72038 = 00b7660252110211</action>
        <action>maincpu.rq@72040 = 000f0c0100ef660e</action>
        <action>maincpu.rq@72048 = 10116706060000f0</action>
        <action>maincpu.rq@72050 = 4e9210104e920c01</action>
        <action>maincpu.rq@72058 = 00df660c103c0001</action>
        <action>maincpu.rq@72060 = 4e92103c00034e92</action>
        <action>maincpu.rq@72068 = 6094000000000000</action>
        <!--
        71ff0 | 41ee 0100      : lea     ($100,A6),A0 // $108100 : sound code address
        71ff4 | 43e8 0001      : lea     ($1,A0),A1   // $108101 : bank number address
        71ff8 | 247c 000f 0970 : movea.l #$f0970,A2
        71ffe | 1401           : move.b  D1,D2
        72000 | 1239 0030 0000 : move.b  $300000.l,D1 // read input
        72006 | b401           : cmp.b   D1,D2
        72008 | 67f4           : beq     $71ffe
        7200a | 0c01 00fb      : cmpi.b  #-$5,D1
        7200e | 6602           : bne     $72012
        72010 | 5310           : subq.b  #1,(A0)      // decrease code -01
        72012 | 0c01 00f7      : cmpi.b  #-$9,D1
        72016 | 6602           : bne     $7201a
        72018 | 5210           : addq.b  #1,(A0)      // increase code +01
        7201a | 0c01 00fd      : cmpi.b  #-$3,D1
        7201e | 6604           : bne     $72024
        72020 | 0410 0010      : subi.b  #$10,(A0)    // decrease code -10
        72024 | 0c01 00fe      : cmpi.b  #-$2,D1
        72028 | 6604           : bne     $7202e
        7202a | 0610 0010      : addi.b  #$10,(A0)    // increase code +10
        7202e | 0c01 00bb      : cmpi.b  #-$45,D1
        72032 | 6602           : bne     $72036
        72034 | 5311           : subq.b  #1,(A1)      // decrease bank -01
        72036 | 0c01 00b7      : cmpi.b  #-$49,D1
        7203a | 6602           : bne     $7203e
        7203c | 5211           : addq.b  #1,(A1)      // increase bank +01
        7203e | 0211 000f      : andi.b  #$f,(A1)
        72042 | 0c01 00ef      : cmpi.b  #-$11,D1
        72046 | 660e           : bne     $72056
        72048 | 1011           : move.b  (A1),D0      // play sound
        7204a | 6706           : beq     $72052
        7204c | 0600 00f0      : addi.b  #-$10,D0
        72050 | 4e92           : jsr     (A2)
        72052 | 1010           : move.b  (A0),D0
        72054 | 4e92           : jsr     (A2)
        72056 | 0c01 00df      : cmpi.b  #-$21,D1
        7205a | 660c           : bne     $72068
        7205c | 103c 0001      : move.b  #$1,D0       // stop sound
        72060 | 4e92           : jsr     (A2)
        72062 | 103c 0003      : move.b  #$3,D0
        72066 | 4e92           : jsr     (A2)
        72068 | 6094           : bra     $71ffe
        -->
    </script>
    <script state="run">
        <output format="----- world heroes sound test mode -----" line="10" align="center" />
        <output format="left : decrease code -01"                 line="11" align="center" />
        <output format="right : increase code +01"                line="12" align="center" />
        <output format="down : decrease code -10"                 line="13" align="center" />
        <output format="up : increase code +10"                   line="14" align="center" />
        <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
        <output format="button 3 + right : increase bank +01"     line="16" align="center" />
        <output format="button 1 : play sound"                    line="17" align="center" />
        <output format="button 2 : stop sound"                    line="18" align="center" />
        <output format="----------------------------"             line="19" align="center" />
        <output format="&lt;&lt; bank %2.2X &gt;&gt;"             line="21" align="center"  >
            <argument>maincpu.pb@108101</argument>
        </output>
        <output format="&lt;&lt; sound code %2.2X &gt;&gt;"       line="23" align="center"  >
            <argument>maincpu.pb@108100</argument>
        </output>
    </script>
    <script state="off">
        <action>maincpu.rd@f00b6 =         00c0044a</action>
        <action>maincpu.rd@f4c32 =         00009200</action>
        <action>maincpu.rq@71ff0 = 0000000000000000</action>
        <action>maincpu.rq@71ff8 = 0000000000000000</action>
        <action>maincpu.rq@72000 = 0000000000000000</action>
        <action>maincpu.rq@72008 = 0000000000000000</action>
        <action>maincpu.rq@72010 = 0000000000000000</action>
        <action>maincpu.rq@72018 = 0000000000000000</action>
        <action>maincpu.rq@72020 = 0000000000000000</action>
        <action>maincpu.rq@72028 = 0000000000000000</action>
        <action>maincpu.rq@72030 = 0000000000000000</action>
        <action>maincpu.rq@72038 = 0000000000000000</action>
        <action>maincpu.rq@72040 = 0000000000000000</action>
        <action>maincpu.rq@72048 = 0000000000000000</action>
        <action>maincpu.rq@72050 = 0000000000000000</action>
        <action>maincpu.rq@72058 = 0000000000000000</action>
        <action>maincpu.rq@72060 = 0000000000000000</action>
        <action>maincpu.rq@72068 = 0000000000000000</action>
    </script>
</cheat>
  • "no hit" : this is test code because doesn't work for the traps in death match mode.
  • "sound test mode" : this game seems to use bank code 0x00 only...? So "bank" in this code is temporary.

[wh1]+ World Heroes

Posted: Sun Jun 30, 2024 5:24 am
by jman
wh1.xml

Code: Select all

<!-- World Heroes (ALM-005) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62BD8 = 4EB900071F786600</action> <!-- direct attack -->
            <action>maincpu.rq@62E0A = 4EB900071F786622</action> <!-- firearms -->
            <action>maincpu.rq@1C00E = 4EB900071F844E71</action> <!-- throw -->
            <action>maincpu.rq@1BEDA = 4EB900071F926700</action> <!-- throw (air) -->
            <action>maincpu.rq@641BA = 4EB900071F786648</action> <!-- trap -->
            <action>maincpu.rq@71F70 = 0828000000FF4E75</action>
            <action>maincpu.rq@71F78 = 61F6660608280003</action>
            <action>maincpu.rq@71F80 = 60D54E7561EA6608</action>
            <action>maincpu.rq@71F88 = 102D60D6020000C0</action>
            <action>maincpu.rq@71F90 = 4E7561DC66080828</action>
            <action>maincpu.rq@71F98 = 000060D54E754200</action>
            <action>maincpu.rq@71FA0 = 4E75000000000000</action>
            <!--
            71F70 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            71F76 | 4E75           : rts
            71F78 | 61F6           : bsr     $71f70          // direct attack, firearms, trap
            71F7A | 6606           : bne     $71f82
            71F7C | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            71F82 | 4E75           : rts
            71F84 | 61EA           : bsr     $71f70          // throw
            71F86 | 6608           : bne     $71f90
            71F88 | 102D 60D6      : move.b  ($60d6,A5), D0
            71F8C | 0200 00C0      : andi.b  #$c0, D0
            71F90 | 4E75           : rts
            71F92 | 61DC           : bsr     $71f70          // throw (air)
            71F94 | 6608           : bne     $71f9e
            71F96 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            71F9C | 4E75           : rts
            71F9E | 4200           : clr.b   D0
            71FA0 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062BD8 = 0828000360D56600         </action>
            <action>maincpu.rq@062E0A = 0828000360D56622         </action>
            <action>maincpu.rq@01C00E = 102D60D6020000C0         </action>
            <action>maincpu.rq@01BEDA = 0828000060D56700         </action>
            <action>maincpu.rq@0641BA = 0828000360D56622         </action>
            <action>maincpu.rq@071F70 = 0000000000000000         </action>
            <action>maincpu.rq@071F78 = 0000000000000000         </action>
            <action>maincpu.rq@071F80 = 0000000000000000         </action>
            <action>maincpu.rq@071F88 = 0000000000000000         </action>
            <action>maincpu.rq@071F90 = 0000000000000000         </action>
            <action>maincpu.rq@071F98 = 0000000000000000         </action>
            <action>maincpu.rq@071FA0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A46A = 4EB900071FB04E71</action>
            <action>maincpu.rq@71FB0 = 102D6001082D0001</action>
            <action>maincpu.rq@71FB8 = 00FF6704102D6000</action>
            <action>maincpu.rq@71FC0 = 080000044E750000</action>
            <!--
            71FB0 | 102D 6001      : move.b  ($6001,A5), D0
            71FB4 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            71FBA | 6704           : beq     $71fc0
            71FBC | 102D 6000      : move.b  ($6000,A5), D0
            71FC0 | 0800 0004      : btst    #$4, D0
            71FC4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A46A = 102D600108000004         </action>
            <action>maincpu.rq@071FB0 = 0000000000000000         </action>
            <action>maincpu.rq@071FB8 = 0000000000000000         </action>
            <action>maincpu.rq@071FC0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@794DC = 4EB900071FD04E71</action>
            <action>maincpu.rq@71FD0 = 30360000082D0002</action>
            <action>maincpu.rq@71FD8 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@71FE0 = 916D60E04E750000</action>
            <!--
            71FD0 | 3036 0000      : move.w  (A6,D0.w), D0
            71FD4 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            71FDA | 6704           : beq     $71fe0
            71FDC | 303C FFFF      : move.w  #$ffff, D0
            71FE0 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            71FE4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@0794DC = 30360000916D60E0         </action>
            <action>maincpu.rq@071FD0 = 0000000000000000         </action>
            <action>maincpu.rq@071FD8 = 0000000000000000         </action>
            <action>maincpu.rq@071FE0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E1C4 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E1B2 = param</action>
            <action>maincpu.rw@1E1BE = param</action>
            <action>maincpu.rw@1E1C6 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E1B2 = 0040    </action>
            <action>maincpu.rw@1E1BE = 0036    </action>
            <action>maincpu.rd@1E1C4 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 00071FF0        </action>
            <action>maincpu.rq@71FF0 = 41EE010043E80001</action>
            <action>maincpu.rq@71FF8 = 247C000F09701401</action>
            <action>maincpu.rq@72000 = 123900300000B401</action>
            <action>maincpu.rq@72008 = 67F40C0100FB6602</action>
            <action>maincpu.rq@72010 = 53100C0100F76602</action>
            <action>maincpu.rq@72018 = 52100C0100FD6604</action>
            <action>maincpu.rq@72020 = 041000100C0100FE</action>
            <action>maincpu.rq@72028 = 6604061000100C01</action>
            <action>maincpu.rq@72030 = 00BB660253110C01</action>
            <action>maincpu.rq@72038 = 00B7660252110211</action>
            <action>maincpu.rq@72040 = 000F0C0100EF660E</action>
            <action>maincpu.rq@72048 = 1011670606000010</action>
            <action>maincpu.rq@72050 = 4E9210104E920C01</action>
            <action>maincpu.rq@72058 = 00DF660C103C0001</action>
            <action>maincpu.rq@72060 = 4E92103C00034E92</action>
            <action>maincpu.rq@72068 = 6094000000000000</action>
            <!--
            71FF0 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            71FF4 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            71FF8 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            71FFE | 1401           : move.b  D1, D2
            72000 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            72006 | B401           : cmp.b   D1, D2
            72008 | 67F4           : beq     $71ffe
            7200A | 0C01 00FB      : cmpi.b  #-$5, D1
            7200E | 6602           : bne     $72012
            72010 | 5310           : subq.b  #1, (A0)      // decrease code -01
            72012 | 0C01 00F7      : cmpi.b  #-$9, D1
            72016 | 6602           : bne     $7201a
            72018 | 5210           : addq.b  #1, (A0)      // increase code +01
            7201A | 0C01 00FD      : cmpi.b  #-$3, D1
            7201E | 6604           : bne     $72024
            72020 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            72024 | 0C01 00FE      : cmpi.b  #-$2, D1
            72028 | 6604           : bne     $7202e
            7202A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            7202E | 0C01 00BB      : cmpi.b  #-$45, D1
            72032 | 6602           : bne     $72036
            72034 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            72036 | 0C01 00B7      : cmpi.b  #-$49, D1
            7203A | 6602           : bne     $7203e
            7203C | 5211           : addq.b  #1, (A1)      // increase bank +01
            7203E | 0211 000F      : andi.b  #$f, (A1)
            72042 | 0C01 00EF      : cmpi.b  #-$11, D1
            72046 | 660E           : bne     $72056
            72048 | 1011           : move.b  (A1), D0      // play sound
            7204A | 6706           : beq     $72052
            7204C | 0600 0010      : addi.b  #$10, D0
            72050 | 4E92           : jsr     (A2)
            72052 | 1010           : move.b  (A0), D0
            72054 | 4E92           : jsr     (A2)
            72056 | 0C01 00DF      : cmpi.b  #-$21, D1
            7205A | 660C           : bne     $72068
            7205C | 103C 0001      : move.b  #$1, D0       // stop sound
            72060 | 4E92           : jsr     (A2)
            72062 | 103C 0003      : move.b  #$3, D0
            72066 | 4E92           : jsr     (A2)
            72068 | 6094           : bra     $71ffe
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@71FF0 = 0000000000000000</action>
            <action>maincpu.rq@71FF8 = 0000000000000000</action>
            <action>maincpu.rq@72000 = 0000000000000000</action>
            <action>maincpu.rq@72008 = 0000000000000000</action>
            <action>maincpu.rq@72010 = 0000000000000000</action>
            <action>maincpu.rq@72018 = 0000000000000000</action>
            <action>maincpu.rq@72020 = 0000000000000000</action>
            <action>maincpu.rq@72028 = 0000000000000000</action>
            <action>maincpu.rq@72030 = 0000000000000000</action>
            <action>maincpu.rq@72038 = 0000000000000000</action>
            <action>maincpu.rq@72040 = 0000000000000000</action>
            <action>maincpu.rq@72048 = 0000000000000000</action>
            <action>maincpu.rq@72050 = 0000000000000000</action>
            <action>maincpu.rq@72058 = 0000000000000000</action>
            <action>maincpu.rq@72060 = 0000000000000000</action>
            <action>maincpu.rq@72068 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
wh1h.xml

Code: Select all

<!-- World Heroes (ALH-005) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62E12 = 4EB90006D6786600</action> <!-- direct attack -->
            <action>maincpu.rq@63044 = 4EB90006D6786622</action> <!-- firearms -->
            <action>maincpu.rq@1C160 = 4EB90006D6844E71</action> <!-- throw -->
            <action>maincpu.rq@1C02C = 4EB90006D6926700</action> <!-- throw (air) -->
            <action>maincpu.rq@6440E = 4EB90006D6786648</action> <!-- trap -->
            <action>maincpu.rq@6D670 = 0828000000FF4E75</action>
            <action>maincpu.rq@6D678 = 61F6660608280003</action>
            <action>maincpu.rq@6D680 = 60D54E7561EA6608</action>
            <action>maincpu.rq@6D688 = 102D60D6020000C0</action>
            <action>maincpu.rq@6D690 = 4E7561DC66080828</action>
            <action>maincpu.rq@6D698 = 000060D54E754200</action>
            <action>maincpu.rq@6D6A0 = 4E75000000000000</action>
            <!--
            6D670 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            6D676 | 4E75           : rts
            6D678 | 61F6           : bsr     $6d670          // direct attack, firearms, trap
            6D67A | 6606           : bne     $6d682
            6D67C | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            6D682 | 4E75           : rts
            6D684 | 61EA           : bsr     $6d670          // throw
            6D686 | 6608           : bne     $6d690
            6D688 | 102D 60D6      : move.b  ($60d6,A5), D0
            6D68C | 0200 00C0      : andi.b  #$c0, D0
            6D690 | 4E75           : rts
            6D692 | 61DC           : bsr     $6d670          // throw (air)
            6D694 | 6608           : bne     $6d69e
            6D696 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            6D69C | 4E75           : rts
            6D69E | 4200           : clr.b   D0
            6D6A0 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062E12 = 0828000360D56600         </action>
            <action>maincpu.rq@063044 = 0828000360D56622         </action>
            <action>maincpu.rq@01C160 = 102D60D6020000C0         </action>
            <action>maincpu.rq@01C02C = 0828000060D56700         </action>
            <action>maincpu.rq@06440E = 0828000360D56648         </action>
            <action>maincpu.rq@06D670 = 0000000000000000         </action>
            <action>maincpu.rq@06D678 = 0000000000000000         </action>
            <action>maincpu.rq@06D680 = 0000000000000000         </action>
            <action>maincpu.rq@06D688 = 0000000000000000         </action>
            <action>maincpu.rq@06D690 = 0000000000000000         </action>
            <action>maincpu.rq@06D698 = 0000000000000000         </action>
            <action>maincpu.rq@06D6A0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A58A = 4EB90006D6B04E71</action>
            <action>maincpu.rq@6D6B0 = 102D6001082D0001</action>
            <action>maincpu.rq@6D6B8 = 00FF6704102D6000</action>
            <action>maincpu.rq@6D6C0 = 080000044E750000</action>
            <!--
            6D6B0 | 102D 6001      : move.b  ($6001,A5), D0
            6D6B4 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            6D6BA | 6704           : beq     $6d6c0
            6D6BC | 102D 6000      : move.b  ($6000,A5), D0
            6D6C0 | 0800 0004      : btst    #$4, D0
            6D6C4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A58A = 102D600108000004         </action>
            <action>maincpu.rq@06D6B0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6B8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6C0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@79808 = 4EB90006D6D04E71</action>
            <action>maincpu.rq@6D6D0 = 30360000082D0002</action>
            <action>maincpu.rq@6D6D8 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@6D6E0 = 916D60E04E750000</action>
            <!--
            6D6D0 | 3036 0000      : move.w  (A6,D0.w), D0
            6D6D4 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            6D6DA | 6704           : beq     $6d6e0
            6D6DC | 303C FFFF      : move.w  #$ffff, D0
            6D6E0 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            6D6E4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@07808C = 30360000916D60E0         </action>
            <action>maincpu.rq@06D6D0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6D8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E356 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E344 = param</action>
            <action>maincpu.rw@1E350 = param</action>
            <action>maincpu.rw@1E358 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E344 = 0040    </action>
            <action>maincpu.rw@1E350 = 0036    </action>
            <action>maincpu.rd@1E356 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 0006D6F0        </action>
            <action>maincpu.rq@6D6F0 = 41EE010043E80001</action>
            <action>maincpu.rq@6D6F8 = 247C000F09701401</action>
            <action>maincpu.rq@6D700 = 123900300000B401</action>
            <action>maincpu.rq@6D708 = 67F40C0100FB6602</action>
            <action>maincpu.rq@6D710 = 53100C0100F76602</action>
            <action>maincpu.rq@6D718 = 52100C0100FD6604</action>
            <action>maincpu.rq@6D720 = 041000100C0100FE</action>
            <action>maincpu.rq@6D728 = 6604061000100C01</action>
            <action>maincpu.rq@6D730 = 00BB660253110C01</action>
            <action>maincpu.rq@6D738 = 00B7660252110211</action>
            <action>maincpu.rq@6D740 = 000F0C0100EF660E</action>
            <action>maincpu.rq@6D748 = 1011670606000010</action>
            <action>maincpu.rq@6D750 = 4E9210104E920C01</action>
            <action>maincpu.rq@6D758 = 00DF660C103C0001</action>
            <action>maincpu.rq@6D760 = 4E92103C00034E92</action>
            <action>maincpu.rq@6D768 = 6094000000000000</action>
            <!--
            6D6F0 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            6D6F4 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            6D6F8 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            6D6FE | 1401           : move.b  D1, D2
            6D700 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            6D706 | B401           : cmp.b   D1, D2
            6D708 | 67F4           : beq     $6d6fe
            6D70A | 0C01 00FB      : cmpi.b  #-$5, D1
            6D70E | 6602           : bne     $6d712
            6D710 | 5310           : subq.b  #1, (A0)      // decrease code -01
            6D712 | 0C01 00F7      : cmpi.b  #-$9, D1
            6D716 | 6602           : bne     $6d71a
            6D718 | 5210           : addq.b  #1, (A0)      // increase code +01
            6D71A | 0C01 00FD      : cmpi.b  #-$3, D1
            6D71E | 6604           : bne     $6d724
            6D720 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            6D724 | 0C01 00FE      : cmpi.b  #-$2, D1
            6D728 | 6604           : bne     $6d72e
            6D72A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            6D72E | 0C01 00BB      : cmpi.b  #-$45, D1
            6D732 | 6602           : bne     $6d736
            6D734 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            6D736 | 0C01 00B7      : cmpi.b  #-$49, D1
            6D73A | 6602           : bne     $6d73e
            6D73C | 5211           : addq.b  #1, (A1)      // increase bank +01
            6D73E | 0211 000F      : andi.b  #$f, (A1)
            6D742 | 0C01 00EF      : cmpi.b  #-$11, D1
            6D746 | 660E           : bne     $6d756
            6D748 | 1011           : move.b  (A1), D0      // play sound
            6D74A | 6706           : beq     $6d752
            6D74C | 0600 0010      : addi.b  #$10, D0
            6D750 | 4E92           : jsr     (A2)
            6D752 | 1010           : move.b  (A0), D0
            6D754 | 4E92           : jsr     (A2)
            6D756 | 0C01 00DF      : cmpi.b  #-$21, D1
            6D75A | 660C           : bne     $6d768
            6D75C | 103C 0001      : move.b  #$1, D0       // stop sound
            6D760 | 4E92           : jsr     (A2)
            6D762 | 103C 0003      : move.b  #$3, D0
            6D766 | 4E92           : jsr     (A2)
            6D768 | 6094           : bra     $6d6fe
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@6D6F0 = 0000000000000000</action>
            <action>maincpu.rq@6D6F8 = 0000000000000000</action>
            <action>maincpu.rq@6D700 = 0000000000000000</action>
            <action>maincpu.rq@6D708 = 0000000000000000</action>
            <action>maincpu.rq@6D710 = 0000000000000000</action>
            <action>maincpu.rq@6D718 = 0000000000000000</action>
            <action>maincpu.rq@6D720 = 0000000000000000</action>
            <action>maincpu.rq@6D728 = 0000000000000000</action>
            <action>maincpu.rq@6D730 = 0000000000000000</action>
            <action>maincpu.rq@6D738 = 0000000000000000</action>
            <action>maincpu.rq@6D740 = 0000000000000000</action>
            <action>maincpu.rq@6D748 = 0000000000000000</action>
            <action>maincpu.rq@6D750 = 0000000000000000</action>
            <action>maincpu.rq@6D758 = 0000000000000000</action>
            <action>maincpu.rq@6D760 = 0000000000000000</action>
            <action>maincpu.rq@6D768 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
wh1ha.xml

Code: Select all

<!-- World Heroes (set 3) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62E06 = 4EB90006D6D06600</action> <!-- direct attack -->
            <action>maincpu.rq@63038 = 4EB90006D6D06622</action> <!-- firearms -->
            <action>maincpu.rq@1C1C4 = 4EB90006D6E44E71</action> <!-- throw -->
            <action>maincpu.rq@1C090 = 4EB90006D6F26700</action> <!-- throw (air) -->
            <action>maincpu.rq@643FC = 4EB90006D6D06648</action> <!-- trap -->
            <action>maincpu.rq@6D6D0 = 0828000000FF4E75</action>
            <action>maincpu.rq@6D6D8 = 61F6660608280003</action>
            <action>maincpu.rq@6D6E0 = 60D54E7561EA6608</action>
            <action>maincpu.rq@6D6E8 = 102D60D6020000C0</action>
            <action>maincpu.rq@6D6F0 = 4E7561DC66080828</action>
            <action>maincpu.rq@6D6F8 = 000060D54E754200</action>
            <action>maincpu.rq@6D700 = 4E75000000000000</action>
            <!--
            6D6D0 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            6D6D6 | 4E75           : rts
            6D6D8 | 61F6           : bsr     $6d6d0          // direct attack, firearms, trap
            6D6DA | 6606           : bne     $6d6e2
            6D6DC | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            6D6E2 | 4E75           : rts
            6D6E4 | 61EA           : bsr     $6d6d0          // throw
            6D6E6 | 6608           : bne     $6d6f0
            6D6E8 | 102D 60D6      : move.b  ($60d6,A5), D0
            6D6EC | 0200 00C0      : andi.b  #$c0, D0
            6D6F0 | 4E75           : rts
            6D6F2 | 61DC           : bsr     $6d6d0          // throw (air)
            6D6F4 | 6608           : bne     $6d6fe
            6D6F6 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            6D6FC | 4E75           : rts
            6D6FE | 4200           : clr.b   D0
            6D700 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062E06 = 0828000360D56600         </action>
            <action>maincpu.rq@063038 = 0828000360D56622         </action>
            <action>maincpu.rq@01C1C4 = 102D60D6020000C0         </action>
            <action>maincpu.rq@01C090 = 0828000060D56700         </action>
            <action>maincpu.rq@0643FC = 0828000360D56622         </action>
            <action>maincpu.rq@06D6D0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6D8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6F0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6F8 = 0000000000000000         </action>
            <action>maincpu.rq@06D700 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A5EE = 4EB90006D7104E71</action>
            <action>maincpu.rq@6D710 = 102D6001082D0001</action>
            <action>maincpu.rq@6D718 = 00FF6704102D6000</action>
            <action>maincpu.rq@6D720 = 080000044E750000</action>
            <!--
            6D710 | 102D 6001      : move.b  ($6001,A5), D0
            6D714 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            6D71A | 6704           : beq     $6d720
            6D71C | 102D 6000      : move.b  ($6000,A5), D0
            6D720 | 0800 0004      : btst    #$4, D0
            6D724 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A5EE = 102D600108000004         </action>
            <action>maincpu.rq@06D710 = 0000000000000000         </action>
            <action>maincpu.rq@06D718 = 0000000000000000         </action>
            <action>maincpu.rq@06D720 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@79862 = 4EB90006D7304E71</action>
            <action>maincpu.rq@6D730 = 30360000082D0002</action>
            <action>maincpu.rq@6D738 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@6D740 = 916D60E04E750000</action>
            <!--
            6D730 | 3036 0000      : move.w  (A6,D0.w), D0
            6D734 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            6D73A | 6704           : beq     $6d740
            6D73C | 303C FFFF      : move.w  #$ffff, D0
            6D740 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            6D744 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1000FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@079862 = 30360000916D60E0         </action>
            <action>maincpu.rq@06D730 = 0000000000000000         </action>
            <action>maincpu.rq@06D738 = 0000000000000000         </action>
            <action>maincpu.rq@06D740 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E326 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E314 = param</action>
            <action>maincpu.rw@1E320 = param</action>
            <action>maincpu.rw@1E328 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E314 = 0040    </action>
            <action>maincpu.rw@1E320 = 0036    </action>
            <action>maincpu.rd@1E326 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 0006D750        </action>
            <action>maincpu.rq@6D750 = 41EE010043E80001</action>
            <action>maincpu.rq@6D758 = 247C000F09701401</action>
            <action>maincpu.rq@6D760 = 123900300000B401</action>
            <action>maincpu.rq@6D768 = 67F40C0100FB6602</action>
            <action>maincpu.rq@6D770 = 53100C0100F76602</action>
            <action>maincpu.rq@6D778 = 52100C0100FD6604</action>
            <action>maincpu.rq@6D780 = 041000100C0100FE</action>
            <action>maincpu.rq@6D788 = 6604061000100C01</action>
            <action>maincpu.rq@6D790 = 00BB660253110C01</action>
            <action>maincpu.rq@6D798 = 00B7660252110211</action>
            <action>maincpu.rq@6D7A0 = 000F0C0100EF660E</action>
            <action>maincpu.rq@6D7A8 = 1011670606000010</action>
            <action>maincpu.rq@6D7B0 = 4E9210104E920C01</action>
            <action>maincpu.rq@6D7B8 = 00DF660C103C0001</action>
            <action>maincpu.rq@6D7C0 = 4E92103C00034E92</action>
            <action>maincpu.rq@6D7C8 = 6094000000000000</action>
            <!--
            6D750 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            6D754 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            6D758 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            6D75E | 1401           : move.b  D1, D2
            6D760 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            6D766 | B401           : cmp.b   D1, D2
            6D768 | 67F4           : beq     $6d75e
            6D76A | 0C01 00FB      : cmpi.b  #-$5, D1
            6D76E | 6602           : bne     $6d772
            6D770 | 5310           : subq.b  #1, (A0)      // decrease code -01
            6D772 | 0C01 00F7      : cmpi.b  #-$9, D1
            6D776 | 6602           : bne     $6d77a
            6D778 | 5210           : addq.b  #1, (A0)      // increase code +01
            6D77A | 0C01 00FD      : cmpi.b  #-$3, D1
            6D77E | 6604           : bne     $6d784
            6D780 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            6D784 | 0C01 00FE      : cmpi.b  #-$2, D1
            6D788 | 6604           : bne     $6d78e
            6D78A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            6D78E | 0C01 00BB      : cmpi.b  #-$45, D1
            6D792 | 6602           : bne     $6d796
            6D794 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            6D796 | 0C01 00B7      : cmpi.b  #-$49, D1
            6D79A | 6602           : bne     $6d79e
            6D79C | 5211           : addq.b  #1, (A1)      // increase bank +01
            6D79E | 0211 000F      : andi.b  #$f, (A1)
            6D7A2 | 0C01 00EF      : cmpi.b  #-$11, D1
            6D7A6 | 660E           : bne     $6d7b6
            6D7A8 | 1011           : move.b  (A1), D0      // play sound
            6D7AA | 6706           : beq     $6d7b2
            6D7AC | 0600 0010      : addi.b  #$10, D0
            6D7B0 | 4E92           : jsr     (A2)
            6D7B2 | 1010           : move.b  (A0), D0
            6D7B4 | 4E92           : jsr     (A2)
            6D7B6 | 0C01 00DF      : cmpi.b  #-$21, D1
            6D7BA | 660C           : bne     $6d7c8
            6D7BC | 103C 0001      : move.b  #$1, D0       // stop sound
            6D7C0 | 4E92           : jsr     (A2)
            6D7C2 | 103C 0003      : move.b  #$3, D0
            6D7C6 | 4E92           : jsr     (A2)
            6D7C8 | 6094           : bra     $6d75e
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@6D750 = 0000000000000000</action>
            <action>maincpu.rq@6D758 = 0000000000000000</action>
            <action>maincpu.rq@6D760 = 0000000000000000</action>
            <action>maincpu.rq@6D768 = 0000000000000000</action>
            <action>maincpu.rq@6D770 = 0000000000000000</action>
            <action>maincpu.rq@6D778 = 0000000000000000</action>
            <action>maincpu.rq@6D780 = 0000000000000000</action>
            <action>maincpu.rq@6D788 = 0000000000000000</action>
            <action>maincpu.rq@6D790 = 0000000000000000</action>
            <action>maincpu.rq@6D798 = 0000000000000000</action>
            <action>maincpu.rq@6D7A0 = 0000000000000000</action>
            <action>maincpu.rq@6D7A8 = 0000000000000000</action>
            <action>maincpu.rq@6D7B0 = 0000000000000000</action>
            <action>maincpu.rq@6D7B8 = 0000000000000000</action>
            <action>maincpu.rq@6D7C0 = 0000000000000000</action>
            <action>maincpu.rq@6D7C8 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
  • "no hit", "auto fire" and "attack speed up" : Rewritten routines. Side-effect is that these codes don't pass RAM check so that you need to set "skip ram/rom check" before reset the game (F3).
  • "no hit" : Added code for trap. New code is effective against traps though a mine explodes when you touch (but no damage).
  • "timer speed" : Added codes for bonus stage.

[wh1]+ World Heroes (repost)

Posted: Sun Jun 30, 2024 2:23 pm
by jman
Repost because of serious bug.

wh1.xml

Code: Select all

<!-- World Heroes (ALM-005) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62BD8 = 4EB900071F786600</action> <!-- direct attack -->
            <action>maincpu.rq@62E0A = 4EB900071F786622</action> <!-- firearms -->
            <action>maincpu.rq@1C00E = 4EB900071F844E71</action> <!-- throw -->
            <action>maincpu.rq@1BEDA = 4EB900071F926700</action> <!-- throw (air) -->
            <action>maincpu.rq@641BA = 4EB900071F786648</action> <!-- trap -->
            <action>maincpu.rq@71F70 = 0828000000FF4E75</action>
            <action>maincpu.rq@71F78 = 61F6660608280003</action>
            <action>maincpu.rq@71F80 = 60D54E7561EA6608</action>
            <action>maincpu.rq@71F88 = 102D60D6020000C0</action>
            <action>maincpu.rq@71F90 = 4E7561DC66080828</action>
            <action>maincpu.rq@71F98 = 000060D54E754200</action>
            <action>maincpu.rq@71FA0 = 4E75000000000000</action>
            <!--
            71F70 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            71F76 | 4E75           : rts
            71F78 | 61F6           : bsr     $71f70          // direct attack, firearms, trap
            71F7A | 6606           : bne     $71f82
            71F7C | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            71F82 | 4E75           : rts
            71F84 | 61EA           : bsr     $71f70          // throw
            71F86 | 6608           : bne     $71f90
            71F88 | 102D 60D6      : move.b  ($60d6,A5), D0
            71F8C | 0200 00C0      : andi.b  #$c0, D0
            71F90 | 4E75           : rts
            71F92 | 61DC           : bsr     $71f70          // throw (air)
            71F94 | 6608           : bne     $71f9e
            71F96 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            71F9C | 4E75           : rts
            71F9E | 4200           : clr.b   D0
            71FA0 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062BD8 = 0828000360D56600         </action>
            <action>maincpu.rq@062E0A = 0828000360D56622         </action>
            <action>maincpu.rq@01C00E = 102D60D6020000C0         </action>
            <action>maincpu.rq@01BEDA = 0828000060D56700         </action>
            <action>maincpu.rq@0641BA = 0828000360D56622         </action>
            <action>maincpu.rq@071F70 = 0000000000000000         </action>
            <action>maincpu.rq@071F78 = 0000000000000000         </action>
            <action>maincpu.rq@071F80 = 0000000000000000         </action>
            <action>maincpu.rq@071F88 = 0000000000000000         </action>
            <action>maincpu.rq@071F90 = 0000000000000000         </action>
            <action>maincpu.rq@071F98 = 0000000000000000         </action>
            <action>maincpu.rq@071FA0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A46A = 4EB900071FB04E71</action>
            <action>maincpu.rq@71FB0 = 102D6001082D0001</action>
            <action>maincpu.rq@71FB8 = 00FF6704102D6000</action>
            <action>maincpu.rq@71FC0 = 080000044E750000</action>
            <!--
            71FB0 | 102D 6001      : move.b  ($6001,A5), D0
            71FB4 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            71FBA | 6704           : beq     $71fc0
            71FBC | 102D 6000      : move.b  ($6000,A5), D0
            71FC0 | 0800 0004      : btst    #$4, D0
            71FC4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A46A = 102D600108000004         </action>
            <action>maincpu.rq@071FB0 = 0000000000000000         </action>
            <action>maincpu.rq@071FB8 = 0000000000000000         </action>
            <action>maincpu.rq@071FC0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@794DC = 4EB900071FD04E71</action>
            <action>maincpu.rq@71FD0 = 30360000082D0002</action>
            <action>maincpu.rq@71FD8 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@71FE0 = 916D60E04E750000</action>
            <!--
            71FD0 | 3036 0000      : move.w  (A6,D0.w), D0
            71FD4 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            71FDA | 6704           : beq     $71fe0
            71FDC | 303C FFFF      : move.w  #$ffff, D0
            71FE0 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            71FE4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@0794DC = 30360000916D60E0         </action>
            <action>maincpu.rq@071FD0 = 0000000000000000         </action>
            <action>maincpu.rq@071FD8 = 0000000000000000         </action>
            <action>maincpu.rq@071FE0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E1C4 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E1B2 = param</action>
            <action>maincpu.rw@1E1BE = param</action>
            <action>maincpu.rw@1E1C6 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E1B2 = 0040    </action>
            <action>maincpu.rw@1E1BE = 0036    </action>
            <action>maincpu.rd@1E1C4 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="bonus stage is...">
        <parameter>
            <item value="0x6000000c">none    </item>
            <item value="0x600000f4">always 1</item>
            <item value="0x60000118">always 2</item>
        </parameter>
        <script state="change">
            <action>maincpu.rd@A360 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rd@A360 = 670000EA</action>
        </script>
    </cheat>

    <cheat desc="selectable same chracter">
        <script state="on">
            <action>maincpu.rb@142F7 = 04</action> <!-- decision -->
            <action>maincpu.rb@14373 = 04</action> <!-- select -->
        </script>
        <script state="off">
            <action>maincpu.rb@142F7 = 46</action>
            <action>maincpu.rb@14373 = 06</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 00071FF0        </action>
            <action>maincpu.rq@71FF0 = 41EE010043E80001</action>
            <action>maincpu.rq@71FF8 = 247C000F09701401</action>
            <action>maincpu.rq@72000 = 123900300000B401</action>
            <action>maincpu.rq@72008 = 67F40C0100FB6602</action>
            <action>maincpu.rq@72010 = 53100C0100F76602</action>
            <action>maincpu.rq@72018 = 52100C0100FD6604</action>
            <action>maincpu.rq@72020 = 041000100C0100FE</action>
            <action>maincpu.rq@72028 = 6604061000100C01</action>
            <action>maincpu.rq@72030 = 00BB660253110C01</action>
            <action>maincpu.rq@72038 = 00B7660252110211</action>
            <action>maincpu.rq@72040 = 000F0C0100EF660E</action>
            <action>maincpu.rq@72048 = 1011670606000010</action>
            <action>maincpu.rq@72050 = 4E9210104E920C01</action>
            <action>maincpu.rq@72058 = 00DF660C103C0001</action>
            <action>maincpu.rq@72060 = 4E92103C00034E92</action>
            <action>maincpu.rq@72068 = 6094000000000000</action>
            <!--
            71FF0 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            71FF4 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            71FF8 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            71FFE | 1401           : move.b  D1, D2
            72000 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            72006 | B401           : cmp.b   D1, D2
            72008 | 67F4           : beq     $71ffe
            7200A | 0C01 00FB      : cmpi.b  #-$5, D1
            7200E | 6602           : bne     $72012
            72010 | 5310           : subq.b  #1, (A0)      // decrease code -01
            72012 | 0C01 00F7      : cmpi.b  #-$9, D1
            72016 | 6602           : bne     $7201a
            72018 | 5210           : addq.b  #1, (A0)      // increase code +01
            7201A | 0C01 00FD      : cmpi.b  #-$3, D1
            7201E | 6604           : bne     $72024
            72020 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            72024 | 0C01 00FE      : cmpi.b  #-$2, D1
            72028 | 6604           : bne     $7202e
            7202A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            7202E | 0C01 00BB      : cmpi.b  #-$45, D1
            72032 | 6602           : bne     $72036
            72034 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            72036 | 0C01 00B7      : cmpi.b  #-$49, D1
            7203A | 6602           : bne     $7203e
            7203C | 5211           : addq.b  #1, (A1)      // increase bank +01
            7203E | 0211 000F      : andi.b  #$f, (A1)
            72042 | 0C01 00EF      : cmpi.b  #-$11, D1
            72046 | 660E           : bne     $72056
            72048 | 1011           : move.b  (A1), D0      // play sound
            7204A | 6706           : beq     $72052
            7204C | 0600 0010      : addi.b  #$10, D0
            72050 | 4E92           : jsr     (A2)
            72052 | 1010           : move.b  (A0), D0
            72054 | 4E92           : jsr     (A2)
            72056 | 0C01 00DF      : cmpi.b  #-$21, D1
            7205A | 660C           : bne     $72068
            7205C | 103C 0001      : move.b  #$1, D0       // stop sound
            72060 | 4E92           : jsr     (A2)
            72062 | 103C 0003      : move.b  #$3, D0
            72066 | 4E92           : jsr     (A2)
            72068 | 6094           : bra     $71ffe
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@71FF0 = 0000000000000000</action>
            <action>maincpu.rq@71FF8 = 0000000000000000</action>
            <action>maincpu.rq@72000 = 0000000000000000</action>
            <action>maincpu.rq@72008 = 0000000000000000</action>
            <action>maincpu.rq@72010 = 0000000000000000</action>
            <action>maincpu.rq@72018 = 0000000000000000</action>
            <action>maincpu.rq@72020 = 0000000000000000</action>
            <action>maincpu.rq@72028 = 0000000000000000</action>
            <action>maincpu.rq@72030 = 0000000000000000</action>
            <action>maincpu.rq@72038 = 0000000000000000</action>
            <action>maincpu.rq@72040 = 0000000000000000</action>
            <action>maincpu.rq@72048 = 0000000000000000</action>
            <action>maincpu.rq@72050 = 0000000000000000</action>
            <action>maincpu.rq@72058 = 0000000000000000</action>
            <action>maincpu.rq@72060 = 0000000000000000</action>
            <action>maincpu.rq@72068 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
wh1h.xml

Code: Select all

<!-- World Heroes (ALH-005) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62E12 = 4EB90006D6786600</action> <!-- direct attack -->
            <action>maincpu.rq@63044 = 4EB90006D6786622</action> <!-- firearms -->
            <action>maincpu.rq@1C160 = 4EB90006D6844E71</action> <!-- throw -->
            <action>maincpu.rq@1C02C = 4EB90006D6926700</action> <!-- throw (air) -->
            <action>maincpu.rq@6440E = 4EB90006D6786648</action> <!-- trap -->
            <action>maincpu.rq@6D670 = 0828000000FF4E75</action>
            <action>maincpu.rq@6D678 = 61F6660608280003</action>
            <action>maincpu.rq@6D680 = 60D54E7561EA6608</action>
            <action>maincpu.rq@6D688 = 102D60D6020000C0</action>
            <action>maincpu.rq@6D690 = 4E7561DC66080828</action>
            <action>maincpu.rq@6D698 = 000060D54E754200</action>
            <action>maincpu.rq@6D6A0 = 4E75000000000000</action>
            <!--
            6D670 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            6D676 | 4E75           : rts
            6D678 | 61F6           : bsr     $6d670          // direct attack, firearms, trap
            6D67A | 6606           : bne     $6d682
            6D67C | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            6D682 | 4E75           : rts
            6D684 | 61EA           : bsr     $6d670          // throw
            6D686 | 6608           : bne     $6d690
            6D688 | 102D 60D6      : move.b  ($60d6,A5), D0
            6D68C | 0200 00C0      : andi.b  #$c0, D0
            6D690 | 4E75           : rts
            6D692 | 61DC           : bsr     $6d670          // throw (air)
            6D694 | 6608           : bne     $6d69e
            6D696 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            6D69C | 4E75           : rts
            6D69E | 4200           : clr.b   D0
            6D6A0 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062E12 = 0828000360D56600         </action>
            <action>maincpu.rq@063044 = 0828000360D56622         </action>
            <action>maincpu.rq@01C160 = 102D60D6020000C0         </action>
            <action>maincpu.rq@01C02C = 0828000060D56700         </action>
            <action>maincpu.rq@06440E = 0828000360D56648         </action>
            <action>maincpu.rq@06D670 = 0000000000000000         </action>
            <action>maincpu.rq@06D678 = 0000000000000000         </action>
            <action>maincpu.rq@06D680 = 0000000000000000         </action>
            <action>maincpu.rq@06D688 = 0000000000000000         </action>
            <action>maincpu.rq@06D690 = 0000000000000000         </action>
            <action>maincpu.rq@06D698 = 0000000000000000         </action>
            <action>maincpu.rq@06D6A0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A58A = 4EB90006D6B04E71</action>
            <action>maincpu.rq@6D6B0 = 102D6001082D0001</action>
            <action>maincpu.rq@6D6B8 = 00FF6704102D6000</action>
            <action>maincpu.rq@6D6C0 = 080000044E750000</action>
            <!--
            6D6B0 | 102D 6001      : move.b  ($6001,A5), D0
            6D6B4 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            6D6BA | 6704           : beq     $6d6c0
            6D6BC | 102D 6000      : move.b  ($6000,A5), D0
            6D6C0 | 0800 0004      : btst    #$4, D0
            6D6C4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A58A = 102D600108000004         </action>
            <action>maincpu.rq@06D6B0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6B8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6C0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@79808 = 4EB90006D6D04E71</action>
            <action>maincpu.rq@6D6D0 = 30360000082D0002</action>
            <action>maincpu.rq@6D6D8 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@6D6E0 = 916D60E04E750000</action>
            <!--
            6D6D0 | 3036 0000      : move.w  (A6,D0.w), D0
            6D6D4 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            6D6DA | 6704           : beq     $6d6e0
            6D6DC | 303C FFFF      : move.w  #$ffff, D0
            6D6E0 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            6D6E4 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@07808C = 30360000916D60E0         </action>
            <action>maincpu.rq@06D6D0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6D8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E0 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E356 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E344 = param</action>
            <action>maincpu.rw@1E350 = param</action>
            <action>maincpu.rw@1E358 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E344 = 0040    </action>
            <action>maincpu.rw@1E350 = 0036    </action>
            <action>maincpu.rd@1E356 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="bonus stage is...">
        <parameter>
            <item value="0x6000000c">none    </item>
            <item value="0x600000f4">always 1</item>
            <item value="0x60000118">always 2</item>
        </parameter>
        <script state="change">
            <action>maincpu.rd@A388 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rd@A388 = 670000EA</action>
        </script>
    </cheat>

    <cheat desc="selectable same chracter">
        <script state="on">
            <action>maincpu.rb@143B1 = 04</action> <!-- decision -->
            <action>maincpu.rb@1442D = 04</action> <!-- select -->
        </script>
        <script state="off">
            <action>maincpu.rb@143B1 = 46</action>
            <action>maincpu.rb@1442D = 06</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 0006D6F0        </action>
            <action>maincpu.rq@6D6F0 = 41EE010043E80001</action>
            <action>maincpu.rq@6D6F8 = 247C000F09701401</action>
            <action>maincpu.rq@6D700 = 123900300000B401</action>
            <action>maincpu.rq@6D708 = 67F40C0100FB6602</action>
            <action>maincpu.rq@6D710 = 53100C0100F76602</action>
            <action>maincpu.rq@6D718 = 52100C0100FD6604</action>
            <action>maincpu.rq@6D720 = 041000100C0100FE</action>
            <action>maincpu.rq@6D728 = 6604061000100C01</action>
            <action>maincpu.rq@6D730 = 00BB660253110C01</action>
            <action>maincpu.rq@6D738 = 00B7660252110211</action>
            <action>maincpu.rq@6D740 = 000F0C0100EF660E</action>
            <action>maincpu.rq@6D748 = 1011670606000010</action>
            <action>maincpu.rq@6D750 = 4E9210104E920C01</action>
            <action>maincpu.rq@6D758 = 00DF660C103C0001</action>
            <action>maincpu.rq@6D760 = 4E92103C00034E92</action>
            <action>maincpu.rq@6D768 = 6094000000000000</action>
            <!--
            6D6F0 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            6D6F4 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            6D6F8 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            6D6FE | 1401           : move.b  D1, D2
            6D700 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            6D706 | B401           : cmp.b   D1, D2
            6D708 | 67F4           : beq     $6d6fe
            6D70A | 0C01 00FB      : cmpi.b  #-$5, D1
            6D70E | 6602           : bne     $6d712
            6D710 | 5310           : subq.b  #1, (A0)      // decrease code -01
            6D712 | 0C01 00F7      : cmpi.b  #-$9, D1
            6D716 | 6602           : bne     $6d71a
            6D718 | 5210           : addq.b  #1, (A0)      // increase code +01
            6D71A | 0C01 00FD      : cmpi.b  #-$3, D1
            6D71E | 6604           : bne     $6d724
            6D720 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            6D724 | 0C01 00FE      : cmpi.b  #-$2, D1
            6D728 | 6604           : bne     $6d72e
            6D72A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            6D72E | 0C01 00BB      : cmpi.b  #-$45, D1
            6D732 | 6602           : bne     $6d736
            6D734 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            6D736 | 0C01 00B7      : cmpi.b  #-$49, D1
            6D73A | 6602           : bne     $6d73e
            6D73C | 5211           : addq.b  #1, (A1)      // increase bank +01
            6D73E | 0211 000F      : andi.b  #$f, (A1)
            6D742 | 0C01 00EF      : cmpi.b  #-$11, D1
            6D746 | 660E           : bne     $6d756
            6D748 | 1011           : move.b  (A1), D0      // play sound
            6D74A | 6706           : beq     $6d752
            6D74C | 0600 0010      : addi.b  #$10, D0
            6D750 | 4E92           : jsr     (A2)
            6D752 | 1010           : move.b  (A0), D0
            6D754 | 4E92           : jsr     (A2)
            6D756 | 0C01 00DF      : cmpi.b  #-$21, D1
            6D75A | 660C           : bne     $6d768
            6D75C | 103C 0001      : move.b  #$1, D0       // stop sound
            6D760 | 4E92           : jsr     (A2)
            6D762 | 103C 0003      : move.b  #$3, D0
            6D766 | 4E92           : jsr     (A2)
            6D768 | 6094           : bra     $6d6fe
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@6D6F0 = 0000000000000000</action>
            <action>maincpu.rq@6D6F8 = 0000000000000000</action>
            <action>maincpu.rq@6D700 = 0000000000000000</action>
            <action>maincpu.rq@6D708 = 0000000000000000</action>
            <action>maincpu.rq@6D710 = 0000000000000000</action>
            <action>maincpu.rq@6D718 = 0000000000000000</action>
            <action>maincpu.rq@6D720 = 0000000000000000</action>
            <action>maincpu.rq@6D728 = 0000000000000000</action>
            <action>maincpu.rq@6D730 = 0000000000000000</action>
            <action>maincpu.rq@6D738 = 0000000000000000</action>
            <action>maincpu.rq@6D740 = 0000000000000000</action>
            <action>maincpu.rq@6D748 = 0000000000000000</action>
            <action>maincpu.rq@6D750 = 0000000000000000</action>
            <action>maincpu.rq@6D758 = 0000000000000000</action>
            <action>maincpu.rq@6D760 = 0000000000000000</action>
            <action>maincpu.rq@6D768 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
wh1ha.xml

Code: Select all

<!-- World Heroes (set 3) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <!-- trap (mine) explodes when you touch though no damage -->
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@62E06 = 4EB90006D6D06600</action> <!-- direct attack -->
            <action>maincpu.rq@63038 = 4EB90006D6D06622</action> <!-- firearms -->
            <action>maincpu.rq@1C1C4 = 4EB90006D6E44E71</action> <!-- throw -->
            <action>maincpu.rq@1C090 = 4EB90006D6F26700</action> <!-- throw (air) -->
            <action>maincpu.rq@643FC = 4EB90006D6D06648</action> <!-- trap -->
            <action>maincpu.rq@6D6D0 = 0828000000FF4E75</action>
            <action>maincpu.rq@6D6D8 = 61F6660608280003</action>
            <action>maincpu.rq@6D6E0 = 60D54E7561EA6608</action>
            <action>maincpu.rq@6D6E8 = 102D60D6020000C0</action>
            <action>maincpu.rq@6D6F0 = 4E7561DC66080828</action>
            <action>maincpu.rq@6D6F8 = 000060D54E754200</action>
            <action>maincpu.rq@6D700 = 4E75000000000000</action>
            <!--
            6D6D0 | 0828 0000 00FF : btst    #$0, ($ff,A0)   // common flag check routine
            6D6D6 | 4E75           : rts
            6D6D8 | 61F6           : bsr     $6d6d0          // direct attack, firearms, trap
            6D6DA | 6606           : bne     $6d6e2
            6D6DC | 0828 0003 60D5 : btst    #$3, ($60d5,A0)
            6D6E2 | 4E75           : rts
            6D6E4 | 61EA           : bsr     $6d6d0          // throw
            6D6E6 | 6608           : bne     $6d6f0
            6D6E8 | 102D 60D6      : move.b  ($60d6,A5), D0
            6D6EC | 0200 00C0      : andi.b  #$c0, D0
            6D6F0 | 4E75           : rts
            6D6F2 | 61DC           : bsr     $6d6d0          // throw (air)
            6D6F4 | 6608           : bne     $6d6fe
            6D6F6 | 0828 0000 60D5 : btst    #$0, ($60d5,A0)
            6D6FC | 4E75           : rts
            6D6FE | 4200           : clr.b   D0
            6D700 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  01</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  01</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FE</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FE</action>
            <action>maincpu.rq@062E06 = 0828000360D56600         </action>
            <action>maincpu.rq@063038 = 0828000360D56622         </action>
            <action>maincpu.rq@01C1C4 = 102D60D6020000C0         </action>
            <action>maincpu.rq@01C090 = 0828000060D56700         </action>
            <action>maincpu.rq@0643FC = 0828000360D56622         </action>
            <action>maincpu.rq@06D6D0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6D8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6E8 = 0000000000000000         </action>
            <action>maincpu.rq@06D6F0 = 0000000000000000         </action>
            <action>maincpu.rq@06D6F8 = 0000000000000000         </action>
            <action>maincpu.rq@06D700 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@1A5EE = 4EB90006D7104E71</action>
            <action>maincpu.rq@6D710 = 102D6001082D0001</action>
            <action>maincpu.rq@6D718 = 00FF6704102D6000</action>
            <action>maincpu.rq@6D720 = 080000044E750000</action>
            <!--
            6D710 | 102D 6001      : move.b  ($6001,A5), D0
            6D714 | 082D 0001 00FF : btst    #$1, ($ff,A5)
            6D71A | 6704           : beq     $6d720
            6D71C | 102D 6000      : move.b  ($6000,A5), D0
            6D720 | 0800 0004      : btst    #$4, D0
            6D724 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  02</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  02</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FD</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FD</action>
            <action>maincpu.rq@01A5EE = 102D600108000004         </action>
            <action>maincpu.rq@06D710 = 0000000000000000         </action>
            <action>maincpu.rq@06D718 = 0000000000000000         </action>
            <action>maincpu.rq@06D720 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <parameter>
            <item value="0x01">P1          </item>
            <item value="0x02">P2          </item>
            <item value="0x03">both players</item>
        </parameter>
        <script state="on">
            <action>maincpu.rq@79862 = 4EB90006D7304E71</action>
            <action>maincpu.rq@6D730 = 30360000082D0002</action>
            <action>maincpu.rq@6D738 = 00FF6704303CFFFF</action>
            <action>maincpu.rq@6D740 = 916D60E04E750000</action>
            <!--
            6D730 | 3036 0000      : move.w  (A6,D0.w), D0
            6D734 | 082D 0002 00FF : btst    #$2, ($ff,A5)
            6D73A | 6704           : beq     $6d740
            6D73C | 303C FFFF      : move.w  #$ffff, D0
            6D740 | 916D 60E0      : sub.w   D0, ($60e0,A5)
            6D744 | 4E75           : rts
            -->
        </script>
        <script state="run">
            <action condition="(param band 01) == 00">maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action condition="(param band 02) == 00">maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action condition="(param band 01) != 00">maincpu.pb@1000FF = maincpu.pb@1000FF bor  04</action>
            <action condition="(param band 02) != 00">maincpu.pb@1001FF = maincpu.pb@1001FF bor  04</action>
        </script>
        <script state="off">
            <action>maincpu.pb@1000FF = maincpu.pb@1000FF band FB</action>
            <action>maincpu.pb@1001FF = maincpu.pb@1001FF band FB</action>
            <action>maincpu.rq@079862 = 30360000916D60E0         </action>
            <action>maincpu.rq@06D730 = 0000000000000000         </action>
            <action>maincpu.rq@06D738 = 0000000000000000         </action>
            <action>maincpu.rq@06D740 = 0000000000000000         </action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x60">02       </item>
            <item value="0x40">03       </item>
            <item value="0x20">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="on">
            <action>maincpu.rw@1E326 = 1D7C</action>
        </script>
        <script state="change">
            <action>maincpu.rw@1E314 = param</action>
            <action>maincpu.rw@1E320 = param</action>
            <action>maincpu.rw@1E328 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rw@1E314 = 0040    </action>
            <action>maincpu.rw@1E320 = 0036    </action>
            <action>maincpu.rd@1E326 = 1D6E30C5</action>
        </script>
    </cheat>

    <cheat desc="bonus stage is...">
        <parameter>
            <item value="0x6000000c">none    </item>
            <item value="0x600000f4">always 1</item>
            <item value="0x60000118">always 2</item>
        </parameter>
        <script state="change">
            <action>maincpu.rd@A3B8 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rd@A3B8 = 670000EA</action>
        </script>
    </cheat>

    <cheat desc="selectable same chracter">
        <script state="on">
            <action>maincpu.rb@143E9 = 04</action> <!-- decision -->
            <action>maincpu.rb@1446D = 04</action> <!-- select -->
        </script>
        <script state="off">
            <action>maincpu.rb@143E9 = 4E</action>
            <action>maincpu.rb@1446D = 06</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <!-- don't play code 0x01 because of no sound response -->
        <!-- valid bank number seems to be 0x00 only? -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rd@F00B6 = 000F09AC        </action> <!-- check sound code in interrupt -->
            <action>maincpu.rd@F4C32 = 0006D750        </action>
            <action>maincpu.rq@6D750 = 41EE010043E80001</action>
            <action>maincpu.rq@6D758 = 247C000F09701401</action>
            <action>maincpu.rq@6D760 = 123900300000B401</action>
            <action>maincpu.rq@6D768 = 67F40C0100FB6602</action>
            <action>maincpu.rq@6D770 = 53100C0100F76602</action>
            <action>maincpu.rq@6D778 = 52100C0100FD6604</action>
            <action>maincpu.rq@6D780 = 041000100C0100FE</action>
            <action>maincpu.rq@6D788 = 6604061000100C01</action>
            <action>maincpu.rq@6D790 = 00BB660253110C01</action>
            <action>maincpu.rq@6D798 = 00B7660252110211</action>
            <action>maincpu.rq@6D7A0 = 000F0C0100EF660E</action>
            <action>maincpu.rq@6D7A8 = 1011670606000010</action>
            <action>maincpu.rq@6D7B0 = 4E9210104E920C01</action>
            <action>maincpu.rq@6D7B8 = 00DF660C103C0001</action>
            <action>maincpu.rq@6D7C0 = 4E92103C00034E92</action>
            <action>maincpu.rq@6D7C8 = 6094000000000000</action>
            <!--
            6D750 | 41EE 0100      : lea     ($100,A6), A0 // sound code addres ($108100)
            6D754 | 43E8 0001      : lea     ($1,A0), A1   // bank address ($108101)
            6D758 | 247C 000F 0970 : movea.l #$f0970, A2   // sound latch routine address
            6D75E | 1401           : move.b  D1, D2
            6D760 | 1239 0030 0000 : move.b  $300000.l, D1 // read input
            6D766 | B401           : cmp.b   D1, D2
            6D768 | 67F4           : beq     $6d75e
            6D76A | 0C01 00FB      : cmpi.b  #-$5, D1
            6D76E | 6602           : bne     $6d772
            6D770 | 5310           : subq.b  #1, (A0)      // decrease code -01
            6D772 | 0C01 00F7      : cmpi.b  #-$9, D1
            6D776 | 6602           : bne     $6d77a
            6D778 | 5210           : addq.b  #1, (A0)      // increase code +01
            6D77A | 0C01 00FD      : cmpi.b  #-$3, D1
            6D77E | 6604           : bne     $6d784
            6D780 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            6D784 | 0C01 00FE      : cmpi.b  #-$2, D1
            6D788 | 6604           : bne     $6d78e
            6D78A | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            6D78E | 0C01 00BB      : cmpi.b  #-$45, D1
            6D792 | 6602           : bne     $6d796
            6D794 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            6D796 | 0C01 00B7      : cmpi.b  #-$49, D1
            6D79A | 6602           : bne     $6d79e
            6D79C | 5211           : addq.b  #1, (A1)      // increase bank +01
            6D79E | 0211 000F      : andi.b  #$f, (A1)
            6D7A2 | 0C01 00EF      : cmpi.b  #-$11, D1
            6D7A6 | 660E           : bne     $6d7b6
            6D7A8 | 1011           : move.b  (A1), D0      // play sound
            6D7AA | 6706           : beq     $6d7b2
            6D7AC | 0600 0010      : addi.b  #$10, D0
            6D7B0 | 4E92           : jsr     (A2)
            6D7B2 | 1010           : move.b  (A0), D0
            6D7B4 | 4E92           : jsr     (A2)
            6D7B6 | 0C01 00DF      : cmpi.b  #-$21, D1
            6D7BA | 660C           : bne     $6d7c8
            6D7BC | 103C 0001      : move.b  #$1, D0       // stop sound
            6D7C0 | 4E92           : jsr     (A2)
            6D7C2 | 103C 0003      : move.b  #$3, D0
            6D7C6 | 4E92           : jsr     (A2)
            6D7C8 | 6094           : bra     $6d75e
            -->
        </script>
        <script state="run">
            <output format="----- world heroes sound test mode -----" line="10" align="center" />
            <output format="left : decrease code -01"                 line="11" align="center" />
            <output format="right : increase code +01"                line="12" align="center" />
            <output format="down : decrease code -10"                 line="13" align="center" />
            <output format="up : increase code +10"                   line="14" align="center" />
            <output format="button 3 + left : decrease bank -01"      line="15" align="center" />
            <output format="button 3 + right : increase bank +01"     line="16" align="center" />
            <output format="button 1 : play sound"                    line="17" align="center" />
            <output format="button 2 : stop sound"                    line="18" align="center" />
            <output format="----------------------------"             line="19" align="center" />
            <output format="&lt;&lt; bank %X &gt;&gt;"                line="21" align="center"  >
                <argument>maincpu.pb@108101</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"        line="23" align="center"  >
                <argument>maincpu.pb@108100</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rd@F00B6 = 00C0044A        </action>
            <action>maincpu.rd@F4C32 = 00009200        </action>
            <action>maincpu.rq@6D750 = 0000000000000000</action>
            <action>maincpu.rq@6D758 = 0000000000000000</action>
            <action>maincpu.rq@6D760 = 0000000000000000</action>
            <action>maincpu.rq@6D768 = 0000000000000000</action>
            <action>maincpu.rq@6D770 = 0000000000000000</action>
            <action>maincpu.rq@6D778 = 0000000000000000</action>
            <action>maincpu.rq@6D780 = 0000000000000000</action>
            <action>maincpu.rq@6D788 = 0000000000000000</action>
            <action>maincpu.rq@6D790 = 0000000000000000</action>
            <action>maincpu.rq@6D798 = 0000000000000000</action>
            <action>maincpu.rq@6D7A0 = 0000000000000000</action>
            <action>maincpu.rq@6D7A8 = 0000000000000000</action>
            <action>maincpu.rq@6D7B0 = 0000000000000000</action>
            <action>maincpu.rq@6D7B8 = 0000000000000000</action>
            <action>maincpu.rq@6D7C0 = 0000000000000000</action>
            <action>maincpu.rq@6D7C8 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="skip ram/rom check">
        <script state="on">
            <action condition="maincpu.rd@C11AFC == 3A3C7FFF">temp0 = C11AFC, maincpu.rd@temp0 = 60000168</action> <!-- euro, euro-s1, japan-s2, japan-s1 -->
            <action condition="maincpu.rd@C10C20 == 3A3C7FFF">temp0 = C10C20, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1c, japan-mv1b -->
            <action condition="maincpu.rd@C10AFC == 3A3C7FFF">temp0 = C10AFC, maincpu.rd@temp0 = 60000168</action> <!-- asia-mv1b, japan-mv1c -->
            <action condition="maincpu.rd@C11AD2 == 3A3C7FFF">temp0 = C11AD2, maincpu.rd@temp0 = 60000168</action> <!-- us, us-e, us-v2, us-u4 -->
            <action condition="maincpu.rd@C11ABC == 3A3C7FFF">temp0 = C11ABC, maincpu.rd@temp0 = 60000104</action> <!-- us-u3 -->
            <action condition="maincpu.rd@C11C24 == 3A3C7FFF">temp0 = C11C24, maincpu.rd@temp0 = 60000168</action> <!-- japan -->
            <action condition="maincpu.rd@C11AE6 == 3A3C7FFF">temp0 = C11AE6, maincpu.rd@temp0 = 60000104</action> <!-- japan-j3a -->
            <action condition="maincpu.rd@C11BC6 == 3A3C7FFF">temp0 = C11BC6, maincpu.rd@temp0 = 6000017C</action> <!-- japan-hotel -->
        </script>
        <script state="off">
            <action>maincpu.rd@temp0 = 3A3C7FFF</action>
        </script>
    </cheat>

</mamecheat>
  • "no hit", "auto fire" and "attack speed up" : Fixed unworked player 2 codes due to ugly copy-and-paste failure.
  • "bonus stage" : Added new. "always 1" and "always 2" repeats bonus stage forever...
  • "selectable same character" : Added new. Character's color doesn't change when P1 and P2 select the same character though.