fMSX PSP is a port of the fMSX emulator to the Sony PlayStation Portable platform. It’s written in C and uses GU (Graphical Utility toolkit) for rendering.
Table of Contents
- New Features
- Installation
- Controls
- Disk Writing
- Sound
- Display
- Multi-Volume Disk Images
- Troubleshooting
- Compiling
- Version History
- Credits
- Thanks
New Features
Version 3.5.1 (February 29 2008)
- PSP version brought up to par with Marat’s official version
- Sound should now function correctly following a state load (in previous versions, sound would often stop)
- MSX MUSIC bug fixed – FMPAC should now be loaded correctly (earlier versions attempted loading from an incorrect location, and thus failed)
- When switching games, latest save state will be automatically highlighted
Installation
Unzip fmsxpsp.zip into /PSP/GAME/ folder on the memory stick.
fMSX PSP supports cartridge and disk loading from ZIP files. System ROM’s may reside in a SYSTEM.ZIP file in the same folder as EBOOT.PBP. PAINTER.ROM, or MSXDOS2.ROM may also be zipped, but must reside in separate ZIP files (FMPAC.ZIP, MSXDOS2.ZIP, etc..). fMSX PSP will attempt to load the three automatically if free cartridge slots are available. All other game ROM files must reside in separate ZIP files.
Controls
fMSX PSP currently “ships” with the following default key mappings:
During emulation:
Analog stick | Joystick up/down/left/right |
Directional pad | Keyboard up/down/left/right |
[ ] (square) | Joystick button A |
X (cross) | Joystick button B |
O (circle) | Spacebar |
[R] | Displays the virtual keyboard, for as long as the button is held |
[L] + [R] | Return to emulator menu |
Select + [L] | Selects previous disk volume (for multi-volume disk sets) |
Select + [R] | Selects next disk volume (for multi-volume disk sets) |
Start | F1 |
When the virtual keyboard is on:
Directional pad | select virtual button |
[ ] (square) | press a virtual button |
O (circle) | ‘stick’ a sticky virtual button |
^ (triangle) | unstick all stuck virtual buttons |
Certain virtual buttons (specifically, SHIFT, CTRL and GRAPH) are “sticky” – the virtual button remains held down when O (circle) is tapped. Tapping O (circle) again releases the virtual button. This allows SHIFT, CTRL and GRAPH all to be held down at the same time, while the user presses another virtual button. To unstick all sticky buttons, press ^ (triangle).
Keyboard mappings can be modified for each game. By default, button configuration changes are not retained after a mapping is modified. To save changes, press O (circle) after desired mapping is configured. To set the mapping as the default mapping, press [ ] (square) – to load the default mapping press ^ (triangle).
Disk Writing
Versions of fMSX prior to 3.3 mapped MSX disk sectors to the file containing the disk image, and reads/writes to the MSX disk were implemented as reads/writes to the image on the storage device (in this case, the memory stick).
Version 3.3 of fMSX includes a much more faithful emulation of the floppy disk controller, which no longer involves direct writing to the storage device – the disk image is loaded into memory instead. Versions 3.3.1 and 3.3.2 of fMSX stopped automatically writing the changes to disk – starting with 3.3.25, disk changes need to be explicitly committed to memory stick. This can either be done by loading a new disk in the same slot via the System tab (not the Game tab), or by ejecting the disk. Either way, you will be asked if you want to commit the changes to the image before ejecting or loading another image.
NOTE This only applies to uncompressed disk images – ZIP compressed files cannot be updated
WARNING Before committing changes to storage, make sure the MSX floppy drive is not in use – otherwise, you may damage the disk image
Sound
fMSX PSP uses the PSG, SCC and MSXMUSIC sound emulation engine by Mitsutaka Okazaki and MSXAUDIO emulation engine by Tatsuyuki Satoh. While PSG and SCC emulation is always enabled, MSXMUSIC and MSXAUDIO are disabled by default, as they tax the PSP and are not used by most MSX programs/games.
The emulator can run at full speed (at 333MHz, without V-Sync) with only one of MSXAUDIO or MSXMUSIC enabled. With both enabled, emulator performance is significantly reduced. I recommend keeping MSXAUDIO and MSXMUSIC emulation disabled, enabling it only when necessary.
Display
Until version 3.4.5, high-resolution screen modes (screens 6, 7 and text-80) were rendered on a 256-pixel wide canvas by skipping every other column. This works very well for most graphics modes – the deficiency is mostly noticeable when rendering text in 80-column mode.
Version 3.4.5 adds optional high-resolution rendering – image is rendered on a 512-pixel canvas, then squeezed horizontally to take up 256 pixels, with the idea that bilinear filtering engine offered by the PSP can provide a less coarse “squeezed” image than just skipping every other column. Unfortunately, the differences are rather disappointing – the biggest improvement is noticeable in text-80 mode, while the added task of rendering to a 512-pixel image slows down emulation. My suggestion, therefore, is to keep the hi-res rendering engine disabled, unless you really need more detail (to see the actual image, set ‘Display Size’ in options to ‘Actual size’ – though this will only show the first 480 pixels, due to the PSP screen limitation)
Multi-Volume Disk Images
fMSX PSP can load multi-volume games (like Snatcher) from a single ZIP file. To load such a game, store all files in the same ZIP. It is important that the archived files are numbered 1-0, with ‘0’ representing the 10th volume (archiving sequence is not important) – fMSX PSP will attempt to load the first disk in the sequence. As an example, a ZIP file could contain the following disk images:
thsnatj1.dsk |
thsnatj2.dsk |
thsnatj3.dsk |
To switch disks mid-game, map any of the buttons to the ‘Special: Previous volume’ or ‘Special: Next volume’ actions in the control menu. When a ‘volume switch’ button is pressed, and the next disk image in the sequence is found, an icon will appear with the number of the volume loaded. Note that multi-volume files do not have to be ZIP-compressed for the ‘volume switch’ feature to work – volume switching will also work for uncompressed DSK files, as long as they’re named as described above.
NOTE Changes to the disk image will not be saved when using this feature.
Troubleshooting
fMSX PSP may refuse to load a save state due to a number of different reasons. Some of the reasons follow:
- fMSX save state format has changed
- Currently set RAM/VRAM sizes do not match with RAM/VRAM settings set when the state was saved. This can be rectified by resetting RAM/VRAM sizes and loading again
- System model (MSX1/2/2+) currently set does not match the system model set when the state was saved. Reset the setting and try again
- System ROM’s currently in use do not match to those used when the state was saved. Replace the system ROM’s and try again
- Any combination of the above
Compiling
Source code for fMSX PSP is available via a Subversion (SVN) repository. To check out a particular version, run
svn co http://svn.akop.org/psp/tags/fms/date
where date is the date of a particular version’s release, in DD.MM.YYYY format (20.04.2007, for example). Note that for this to work, you need to have Subversion installed.
To compile fMSX PSP, you will need zlib (svn://) and libpng (svn://).
To enable the alternate sound engines, #define MSXAUDIO
and MSXMUSIC
.
To enable zipped ROM support, #define MINIZIP
.
Version History
3.4.5 (November 05 2007)
- MSXMUSIC and MSXAUDIO emulation can now be toggled on and off at any time
- FDD (Floppy Disk Drive) activity indicator – displays an icon whenever the virtual floppy drive is busy
- Optional (and discouraged) hi-resolution renderer for screen modes 6, 7 and text-80
3.4.1 (October 01 2007)
- fMSX upgraded to version 3.4
- Changes include fixes to the Z80 CPU emulation
3.3.25 (August 23 2007)
- This update adds the ability to write changes to (uncompressed) disk images (see section on Disk Writing in the documentation for details and warnings)
3.3.2 (July 24 2007)
- 60% increase in rendering speed—MSX2 titles run at 100% speed at 222MHz
- Fixed buffer overflow error affecting units without a battery (thanks to Alpha Beta for tracking it down)
3.3.1 (June 17 2007)
- Virtual keyboard improvements. The virtual keyboard now requires an external file – ‘msx.lyt’ in the emulator directory—the file contains keyboard layout information
- fMSX updated to version 3.3
- Lots of minor bug fixes
3.2.1 (June 04 2007)
- Added menu navigation options – select from US PSP navigation (X confirms, O cancels) or Japanese PSP navigation (O confirms, X cancels—also used by most homebrew emulators)
- Added RAM/VRAM adjustment options
- Added HBlank/VBlank period selection (PAL/NTSC)
- Added MSX model selection (MSX1, MSX2, MSX2+)
- Improved accuracy of frames-per-second counter
- User interface improvements
- fMSX updated to version 3.2
- Rendering speed increase, switched to 15bit color (these mostly affect menu rendering)
- Various bug fixes
3.1.3 (May 05 2007)
- Support for multi-volume disk images – multiple disk images per ZIP file and in-game volume switching
- Improved virtual keyboard navigation, rendering speed increase
- System ROM’s can be stored in a single ZIP file in the application’s directory
- Integrated zipped ROM and DSK file support (fast loading from ZIP files)
- PSG/SCC sound emulation engine by Mitsutaka Okazaki
- Approximately 18% gain in rendering speed
- Frames-per-second counter
- PAL (50Hz) timing
- Various small improvements and bugfixes
3.1.2 (April 24 2007)
- Added support for cartridge type selection in the System menu. This adds support for games like Zanac Ex, which are not detected correctly
- Preliminary ZIP file support. Emulator will load ROM or DSK files from a ZIP file, provided there’s only a single compressed file per ZIP. System ROMs must still be uncompressed (or GZip compressed)
- GZip file support – emulator will load cartridges and disk images from .gz compressed files. Save states are also much smaller in size
- GUI changes, wording changes
3.1.1 (April 20 2007)
- Initial release
Credits
Marat Fayzullin | fMSX |
Simon Tatham | fixed.fd font on which the emulator’s font is based |
Gilles Vollant | Minizip library |
Vincent van Dam | fMSX SDL (code dealing with sound emulation and high-resolution rendering) |
Mitsutaka Okazaki | PSG/SCC/MSXMUSIC sound emulation engine |
Tatsuyuki Satoh | MSXAUDIO sound emulation engine |
Ruka | PNG saving/loading code |
Thanks
fMSX PSP would not be possible without prior work of many other hackers. I have benefited from the source code of the following PSP programs:
fMSX SDL | Vincent van Dam |
PSPMSX | zx81 |
NesterJ | Ruka |
Snes9XTYL | YoyoFR, Thunder, Laxer |
(CPS1/CPS2/MVS)PSP | NJ |
PSPSDK examples |
Special thanks to Marat Fayzullin for his prompt responses.
Some personal thanks are due to the authors of SNES9XTYL, DGEN for PSP and [CPSx|MVS]PSP emulators – the hard work evident in the polished interfaces of the emulators is inspiring, if nothing else. fMSX PSP was an attempt to bring a similar interface to MSX emulation (whether it’s achieved that or not is anyone’s guess :)
Special thanks are also due to jburton of dcemu.co.uk forums for all his helpful feedback.