Page 1 of 1

[smsj/captsilv] Captain Silver

Posted: Sun Aug 15, 2021 2:08 pm
by jman

Code: Select all

<cheat desc="no hit (wip)">
	<script state="on">
		<action>slot:cart:rom.mw@6133 = c937</action>
	</script>
	<script state="off">
		<action>slot:cart:rom.mw@6133 = cbfd</action>
	</script>
</cheat>

<cheat desc="auto fire (wip)">
	<script state="on">
		<action>slot:cart:rom.md@1ce6 =         cb7f00cd</action> <!-- stand -->
		<action>slot:cart:rom.md@1ef0 =         e67f00cd</action> <!-- jump -->
		<action>slot:cart:rom.md@208d =         cb7f00cd</action> <!-- crouch -->
		<action>slot:cart:rom.md@23e4 =         cb7f00cd</action> <!-- ladder -->
		<action>slot:cart:rom.mq@7f00 = 063a4710e6c0053a</action>
		<action>slot:cart:rom.mq@7f08 = ffffffffffc9b0c0</action>
		<!--
		7f00 | 3a 05 c0 : ld  a,($c005)
		7f03 | e6 10    : and $10
		7f05 | 47       : ld  b,a
		7f06 | 3a 06 c0 : ld  a,($c006)
		7f09 | b0       : or  b
		7f0a | c9       : ret
		-->
	</script>
	<script state="off">
		<action>slot:cart:rom.md@1ce6 =         cbc0063a</action>
		<action>slot:cart:rom.md@1ef0 =         e6c0063a</action>
		<action>slot:cart:rom.md@208d =         cbc0063a</action>
		<action>slot:cart:rom.md@23e4 =         cbc0063a</action>
		<action>slot:cart:rom.mq@7f00 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f08 = ffffffffffffffff</action>
	</script>
</cheat>

<cheat desc="attack speed up (wip)">
	<script state="on">
		<action>slot:cart:rom.mw@228c = 0101</action>
	</script>
	<script state="off">
		<action>slot:cart:rom.mw@228c = 0202</action>
	</script>
</cheat>

<cheat desc="multiple jump (wip)">
	<script state="on">
		<action>slot:cart:rom.mw@1c60 =             7f10</action>
		<action>slot:cart:rom.mq@7f10 = 1eccca6fcbc0063a</action>
		<action>slot:cart:rom.mq@7f18 = ff1e82c38e1ccbdd</action>
		<!--
		7f10 | 3a 06 c0    : ld  a,($c006)
		7f13 | cb 6f       : bit 5,a
		7f15 | ca cc 1e    : jp  z,$1ecc
		7f18 | dd cb 1c 8e : res 1,(ix+$1c)
		7f1c | c3 82 1e    : jp  $1e82
		-->
	</script>
	<script state="off">
		<action>slot:cart:rom.mw@1c60 =             1ecc</action>
		<action>slot:cart:rom.mq@7f10 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f18 = ffffffffffffffff</action>
	</script>
</cheat>

<cheat desc="timer speed (wip)">
	<parameter>
		<item value="0x7f">01 (slow)</item>
		<item value="0x40">02       </item>
		<item value="0x20">03       </item>
		<item value="0x10">04       </item>
		<item value="0x00">05 (fast)</item>
	</parameter>
	<script state="change">
		<action>slot:cart:rom.mb@0e0a = param</action>
	</script>
	<script state="off">
		<action>slot:cart:rom.mb@0e0a = 20</action>
	</script>
</cheat>

<cheat desc="sound test mode(wip)">
	<comment>reset the game (F3) to enter sound test mode</comment>
	<script state="on">
		<action>slot:cart:rom.md@00db =         217f20c3</action>
		<action>slot:cart:rom.mq@7f20 = 800021dc0032013e</action>
		<action>slot:cart:rom.mq@7f28 = dbc10022d57f2811</action>
		<action>slot:cart:rom.mq@7f30 = 0120fbfec86fbddc</action>
		<action>slot:cart:rom.mq@7f38 = effe240120f7fe25</action>
		<action>slot:cart:rom.mq@7f40 = c0dffe04187c0320</action>
		<action>slot:cart:rom.mq@7f48 = ffffffc9dc0332af</action>
		<!--
		7f20 | 3e 01    : ld   a,$01
		7f22 | 32 00 dc : ld   ($dc00),a  // enable sound
		7f25 | 21 00 80 : ld   hl,$8000   // initialize sound and input values
		7f28 | 11 28 7f : ld   de,$7f28
		7f2b | d5       : push de
		7f2c | 22 00 c1 : ld   ($c100),hl
		7f2f | db dc    : in   a,($dc)    // read input
		7f31 | bd       : cp   l
		7f32 | 6f       : ld   l,a
		7f33 | c8       : ret  z
		7f34 | fe fb    : cp   $fb
		7f36 | 20 01    : jr   nz,$7f39
		7f38 | 25       : dec  h          // pressed left - code decrement
		7f39 | fe f7    : cp   $f7
		7f3b | 20 01    : jr   nz,$7f3e
		7f3d | 24       : inc  h          // pressed right - code increment
		7f3e | fe ef    : cp   $ef
		7f40 | 20 03    : jr   nz,$7f45
		7f42 | 7c       : ld   a,h        // pressed button 1 - play sound
		7f43 | 18 04    : jr   $7f49
		7f45 | fe df    : cp   $df
		7f47 | c0       : ret  nz
		7f48 | af       : xor  a          // pressed button 2 - stop sound
		7f49 | 32 03 dc : ld   ($dc03),a  // send sound code
		7f4c | c9       : ret
		-->
	</script>
	<script state="run">
		<output format="----- captain silver sound test mode -----" line="10" align="center" />
		<output format="left : code decrement"                      line="11" align="center" />
		<output format="right : code increment"                     line="12" align="center" />
		<output format="button 1 : play sound"                      line="13" align="center" />
		<output format="button 2 : stop sound"                      line="14" align="center" />
		<output format="----------------------------"               line="15" align="center" />
		<output format="&lt;&lt; sound code %2.2X &gt;&gt;"         line="17" align="center">
			<argument>maincpu.pb@c101</argument>
		</output>
	</script>
	<script state="off">
		<action>slot:cart:rom.md@00db =         2108d3cd</action>
		<action>slot:cart:rom.mq@7f20 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f28 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f30 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f38 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f40 = ffffffffffffffff</action>
		<action>slot:cart:rom.mq@7f48 = ffffffffffffffff</action>
	</script>
</cheat>

[sms/captsilv]+ Captain Silver

Posted: Sun Jun 23, 2024 9:58 am
by jman
sms/captsilv.xml

Code: Select all

<!-- Captain Silver (Europe, Japan) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>slot:cart:rom.mb@2FFB = 18</action> <!-- background -->
            <action>slot:cart:rom.mb@60A9 = C3</action> <!-- objects (potion) -->
            <action>slot:cart:rom.mb@6125 = C9</action> <!-- objects -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mb@2FFB = 20</action>
            <action>slot:cart:rom.mb@60A9 = DA</action>
            <action>slot:cart:rom.mb@6125 = C0</action>
        </script>
    </cheat>

    <cheat desc="no fall down">
        <script state="on">
            <action>slot:cart:rom.mw@1CB8 = 7F00            </action> <!-- stand -->
            <action>slot:cart:rom.mw@1D64 = 7F00            </action> <!-- walk -->
            <action>slot:cart:rom.mw@2052 = 7F00            </action> <!-- crouch -->
            <action>slot:cart:rom.mw@2F1B = 7F00            </action> <!-- jump -->
            <action>slot:cart:rom.mq@7F00 = 047EDDF5D82ED5CD</action>
            <action>slot:cart:rom.mq@7F08 = 36DDC9F1023080FE</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFC937F18104</action>
            <!--
            7F00 | CD D5 2E    : call $2ED5
            7F03 | D8          : ret  c
            7F04 | F5          : push af
            7F05 | DD 7E 04    : ld   a,(ix+$04)
            7F08 | FE 80       : cp   $80
            7F0A | 30 02       : jr   nc,$7F0E
            7F0C | F1          : pop  af
            7F0D | C9          : ret
            7F0E | DD 36 04 81 : ld   (ix+$04),$81
            7F12 | F1          : pop  af
            7F13 | 37          : scf
            7F14 | C9          : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1CB8 = 2ED5            </action>
            <action>slot:cart:rom.mw@1D64 = 2ED5            </action>
            <action>slot:cart:rom.mw@2052 = 2ED5            </action>
            <action>slot:cart:rom.mw@2F1B = 2ED5            </action>
            <action>slot:cart:rom.mq@7F00 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F08 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>slot:cart:rom.md@1CE6 = CB7F20CD        </action> <!-- stand -->
            <action>slot:cart:rom.md@1EF0 = E67F20CD        </action> <!-- jump -->
            <action>slot:cart:rom.md@208D = CB7F20CD        </action> <!-- crouch -->
            <action>slot:cart:rom.md@23E4 = CB7F20CD        </action> <!-- ladder -->
            <action>slot:cart:rom.mq@7F20 = 063A4710E6C0053A</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFC9B0C0</action>
            <!--
            7F20 | 3A 05 C0 : ld   a,($C005)
            7F23 | E6 10    : and  $10
            7F25 | 47       : ld   b,a
            7F26 | 3A 06 C0 : ld   a,($C006)
            7F29 | B0       : or   b
            7F2A | C9       : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.md@1CE6 = CBC0063A        </action>
            <action>slot:cart:rom.md@1EF0 = E6C0063A        </action>
            <action>slot:cart:rom.md@208D = CBC0063A        </action>
            <action>slot:cart:rom.md@23E4 = CBC0063A        </action>
            <action>slot:cart:rom.mq@7F20 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <script state="on">
            <action>slot:cart:rom.mw@228C = 0101</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@228C = 0202</action>
        </script>
    </cheat>

    <cheat desc="multiple jump">
        <script state="on">
            <action>slot:cart:rom.mw@1C60 = 7F30            </action>
            <action>slot:cart:rom.mq@7F30 = 1ECCCA6FCBC0063A</action>
            <action>slot:cart:rom.mq@7F38 = FF1E82C38E1CCBDD</action>
            <!--
            7F30 | 3A 06 C0    : ld   a,($C006)
            7F33 | CB 6F       : bit  5,a
            7F35 | CA CC 1E    : jp   z,$1ECC
            7F38 | DD CB 1C 8E : res  1,(ix+$1c)
            7F3C | C3 82 1E    : jp   $1E82
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1C60 = 1ECC            </action>
            <action>slot:cart:rom.mq@7F30 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F38 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x40">02       </item>
            <item value="0x20">03       </item>
            <item value="0x10">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="change">
            <action>      maincpu.pb@C0E9 = param</action> <!-- initialize sub timer -->
            <action>slot:cart:rom.mb@0E0A = param</action>
            <action>slot:cart:rom.mb@6E90 = param</action> <!-- game start -->
        </script>
        <script state="off">
            <action>      maincpu.pb@C0E9 = 20</action>
            <action>slot:cart:rom.mb@0E0A = 20</action>
            <action>slot:cart:rom.mb@6E90 = 20</action>
        </script>
    </cheat>

    <cheat desc="sound device">
        <!-- smsj and sms1krfm only -->
        <comment>reset the game (F3) to switch sound device</comment>
        <parameter>
            <item value="0x0028">PSG</item>
            <item value="0x0118">FM </item>
        </parameter>
        <script state="change">
            <action>slot:cart:rom.mw@012C = param</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@012C = 0128</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>slot:cart:rom.mw@00DC = 7F40            </action>
            <action>slot:cart:rom.mq@7F40 = DCDBC10021010FCD</action>
            <action>slot:cart:rom.mq@7F48 = 0120FBFEFA2847B8</action>
            <action>slot:cart:rom.mq@7F50 = FDFE340120F7FE35</action>
            <action>slot:cart:rom.mq@7F58 = FEFE0618F03E0420</action>
            <action>slot:cart:rom.mq@7F60 = FE787786103E0520</action>
            <action>slot:cart:rom.mq@7F68 = 051880F67E0520EF</action>
            <action>slot:cart:rom.mq@7F70 = DC0332AF0420DFFE</action>
            <action>slot:cart:rom.mq@7F78 = FFFFFFFFFFFFCC18</action>
            <!--
            7F40 | CD 0F 01 : call $010F     // check sound device
            7F43 | 21 00 C1 : ld   hl,$C100  // sound code address
            7F46 | DB DC    : in   a,($DC)   // read input
            7F48 | B8       : cp   b
            7F49 | 47       : ld   b,a
            7F4A | 28 FA    : jr   z,$7F46
            7F4C | FE FB    : cp   $FB
            7F4E | 20 01    : jr   nz,$7F51
            7F50 | 35       : dec  (hl)      // decrease code -01
            7F51 | FE F7    : cp   $F7
            7F53 | 20 01    : jr   nz,$7F56
            7F55 | 34       : inc  (hl)      // increase code +01
            7F56 | FE FD    : cp   $FD
            7F58 | 20 04    : jr   nz,$7F5E
            7F5A | 3E F0    : ld   a,$F0     // decrease code -10
            7F5C | 18 06    : jr   $7F64
            7F5E | FE FE    : cp   $FE
            7F60 | 20 05    : jr   nz,$7F67
            7F62 | 3E 10    : ld   a,$10     // increase code +10
            7F64 | 86       : add  a,(hl)
            7F65 | 77       : ld   (hl),a
            7F66 | 78       : ld   a,b
            7F67 | FE EF    : cp   $EF
            7F69 | 20 05    : jr   nz,$7F70
            7F6B | 7E       : ld   a,(hl)    // play sound
            7F6C | F6 80    : or   $80
            7F6E | 18 05    : jr   $7F75
            7F70 | FE DF    : cp   $DF
            7F72 | 20 04    : jr   nz,$7F78
            7F74 | AF       : xor  a         // stop sound
            7F75 | 32 03 DC : ld   ($DC03),a // send sound code
            7F78 | 18 CC    : jr   $7F46
            -->
        </script>
        <script state="run">
            <output format="----- captain silver 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 1 : play sound"                      line="15" align="center" />
            <output format="button 2 : stop sound"                      line="16" align="center" />
            <output format="----------------------------"               line="17" align="center" />
            <output format="&lt;&lt; sound code %02X &gt;&gt;"          line="19" align="center"  >
                <argument>maincpu.pb@C100</argument>
            </output>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@00DC = 08D3            </action>
            <action>slot:cart:rom.mq@7F40 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F48 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F50 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F58 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F60 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F68 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="skip rom check error">
        <script state="on">
            <!-- detect bios -->
            <action>                                    temp0 = 00</action> <!-- initialize flag -->
            <action condition="user1.mw@0006 == 0x7d18">temp0 = 01</action>
            <action condition="user1.mw@0006 == 0x6518">temp0 = 02</action>
            <action condition="user1.mw@0006 == 0x36ff">temp0 = 03</action>
            <action condition="user1.mw@0006 == 0x6f18">temp0 = 04</action>
            <action condition="user1.mw@0006 == 0x0000">temp0 = 05</action>
            <action condition="user1.mw@0006 == 0x0406">temp0 = 06</action>
            <action condition="user1.mw@0006 == 0x94cd">temp0 = 07</action>
            <!-- US/European BIOS with Alex Kidd ($bef2) -->
            <action condition="temp0 == 01">user1.mb@17EF2 = C3</action>
            <!-- US/European BIOS v1.3 -->
            <action condition="temp0 == 02">user1.mb@00128 = C3</action>
            <!-- US/European BIOS v2.4 ($8142) -->
            <action condition="temp0 == 03">user1.mb@1C142 = C3</action>
            <!-- US/European BIOS v3.4 -->
            <action condition="temp0 == 04">user1.mb@0813E = C3</action>
            <!-- US/European BIOS v4.4 ($b0b9) -->
            <action condition="temp0 == 05">user1.mb@170B9 = C3</action>
            <!-- US Master System BIOS v1.0 -->
            <action condition="temp0 == 06">user1.mb@00140 = C3</action>
            <!-- European/Brazilian BIOS with Sonic -->
            <action condition="temp0 == 07">user1.mb@0270E = C3</action>
        </script>
        <script state="off">
            <action condition="temp0 == 01">user1.mb@17EF2 = CA</action>
            <action condition="temp0 == 02">user1.mb@00128 = CA</action>
            <action condition="temp0 == 03">user1.mb@1C142 = CA</action>
            <action condition="temp0 == 04">user1.mb@0813E = CA</action>
            <action condition="temp0 == 05">user1.mb@170B9 = CA</action>
            <action condition="temp0 == 06">user1.mb@00140 = CA</action>
            <action condition="temp0 == 07">user1.mb@0270E = CA</action>
        </script>
    </cheat>

</mamecheat>
sms/captsilvu.xml

Code: Select all

<!-- Captain Silver (USA) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>slot:cart:rom.mb@24D2 = 18</action> <!-- background -->
            <action>slot:cart:rom.mb@4627 = C3</action> <!-- objects (potion) -->
            <action>slot:cart:rom.mb@4697 = C9</action> <!-- objects -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mb@24D2 = 20</action>
            <action>slot:cart:rom.mb@4627 = DA</action>
            <action>slot:cart:rom.mb@4697 = C0</action>
        </script>
    </cheat>

    <cheat desc="no fall down">
        <script state="on">
            <action>slot:cart:rom.mw@156C = 7F00            </action> <!-- stand -->
            <action>slot:cart:rom.mw@1620 = 7F00            </action> <!-- walk -->
            <action>slot:cart:rom.mw@190E = 7F00            </action> <!-- crouch -->
            <action>slot:cart:rom.mw@23F2 = 7F00            </action> <!-- jump -->
            <action>slot:cart:rom.mq@7F00 = 047EDDF5D823ACCD</action>
            <action>slot:cart:rom.mq@7F08 = 36DDC9F1023080FE</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFC937F18104</action>
            <!--
            7F00 | CD AC 23    : call $23AC
            7F03 | D8          : ret  c
            7F04 | F5          : push af
            7F05 | DD 7E 04    : ld   a,(ix+$04)
            7F08 | FE 80       : cp   $80
            7F0A | 30 02       : jr   nc,$7F0E
            7F0C | F1          : pop  af
            7F0D | C9          : ret
            7F0E | DD 36 04 81 : ld   (ix+$04),$81
            7F12 | F1          : pop  af
            7F13 | 37          : scf
            7F14 | C9          : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@156C = 23AC            </action>
            <action>slot:cart:rom.mw@1620 = 23AC            </action>
            <action>slot:cart:rom.mw@190E = 23AC            </action>
            <action>slot:cart:rom.mw@23F2 = 23AC            </action>
            <action>slot:cart:rom.mq@7F00 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F08 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>slot:cart:rom.md@15A2 = CB7F20CD        </action> <!-- stand -->
            <action>slot:cart:rom.md@17AC = E67F20CD        </action> <!-- jump -->
            <action>slot:cart:rom.md@1951 = CB7F20CD        </action> <!-- crouch -->
            <action>slot:cart:rom.md@1CA9 = CB7F20CD        </action> <!-- ladder -->
            <action>slot:cart:rom.mq@7F20 = 063A4710E6C0053A</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFC9B0C0</action>
            <!--
            7F20 | 3A 05 C0 : ld   a,($C005)
            7F23 | E6 10    : and  $10
            7F25 | 47       : ld   b,a
            7F26 | 3A 06 C0 : ld   a,($C006)
            7F29 | B0       : or   b
            7F2A | C9       : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.md@15A2 = CBC0063A        </action>
            <action>slot:cart:rom.md@17AC = E6C0063A        </action>
            <action>slot:cart:rom.md@1951 = CBC0063A        </action>
            <action>slot:cart:rom.md@1CA9 = CBC0063A        </action>
            <action>slot:cart:rom.mq@7F20 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <script state="on">
            <action>slot:cart:rom.mw@1B51 = 0101</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1B51 = 0202</action>
        </script>
    </cheat>

    <cheat desc="multiple jump">
        <script state="on">
            <action>slot:cart:rom.mw@1514 = 7F30            </action>
            <action>slot:cart:rom.mq@7F30 = 1788CA6FCBC0063A</action>
            <action>slot:cart:rom.mq@7F38 = FF173EC38E1CCBDD</action>
            <!--
            7F30 | 3A 06 C0    : ld   a,($C006)
            7F33 | CB 6F       : bit  5,a
            7F35 | CA 88 17    : jp   z,$1788
            7F38 | DD CB 1C 8E : res  1,(ix+$1c)
            7F3C | C3 3E 17    : jp   $173E
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1514 = 1788            </action>
            <action>slot:cart:rom.mq@7F30 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F38 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x40">02       </item>
            <item value="0x20">03       </item>
            <item value="0x10">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="change">
            <action>      maincpu.pb@C0E9 = param</action> <!-- initialize sub timer -->
            <action>slot:cart:rom.mb@091E = param</action>
            <action>slot:cart:rom.mb@536C = param</action> <!-- game start -->
        </script>
        <script state="off">
            <action>      maincpu.pb@C0E9 = 20</action>
            <action>slot:cart:rom.mb@091E = 20</action>
            <action>slot:cart:rom.mb@536C = 20</action>
        </script>
    </cheat>

    <cheat desc="sound device">
        <!-- smsj and sms1krfm only -->
        <comment>reset the game (F3) to switch sound device</comment>
        <parameter>
            <item value="0x0028">PSG</item>
            <item value="0x0118">FM </item>
        </parameter>
        <script state="change">
            <action>slot:cart:rom.mw@012C = param</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@012C = 0128</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>slot:cart:rom.mw@00DC = 7F40            </action>
            <action>slot:cart:rom.mq@7F40 = DCDBC10021010FCD</action>
            <action>slot:cart:rom.mq@7F48 = 0120FBFEFA2847B8</action>
            <action>slot:cart:rom.mq@7F50 = FDFE340120F7FE35</action>
            <action>slot:cart:rom.mq@7F58 = FEFE0618F03E0420</action>
            <action>slot:cart:rom.mq@7F60 = FE787786103E0520</action>
            <action>slot:cart:rom.mq@7F68 = 051880F67E0520EF</action>
            <action>slot:cart:rom.mq@7F70 = DC0332AF0420DFFE</action>
            <action>slot:cart:rom.mq@7F78 = FFFFFFFFFFFFCC18</action>
            <!--
            7F40 | CD 0F 01 : call $010F     // check sound device
            7F43 | 21 00 C1 : ld   hl,$C100  // sound code address
            7F46 | DB DC    : in   a,($DC)   // read input
            7F48 | B8       : cp   b
            7F49 | 47       : ld   b,a
            7F4A | 28 FA    : jr   z,$7F46
            7F4C | FE FB    : cp   $FB
            7F4E | 20 01    : jr   nz,$7F51
            7F50 | 35       : dec  (hl)      // decrease code -01
            7F51 | FE F7    : cp   $F7
            7F53 | 20 01    : jr   nz,$7F56
            7F55 | 34       : inc  (hl)      // increase code +01
            7F56 | FE FD    : cp   $FD
            7F58 | 20 04    : jr   nz,$7F5E
            7F5A | 3E F0    : ld   a,$F0     // decrease code -10
            7F5C | 18 06    : jr   $7F64
            7F5E | FE FE    : cp   $FE
            7F60 | 20 05    : jr   nz,$7F67
            7F62 | 3E 10    : ld   a,$10     // increase code +10
            7F64 | 86       : add  a,(hl)
            7F65 | 77       : ld   (hl),a
            7F66 | 78       : ld   a,b
            7F67 | FE EF    : cp   $EF
            7F69 | 20 05    : jr   nz,$7F70
            7F6B | 7E       : ld   a,(hl)    // play sound
            7F6C | F6 80    : or   $80
            7F6E | 18 05    : jr   $7F75
            7F70 | FE DF    : cp   $DF
            7F72 | 20 04    : jr   nz,$7F78
            7F74 | AF       : xor  a         // stop sound
            7F75 | 32 03 DC : ld   ($DC03),a // send sound code
            7F78 | 18 CC    : jr   $7F46
            -->
        </script>
        <script state="run">
            <output format="----- captain silver 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 1 : play sound"                      line="15" align="center" />
            <output format="button 2 : stop sound"                      line="16" align="center" />
            <output format="----------------------------"               line="17" align="center" />
            <output format="&lt;&lt; sound code %02X &gt;&gt;"          line="19" align="center"  >
                <argument>maincpu.pb@C100</argument>
            </output>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@00DC = 04A9            </action>
            <action>slot:cart:rom.mq@7F40 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F48 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F50 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F58 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F60 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F68 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="skip rom check error">
        <script state="on">
            <!-- detect bios -->
            <action>                                    temp0 = 00</action> <!-- initialize flag -->
            <action condition="user1.mw@0006 == 0x7d18">temp0 = 01</action>
            <action condition="user1.mw@0006 == 0x6518">temp0 = 02</action>
            <action condition="user1.mw@0006 == 0x36ff">temp0 = 03</action>
            <action condition="user1.mw@0006 == 0x6f18">temp0 = 04</action>
            <action condition="user1.mw@0006 == 0x0000">temp0 = 05</action>
            <action condition="user1.mw@0006 == 0x0406">temp0 = 06</action>
            <action condition="user1.mw@0006 == 0x94cd">temp0 = 07</action>
            <!-- US/European BIOS with Alex Kidd ($bef2) -->
            <action condition="temp0 == 01">user1.mb@17EF2 = C3</action>
            <!-- US/European BIOS v1.3 -->
            <action condition="temp0 == 02">user1.mb@00128 = C3</action>
            <!-- US/European BIOS v2.4 ($8142) -->
            <action condition="temp0 == 03">user1.mb@1C142 = C3</action>
            <!-- US/European BIOS v3.4 -->
            <action condition="temp0 == 04">user1.mb@0813E = C3</action>
            <!-- US/European BIOS v4.4 ($b0b9) -->
            <action condition="temp0 == 05">user1.mb@170B9 = C3</action>
            <!-- US Master System BIOS v1.0 -->
            <action condition="temp0 == 06">user1.mb@00140 = C3</action>
            <!-- European/Brazilian BIOS with Sonic -->
            <action condition="temp0 == 07">user1.mb@0270E = C3</action>
        </script>
        <script state="off">
            <action condition="temp0 == 01">user1.mb@17EF2 = CA</action>
            <action condition="temp0 == 02">user1.mb@00128 = CA</action>
            <action condition="temp0 == 03">user1.mb@1C142 = CA</action>
            <action condition="temp0 == 04">user1.mb@0813E = CA</action>
            <action condition="temp0 == 05">user1.mb@170B9 = CA</action>
            <action condition="temp0 == 06">user1.mb@00140 = CA</action>
            <action condition="temp0 == 07">user1.mb@0270E = CA</action>
        </script>
    </cheat>

</mamecheat>
sms/captsilvp.xml

Code: Select all

<!-- Captain Silver (prototype) -->
<mamecheat version="1">

    <cheat desc="no hit">
        <script state="on">
            <action>slot:cart:rom.mb@24CA = 18</action> <!-- background -->
            <action>slot:cart:rom.mb@4609 = C3</action> <!-- objects (potion) -->
            <action>slot:cart:rom.mb@468C = C9</action> <!-- objects -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mb@24CA = 20</action>
            <action>slot:cart:rom.mb@4609 = DA</action>
            <action>slot:cart:rom.mb@468C = C0</action>
        </script>
    </cheat>

    <cheat desc="no fall down">
        <script state="on">
            <action>slot:cart:rom.mw@156C = 7F00            </action> <!-- stand -->
            <action>slot:cart:rom.mw@1620 = 7F00            </action> <!-- walk -->
            <action>slot:cart:rom.mw@190E = 7F00            </action> <!-- crouch -->
            <action>slot:cart:rom.mw@23EA = 7F00            </action> <!-- jump -->
            <action>slot:cart:rom.mq@7F00 = 047EDDF5D823A4CD</action>
            <action>slot:cart:rom.mq@7F08 = 36DDC9F1023080FE</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFC937F18104</action>
            <!--
            7F00 | CD A4 23    : call $23A4
            7F03 | D8          : ret  c
            7F04 | F5          : push af
            7F05 | DD 7E 04    : ld   a,(ix+$04)
            7F08 | FE 80       : cp   $80
            7F0A | 30 02       : jr   nc,$7F0E
            7F0C | F1          : pop  af
            7F0D | C9          : ret
            7F0E | DD 36 04 81 : ld   (ix+$04),$81
            7F12 | F1          : pop  af
            7F13 | 37          : scf
            7F14 | C9          : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@156C = 2EA4            </action>
            <action>slot:cart:rom.mw@1620 = 2ED5            </action>
            <action>slot:cart:rom.mw@190E = 2ED5            </action>
            <action>slot:cart:rom.mw@23EA = 2ED5            </action>
            <action>slot:cart:rom.mq@7F00 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F08 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F10 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="auto fire">
        <script state="on">
            <action>slot:cart:rom.md@15A2 = CB7F20CD        </action> <!-- stand -->
            <action>slot:cart:rom.md@17AC = E67F20CD        </action> <!-- jump -->
            <action>slot:cart:rom.md@1951 = CB7F20CD        </action> <!-- crouch -->
            <action>slot:cart:rom.md@1CA9 = CB7F20CD        </action> <!-- ladder -->
            <action>slot:cart:rom.mq@7F20 = 063A4710E6C0053A</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFC9B0C0</action>
            <!--
            7F20 | 3A 05 C0 : ld   a,($C005)
            7F23 | E6 10    : and  $10
            7F25 | 47       : ld   b,a
            7F26 | 3A 06 C0 : ld   a,($C006)
            7F29 | B0       : or   b
            7F2A | C9       : ret
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.md@15A2 = CBC0063A        </action>
            <action>slot:cart:rom.md@17AC = E6C0063A        </action>
            <action>slot:cart:rom.md@1951 = CBC0063A        </action>
            <action>slot:cart:rom.md@1CA9 = CBC0063A        </action>
            <action>slot:cart:rom.mq@7F20 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F28 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="attack speed up">
        <script state="on">
            <action>slot:cart:rom.mw@1B51 = 0101</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1B51 = 0202</action>
        </script>
    </cheat>

    <cheat desc="multiple jump">
        <script state="on">
            <action>slot:cart:rom.mw@1514 = 7F30            </action>
            <action>slot:cart:rom.mq@7F30 = 1788CA6FCBC0063A</action>
            <action>slot:cart:rom.mq@7F38 = FF173EC38E1CCBDD</action>
            <!--
            7F30 | 3A 06 C0    : ld   a,($C006)
            7F33 | CB 6F       : bit  5,a
            7F35 | CA 88 17    : jp   z,$1788
            7F38 | DD CB 1C 8E : res  1,(ix+$1c)
            7F3C | C3 3E 17    : jp   $173E
            -->
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@1514 = 1788            </action>
            <action>slot:cart:rom.mq@7F30 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F38 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="timer speed">
        <parameter>
            <item value="0x7f">01 (slow)</item>
            <item value="0x40">02       </item>
            <item value="0x20">03       </item>
            <item value="0x10">04       </item>
            <item value="0x00">05 (fast)</item>
        </parameter>
        <script state="change">
            <action>      maincpu.pb@C0E9 = param</action> <!-- initialize sub timer -->
            <action>slot:cart:rom.mb@091E = param</action>
            <action>slot:cart:rom.mb@5361 = param</action> <!-- game start -->
        </script>
        <script state="off">
            <action>      maincpu.pb@C0E9 = 20</action>
            <action>slot:cart:rom.mb@091E = 20</action>
            <action>slot:cart:rom.mb@5361 = 20</action>
        </script>
    </cheat>

    <cheat desc="sound device">
        <!-- smsj and sms1krfm only -->
        <comment>reset the game (F3) to switch sound device</comment>
        <parameter>
            <item value="0x0028">PSG</item>
            <item value="0x0118">FM </item>
        </parameter>
        <script state="change">
            <action>slot:cart:rom.mw@012C = param</action>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@012C = 0128</action>
        </script>
    </cheat>

    <cheat desc="sound test mode">
        <comment>reset the game (F3) to enter sound test mode</comment>
        <script state="on">
            <action>slot:cart:rom.mw@00DC = 7F40            </action>
            <action>slot:cart:rom.mq@7F40 = DCDBC10021010FCD</action>
            <action>slot:cart:rom.mq@7F48 = 0120FBFEFA2847B8</action>
            <action>slot:cart:rom.mq@7F50 = FDFE340120F7FE35</action>
            <action>slot:cart:rom.mq@7F58 = FEFE0618F03E0420</action>
            <action>slot:cart:rom.mq@7F60 = FE787786103E0520</action>
            <action>slot:cart:rom.mq@7F68 = 051880F67E0520EF</action>
            <action>slot:cart:rom.mq@7F70 = DC0332AF0420DFFE</action>
            <action>slot:cart:rom.mq@7F78 = FFFFFFFFFFFFCC18</action>
            <!--
            7F40 | CD 0F 01 : call $010F     // check sound device
            7F43 | 21 00 C1 : ld   hl,$C100  // sound code address
            7F46 | DB DC    : in   a,($DC)   // read input
            7F48 | B8       : cp   b
            7F49 | 47       : ld   b,a
            7F4A | 28 FA    : jr   z,$7F46
            7F4C | FE FB    : cp   $FB
            7F4E | 20 01    : jr   nz,$7F51
            7F50 | 35       : dec  (hl)      // decrease code -01
            7F51 | FE F7    : cp   $F7
            7F53 | 20 01    : jr   nz,$7F56
            7F55 | 34       : inc  (hl)      // increase code +01
            7F56 | FE FD    : cp   $FD
            7F58 | 20 04    : jr   nz,$7F5E
            7F5A | 3E F0    : ld   a,$F0     // decrease code -10
            7F5C | 18 06    : jr   $7F64
            7F5E | FE FE    : cp   $FE
            7F60 | 20 05    : jr   nz,$7F67
            7F62 | 3E 10    : ld   a,$10     // increase code +10
            7F64 | 86       : add  a,(hl)
            7F65 | 77       : ld   (hl),a
            7F66 | 78       : ld   a,b
            7F67 | FE EF    : cp   $EF
            7F69 | 20 05    : jr   nz,$7F70
            7F6B | 7E       : ld   a,(hl)    // play sound
            7F6C | F6 80    : or   $80
            7F6E | 18 05    : jr   $7F75
            7F70 | FE DF    : cp   $DF
            7F72 | 20 04    : jr   nz,$7F78
            7F74 | AF       : xor  a         // stop sound
            7F75 | 32 03 DC : ld   ($DC03),a // send sound code
            7F78 | 18 CC    : jr   $7F46
            -->
        </script>
        <script state="run">
            <output format="----- captain silver 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 1 : play sound"                      line="15" align="center" />
            <output format="button 2 : stop sound"                      line="16" align="center" />
            <output format="----------------------------"               line="17" align="center" />
            <output format="&lt;&lt; sound code %02X &gt;&gt;"          line="19" align="center"  >
                <argument>maincpu.pb@C100</argument>
            </output>
        </script>
        <script state="off">
            <action>slot:cart:rom.mw@00DC = 04A9            </action>
            <action>slot:cart:rom.mq@7F40 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F48 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F50 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F58 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F60 = FFFFFFFFFFFFFFFF</action>
            <action>slot:cart:rom.mq@7F68 = FFFFFFFFFFFFFFFF</action>
        </script>
    </cheat>

    <cheat desc="skip rom check error">
        <script state="on">
            <!-- detect bios -->
            <action>                                    temp0 = 00</action> <!-- initialize flag -->
            <action condition="user1.mw@0006 == 0x7d18">temp0 = 01</action>
            <action condition="user1.mw@0006 == 0x6518">temp0 = 02</action>
            <action condition="user1.mw@0006 == 0x36ff">temp0 = 03</action>
            <action condition="user1.mw@0006 == 0x6f18">temp0 = 04</action>
            <action condition="user1.mw@0006 == 0x0000">temp0 = 05</action>
            <action condition="user1.mw@0006 == 0x0406">temp0 = 06</action>
            <action condition="user1.mw@0006 == 0x94cd">temp0 = 07</action>
            <!-- US/European BIOS with Alex Kidd ($bef2) -->
            <action condition="temp0 == 01">user1.mb@17EF2 = C3</action>
            <!-- US/European BIOS v1.3 -->
            <action condition="temp0 == 02">user1.mb@00128 = C3</action>
            <!-- US/European BIOS v2.4 ($8142) -->
            <action condition="temp0 == 03">user1.mb@1C142 = C3</action>
            <!-- US/European BIOS v3.4 -->
            <action condition="temp0 == 04">user1.mb@0813E = C3</action>
            <!-- US/European BIOS v4.4 ($b0b9) -->
            <action condition="temp0 == 05">user1.mb@170B9 = C3</action>
            <!-- US Master System BIOS v1.0 -->
            <action condition="temp0 == 06">user1.mb@00140 = C3</action>
            <!-- European/Brazilian BIOS with Sonic -->
            <action condition="temp0 == 07">user1.mb@0270E = C3</action>
        </script>
        <script state="off">
            <action condition="temp0 == 01">user1.mb@17EF2 = CA</action>
            <action condition="temp0 == 02">user1.mb@00128 = CA</action>
            <action condition="temp0 == 03">user1.mb@1C142 = CA</action>
            <action condition="temp0 == 04">user1.mb@0813E = CA</action>
            <action condition="temp0 == 05">user1.mb@170B9 = CA</action>
            <action condition="temp0 == 06">user1.mb@00140 = CA</action>
            <action condition="temp0 == 07">user1.mb@0270E = CA</action>
        </script>
    </cheat>

</mamecheat>
  • "no hit" : Added codes for "background" and "objects (potion)".
  • "no fall down", "sound device" and "skip rom check error" : Added new.
  • "timer speed" : Added codes for timer initialization.
  • "sound test mode" : Rewritten routine. Added up/down key to code ±10.