Nice work - generally you don't need to worry about paging (mapping) on the 68000 as the address space is plenty big enough.
Movement speed is actually quite easy to do with RAM cheats in the XML format. All you have to do is check if the X or Y position has changed since the last frame and if it has changed by the standard value then just poke it with a bigger value to move faster.
Here's a XML RAM cheat I've just knocked up that should demonstrate it:-
Code: Select all
<cheat desc="Select Movement Speed"> <!-- This can be used as a lose template to make similar cheats for most games - THEN DELETE THIS COMMENT -->
<parameter> <!-- update this parameter section with the speeds and associated values (in this example - 1 = normal, 2 = 2x normal, 3 = 3x normal - THEN DELETE THIS COMMENT -->
<item value="0x01">Normal</item>
<item value="0x02">Faster</item>
<item value="0x03">Fastest</item>
</parameter>
<script state="on"> <!-- update this "on script" section with the X + Y movement addresses, standard X+Y inc/dec and the X+Y boundary values for all - THEN DELETE THIS COMMENT -->
<action>temp0=2067E</action> <!-- Left + Right (X) address -->
<action>temp1=20680</action> <!-- Up + Down (Y) address -->
<action>temp2=2</action> <!-- Normal Increment or Decrement when sprite moves Left + Right (X) -->
<action>temp3=1</action> <!-- Normal Increment or Decrement when sprite moves Up + Down (Y) -->
<action>temp4=0x098</action> <!-- X Boundary Position 1 (Minimum value of X), Optional if boundary checks not required -->
<action>temp5=0x168</action> <!-- X Boundary Position 2 (Maximum value of X), Optional if boundary checks not required -->
<action>temp6=0x088</action> <!-- Y Boundary Position 1 (Minimum value of Y), Optional if boundary checks not required -->
<action>temp7=0x158</action> <!-- Y Boundary Position 2 (Maximum value of Y), Optional if boundary checks not required -->
</script>
<script state="run"> <!-- update this "run script" if cpu isn't maincpu and you are not poking a word (w of pw) - THEN DELETE THIS COMMENT -->
<action condition="maincpu.pw@temp0==temp8+temp2">maincpu.pw@temp0=temp8+(temp2*param)</action>
<action condition="maincpu.pw@temp0==temp8-temp2">maincpu.pw@temp0=temp8-(temp2*param)</action>
<action condition="maincpu.pw@temp1==temp9+temp3">maincpu.pw@temp1=temp9+(temp3*param)</action>
<action condition="maincpu.pw@temp1==temp9-temp3">maincpu.pw@temp1=temp9-(temp3*param)</action>
<action condition="maincpu.pw@temp0 LT temp4 ">maincpu.pw@temp0=temp4</action> <!-- Enforce minimum value of X, Optional if boundary checks not required -->
<action condition="maincpu.pw@temp0 GT temp5 ">maincpu.pw@temp0=temp5</action> <!-- Enforce maximum value of X, Optional if boundary checks not required -->
<action condition="maincpu.pw@temp1 LT temp6 ">maincpu.pw@temp1=temp6</action> <!-- Enforce minimum value of Y, Optional if boundary checks not required -->
<action condition="maincpu.pw@temp1 GT temp7 ">maincpu.pw@temp1=temp7</action> <!-- Enforce maximum value of Y, Optional if boundary checks not required -->
<action>temp8=maincpu.pw@temp0</action>
<action>temp9=maincpu.pw@temp1</action>
</script>
</cheat>
The above cheat is made in such a way that it can be modified easily to produce the same cheat for other games which have constant player sprite speeds, just find the X and Y addresses and then the normal step size for each address and the min and max values of each address...simples