|
The Memotech MTX Series |
|
Memotech Software
Development
EXEROM - MSX Games ROM
Loader
by Timo
Soilamaa
Status : Abandoned |
|
Unfortunately, this project has been abandoned,
hopefully, Timo will be able to revisit it at some point
as it would have been a great bonus for Memotech owners.
|
|
Timo Soilamaa has developed EXEROM
- a loader that allows unmodified MSX Games ROM to run on the
MTX !
EXEROM started life as a MSX ROM loader for
Spectravideo computers, including the
SV-328. You
can read Timo's (Nyytikki's) decryption of what the loader does
and some details of its inner workings in
this thread on the msx.org
website.
Despite being a very interesting and novel approach to
porting software from one platform to another, the latest
version of the loader didn't get much attention from the
Spectravideo community, so Timo took his code and ported it to
the MTX - influenced no doubt by the higher class of user to be
found in the MTX community !
In Timo's words. . . .
"At the heart of this project there is custom version of the
open source C-BIOS
that implements MSX BIOS calls. Naturally some of them like
keyboard input etc. I have completely rewritten for MTX.
On top of that there is this home made "self aware, self
modifying artificial intelligence". The AI is used to find the
correct places to patch the program. The idea is that the AI is
pretty much emulating my own thoughts about Z80 code running on
the MSX platform.
For example, if the code in memory looks like this:
LD BC,#387 |
LD DE,#4421 |
LD B,A |
The AI thinks "hmm... this looks suspicious... The B-register
is loaded even though it already had an unused value" By itself,
this is not a strong statement against the code validity, but
the AI uses fuzzy logic and evaluates the "big picture", so once
it has a pile of similar small thoughts, it combines them to
form a complete on opinion whether or not the routine should be
patched. This is done to avoid patching of graphics, music and
other type of data that can be present in games.
The AI has also another level that then evaluates how the
routines should be patched. You can't always tell what the
routine is used for and for that reason it may add some "break
points" to interrupt the routine in execution time for further
evaluation & repatching. In general there are quite a few tricks
used to make the end result to what it is... "
The loader is currently a "work in progress", but, so far,
looks absolutely fantastic. At the moment, MEMU is required to
run the loader and MSX games, but, ultimately, the loader should
run on a real MTX computer.
From Timo's posting in the Facebook MTX 500 Group . . .
"First very early, unsupported version of MSX ROM-loader for
Memotech MTX that is meant for "early adopters"...
This version does not yet have joystick support, but it lets you play maybe about 50% of MSX ROM games that
fit in to 32KB size and do not require MSX-BASIC.
This version still also lacks a loader, so you can mainly
test it on MEMU
Starting: "memu -v -s -diag-bad-port -iobyte 0x80 -mem
exerom -addr 0x4000 -mem MSXGAME.ROM -addr 0x3ff0"
Note: some 8/16K games may use "-addr
0x8000" as load address instead...
Running on a "real" MTX
(Information courtesy of Martin Allcorn)
[This technique was developed for CFX where the loader
program and EXEROM image are easily accessed from MTX BASIC, it
should work using tapes, but managing the loader, EXEROM and
games ROM files is likely to be pretty awkward.]
You need to run on a MTX500 (32k RAM) or switch a MTX512 (64k
RAM) into MTX500 mode
- POKE 64122,0 ; NEW
(configures on 2 x 16k pages of RAM and resets the machine)
You need a program that fills the 16k paged RAM area, so
assemble lots of DS 254 instructions (64 should do it), that
puts the bulk of the basic program in the unpaged area so you
can page the memory without breaking BASIC.
Then load the emulation ROM at #8000 (32768) in page 1, as
that moves to 0 on swapping to RAM mode, and then page back and
load the game at #4000 or #8000 (16384 or 32768)
Then one more snippet of code I’m assuming it needs to be run
from 0. It needs GOTO 40 to start it
Example Code using GALAGA.ROM Game
1 |
GOTO 40 |
10 |
CODE |
800F |
DS 254 |
810D |
DS 254 |
|
. . . |
BD93 |
DS 254 |
BE91 |
RET |
Symbols: |
|
40 |
USER READ “EXEROM04.ROM”,32768 |
50 |
CODE |
C0AD |
DI |
C0AE |
LD A,#80 |
C0B0 |
OUT (0 ),A |
C0B2 |
LD BC,#4000 |
C0B5 |
LD DE,#0 |
C0B8 |
LD HL,#8000 |
C0BB |
LDIR |
C0BD |
LD A,(#FAD2) |
C0C0 |
OUT (0 ),A |
C0C2 |
EI |
C0C3 |
RET |
Symbols: |
|
70 |
USER READ “GALAGA.ROM”,16384 |
80 |
CODE |
C11F |
DI |
C120 |
LD A,#80 |
C122 |
LD (#FAD2),A |
C125 |
OUT (0 ),A |
C127 |
JP #3FF0 |
C12A |
RET |
Symbols: |
|
Note : I have had the best/most consistent
results with the Road Fighter game ROM - I suggest that you try
that first.
A selection of MSX ROMs that have been tested with MEMU are
included below. A large selection of MSX ROMs can be found on
the web with a quick "Google", though not all are in the public
domain or freely distributable. I believe that the ROMs available
below are free to distribute, but if you know better, please let
me know and I will remove them.
Note: many of these ROMs came from the
msxabandonware
website, it should be noted that the term "abandonware" has no
legal meaning, the ROMs are almost certainly still under
copyright, but the original manufacturer or distributor does not
appear to actively enforce their rights. Should the copyright
owner wish to assert those rights, I will, of course, remove the
offending ROM.
|