Page 1 of 1

MSX8 - The MSX ROM launcher

Posted: Mon Jun 24, 2024 3:42 pm
by LesB
MSX8 is a CP/M program that will play MSX ROMs. You might be familiar with Luis' (RenderEng) MSXROM and Brian Johnson's excellent LIBMSX which are direct inspirations for my MSX8 program.

Why make another MSX ROM launcher for the NABU?

My goals were to make a MSX ROM launcher that would work with as many MSX ROMs as possible right out of the box. I wanted it to be easy to use so all you need to do is run the MSX8 program and tell it what ROM to play, much like how MSXROM works. I wanted it to be cross platform - it is CP/M afterall so it should work on any CP/M system with identical hardware. And I wanted it to be open source and explain in detail how I did it.

See the Github page here: https://github.com/lesbird/MSX8

When I started this project the idea was to make a MSX ROM player for my Heathkit H8 computer which has a graphics card with identical hardware as the NABU and MSX computers, namely a TMS9918 VDP and AY-3-8910 PSG. I was originally going to try to modify the MSXROM project to work with Heathkit hardware but that project is closed source. I then started looking at Brian Johnson's open source LIBMSX but building CP/M COM programs for ALL of the ROMs was quite a task. So I started looking into creating my own version of MSXROM that could do the job.

What makes MSX8 different?

For starters, I use the full MSX ROM BIOS instead of a stripped down version. I made as few changes as possible to preserve the original functionality of the BIOS. When copied down to 0x0000 this should make your Z80 computer appear and operate like a real MSX computer. All of the jump tables are preserved and only slightly modified to call into hardware specific functions, such as keyboard and joystick, that are unique for the system it is running on. This approach results in maximum compatibility with all of the ROMs. The results are incredible with an amazing 380+ ROMs that will load and run using MSX8 and a large majority of these ROMs are fully playable (see the list here: https://github.com/lesbird/MSX8/blob/main/romlist.md). Some of these ROMs require my MSX8P program which is a version of MSX8 that will patch the ROMs if they are directly writing to the VDP/PSG ports instead of going through the BIOS. MSX8P will search the ROM code for IN/OUT/OUTI instructions and if they are writing to the VDP or PSG it will patch them to use the I/O ports for the hardware it is running on. This will allow a lot of ROMs to work that otherwise would not but it has the potential to also break games as it is almost impossible to tell if a piece of code is actual code or if it is data. Patching data could break the game so MSX8P may not always work. MSX8 strictly uses IM1 which almost every ROM expects. On the NABU I enable VDP interrupts and disable keyboard interrupts. The keyboard and joysticks are polled during the VDP interrupt exactly as it works on a real MSX computer.

MSX8 currently works on Heathkit H8, RC2014 (with JB's TMS graphics module and Ed Brindley's AY3 audio module) and NABU.

You can download MSX8 for NABU from the Github page linked above.

Re: MSX8 - The MSX ROM launcher

Posted: Tue Jun 25, 2024 12:01 am
by LeoBinkowski
This is really cool. I'll be trying this out soon because there are some MSX games I've always wanted to see.

Re: MSX8 - The MSX ROM launcher

Posted: Tue Jun 25, 2024 4:34 am
by intangybles
Great Les! Testing on as many NABU CP/M platforms as I can! ;)