outzone.xml :
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="1" max="7" step="1"/>
<script state="run">
<action>maincpu.mw@013abe=4e71</action> <comment>Ignore checksum error (ROM EVEN)</comment>
<action>maincpu.mw@013ad4=6022</action> <comment>Ignore checksum error (ROM ODD)</comment>
<action>maincpu.mw@000970=4ef9</action> <comment>Jump to our patched routine</comment>
<action>maincpu.mw@000972=0003</action>
<action>maincpu.mw@000974=ffd0</action>
<action>maincpu.mw@000976=4e71</action>
<action>maincpu.mw@000978=4e71</action>
<action>maincpu.mw@00097a=4e71</action>
<action>maincpu.mw@03ffd0=48e7</action> <comment>Our patched routine starts here</comment>
<action>maincpu.mw@03ffd2=fffe</action>
<action>maincpu.mb@03ffd4=70</action>
<action>maincpu.mb@03ffd5=(param-1)</action>
<action>maincpu.mw@03ffd6=d179</action>
<action>maincpu.mw@03ffd8=0024</action>
<action>maincpu.mw@03ffda=0c02</action>
<action>maincpu.mw@03ffdc=4cdf</action>
<action>maincpu.mw@03ffde=7fff</action>
<action>maincpu.mw@03ffe0=4a79</action> <comment>Copy of the original code</comment>
<action>maincpu.mw@03ffe2=0024</action>
<action>maincpu.mw@03ffe4=0b4a</action>
<action>maincpu.mw@03ffe6=6704</action>
<action>maincpu.mw@03ffe8=32bc</action>
<action>maincpu.mw@03ffea=0004</action>
<action>maincpu.mw@03ffec=4ef9</action> <comment>Back to the original routine</comment>
<action>maincpu.mw@03ffee=0000</action>
<action>maincpu.mw@03fff0=097c</action>
</script>
<script state="off">
<action>maincpu.mb@03ffd5=00</action>
</script>
</cheat>
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="1" max="7" step="1"/>
<script state="run">
<action>maincpu.mw@013af4=4e71</action> <comment>Ignore checksum error (ROM EVEN)</comment>
<action>maincpu.mw@013b0a=6022</action> <comment>Ignore checksum error (ROM ODD)</comment>
<action>maincpu.mw@000970=4ef9</action> <comment>Jump to our patched routine</comment>
<action>maincpu.mw@000972=0003</action>
<action>maincpu.mw@000974=ffd0</action>
<action>maincpu.mw@000976=4e71</action>
<action>maincpu.mw@000978=4e71</action>
<action>maincpu.mw@00097a=4e71</action>
<action>maincpu.mw@03ffd0=48e7</action> <comment>Our patched routine starts here</comment>
<action>maincpu.mw@03ffd2=fffe</action>
<action>maincpu.mb@03ffd4=70</action>
<action>maincpu.mb@03ffd5=(param-1)</action>
<action>maincpu.mw@03ffd6=d179</action>
<action>maincpu.mw@03ffd8=0024</action>
<action>maincpu.mw@03ffda=0c02</action>
<action>maincpu.mw@03ffdc=4cdf</action>
<action>maincpu.mw@03ffde=7fff</action>
<action>maincpu.mw@03ffe0=4a79</action> <comment>Copy of the original code</comment>
<action>maincpu.mw@03ffe2=0024</action>
<action>maincpu.mw@03ffe4=0b4a</action>
<action>maincpu.mw@03ffe6=6704</action>
<action>maincpu.mw@03ffe8=32bc</action>
<action>maincpu.mw@03ffea=0004</action>
<action>maincpu.mw@03ffec=4ef9</action> <comment>Back to the original routine</comment>
<action>maincpu.mw@03ffee=0000</action>
<action>maincpu.mw@03fff0=097c</action>
</script>
<script state="off">
<action>maincpu.mb@03ffd5=00</action>
</script>
</cheat>
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="1" max="7" step="1"/>
<script state="run">
<action>maincpu.mw@0126cc=4e71</action> <comment>Ignore checksum error (ROM EVEN)</comment>
<action>maincpu.mw@0126e2=6024</action> <comment>Ignore checksum error (ROM ODD)</comment>
<action>maincpu.mw@0008be=4ef9</action> <comment>Jump to our patched routine</comment>
<action>maincpu.mw@0008c0=0003</action>
<action>maincpu.mw@0008c2=ffd0</action>
<action>maincpu.mw@0008c4=4e71</action>
<action>maincpu.mw@0008c6=4e71</action>
<action>maincpu.mw@0008c8=4e71</action>
<action>maincpu.mw@03ffd0=48e7</action> <comment>Our patched routine starts here</comment>
<action>maincpu.mw@03ffd2=fffe</action>
<action>maincpu.mb@03ffd4=70</action>
<action>maincpu.mb@03ffd5=(param-1)</action>
<action>maincpu.mw@03ffd6=d179</action>
<action>maincpu.mw@03ffd8=0024</action>
<action>maincpu.mw@03ffda=0c02</action>
<action>maincpu.mw@03ffdc=4cdf</action>
<action>maincpu.mw@03ffde=7fff</action>
<action>maincpu.mw@03ffe0=4a79</action> <comment>Copy of the original code</comment>
<action>maincpu.mw@03ffe2=0024</action>
<action>maincpu.mw@03ffe4=0b4a</action>
<action>maincpu.mw@03ffe6=6704</action>
<action>maincpu.mw@03ffe8=32bc</action>
<action>maincpu.mw@03ffea=0004</action>
<action>maincpu.mw@03ffec=4ef9</action> <comment>Back to the original routine</comment>
<action>maincpu.mw@03ffee=0000</action>
<action>maincpu.mw@03fff0=08ca</action>
</script>
<script state="off">
<action>maincpu.mb@03ffd5=00</action>
</script>
</cheat>
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="1" max="7" step="1"/>
<script state="run">
<action>maincpu.mw@013af4=4e71</action> <comment>Ignore checksum error (ROM EVEN)</comment>
<action>maincpu.mw@013b0a=6022</action> <comment>Ignore checksum error (ROM ODD)</comment>
<action>maincpu.mw@000970=4ef9</action> <comment>Jump to our patched routine</comment>
<action>maincpu.mw@000972=0003</action>
<action>maincpu.mw@000974=ffd0</action>
<action>maincpu.mw@000976=4e71</action>
<action>maincpu.mw@000978=4e71</action>
<action>maincpu.mw@00097a=4e71</action>
<action>maincpu.mw@03ffd0=48e7</action> <comment>Our patched routine starts here</comment>
<action>maincpu.mw@03ffd2=fffe</action>
<action>maincpu.mb@03ffd4=70</action>
<action>maincpu.mb@03ffd5=(param-1)</action>
<action>maincpu.mw@03ffd6=d179</action>
<action>maincpu.mw@03ffd8=0024</action>
<action>maincpu.mw@03ffda=0c02</action>
<action>maincpu.mw@03ffdc=4cdf</action>
<action>maincpu.mw@03ffde=7fff</action>
<action>maincpu.mw@03ffe0=4a79</action> <comment>Copy of the original code</comment>
<action>maincpu.mw@03ffe2=0024</action>
<action>maincpu.mw@03ffe4=0b4a</action>
<action>maincpu.mw@03ffe6=6704</action>
<action>maincpu.mw@03ffe8=32bc</action>
<action>maincpu.mw@03ffea=0004</action>
<action>maincpu.mw@03ffec=4ef9</action> <comment>Back to the original routine</comment>
<action>maincpu.mw@03ffee=0000</action>
<action>maincpu.mw@03fff0=097c</action>
</script>
<script state="off">
<action>maincpu.mb@03ffd5=00</action>
</script>
</cheat>
Code: Select all
<cheat desc="Select Starting Level">
<parameter min="1" max="7" step="1"/>
<script state="run">
<action>maincpu.mw@013a06=4e71</action> <comment>Ignore checksum error (ROM EVEN)</comment>
<action>maincpu.mw@013a1c=6024</action> <comment>Ignore checksum error (ROM ODD)</comment>
<action>maincpu.mw@0008c0=4ef9</action> <comment>Jump to our patched routine</comment>
<action>maincpu.mw@0008c2=0003</action>
<action>maincpu.mw@0008c4=ffd0</action>
<action>maincpu.mw@0008c6=4e71</action>
<action>maincpu.mw@0008c8=4e71</action>
<action>maincpu.mw@0008ca=4e71</action>
<action>maincpu.mw@03ffd0=48e7</action> <comment>Our patched routine starts here</comment>
<action>maincpu.mw@03ffd2=fffe</action>
<action>maincpu.mb@03ffd4=70</action>
<action>maincpu.mb@03ffd5=(param-1)</action>
<action>maincpu.mw@03ffd6=d179</action>
<action>maincpu.mw@03ffd8=0024</action>
<action>maincpu.mw@03ffda=0c02</action>
<action>maincpu.mw@03ffdc=4cdf</action>
<action>maincpu.mw@03ffde=7fff</action>
<action>maincpu.mw@03ffe0=4a79</action> <comment>Copy of the original code</comment>
<action>maincpu.mw@03ffe2=0024</action>
<action>maincpu.mw@03ffe4=0b4a</action>
<action>maincpu.mw@03ffe6=6704</action>
<action>maincpu.mw@03ffe8=32bc</action>
<action>maincpu.mw@03ffea=0004</action>
<action>maincpu.mw@03ffec=4ef9</action> <comment>Back to the original routine</comment>
<action>maincpu.mw@03ffee=0000</action>
<action>maincpu.mw@03fff0=08cc</action>
</script>
<script state="off">
<action>maincpu.mb@03ffd5=00</action>
</script>
</cheat>
Note the way I've handled the cheat when you turn it off : by default, you start from level 1 and there is 0x00 at 0x03ffd5.b ... This also has the main advantage of NOT having many temp variables and of shortening the .xml files

FYI, here is the explanation of the patched code (sample from 'outzone') :
Code: Select all
013ABE: 4E71 nop ; Ignore checksum error (ROM EVEN)
013AD4: 6022 bra $13af8 ; Ignore checksum error (ROM ODD)
000970: 4EF9 0003 FFE0 jmp $3ffd0.l ; Jump to our patched routine
000976: 4E71 nop
000978: 4E71 nop
00097a: 4E71 nop
03FFD0: 48E7 FFFE movem.l D0-D7/A0-A6, -(A7) ; Our patched routine starts here
03FFD4: 70xx moveq xx, D0 ; Starting level - 1 (the value in D0 must be between 0 and 6)
03FFD6: D179 0024 0c02 add.w D0, $240c02.l
03FFDC: 4CDF 7FFF movem.l (A7)+, D0-D7/A0-A6
03FFE0: 4A79 0024 0B4A tst.w $240b4a.l ; Copy of the original code
03FFE6: 6704 beq $3ffec
03FFE8: 32BC 0004 move.w #$4, (A1)
03FFEC: 4EF9 0000 097c jmp $97c.l ; Back to the original routine

