How can I let most of the MSX1 software work on MSX2 machines?
This page was last modified 09:13, 16 March 2023 by Gdx.

On the MSXs, the last memory byte (FFFFh) is used to access the register of the secondary slots. Under Basic, the upper 32kB are always selected on initialization. So software that doesn't require more RAM usually run without a problem. For those that require more RAM and are intended to be loaded from tape, the lower part of the RAM (0000h-7FFFh) should be researched by the developer.

As the first MSX1s do not have a secondary slot, this address was often ignored, or even used to store a byte there. As a result, many MSX1 software did not work on all MSXs.

Thus, to run this software correctly, all you have to do is pre-position the bits corresponding to these 32 KB of RAM before loading one with a POKE instruction. It can be add in the loader in Basic at the beginning. There are two ways to write this POKE.

POKE -1,1.0625*(NOT(PEEK(-1))AND&HF0)

The other is a bit shorter:

POKE -1,(15-PEEK(-1)\16)*17

-1 is used instead of &HFFFF because it give the same result when used with POKE and PEEK instructions.

This poke is nicknamed "universal poke" but it is not really universal because it only works when all 64KB of the RAM is in the same slot, which is the case for most MSX2 and newer. Be cons, it doesn't work and even can get in the way on MSX's that have fragmented RAM across multiple slots (eg. some Sony HB-F500 series). In this case, use a Memory Mapper expansion and BMMS instead.

In addition to that, CTRL-key pressed during the MSX start up can allows your MSX to runs even more software because it lets the MSX not reserve memory for a second diskdrive and gives you a little more memory. Since most MSX1 games were on cassette, the programs don't expect that memory was reserved for diskdrives and disabling one might just give you enough memory to run the program.

Another thing that might help is setting the width of the screen to 40 (or less) columns. Some MSX1 games don't expect the width to be 80 columns. Type this before loading: WIDTH 40. You can also set the screen-mode to screen 2 and then load, like this: SCREEN 2:RUN"PROGRAM.LDR", because some games expect the computer to be in screen-mode 2, because originally there was a loader that displayed some nice graphics to amuse you while loading (from cassette), which are most of the time in screen 2.