                             fMSX MS-DOS 1.6b2
                   MSX emulator for the MS-DOS platform.
    Core emulator code copyright (C) 1994, 1995, 1996  Marat Fayzullin
           This version copyright (C) 1996,1997  Marcel de Kogel
                                     
               MS-DOS(tm) is a trademark of Microsoft Corp.

Hardware Requirements
=====================
A 486SX-25 (P66 recommended)
A VLB- or PCI-based VGA compatible video card
PC Speaker/Adlib/SB2.0/SBPro/SB16/GUS/SB AWE32/MPU401 and joystick
supported

Files included in FMSX-DOS.ZIP
==============================
FMSX-DOS.EXE The emulator
FMSX-DOS.TXT This file
CWSDMI.ZIP   A DPMI server required by FMSX-DOS.EXE
             If you don't run fMSX in a DPMI hosted environment (OS/2, MS-
             Windows, Linux DOSEmu, QDPMI, ...), put the file CWSDPMI.EXE
             included in this archive somewhere in your path or in the
             emulator's directory
FILE_ID.DIZ  A small description of this program
Some utilities for use with fMSX MS-DOS can be found on the fMSX MS-DOS
distribution site at http://www.komkon.org/~dekogel/fmsx.html
The source of the Z80 emulation code used can be found on
http://www.komkon.org/~dekogel/misc.html
More information about fMSX and MSX in general can be found on the fMSX
distibution site at http://www.freeflight.com/fms/fMSX

Other files required by fMSX MS-DOS
===================================
The following files are required for correct operation but are not
included in the archive for copyright reasons:
MSX2.ROM     MSX2 BIOS and BASIC code
MSX2EXT.ROM  MSX2 ExtROM containing system extensions
MSX.ROM      Standard MSX BIOS and BASIC code [optional]
MSX2P.ROM    MSX2+ BIOS and BASIC code [optional]
MSX2PEXT.ROM MSX2+ ExtROM containing system extensions [optional]
DISK.ROM     MSX DiskROM containing BDOS and DISK BASIC [optional]
RS232.ROM    RS232 BIOS and BASIC extensions [optional]
FMPAC.ROM    FM-PAC ROM extensions [optional]
PAINTER.ROM  PAINTER ROM extensions [optional]
CMOS.ROM     This file is created automatically and contains the non-
             volatile memory used in MSX2 and MSX2+. This file gets
             rewritten on exit if non-volatile memory was changed
Please, do not ask where you can get these files as I shan't answer

Key Mapping
===========
GRAPH  - Left alt
CODE   - Right alt
SELECT - PageDown
STOP   - PageUp

Special Keys
============
F6  - Rewind tape
F7  - Wind tape
F8  - Make screen shot
F9  - Pause
F10 - Quit emulator
F11 - Increase sound volume
F12 - Decrease sound volume
RIGHT CTRL+F8    - Toggle sound on/off
RIGHT CTRL+F9    - Change options
RIGHT CTRL+1...0 - Change disk offset
Win95 and Pointer keys - Space
Left Ctrl+Left Alt+Right Ctrl+Right Alt     - Soft reset MSX
Left Ctrl+Left Shift+Right Ctrl+Right Shift - Hard reset MSX

Command line options
====================
Below is a list of available command line options. Many options may be
abbreviated. Use -help to get a list of currently supported abbreviations
-help                   Show a help page describing all available command
                        line options
-verbose <flags>        Select debugging messages [1]
                        0 - Silent       1 - Startup messages
                        2 - V9938 ops    4 - Disk
                        8 - Memory      16 - Illegal Z80 ops
-ifreq <frequency>      Set interrupt frequency [50Hz]
                        Default interrupt frequency is 50Hz for PAL
                        (European) systems and 60Hz for NTSC (American and
                        Japanese) systems. If you find your games running
                        a bit too slow, try using -ifreq 60
-sync <mode>            Set synchronisation mode [1]
                        0 - Do not sync emulation
                        1 - Sync emulation on every VDP interrupt
-adjust <mode>          Set VDP screen adjustment emulation mode [0]
                        0 - Do not emulate VDP screen adjustment
                        1 - Emulate horizontal adjustment only
                        2 - Emulate vertical adjustment only
                        3 - Fully emulate VDP screen adjustment
                        Please note that some lines may not appear on the
                        screen if VDP screen adjustment emulation is
                        turned on
-linedelay <value>      Set screen refresh delay [3 scanlines]
-cpuspeed <percentage>  Set Z80 CPU speed [100%]
-uperiod <period>       Set number of interrupts per screen update [2]
-sprite <mode>          Select sprite emulation mode [0]
                        0 - Show all sprites
                        1 - Limit number of sprites per row to 4/8
                        Though some games require -sprite 1 for correct
                        display, it'll cause major sprite flicker with
                        many others
-printer <filename>     Redirect printer output to file [stdout]
-serial <filename>      Redirect serial I/O to a file [stdin/stdout]
-ram <pages>            Number of 16kB RAM pages [4/8/8]
                        Many disk based games require more than 128KB RAM.
                        Try using -ram 16 or -ram 32 if you're having
                        problems getting such games to run
-vram <pages>           Number of 16kB VRAM pages [2/8/8]
-msx1/-msx2/-msx2+      Select MSX model [-msx2]
-rom <type>             Select MegaROM mapper types [0,0]
                        (two -rom options can be present)
                        0 - Konami 8kB    1 - Konami 16kB
                        2 - Konami5 8kB   3 - Konami4 8kB
                        4 - ASCII 8kB     5 - ASCII 16kB
-diska <filename>       Set disk image used for drive A: [DRIVEA.DSK]
                        Physical drives are supported, e.g. "-diska A:"
                        will use PC disk A:. Both single and double sided
                        floppies are supported
-diskb <filename>       Set disk image used for drive B: [DRIVEB.DSK]
-tape <filename>        Select tape image [MSX.CAS]
                        There's no limit to the length of a tape image
-font <filename>        Set fixed font for text modes [none]
-logsnd <filename>      Write soundtrack to a file [off]
-painter <mode>         Load/Do not load PAINTER.ROM [0]
                        0 - Do not load PAINTER.ROM
                        1 - Load PAINTER.ROM
-video <mode>           Select video mode [0]
                        0 - 320x200   1 - 320x240
                        2 - 640x480   3 - 256x212
                        Video modes 1 and 3 may not be compatible with
                        your video card and/or monitor. For video 2,
                        you'll need a VESA compatible video card
-chipset <id>           Select SVGA chipset [255]
                        0 - VESA
                        1 - S3
                        255 - Detect
                        Support for more popular chipsets may be added in
                        future versions
-modeswitch <mode>      Allow/Don't allow VGA mode switches [0]
                        0 - Don't allow VGA mode switches
                        1 - Allow VGA mode switches
                        If this option is enabled, the game will use both
                        video modes 2 and 3
-gamma <value>          Select gamma adjustment value [1.0]
-sound <mode>           Select audio mode [255]
                        0 - No sound
                        1 - Internal Speaker
                        2 - Adlib
                        3 - Sound Blaster
                        4 - Gravis Ultrasound
                        5 - SB AWE32
                        255 - Detect
-stereo <level>         Set stereo panning level (SB AWE32 only) [0]
                        0 - Mono    100 - Maximum
-speakerchannels        Set sound channel priority list (Internal speaker
<list>                  only) [3,2,1]
                        1-3 = PSG Melodic
                        4-6 = PSG Noise
                        7-11 = SCC
                        Most games use channel 3 for their sound effects
                        and channels 1 and 2 for their melodies. Try using
                        3,1,2 if the default list doesn't give the desired
                        sound quality
-volume <volume>        Set initial volume [10]
                        0 - Quiet    15 - Maximum
-reverb <level>         Set reverb send level (SB AWE32 only) [7]
                        0 - None    100 - Maximum
-chorus <level>         Set chorus send level (SB AWE32 only) [0]
                        0 - None    100 - Maximum
-soundquality [-sq]     Set sound quality (SoundBlaster only) [3]
<value>                 Range is from 1 (low) to 5 (very high)
-scc <mode>             Set SCC emulation mode [1]
                        0 - SCC emulation off
                        1 - SCC emulation on
-fmpac <mode>           Set FM-PAC emulation mode [0]
                        0 - FM-PAC emulation off
                        1 - FM-PAC emulation via OPL2 (Adlib)
                        2 - FM-PAC emulation via MPU401 (General MIDI)
                        3 - FM-PAC emulation via MPU401 & OPL2
                        FM-PAC can only be turned on if FMPAC.ROM is
                        resident in your fMSX MS-DOS directory
-joystick <mode>        Select joystick mode [1]
                        0 - No joystick support
                        1 - Emulate joystick at port 1
                        2 - Emulate joystick at port 2
                        The 2nd PC joystick isn't supported (yet)
-swapbuttons <mode>     Swap/Do not swap buttons [0]
                        0 - Do not swap buttons
                        1 - Swap joystick buttons

Tape emulation
==============
The tape emulation isn't nearly finished. Saving and loading files from
BASIC works correctly (Metal Gear saves perfectly as well), but there are
some major problems creating tape images from real MSX tapes. There's no
program shipped with the emulator that does this

Multi disk games support
========================
As of version 1.6b1, fMSX MS-DOS supports multi disk images. To create
one, simply copy several disks to 1 image like this: "COPY /B
DISK1.DSK+DISK2.DSK MULTI.DSK", start the emulator with the resulting disk
image as disk A, and press RIGHT CTRL+1..0 when the game asks you to
insert a new diskette. Please note that this only works for double sided
disk images (720Kb ones)

Screen shots
============
Whenever you press F8 to save the screen contents to a graphics file, the
emulator will create an fMSXxxxx.BMP file, where xxxx is an ascending
number starting at 0000, which is a 256 colour windows bitmap file

Passing options to the emulator
===============================
With the amount of command line options fMSX MS-DOS supports, it's easy to
create command lines larger than the DOS limit of 126 bytes. If you
experience problems with the command line length, put all options in a
temporary file (say, "TempFile.tmp"), and start the emulator with the
command line "fMSX-DOS @TempFile.tmp". You may also give extra command
line options when using this feature, like in `fMSX-DOS @MyConfig.cfg -
ifreq 60 Pacman.rom'

Configuration files
===================
The emulator loads three configuration files (if present) before it boots
MSX: fMSX-DOS.cfg located in the emulator's directory and CARTA.cfg and
CARTB.cfg located in the cartridge dump's directory. These are plain text
files containing optional command line options. Options can be separated
with spaces, tabs or returns

Troubleshooting
===============
- If a game runs a bit too slow, try using -ifreq 60
- If the emulator runs all games much too slow, try decreasing cpuspeed
  to 50%-70%. You may also want to try -sync 0. If you're using a
  SoundBlaster, try decreasing the sound quality or using Adlib mode
- If you want your games to run faster, increase ifreq. If you want them
  to run slower, decrease ifreq
- If you don't own an MSX with a floppy drive and you want to create an
  MSX floppy disk, follow these instructions: Format a 3 inch floppy
  disk to standard DOS 720KB format and start fMSX MS-DOS with the "-
  diska A:" (or "-diska B:") option with the floppy not inserted in the
  drive. After MSX-BASIC has booted, insert the floppy into your floppy
  drive and type "CALL FORMAT". Choose drive A and double sided, and
  wait till the formatting has finished.

History
=======
1.6b2 Added -sprite, -gamma and -painter options and screenshot support.
      Fixed several bugs in the VDP emulation, sped up emulation, replaced
      Marat's Z80 emulation code with Z80Em 1.2
1.6b1 Fixed several interrupt related bugs, added multi-disk game support,
      General MIDI support and a few miscellaneous options
1.4.1 Major improvements to the SoundBlaster support, added FM-PAC
      emulation, fixed some bugs
1.3.1 Increased speed, fixed lots of bugs, added PC speaker, SB, GUS and
      AWE32 support, added S3 support, added tape emulation and
      configuration file support
1.2.3 Added volume control, joystick options, modeswitch option, video
      mode 3, improved sound, increased speed, fixed some bugs
1.2.2 Added joystick support, Added SCC emulation and improved PSG
      emulation, added VESA support, increased speed, fixed some major
      bugs
1.2.1 Initial release

Credits
=======
- fMSX MS-DOS was compiled using DJ Delorie's DJGPP v2.0. DJGPP is a 32
  bit C compiler for MS-DOS. Source code and binaries of DJGPP are
  available at http://www.delorie.com
- The SB AWE32 routines are heavily based on `The Unofficial Sound
  Blaster AWE32 Programming Guide' written by Vince Vu a.k.a. Judge
  Dredd. Thanks a million for writing this!
- Martijn Zeedijk tested the GUS routines and helped me fix lots of bugs
- Some parts of the code were taken from Allegro. Allegro is a library
  for DJGPP written by Shawn Hargreaves. Allegro is available at
  ftp://x2ftp.oulu.fi/pub/msdos/programming/djgpp2

Please send your comments to Marcel at
m.dekogel@student.utwente.nl

