fMSX is a program that emulates MSX, MSX2, and MSX2+ home computers. It runs the majority of MSX software and mimics most popular hardware extensions, such as SCC, OPLL, etc. You can always get the latest fMSX source code, binaries, and support files from
fMSX has a very long history for a piece of software. It has been in continuous development since 1993, when I wrote the first version to run on Unix-based DEC Alpha workstations. Because fMSX is written in C, it is a very portable program. It can run on any sufficiently fast 32bit hardware platform, be it personal computer, PDA, videogame console, cell phone, set-top box, or a DVD player. There are fMSX versions for Unix, Windows, Macintosh, Symbian, MSDOS, Amiga, and many other platforms.
fMSX source code is open for everyone to see but it is not in public domain. You can look and learn from it, but you cannot change it or copy it without giving a credit to the original author and a few other conditions. If you would like to port fMSX to another platform or make changes to the code, please, contact me by email or some other means.
You cannot use fMSX source code for commercial purposes unless you contact me to arrange the conditions of such usage. If your company intends to use MSX software in its products and you are considering using fMSX source code, please, email me about licensing.
MSX is an old 8bit family of home computers created in 1982 as an attempt to establish a single standard in home computing similar to VHS in video. MSX computers have been popular in Asia (Korea, Japan) and South America (Brazil, Chile) as well as in Europe (Netherlands, France, Spain) and former Soviet Union, although they are virtually unknown in the USA. Although the MSX platform quietly died around 1988, the world got to see MSX2, MSX2+, and TurboR extensions of the MSX platform.
The MSX has been mainly designed by a Japanese company called ASCII in cooperation with Microsoft, who provided the firmware BASIC for the machine. There is a widespread rumor that "MSX" stands for "MicroSoft eXtended". MSX machines were produced by such giants as Sony, Yamaha, Panasonic, Toshiba, Daewoo, and Philips. The only MSX model ever sold in the US appears to be an early SpectraVideo machine though.
In spite of its short history, MSX is a very nice computer, especially good for education, as seen in an example of the Soviet Union. Soviet Ministry of Education bought hundreds of MSXes (and later MSX2s) grouped into "computerized classroom systems" of 10-16 machines connected with a simple network. A whole generation of programmers has grown up using these computers.
Hardware-wise, MSX represents a hybride of a videogame console and a generic CP/M-80 machine. Its heart is a Z80 CPU running at 3.58MHz in the base model. The clock frequency has been doubled in the TurboR. The video subsystem is built around a TI9918 or TI9928 VDP chip also used in Texas Instruments' TI-99/4 computers, ColecoVision, and Coleco Adam. In the late MSX models, this chip has been upgraded to V9938 (MSX2) and then to V9958 (MSX2+ and TurboR). The latest version of this chip is known as V9990. The audio system is handled by an AY-3-8910 chip from General Instruments, same as the one used in Sinclair ZX Spectrum 128. AY-3-8910 provides three channels of melodic sound, a noise channel, volume envelopes, and two general purpose parallel IO ports, which MSX uses for joysticks and a few other things. Due to their hardware architecture, MSX machines were perfectly suitable for games and there was a lot of good games either written for or ported to them.
Because fMSX is a very portable program, it can run on many different platforms: Unix, Macintosh, MSDOS, Windows, Symbian, PocketPC, Amiga, etc. The complete up-to-date list of fMSX ports is available at the fMSX distribution site. Following are the major ports:
Starting December 2013, fMSX-Windows is free for everyone to use, in binary form. You can download it from the fMSX distribution site. Also see my other emulators for Windows.
fMSX-Android is available from the Google Play Store. You can download the full version or the feature-limited free demo. Also see my other emulators for Android.
fMSX-Unix is available freely in the source code form from the fMSX distribution site.
fMSX-Linux (ELF, GLIBC, X11) is compiled from the same source code as all other Unix versions. You can get it for free from the fMSX distribution site.
If you've registered fMSX-Windows, please do not give your copy to anybody. And I do mean anybody. There were cases when registered users gave fMSX away to their friends, relatives, or just some shady characters on the Net, and then I found it pirated, put onto the Web, and even posted to USENET newsgroups. If I find your personalized copy of fMSX being spread around, your registration gets automatically cancelled which means no support and no more updates.
I understand that the previous paragraph may sound threatening to some people, but this kind of piracy really hurts my profits and feelings. I've put a lot of effort into fMSX, and can only continue working on it if people do not try to cheat on me.
[CONTROL] - CONTROL (also: joystick FIRE-A button) [SHIFT] - SHIFT (also: joystick FIRE-B button) [ALT] - GRAPH (also: swap joysticks) [INSERT] - INSERT [DELETE] - DELETE [HOME] - HOME/CLS [END] - SELECT [PGUP] - STOP/BREAK [PGDOWN] - COUNTRY [F6] - Load emulation state from .STA file [F7] - Save emulation state to .STA file [F8] - Rewind emulation back in time [F9] - Fast-forward emulation [F10] - Invoke built-in configuration menu [F11] - Reset hardware [F12] - Quit emulation [CONTROL]+[F8] - Toggle scanlines on/off [ALT]+[F8] - Toggle screen softening on/off [CONTROL]+[F10] - Go to the built-in debugger
Usage: fmsx [-option1 [-option2...]] [filename1] [filename2] [filename1] = name of file to load as cartridge A [filename2] = name of file to load as cartridge B When compiled with #define ZLIB, fMSX will transparently uncompress singular GZIPped and PKZIPped files. [-option] = -verbose <level> - Select debugging messages  0 - Silent 1 - Startup messages 2 - V9938 ops 4 - Disk/Tape 8 - Memory 16 - Illegal Z80 ops -skip <percent> - Percentage of frames to skip  -pal/-ntsc - Set PAL/NTSC HBlank/VBlank periods [NTSC] -help - Print this help page -home <dirname> - Set directory with system ROM files [off] -printer <filename> - Redirect printer output to file [stdout] -serial <filename> - Redirect serial I/O to a file [stdin/stdout] -diska <filename> - Set disk image used for drive A: [DRIVEA.DSK] (multiple -diska options accepted) -diskb <filename> - Set disk image used for drive B: [DRIVEB.DSK] (multiple -diskb options accepted) -tape <filename> - Set tape image file [off] -font <filename> - Set fixed font for text modes [DEFAULT.FNT] -logsnd <filename> - Set soundtrack log file [LOG.MID] -state <filename> - Set emulation state save file [automatic] -auto/-noauto - Use autofire on SPACE [off] -ram <pages> - Number of 16kB RAM pages [4/8/8] -vram <pages> - Number of 16kB VRAM pages [2/8/8] -rom <type> - Select MegaROM mapper types [8,8] (two -rom options accepted) 0 - Generic 8kB 1 - Generic 16kB (MSXDOS2) 2 - Konami5 8kB 3 - Konami4 8kB 4 - ASCII 8kB 5 - ASCII 16kB 6 - GameMaster2 7 - FMPAC >7 - try guessing mapper type -msx1/-msx2/-msx2+ - Select MSX model [-msx2] -joy <type> - Select joystick types [0,0] (two -joy options accepted) 0 - No joystick 1 - Normal joystick 2 - Mouse in joystick mode 3 - Mouse in real mode -simbdos/-wd1793 - Simulate DiskROM disk access calls [-wd1793] -sound [<quality>] - Sound emulation quality (Hz)  -nosound - Same as '-sound 0' -sync <frequency> - Sync screen updates to <frequency>  -nosync - Do not sync screen updates [-nosync] -static/-nostatic - Use static color palette [-nostatic] -tv/-lcd/-raster - Simulate TV scanlines or LCD raster [off] -linear - Scale display with linear interpolation [off] -soft/-eagle - Scale display with 2xSaI or EAGLE [off] -epx/-scale2x - Scale display with EPX or Scale2X [off] -cmy/-rgb - Simulate CMY/RGB pixel raster [off] -mono/-sepia - Simulate monochrome or sepia CRT [off] -green/-amber - Simulate green or amber CRT [off] -4x3 - Force 4:3 television screen ratio [off] With #define DEBUG: -trap <address> - Trap execution when PC reaches address [FFFFh] (when keyword 'now' is used in place of the <address>, execution will trap immediately) With #define MITSHM: -shm/-noshm - Use MIT SHM extensions for X [-shm] With #define UNIX: -saver/-nosaver - Save/don't save CPU when inactive [-saver] -scale <factor> - Scale window by <factor>  With #define MSDOS: -vsync - Sync screen updates to VBlank [-vsync] -480/-200 - Use 640x480 or 320x200 VGA mode [-200]
Go to http://fms.komkon.org/MSX/ and follow links from there.
These are BASIC programs. You run them from MSX BASIC with
These are binary files with programs, also known as BLOADable files. You can run them from MSX BASIC with
These are MSXDOS command files. You can run them from MSXDOS by typing their names sans the .COM extension.
These are binary images of cartridge ROMs that you can load into fMSX. There are "small" cartridge ROMs of 8kB, 16kB, or 32kB, and the MegaROMs, which can be 128kB, 256kB and even 512kB.
Following .ROM files may not be normal cartridges, but they are used by
MSX.ROM - Standard MSX BIOS and BASIC code
MSX2.ROM - MSX2 BIOS and BASIC code
MSX2EXT.ROM - MSX2 ExtROM containing system extensions
MSX2P.ROM - MSX2+ BIOS and BASIC code
MSX2PEXT.ROM - MSX2+ ExtROM containing system extensions
DISK.ROM - MSX DiskROM containing BDOS and Disk BASIC (optional)
RS232.ROM - RS232 BIOS and BASIC extensions (optional)
FMPAC.ROM - FM-PAC BIOS and BASIC extensions (optional)
MSXDOS2.ROM - MSXDOS2 system core (optional)
PAINTER.ROM - Yamaha Painter, graphical editor found in Russian MSX
machines from Yamaha (optional)
GMASTER.ROM - Konami GameMaster, a game cheating tool (optional).
GMASTER2.ROM - Konami GameMaster2, a game cheating tool (optional).
KANJI.ROM - ROM with Kanji character images (optional)
CMOS.ROM - Non-volatile memory used in MSX2 and MSX2+. This file gets
overwritten on exit if non-volatile memory has been changed.
Please note that not all of these may be included with your fMSX copy.
fMSX includes disk support starting with version 0.9. If you have an earlier version, you cannot use disks. The following instructions assume that you have a version supporting disks.
First, make sure that the DISK.ROM file containing MSX DiskROM is in the current directory. Then, use an MSDOS program called DCOPY.EXE to create disk images of your MSX disks:
DCOPY <drive>: <filename>.DSK
These images are just raw files with all disk blocks written in a sequence. They can also be created on a Unix machine with
cp /dev/rfd0 <filename>.DSK
or a similar command. If you have a 1.44MB HD floppy formatted on MSX for 720kB, don't forget to stick a piece of tape on the HD/DD indicator hole.
After you have created disk image files, run fMSX in the following way:
fmsx -diska <filename1>.DSK -diskb <filename2>.DSK
where two image filenames will become your drives A: and B:. You can also have default disk images called DRIVEA.DSK and DRIVEB.DSK and located in the current directory.
In fact, there is. Look at two programs that come with fMSX, called
allows you to create a disk image and add files to it:
wrdsk <filename>.DSK <file> <file> ...
rddsk program will read files from a given disk image:
rddsk <filename>.DSK [-d <dir>] [<file> <file> ...]
Many MSX programs have BASIC loaders written for machines not quite compatible with each other. Other loaders expect the machine to have only one floppy disk drive and use the memory dedicated to the second drive. To make such programs work, perform two "magic passes" on fMSX before running a loader:
[CTRL]+[DEL]keys to switch off the second disk drive.
POKE &hFFFF,&hAAto set MSX memory manager into the mode expected by most loaders.
If the ROM image is bigger than 32kB, try using
parameter with different
for a complete list). If you still can't get ROM image to work, send it to me
NO. Nobody seems to care though, mainly because there is no profit to be made from MSX software any longer. Nevertheless, be aware of the fact that by using commercial software you haven't bought you are commencing an act of piracy.
This means that your linker cannot find the libraries necessary for the
emulator (namely, libX11.a and libXext.a) or some additional libraries
(like libsocket.a and libnsl.a) are required. Find these libraries in your
system and modify the Makefile so that the final invocation of the C
-L<path_to_libs> options. If you have no
libXext.a library, try #undefining
You are probably trying to run the emulator on a remote Xterminal while
it attempts to use shared memory for interfacing with X. Use the
-noshm option to disable the shared memory usage.
Unix/X version of fMSX can currently be compiled for 8bit, 16bit, or 32bit Xterminals. Neither 1bit nor 4bit Xterminals will work with the drivers included into official fMSX distribution. Arnold Metselaar developed the drivers supporting any Xterminal. These drivers are available from the fMSX distribution site.
-linearcommand line option.
WaitJoystick()exit when window closed.
-Walland eliminated warnings.
-DWAVE_INTERPOLATION, off by default.
PLAY "S8M90O6G"MML test works now.
-4x3command line option to fMSX-Unix.
-rastercommand line options.
-ambercommand line options.
-nolcdcommand line options.
-cmycommand line options.
-eaglecommand line options.
-nolcdcommand line options.
Game.palcontaining 16 #RRGGBB values, one per line. This palette file will be loaded automatically.
Game.chtcontaining codes in 00AAAAAA-DD and 00AAAAAA-DDDD formats, one per line. The cheat file will be loaded automatically.
Rules.Solarismake rules file. Include this file into your
Rules.Unixto compile for Solaris and don't forget about removing
-DLSB_FIRSTon SPARC hardware.
-DBPPxx) in Makefile. Make sure you always compile fMSX-Unix for your default screen depth.
Keys. This is done for compatibility with GDK key events.
KeyStateto avoid name clash with MacOSX system API.
"INLINE"properly, depending on the C standard supported by the compiler.
#ifdef SOUNDas sound is always compiled in anyway.
-tv/-notv) and zoom display (
-zoom/-nozoom) to fMSX-MSDOS.
-sync/-nosync/-vsyncwork properly again in fMSX-MSDOS.
-simbdos). With this option on, fMSX takes over DiskROM disk access routines. When
-wd1793is used, fMSX will simulate real WD1793 FDC instead.
[SHIFT]key. The keyboard can work in three modes: "Off", "Single Key Entry", and "Multiple Keys Entry".
-diska/-diskbcommand line options.
-diska/-diskbcommand line options. Changes to such disks will not be saved for safety reasons.
AY8910.c, thanks to Koichi Nishida.
CARTS.CRCcontaining pairs of cartridge CRCs and mapper types.
RS232.ROMhas been moved to slot 3:3.
PAINTER.ROMautomatically, as long as they are in the program directory and there is an empty cartridge slot available.
.SAVextension. For example,
GameMaster2.romwill produce a SRAM file named
-rom 0), although the D/A audio circuit emulation is not implemented.
[F9]) and moved fixed font switch to a different key (
[F6],[F9],[F10]assignments in fMSX-Windows to comply with other fMSX ports.
Optionsmenu to fMSX-Windows.
...and to all other people who helped me with advice, information, and encouragment.