Computers Overview
Commodore PET
Sinclair ZX80
Sinclair ZX81
BBC Micro
Sinclair Spectrum
Memotech MTX
    About
    Library
    Manuals
    Options
    Photos
    Projects
    Repairs
    Software
    Tools
      Development
          Dev. Corner
          EXEROM
          FUZIX
          Resources
          SDCC
          Z88DK
      Web Tools
    User Groups
    Video Wall
Memotech CP/M
Atari ST
Commodore Amiga
PDAs
DEC 3000 AXP
OpenVMS
Raspberry Pi

 

 
 
 

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.

 

Downloads

  Version Date Comments
0.5 03/08/2017 Development - sound optimisation (Zip includes a test music ROM file)
0.4.1 01/08/2017 Development - now runs on MTX hardware
0.4 23/04/2017 Includes noise support - runs in MEMU only
0.3 23/04/2017 More realistic sounds, noise & some support routines missing
0.2 23/04/2017 Initial Version - limited sound support

 

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.

 

MSX ROMs

  Game Publisher Year Source LA 0x Comments
Bird & Chairs NI 2017 ni.x0.com 4000  
Glider Zap ???? msxabandonware 8000 Unknown keys
Super Cobra Konami 1983 msxabandonware 4000 Unknown keys
Tales of Popolon v1.3 Santi Ontanon 2017 Github 4000  
Zanac A.I. Pony 1986 msxabandonware 4000 Nice shoot 'em up
Zaxxon Sega 1985 msxabandonware 4000  
Zexas Limited dB-Soft 1985 msxabandonware 4000 Space shoot 'em up

 

Title Alpha Squadron
Publisher Sony
Year 1984
Genre Space flight simulator / shoot 'em up
Source doperoms
Comments

Impossibly hard - for me at least.

I can't take off without crashing.
  0x4000
Title F16 Fighting Falcon
Publisher Nexa
Year 1984
Genre Space flight simulator / shoot 'em up
Source doperoms
Comments

 
  0x8000
Title Galaga
Publisher Namco
Year 1984
Genre Space shoot 'em up
Source msxabandonware
Comments

 
  0x4000
Title Galaxians
Publisher Namco
Year 1984
Genre Space shoot 'em up
Source msxabandonware
Comments

 
  0x4000
Title GP World
Publisher Sega
Year 1984
Genre Car racing
Source msxabandonware
Comments

"Turbo" for MSX?  :-)
  0x4000
Title Jump Coaster
Publisher Nippon Columbia / Colpax
Year 1984
Genre Platform game
Source msxabandonware
Comments

 
  0x8000
Title Jump Land
Publisher Nippon Columbia / Colpax
Year 1985
Genre Platform game
Source planetemulation
Comments

 
  0x8000
Title Red Zone
Publisher Yellow Horn
Year 1985
Genre Space shoot 'em up
Source doperoms
Comments

 
  0x8000
Title Road Fighter
Publisher Konami
Year 1985
Genre Car racing
Source msxabandonware
Comments

 
  0x4000
Title Shmup!
Publisher David Fernández
Year 2013
Genre Space shoot 'em up
Source imanok
Comments

 
  0x4000
Title Space Invaders
Publisher Taito Corp
Year 1985
Genre Space shoot 'em up
Source msxabandonware
Comments

 
  0x4000
   

The games in the table below have been tested with the results shown, but are not made available for download here due to either copyright restrictions (again, a quick "Google" should help you find them on the 'net), or that fact that they don't run under EXERUN.

The biggest cause of failure so far is with 128k ROMs, as explained by Timo, "they are ctually 128KB ROMs that are divided in to 8KB blocks in order to make them fit to Z80 address space. Any ROMs that are bigger than 32KB are not supported and also ROMs that require BASIC or that are coded to work in memory area #0000-#3FFF are not supported."

Please e-mail me your test results with other games and I will include them here.

Incompatible MSX ROMs

  Game (Links to info) Publisher Source Comments
Χ Gradius Konami n/a 128k ROM
Χ Nemesis Konami n/a 128k ROM
Χ Zanac Ex Pony n/a 128k ROM

 

 

 

 

mailto: Webmaster

 Terms & Conditions