Page 1 of 1

[mslug] Metal Slug

Posted: Sat Jan 06, 2024 10:45 am
by jman

Code: Select all

<!-- Metal Slug - Super Vehicle-001 -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>maincpu.rb@28590 = 60</action>
        </script>
        <script state="off">
            <action>maincpu.rb@28590 = 66</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>maincpu.rb@45983 = 02</action> <!-- shot (metal slug) -->
            <action>maincpu.rb@5CDAF = 02</action> <!-- shot -->
            <action>maincpu.rb@5CDC7 = 02</action> <!-- bomb/cannon -->
            <action>maincpu.rb@9A4AB = 02</action> <!-- battery (last mission) -->
        </script>
        <script state="off">
            <action>maincpu.rb@45983 = 03</action>
            <action>maincpu.rb@5CDAF = 03</action>
            <action>maincpu.rb@5CDC7 = 03</action>
            <action>maincpu.rb@9A4AB = 03</action>
        </script>
    </cheat>

    <cheat desc="multiple jump">
        <script state="on">
            <action>maincpu.rq@36A50 = 4EB90009C6100C2E</action> <!-- jump -->
            <action>maincpu.rq@36DC4 = 4EB90009C6184EB9</action> <!-- fall down -->
            <action>maincpu.rq@2CA70 = 4EB90009C6204EBA</action> <!-- jump (metal slug) -->
            <action>maincpu.rq@2D216 = 4EB90009C628082E</action> <!-- fall down (metal slug) -->
            <action>maincpu.rq@9C610 = 43F90009C6326016</action>
            <action>maincpu.rq@9C618 = 43F90009C640600E</action>
            <action>maincpu.rq@9C620 = 43F90009C6546006</action>
            <action>maincpu.rq@9C628 = 43F90009C6622C89</action>
            <action>maincpu.rq@9C630 = 4E754EB90005CDB4</action>
            <action>maincpu.rq@9C638 = 650E4EF900036A70</action>
            <action>maincpu.rq@9C640 = 4EB90005CDB46406</action>
            <action>maincpu.rq@9C648 = 4EF9000369144EF9</action>
            <action>maincpu.rq@9C650 = 00036DCA4EB90005</action>
            <action>maincpu.rq@9C658 = CDB4650E4EF90002</action>
            <action>maincpu.rq@9C660 = CA8A4EB90005CDB4</action>
            <action>maincpu.rq@9C668 = 64064EF90002C9C4</action>
            <action>maincpu.rq@9C670 = 4EF90002D26E0000</action>
            <!--
            9C610 | 43F9 0009 C632 : lea     $9c632.l, A1 // jump
            9C616 | 6016           : bra     $9c62e
            9C618 | 43F9 0009 C640 : lea     $9c640.l, A1 // fall down
            9C61E | 600E           : bra     $9c62e
            9C620 | 43F9 0009 C654 : lea     $9c654.l, A1 // jump (metal slug)
            9C626 | 6006           : bra     $9c62e
            9C628 | 43F9 0009 C662 : lea     $9c662.l, A1 // fall down (metal slug)
            9C62E | 2C89           : move.l  A1, (A6)
            9C630 | 4E75           : rts
            9C632 | 4EB9 0005 CDB4 : jsr     $5cdb4.l     // jump
            9C638 | 650E           : bcs     $9c648
            9C63A | 4EF9 0003 6A70 : jmp     $36a70.l
            9C640 | 4EB9 0005 CDB4 : jsr     $5cdb4.l     // fall down
            9C646 | 6406           : bcc     $9c64e
            9C648 | 4EF9 0003 6914 : jmp     $36914.l
            9C64E | 4EF9 0003 6DCA : jmp     $36dca.l
            9C654 | 4EB9 0005 CDB4 : jsr     $5cdb4.l     // jump (metal slug)
            9C65A | 650E           : bcs     $9c66a
            9C65C | 4EF9 0002 CA8A : jmp     $2ca8a.l
            9C662 | 4EB9 0005 CDB4 : jsr     $5cdb4.l     // fall down (metal slug)
            9C668 | 6406           : bcc     $9c670
            9C66A | 4EF9 0002 C9C4 : jmp     $2c9c4.l
            9C670 | 4EF9 0002 D26E : jmp     $2d26e.l
            -->
        </script>
        <script state="off">
            <action>maincpu.rq@36A50 = 43FA001E2C890C2E</action>
            <action>maincpu.rq@36DC4 = 43FA00042C894EB9</action>
            <action>maincpu.rq@2CA70 = 43FA00182C894EBA</action>
            <action>maincpu.rq@2D216 = 43FA00562C89082E</action>
            <action>maincpu.rq@9C610 = 0000000000000000</action>
            <action>maincpu.rq@9C618 = 0000000000000000</action>
            <action>maincpu.rq@9C620 = 0000000000000000</action>
            <action>maincpu.rq@9C628 = 0000000000000000</action>
            <action>maincpu.rq@9C630 = 0000000000000000</action>
            <action>maincpu.rq@9C638 = 0000000000000000</action>
            <action>maincpu.rq@9C640 = 0000000000000000</action>
            <action>maincpu.rq@9C648 = 0000000000000000</action>
            <action>maincpu.rq@9C650 = 0000000000000000</action>
            <action>maincpu.rq@9C658 = 0000000000000000</action>
            <action>maincpu.rq@9C660 = 0000000000000000</action>
            <action>maincpu.rq@9C668 = 0000000000000000</action>
            <action>maincpu.rq@9C670 = 0000000000000000</action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0xff">01 (slow)</item>
            <item value="0x7f">02       </item>
            <item value="0x3f">03       </item>
            <item value="0x1f">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="change">
            <action>maincpu.rb@1BF7 = param</action>
        </script>
        <script state="off">
            <action>maincpu.rb@1BF7 = 7F</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 (music), 0x01 (sfx) and 0x02 (voice) -->
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>maincpu.rb@01E77 = 02              </action> <!-- watchdog -->
            <action>maincpu.rq@01FDC = 4EF90009C6805279</action>
            <action>maincpu.rq@9C680 = 41F90010800043E8</action>
            <action>maincpu.rq@9C688 = 000145F822141602</action>
            <action>maincpu.rq@9C690 = 143900300000B602</action>
            <action>maincpu.rq@9C698 = 67E60C0200FB6602</action>
            <action>maincpu.rq@9C6A0 = 53100C0200F76602</action>
            <action>maincpu.rq@9C6A8 = 52100C0200FD6604</action>
            <action>maincpu.rq@9C6B0 = 041000100C0200FE</action>
            <action>maincpu.rq@9C6B8 = 6604061000100C02</action>
            <action>maincpu.rq@9C6C0 = 00BB660253110C02</action>
            <action>maincpu.rq@9C6C8 = 00B7660252110211</action>
            <action>maincpu.rq@9C6D0 = 000F0C0200EF6610</action>
            <action>maincpu.rq@9C6D8 = 4240101167060600</action>
            <action>maincpu.rq@9C6E0 = 000FE14880104E92</action>
            <action>maincpu.rq@9C6E8 = 0C0200DF6612303C</action>
            <action>maincpu.rq@9C6F0 = 00014E92303C0003</action>
            <action>maincpu.rq@9C6F8 = 4E92303C00074E92</action>
            <action>maincpu.rq@9C700 = 6000FF7E00000000</action>
            <!--
            9C680 | 41F9 0010 8000 : lea     $108000.l, A0 // sound code address
            9C686 | 43E8 0001      : lea     ($1,A0), A1   // bank number address ($108001)
            9C68A | 45F8 2214      : lea     $2214.w, A2   // sound latch routine
            9C68E | 1602           : move.b  D2, D3
            9C690 | 1439 0030 0000 : move.b  $300000.l, D2 // read input
            9C696 | B602           : cmp.b   D2, D3
            9C698 | 67E6           : beq     $9c680
            9C69A | 0C02 00FB      : cmpi.b  #-$5, D2
            9C69E | 6602           : bne     $9c6a2
            9C6A0 | 5310           : subq.b  #1, (A0)      // decrease code -01
            9C6A2 | 0C02 00F7      : cmpi.b  #-$9, D2
            9C6A6 | 6602           : bne     $9c6aa
            9C6A8 | 5210           : addq.b  #1, (A0)      // increase code +01
            9C6AA | 0C02 00FD      : cmpi.b  #-$3, D2
            9C6AE | 6604           : bne     $9c6b4
            9C6B0 | 0410 0010      : subi.b  #$10, (A0)    // decrease code -10
            9C6B4 | 0C02 00FE      : cmpi.b  #-$2, D2
            9C6B8 | 6604           : bne     $9c6be
            9C6BA | 0610 0010      : addi.b  #$10, (A0)    // increase code +10
            9C6BE | 0C02 00BB      : cmpi.b  #-$45, D2
            9C6C2 | 6602           : bne     $9c6c6
            9C6C4 | 5311           : subq.b  #1, (A1)      // decrease bank -01
            9C6C6 | 0C02 00B7      : cmpi.b  #-$49, D2
            9C6CA | 6602           : bne     $9c6ce
            9C6CC | 5211           : addq.b  #1, (A1)      // increase bank +01
            9C6CE | 0211 000F      : andi.b  #$f, (A1)     // mask bank number (0x00-0x0f)
            9C6D2 | 0C02 00EF      : cmpi.b  #-$11, D2
            9C6D6 | 6610           : bne     $9c6e8
            9C6D8 | 4240           : clr.w   D0            // play sound
            9C6DA | 1011           : move.b  (A1), D0
            9C6DC | 6706           : beq     $9c6e4
            9C6DE | 0600 000F      : addi.b  #$f, D0
            9C6E2 | E148           : lsl.w   #8, D0
            9C6E4 | 8010           : or.b    (A0), D0
            9C6E6 | 4E92           : jsr     (A2)
            9C6E8 | 0C02 00DF      : cmpi.b  #-$21, D2
            9C6EC | 6612           : bne     $9c700
            9C6EE | 303C 0001      : move.w  #$1, D0       // stop sound
            9C6F2 | 4E92           : jsr     (A2)
            9C6F4 | 303C 0003      : move.w  #$3, D0
            9C6F8 | 4E92           : jsr     (A2)
            9C6FA | 303C 0007      : move.w  #$7, D0
            9C6FE | 4E92           : jsr     (A2)
            9C700 | 6000 FF7E      : bra     $9c680
            -->
        </script>
        <script state="run">
            <output format="----- metal slug 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 %02X &gt;&gt;"            line="21" align="center"  >
                <argument>maincpu.pb@108001</argument>
            </output>
            <output format="&lt;&lt; sound code %02X &gt;&gt;"      line="23" align="center"  >
                <argument>maincpu.pb@108000</argument>
            </output>
        </script>
        <script state="off">
            <action>maincpu.rb@01E77 = 08              </action>
            <action>maincpu.rq@01FDC = 43FA00042C895279</action>
            <action>maincpu.rq@9C680 = 0000000000000000</action>
            <action>maincpu.rq@9C688 = 0000000000000000</action>
            <action>maincpu.rq@9C690 = 0000000000000000</action>
            <action>maincpu.rq@9C698 = 0000000000000000</action>
            <action>maincpu.rq@9C6A0 = 0000000000000000</action>
            <action>maincpu.rq@9C6A8 = 0000000000000000</action>
            <action>maincpu.rq@9C6B0 = 0000000000000000</action>
            <action>maincpu.rq@9C6B8 = 0000000000000000</action>
            <action>maincpu.rq@9C6C0 = 0000000000000000</action>
            <action>maincpu.rq@9C6C8 = 0000000000000000</action>
            <action>maincpu.rq@9C6D0 = 0000000000000000</action>
            <action>maincpu.rq@9C6D8 = 0000000000000000</action>
            <action>maincpu.rq@9C6E0 = 0000000000000000</action>
            <action>maincpu.rq@9C6E8 = 0000000000000000</action>
            <action>maincpu.rq@9C6F0 = 0000000000000000</action>
            <action>maincpu.rq@9C6F8 = 0000000000000000</action>
            <action>maincpu.rq@9C700 = 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>
"sound test mode" : Don't play code 0x01 because of no sound response. Valid bank number seems to be 0x00 (music), 0x01 (sfx) and 0x02 (voice). For example, "Heavy Machine-gun" (voice) is code 0x2d with bank 0x02.