As I now have
six seven (!) different emulators to maintain in
addition to my academic studies, I expect you, people, to look for
bugs and fix them if possible. Please, submit
your fixes and bug reports!
-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.
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. fMSX source code is open for everyone to see but it is not in public domain. If your company intends to use MSX software in its products and you consider licensing fMSX source code from me, please, email me.
MSX is an old Z80-based family of home computers which appeared in 1982 as an attempt to establish a single standard in home computing similar to VHS in video. They were popular in Asian (Korea, Japan) and South American (Brazil, Chile) countries as well as in Europe (Netherlands, France, Spain) and former Soviet Union, but they are virtually unknown in USA. Although MSX standard quietly died to year 1988, the world got to see MSX2, MSX2+, and TurboR extensions of the standard.
The MSX standard has been designed by a Japanese company called ASCII in cooperation with Microsoft, which provided a firmware version of its 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 USA appears to be an early SpectraVideo machine.
In spite of its sad history, MSX is a very nice computer, especially good for education, which is clearly indicated by an example of the Soviet Union. Russian Ministry of Education bought hundreds of MSXes (and later MSX2s) grouped into "computerized classroom systems" of 10-16 machines connected with a simple network. Entire 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 3 channels of melodic sound, a noise channel, volume envelopes, and two general purpose parallel IO ports which MSX uses for joysticks and some other things. Due to their hardware architecture, MSX machines were perfectly suitable for games and there is a lot of good games either written for or ported to them.
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.
fMSX-Windows is a 32bit application which runs under all versions of Windows starting with Windows 95. It is compiled with Borland C++ Builder and needs DirectX for full screen operation. Fast computer and a video card that accelerates GDI image blitting are strongly recommended.
fMSX-MSDOS is also a 32bit application that uses DOS4GW.EXE extender (included) to run. It accesses PC hardware directly and therefore may not be compatible with some versions of Windows.
There is also another Windows port of fMSX available from Teturo Tokuyama. It is free but not up-to-date and lacks many features.
If you want me to continue developing fMSX and would like to receive the full versions of fMSX-Windows and fMSX-MSDOS, please, register them by one of the following methods:
and use the online form to register fMSX-Windows. You can pay with a credit card. They take MasterCard, Visa, Amex, or Discover. The software will be emailed to you as soon as I receive the notification from DigiBuy.
1-800-242-4775 (extension 15247) 1-713-524-6394 (extension 15247)and refer to product #15247 (fMSX-Windows). This service is provided by DigiBuy. You can pay them with a credit card. Don't forget to give them your email address. The software will be emailed to you as soon as I receive the notification from DigiBuy.
Marat Fayzullin 3030 Southview Road Ellicott City, MD 21042 USADon't forget to include your email address and mention that you want fMSX-Windows, as I'm selling several other products as well. The software will be emailed to you as soon as I receive the money.
[Control] - CONTROL [Alt] - GRAPH [Insert] - INSERT [Delete] - DELETE [Home] - HOME/CLS [End] - SELECT [PageUp] - STOP/BREAK [PageDown] - COUNTRY [F6] - Turn spacebar autofire on/off [F7] - Load emulation state from .STA file [CONTROL]+[F7] - Save emulation state to .STA file [F8] - Change disk in drive A: [CONTROL]+[F8] - Change disk in drive B: [F9] - Fast-forward emulation [CONTROL]+[F9] - Turn fixed font on/off [F10] - Turn sound on/off [CONTROL]+[F10] - Turn soundtrack logging on/off [F11] - Go to the built-in debugger [F12] - Quit emulation in fMSX-Unix: [LAlt] - Joystick A button [LControl] - Joystick B button [RShift] - CAPS LOCK [LShift] - SHIFT in fMSX-Windows: [CapsLock] - CAPS LOCK [Shift] - SHIFT [CONTROL]+[F6] - Simulate TV raster [CONTROL]+[F11] - Reset emulation in fMSX-MSDOS: [CapsLock] - CAPS LOCK [Shift] - SHIFT [CONTROL]+[F11] - Make a screen snapshot (SNAPxxxx.GIF)
Usage: fmsx [-option1 [-option2...]] [filename1] [filename2] [filename3] [filename1] = name of file to load as cartridge A [filename2] = name of file to load as cartridge B [filename3] = name of file to load as cartridge C 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 -hperiod <period> - Minimal number of CPU cycles per HBlank  -vperiod <period> - Minimal number of CPU cycles per VBlank  -uperiod <period> - Number of VBlanks per screen update  -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,8] (three -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 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 SOUND: -sound [<quality>] - Sound emulation quality  0 - Off 1 - Adlib (MSDOS) Values >8191 are treated as wave synthesis frequencies. -nosound - Same as '-sound 0' With #define MITSHM: -shm/-noshm - Use MIT SHM extensions for X [-shm] With #define UNIX: -sync <frequency> - Sync screen updates to <frequency> [-nosync] -nosync - Do not sync screen updates [-nosync] -static/-nostatic - Use static color palette [-nostatic] -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 [-nosync] -sync <frequency> - Sync screen updates to <frequency> [-nosync] (<frequency> must be in 20Hz..100Hz range) -nosync - Do not sync screen updates [-nosync] -static/-nostatic - Use static color palette [-nostatic] -240/-200 - Use non-standard 256x240 mode [-200]
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) 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. GMASTER2.RAM - Battery-backed static memory (SRAM) that comes with the Konami GameMaster2 cartridge. This file gets overwritten on exit if SRAM has been changed.
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 disks called DRIVEA.DSK and DRIVEB.DSK and located in the current directory.
wrdskprogram 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> ...]
-uperiodvalue to 3..6. This value controls how frequently fMSX updates the display. In the fMSX-Windows, the same function is performed by the "Update x ..." slider in the Setup Panel. Additionally, if you run Windows in the TrueColor (24bpp or 32bpp) mode, try switching it into HiColor (16bpp) mode. This will speed up other applications as well.
-syncoption. You would usually want to do
-sync 25 -uperiod 2which means "perform every second screen update and synchronize updates to 25Hz". The
-syncoption can also be used in fMSX-MSDOS, but as it disables task switching in Windows, you may want to use the
-vsyncoption instead. In the fMSX-Windows, you can simply go to the Setup Panel and use "Sync to..." and "Update x ..." sliders to control the emulation speed.
[CTRL]+[DEL]keys to switch off the second disk drive.
POKE &hFFFF,&hAAto set MSX memory manager into the mode expected by most loaders.
-rom <N>parameter with different
fmsx -helpfor a complete list). If you still can't get ROM image to work, send it to me for analysis.
-L<path_to_libs>options. If you have no libXext.a library, try #undefining
-noshmoption to disable the usage of shared memory.
...and to all other people who helped me with advice, information, and encouragment.