As I now have four (!) 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!
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 working 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 it is V9990. The audio system is handled by AY-3-8910 chip by General Instruments, same as the one used in Sinclair ZX Spectrum 128 audio. AY-3-8910 provides 3 channels of melodic sound, noise generation, volume envelopes, and two general purpose parallel IO ports which are used for joysticks and some other things in the MSX design. Due to their hardware architecture, MSX machines were perfectly suitable for games and there is a lot of good games either written or ported to them.
Amiga: Hans Guijt Windows: Marat Fayzullin Tekuro Tokuyama Macintosh: John Stiles Paul Chapman PC9801: Murakami Reki MSDOS: Marcel de KogelIf you would like to port fMSX to another system or make changes to the fMSX's code, please, contact me by email or some other means. Note that fMSX source code is freely distributable but it is not in public domain. You cannot use it for commercial purposes unless you contact me to arrange the conditions of such usage and get my permission. Feel free to look at existing drivers as well as at other code.
I understand that the previous paragraph may sound threating 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 Windows 95/98/NT Windows NT. It is compiled with Borland C++ Builder and does not need WinG, DirectX, or any other "API" from Microsoft screwing your system. Video card accelerating BitBlt() and StretchBlt() GDI calls and a fast computer are strongly recommended though.
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 version of fMSX-Windows, please, register it 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 6304 Hampton Place Elkridge, MD 21075 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.
Unix version: [LALT] - Joystick A button [LCONTROL] - Joystick B button [RSHIFT] - CAPS LOCK [RCONTROL] - COUNTRY [RALT] - GRAPH [F6] - HOME/CLS [F7] - DELETE [F8] - INSERT [F9] - SELECT [F10] - STOP/BREAK [CONTROL]+[F6] - Turn spacebar autofire on/off [CONTROL]+[F7] - Change disk in drive A: [CONTROL]+[F8] - Change disk in drive B: [CONTROL]+[F9] - Turn fixed font on/off [CONTROL]+[F10] - Turn soundtrack logging on/off [F11] - Go into the built-in debugger (with #define DEBUG) [F12] - Quit emulation Windows version: [Insert] - INSERT [Delete] - DELETE [Home] - HOME/CLS [End] - SELECT [PageUp] - STOP/BREAK [PageDown] - COUNTRY [CapsLock] - CAPS LOCK [Alt] - GRAPH [F6] - Change cartridge in slot A [F7] - Change disk in drive A: [F8] - Change disk in drive B: [F9] - Invoke Setup panel [F10] - Invoke Windows menu [F11] - Reset emulation [F12] - Quit emulation
Usage: fmsx [-option1 [-option2...]] [filename1] [filename2] [filename1] = name of file to load as cartridge A [filename2] = name of file to load as cartridge B [-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> - Number of CPU cycles per HBlank  -vperiod <period> - 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> - Write soundtrack to a file [LOG.MID] -auto/-noauto - Use/Don't 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 [0,0] (two -rom options accepted) 0 - Konami 8kB 1 - MSXDOS2 16kB 2 - Konami5 8kB 3 - Konami4 8kB 4 - ASCII 8kB 5 - ASCII 16kB >5 - 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/-nosound - Play/don't play sound [-sound] With #define MITSHM: -shm/-noshm - Use/don't use MIT SHM extensions for X [-shm] With #define UNIX: -saver/-nosaver - Save/don't save CPU when inactive [-saver] -sync <freq> - Frequency to sync screen updates to [no sync] -nosync - Same as '-sync 0' -scale <factor> - Scale window by <factor>  With #define MSDOS: -vsync/-novsync - Sync/Don't sync screen updates [-novsync] -240/-200 - Use/Don't use non-standard 256x240 mode [-200] -static/-nostatic - Use/Don't use static color allocation [-nostatic]
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 rewritten on exit if non-volatile memory was 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.
-syncoption. You would usually want to do
-sync 25 -uperiod 2which means "perform every second screen update and synchronize updates to 25Hz".
[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 of .NL/.CL/.SU people who helped me with advices, information, and encouragment.