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 [1] 0 - Silent 1 - Startup messages 2 - V9938 ops 4 - Disk/Tape 8 - Memory 16 - Illegal Z80 ops -skip <percent> - Percentage of frames to skip [25] -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) [44100] -nosound - Same as '-sound 0' -sync <frequency> - Sync screen updates to <frequency> [60] -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> [2] 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
RUN "filename"
These are binary files with programs, also known as BLOADable files. You can run them from MSX BASIC with
BLOAD "filename",R
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
fMSX:
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
wrdsk
and rddsk
. The wrdsk
program
allows you to create a disk image and add files to it:
wrdsk <filename>.DSK <file> <file> ...
The 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,&hAA
to set MSX memory manager into the mode expected by most loaders.
If the ROM image is bigger than 32kB, try using -rom <N>
parameter with different <N>
s (see fmsx -help
for a complete list). If you still can't get ROM image to work, send it to me
for analysis.
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
compiler has -L<path_to_libs>
options. If you have no
libXext.a library, try #undefining MITSHM
option.
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.
-linear
command line option.
WaitJoystick()
exit when window closed.
-Wall
and eliminated warnings.
-DNO_WAVE_INTERPOLATION
with -DWAVE_INTERPOLATION
, off by default.
LoadSTA()
and SaveSTA()
code.
-DNEW_STATES
.
PLAY "S8M90O6G"
MML test works now.
-4x3
command line option to fMSX-Unix.
-scale2x
and -raster
command line options.
-mono
, -sepia
, -green
,
and -amber
command line options.
-notv
and -nolcd
command line options.
-rgb
and -cmy
command line options.
-epx
and -eagle
command line options.
-lcd
and -nolcd
command line options.
Game.rom
,
create Game.pal
containing 16 #RRGGBB values, one
per line. This palette file will be loaded automatically.
Game.rom
,
create Game.cht
containing codes in 00AAAAAA-DD and
00AAAAAA-DDDD formats, one per line. The cheat file will be
loaded automatically.
CARTS.SHA
file.
Rules.Solaris
make rules file. Include
this file into your Makefile
instead of
Rules.Unix
to compile for Solaris and don't forget about
removing -DLSB_FIRST
on SPARC hardware.
-DBPPxx
) in Makefile. Make sure you always compile
fMSX-Unix for your default screen depth.
-zoom/-nozoom
into
-soft/-nosoft
.
Keys[]
. This is done
for compatibility with GDK key events.
KeyMap[]
to KeyState[]
to avoid
name clash with MacOSX system API.
"INLINE"
properly, depending on the C standard
supported by the compiler.
#ifdef SOUND
as sound is always
compiled in anyway.
-tv/-notv
)
and zoom display (-zoom/-nozoom
) to fMSX-MSDOS.
-sync/-nosync/-vsync
work properly again in
fMSX-MSDOS.
-rom
option behaviour.
-simbdos
).
With this option on, fMSX takes over DiskROM disk access routines. When
-wd1793
is used, fMSX will simulate real WD1793 FDC instead.
[EDIT]
or left [SHIFT]
key. The keyboard
can work in three modes: "Off", "Single Key Entry", and "Multiple
Keys Entry".
E:\Others\fMSX\PRINTER.OUT
.
E:\
.
-diska/-diskb
command line options.
-diska/-diskb
command line options. Changes to such disks will not be saved for
safety reasons.
AY8910.c
, thanks to
Koichi Nishida.
CARTS.CRC
containing pairs of cartridge CRCs
and mapper types.
-rom
options.
RS232.ROM
has been moved to slot 3:3.
-rom 7
).
FMPAC.ROM
, MSXDOS2.ROM
,
and PAINTER.ROM
automatically, as long as they are in
the program directory and there is an empty cartridge slot available.
.SAV
extension. For example, GameMaster2.rom
will produce
a SRAM file named GameMaster2.sav
.
-verbose 8
.
-rom 5
).
-rom 1
).
-rom 0
), although the D/A audio circuit emulation
is not implemented.
[F9]
) and moved fixed
font switch to a different key ([CONTROL]-[F9]
).
[F6],[F9],[F10]
assignments in fMSX-Windows
to comply with other fMSX ports.
Options
menu to fMSX-Windows.
soundcart.h
).
...and to all other people who helped me with advice, information, and encouragment.