Créé par hex_usr (nSide/Lunar Snes), bsnes-mcfly est un port de l’interface graphique Qt de bsnes v073 à higan v106. Cette version est basée sur la dernière version d’Higan (mais ne se concentre que sur la partie Super NES) et ajoute énormément de fonctionnalités.
Dans les versions de développement (et jusqu’à la v106) il était connu sous le nom de « bsnes-classic » dans une tentative de remplacer la fourche d’Awjackson également nommée « bsnes-classic » qui paraissait être abandonnée. Cependant, AWJ a montré que bsnes-classic était encore en vie, par conséquent ce projet a dû être renommé.
L’objectif est en partie de faire arrêter l’utilisation de bsnes 073 et de fork comme bsnes-classic (et plus tard bsnes+) et de tout fusionner dans un seul émulateur combinant à la fois les améliorations des dernières versions d’Higan et en même temps les avantages des anciennes versions de bsnes (notamment l’interface).
This version of the Qt GUI has the following features:
– Compatibility with higan v106, including v106-style gamepaks (cartridge folders)
. Low-level emulation of the HG51BS169 (Cx4) and ARM6 (ST018)
. Newer MSU1 features such as audio resume
– Concatenated firmware in game ROMs, as well as a firmware/ fallback directory.
. No cartridge folders are created within the user’s home directory. It is all handled in memory.
– Database lookup of SNES and Super Famicom cartridges. The database is embedded right into the application along with heuristics for games not in it, so icarus is not required.
– Compressed archives: Zip, GZip, BZip2
. Support for Zip and GZip provided by nall instead of snesreader
. BZip2 support by Rob Landley under the zero-clause BSD license
– Copier extensions: SMC, SWC, FIG, UFO, GD3, GD7, DX2, MGD, MGH, 048, 058, 068, 078, BIN, USA, EUR, JPN, AUS
. All of these extensions are also available for use with BS Memory and Sufami Turbo slot cartridges.
– Optional FuSoYa header (512 bytes at the beginning of the ROM)
– WASAPI and ASIO audio drivers
– Exclusive mode for Direct3D and WASAPI
– Separate directories for save RAM, save states, and other mutable game files
– Turbo buttons
– asciiPad (more advanced turbo switches with Off, Turbo, and Auto settings)
– Simultaneous up/down and left/right (must be enabled in the settings file)
. I needed to use a really evil compilation trick to enable this feature without modifying higan directly.
– IPS, UPS, and BPS soft-patching
. IPS and UPS patches are applied before removing the FuSoYa header, and BPS patches are applied after.
– Movie recording and playback
– Cheats
. Pro Action Replay (AAAAAA:DD, AAAAAADD, AAAAAA/DD)
_ Can omit the address/data separator or use a colon, when higan v106 mandates the use of an equals sign or a slash.
. Game Genie (GGGG-GGGG)
– Cheat search (works only on WRAM at 7e-7f:0000-ffff)
– Software filters
. 2xSaI, Super 2xSaI, Super Eagle
. HQ2x, LQ2x, Scale2x
. Pixellate2x
. blargg’s snes_ntsc
. Phosphor3x (was included in some bsnes v08x versions)
– OpenGL shaders
. Curvature and Edge Detection from higan v092
. HQ2x, Pixellate, Scale2x
. HDR-TV, Watercolor (these were marked “Archive” in bsnes v083 and not restored when bsnes v085 went back to XML from BML)
. Sepia (converted from Direct3D)
– Only 1 copy of nall for the overall project instead of a separate copy each for bsnes, snesfilter, and snesreader
Features missing from bsnes v073:
– Compressed archives: Z (compress), 7z, RAR, JMA
. Most of these have restrictive licenses. Need to think carefully on how to implement them…
– Selecting one of multiple files in a single Zip archive
– snes_ntsc configuration dialog
. Because the palette size was increased from 32768 to 524288, changing a setting causes bsnes to freeze while it recreates the palette. This dialog had to go.
– Binding the Pause/Break key to an input
– Direct3D shaders
. As consolation, the Sepia shader was converted to OpenGL
Les changements:
I wish 007 was still here. He reported a Windows-exclusive crashing bug that occurs when a user:
Selects the Direct3D driver
Turns off exclusive fullscreen and turns off auto-hiding the menu bar in fullscreen
Activates fullscreen
Switches to a video filter with a different output size than the previous one
I can’t reproduce the bug. No matter which profile I use, no matter how much I change the filters, nothing happens. Even if I use the Compatibility: OpenMP profile, which is the only one capable of outputting 256 columns instead of 512 when using Modes 0, 1, 2, 3, 4, or 7, and play Secret of Mana, which is known to switch between Modes 1 and 5, nothing happens. The emulator just continues as normal.
Without any further bug testing, I’m just going to have to release bsnes-mcfly v106r08 and hope for the best. This version is based on bsnes v106r46.
As previously mentioned, this version includes 7z archive support using the public domain LZMA SDK. The supported compression formulas are LZMA, LZMA2, and PPMd. I haven’t completed my rewrite of the GPLv2 parts of libjma, so JMA support is not in yet.
I am also dropping the Compatibility: Legacy profile, so the only 3 profiles are Accuracy, Compatibility: OpenMP, and Performance. I have not dropped the source code for it though, just in case an emergency happens and I need to keep it around longer. If you happen to have Compatibility: Legacy selected, the launcher should automatically select the Compatibility: OpenMP profile instead in order to prevent the program from prematurely quitting because it can’t find the missing profile.
The Compatibility: OpenMP and Performance profiles now share the PPU class. Even if I disable OpenMP, the Performance profile has the same speed as before, so enabling OpenMP increases it even more.
In addition, I made a change to the Performance profile’s APU (merged SMP/DSP) class inspired by but not taking code from Snes9x. Previously, the Performance SMP had a hidden compiler flag to switch between Opcode timing and Cycle timing, with Opcode timing being faster but incompatible with games that stream samples such as Tales of Phantasia. Now, a mixed timing option is used instead, in which timing synchronization only happens immediately before any read/write operation on the APURAM. This timing is slightly faster while still being compatible with Tales of Phantasia. How does this code differ from what Snes9x uses? I believe Snes9x wrote all the opcode timing by hand, but I took advantage of the little-known generate program and made it generate the timing information for me.