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.
================================
Since I mentioned Olympian Magic prominently in my previous post, I'm going to release
Olympian Magic v00r07. This is a GUI application for converting higan/bsnes's cartridge folders from older versions to the most current version, v107. It will show you how the manifest will change during the conversion and any filename changes for the ROM, save RAM, and coprocessor firmware.
Previous versions of Olympian Magic supported converting v073 manifests to v092-v095 and v096-v106, and converting v092-v095 manifests to v096-v106. The only down-conversion path supported was from v096-v106 to v092-v105. I deeply regret having ever added that path. The only reason I did was to support the Nintendo Super System, for which higan dropped support after v094r08, but that's a terrible excuse to let the entire SNES emulation scene go stagnant just for the sake of an arcade machine.
From now on, v107 is the only supported conversion target. Olympian Magic will be able to convert manifests from v073, v092-v095, and v096-v106 to v107 and no other version.
When the source version is v073, the supported coprocessors are SA1, Super FX, uPD7725 (DSP1-4), S-DD1, and OBC1. The SPC7110 is the most complicated coprocessor manifest-wise, so I haven't added support for that one yet. It also does not yet support either of the RTCs. I won't worry about the ST010, ST011, ST018, and Cx4, as bsnes v073 did not support low-level emulation of those coprocessors.
Note that MSU1 support is handled internally by higan and bsnes, so there is no need for a manifest to specify that the MSU1 is supported.
Olympian Magic can also convert an entire cartridge folder from v073 to v107, renaming every file except for the manifest and replacing the manifest itself with a converted version. It even creates an “msu1/” subfolder and moves the MSU1 files into there. It will probably handle converting v092-v095 and v096-v106 cartridge folders as well, but this is untested.