mirror of https://github.com/bsnes-emu/bsnes.git
25 Commits
Author | SHA1 | Message | Date |
---|---|---|---|
![]() |
9b03874f32 |
Update to bsnes v037a release.
[No changelog available] |
|
![]() |
a9bff19b5b |
Update to bsnes v037 release.
This release adds support for the SNES mouse, Super Scope and Justifier peripherals. It also simplifies cartridge loading and refines the user interface. Lastly, GZ and ZIP archives can now contain non-ANSI characters (Chinese, Japanese, Russian, ...) This support existed in the last release for all uncompressed files. Together, this means only JMA support on Windows lacks support for loading non-ANSI filenames. This is due to the library itself (really, it's more Windows' fault), and licensing issues prevent me from patching libjma as I did with zlib (bsnes is not GPL compatible.) I'm planning to work with Nach to fix this in a future release. About the cartridge loading changes ... the emulator now determines what kind of cartridge is being loaded (eg normal, BS-X BIOS, Sufami Turbo cart, etc) by looking inside the file itself. If it detects a cart type that requires more than one ROM image to load, it will present you with the appropriate specialized load menu automatically. Aside from being more intuitive, this method also allows loading of BS-X and Sufami Turbo games from the command-line or via file association. Changelog: - added mouse support to DirectInput and SDL input drivers - up to 96 buttons per controller; 8 buttons per mouse (5 per mouse on Linux) can be mapped now - added SNES mouse support (does not support speed setting yet) - added Super Scope support - added Justifier support (supports both Justifiers) - input management system almost completely rewritten to support new controllers - "Load Special" menu removed, all cart loading merged to "Load Cartridge ..." option - replaced "Power Cycle" and "Unload Cartridge" with "Power" -> "On" / "Off" - when video exceeds screen size and is scaled down, aspect ratio is now maintained [Ver Greeneyes] - zlib modified to support non-ANSI characters - cheat code count was limited to 1,024 codes before; it now supports unlimited codes per game - added sort by description setting for cheat code list - polished listbox control interaction (disable buttons when nothing selected, etc) - cleaned up OBC-1 chip emulation (code is functionally identical to v036) - added option to toggle fullscreen mode to settings menu - added advanced mode options to toggle base unit (none, Satellaview) and system region (Auto-detect, NTSC, PAL) |
|
![]() |
0114e10ede |
Update to bsnes v036 release.
This release fixes a somewhat serious bug introduced in v035, and also vastly improves Windows support for non-ANSI filenames. The bug was triggered when HDMA would occur during DMA. If the DMA were long enough, subsequent HDMA transfers would be blocked. This caused graphical glitches in Star Ocean, Super Mario Kart, and possible more games. If you noticed any regressions from v034 to v035, this was almost certainly the cause. Once again, we're operating under the assumption that there are no known bugs currently, so please let us know here if you find any. I've also rewritten the file handling for the emulator. On Windows, attempting to load a file with non-ANSI characters (eg Russian, Japanese, etc) would cause these characters to be removed. This meant that no version of bsnes thus far could load these files. This problem was exacerbated when I ported the user interface to Unicode (UTF-16), this caused even config and locale file loading to crash the emulator. The root of the problem is that Windows only accepts non-ANSI strings in UTF-16 format, whereas bsnes' UI wrapper converts strings to UTF-8 interally. When passing these file names to the standard file functions (fopen(), std::ifstream, etc), file loading would fail. To fix this, I replaced all file access functions with a new version that would convert the UTF-8 filenames back to UTF-16, and use appropriate access functions (_wfopen(), _wmkdir(), etc.) ... but there is still one limitation to this: ZIP and GZ support use zlib, and JMA support uses libjma. Neither of these libraries convert UTF-8 strings to UTF-16 before attempting to open files. Due to licensing issues, as well as technical issues, I am unable to correct this at this time. What this means is that loading ZIP, GZ and JMA files; on Windows only; and with Unicode characters in the file name only; will cause the image load to fail. Loading uncompressed images (SMC, SFC, etc) will work with or without Unicode on all platforms. I tried to be as thorough as possible with this fix: command-line arguments (via CommandLineToArvW + GetCommandLineW), user path (via SHGetFolderPathW), real path (via _wfullpath),folder creation (via _wmkdir) and file access/existence checks (via _wfopen) were updated in all cases. I also updated file loading for ROMs (SMC, SFC, etc), save RAM (SRM), real-time clock save (RTC), cheat files (CHT), UPS patches (UPS) and both configuration files (bsnes.cfg and locale.cfg.) Configuration file loading should work even if your username contains non-ANSI characters, and it should also detect config files put in the same folder as the bsnes executable, even if the path to the executable contains non-ANSI characters. Still, if you spot any bugs, aside from the ZIP/GZ/JMA loading issue, please let me know via e-mail at setsunakun0; at hotmail. Lastly, I'd like to apologize for the poor support for non-ANSI filenames in the past. Using an English version of Windows didn't expose the problems to me. I'll be more thorough in the future with this. |
|
![]() |
8c591ce44a |
Update to bsnes v035 release.
Changelog: - Added video synchronization support at long last [blargg, byuu]. - Added audio panel to control volume, latency, frequency and SNES input frequency settings. - Added driver panel to select APIs to use for video, audio and input. - Added crash handler for driver initialization. - Xv and SDL video drivers now work with compositing enabled on Linux/Xorg. - Improved ALSA audio driver for Linux. - Now using a fixed output frequency, along with a 4-tap hermite resampler. - Improved header detection; fixes Batman: Revenge of The Joker and a few fan translations. - Frameskip will now randomly choose a frame in each set to display; helps with animations. - Locales now support meta-data, which allows for unique translations of the same English input. |
|
![]() |
dd83559786 |
Update to bsnes v034 release.
For this release: SPC7110 emulation speed has been greatly optimized, massive improvements to HDMA timing have been implemented, Multitap support was added, and the user interface was polished a bit more. Changelog: - SPC7110 decompression code updated to latest version by neviksti and converted to a state machine; SPC7110 overhead is now identical to S-DD1 overhead (eg ~5% speed hit over standard games) - Fixed a major bug in SPC7110 data port emulation that was crashing Super Power League 4 [Jonas Quinn] - HDMA trigger point corrected to H=1104, bus sync timing corrected - All illegal DMA A-bus accesses should now be properly blocked - DMA state machine rewritten, greatly simplified - Major corrections to HDMA run timing; fixes flickering bugs in Mecarobot Golf and Super Mario Kart - Emulator now defaults to 2/1/3 SNES (CPU/PPU1/PPU2 revision numbers) - Multitap emulation added, can be attached to either or both controller ports; user interface updated to reflect this - Status messages (cartridge loaded / unloaded, UPS patch applied, etc) now appear in status bar - Added advanced configuration option, "input.analog_axis_resistance", to control gamepad analog stick sensitivity Also, the SPC7110 emulator download link below was removed: if you are looking for this, please download the bsnes v034 source code, which has the most up-to-date version in the src/chip/spc7110 folder. |
|
![]() |
9133129209 |
Update to bsnes v033 release.
This release adds SPC7110 emulation, without the need for graphics packs!!, and a rewritten S-RTC (real-time clock) emulator. SPC7110 support means that Far East of Eden Zero, FEoEZ: Shounen Jump Edition, Momotarou Dentetsu Happy and Super Power League 4 are now all fully playable. I will warn you, the emulation is very slow in this version -- while most areas of each game will run at the same speed as other games, there are a few peak moments where speed will drop by up to ~50%. The reason for the slow-down is that I am currently uncertain how to determine the amount of data to decompress in advance, so I default to the maximum amount possible. The reason I am releasing now anyway, is because I beleive in the "release early, release often" paradigm. It will likely take me a few weeks to finish researching this chip, and I didn't want to keep the work I had private during that time. But rest assured, bsnes v034 should feature much faster SPC7110 emulation. neviksti, Andreas Naive and jolly_codger worked non-stop on the SPC7110 decompression algorithm for the past two weeks. caitsith2 provided valuable data to the effort. I only wish that I could've been of some use, but alas, I had no role in this. In the end, it was neviksti who managed to crack all three(!!) compression modes of this chip, which turned out to be a customized 8-bit QM-coder with a prediction model. You can read more about this here. I would also like to thank Dark Force and John Weidman (aka The Dumper) for their research notes on the SPC7110 register interface. For those who don't understand the hoopla about figuring out this compression algorithm when we already had graphics pack simulation, I should note that we have since found a few errors in these packs. Not to mention, you no longer need ~4-16MB packs for each game you wish to run. They work like any other game now. Better still, the chip can now be used to compress new graphics, eg for any future translation efforts on these titles. The real-time clocks in both Far East of Eden Zero and Dai Kaijuu Monogatari 2 will now save a ".rtc" file in your save folder, which contains the clock as set by the video game, as well as a timestamp from your computer when the time was last updated. It uses the difference between the saved timestamp and current time to update the time. This allows you to specify any time you like, whereas previously bsnes would just use your computer's current time, ignoring the time you set in-game. It also allows the "round clock by 30 seconds" option in both games to work. I avoided this before because this method makes supporting daylight savings time and such impractical, although I should note that the original hardware did not support DST, either. This method was required to pass the SPC7110 tests, and is overall much more faithful to how the original chips worked. Once again, I'd really like to personally thank neviksti for his tireless efforts. Eliminating graphics packs from SNES emulation was one of my primary reasons for getting involved in the SNES emulation scene. That neviksti managed to crack this algorithm means a lot to me. Thank you so much, neviksti. This release is dedicated to you, now go get some sleep Wink |
|
![]() |
bbc77a6cf2 |
Update to bsnes v032a release.
- Windows: file open filters are now working once again - All ports: emulation speed setting is now properly restored at startup |
|
![]() |
ebb9367c68 |
Update to bsnes v032 release.
- Core: simplified CPU / SMP flag calculations - Added ALSA audio output driver to Linux port [Nach] - Improved font handling for Windows and Linux ports - Greatly cleaned up the user interface - Windows port now uses Unicode instead of ANSI - Added localization support - Config and locale files can now be placed inside bsnes executable directory for single-user mode, if desired - Fixed crashing bug with HQ2x on Linux/amd64 port [RedDwarf, Nach] - Hid "Power Cycle" option by default, as it is too similar to "Reset" - Slighty tweaked program icon [FitzRoy] - Minor code cleanups -- replaced union bitfields with templates, improved memory allocation, etc |
|
![]() |
1ef279cb83 |
Update to bsnes v031 release.
New release posted. Perhaps the most important change was fixing a bug in the Windows port when the keyboard was used for input. For some reason, the IsDialogMessage() function I use for tab key support was causing the main window to emit the Windows error beep every time a key was pressed after a few minutes of use. I do not know why this is, so I have simply disabled the tab key support to prevent this from happening. Other than that, lots of polishing went into this release. UPS soft-patching will work with the recently released Der Langrisser v1.02 translation, for those curious. You can also store the UPS patches in GZ/ZIP/JMA support, and bsnes will detect this and decompress the patches first. Use the same ".ups" file extension for this, as it detects via file header. If you wish to try out the newly added OpenGL support: start bsnes, go to Settings->Configuration->Advanced and set system.video to "wgl" (or "glx" for Linux users), and then restart the emulator. Please bear in mind that ATI's OpenGL drivers are an industry-wide joke, so I'd only recommend trying this on an nVidia or Intel video card. Changelog: - Fixed bug and re-enabled HDMA bus sync delays - Emulated newly discovered IRQ timing edge case - Optimized offset-per-tile rendering - Added state-machine implementation of S-DSP core, ~5% speedup - Added SPC7110 detection, will now warn that this chip is unsupported - Fixed very annoying Windows port OS beeping noise when using keyboard for input - Linux port will now save most recent folder when no default ROM path is selected - Added OpenGL rendering support to Windows port [krom] - Fixed Direct3D pixel mode scaling bug [krom, sinamas, VG] - Improved SNES controller graphic [FitzRoy] - Added UPS (not IPS) soft-patching support; UPS patch must be made against unheadered ROM - As always, cleaned up source code a bit |
|
![]() |
9e3827e2a2 |
Update to bsnes v030 release.
I didn't want to release a new version so soon, however there is a rather serious bug in bsnes v029 where the path information for the save RAM files is discarded when one has not selected a default save RAM / cheat path from the path settings tab in the configuration settings window. Because of this, it gets stored to the base directory. For Windows users, this is c:\, and for Linux users, this is / This bug forced my hand, so I'm releasing v030 to correct this issue. I also cleaned up the S-DSP emulation code to be more consistent with my programming style -- it gets bit-perfect matches to v029's wave output, so I don't foresee there being any problems. |
|
![]() |
805398e5a8 |
Update to bsnes v029 release.
A new version of bsnes has been released. It contains a few minor emulation fixes, as well as user interface improvements. Behind the scenes, the source has been cleaned up more in preparation for running the CPU and PPU (video processor) separately from each other (eg with no enslavement.) This is required for implementing a clock cycle based PPU renderer. - Greatly improved invalid DMA transfer behavior, should be nearly perfect now - Major code cleanup -- most importantly, almost all PPU timing-related settings moved back to PPU, from CPU - Added option to auto-detect file type by inspecting file headers rather than file extensions - Rewrote video filter system to move it out of the emulation core -- HQ2x and Scale2x will work even in hires and interlace modes now, 50% scanline filter added - Re-added bsnes window icon - Added new controller graphic when assigning joypad keys [FitzRoy] - Redundant "Advanced" panel settings which can be configured via the GUI are no longer displayed - Improved speed regulation settings - XP and Vista themes will now apply to bsnes controls - Added "Path Settings" window to allow easy selection of default file directories - Tab key now mostly works throughout most of the GUI (needs improvement) - Main window will no longer disappear when setting a video multipler which results in a window size larger than the current desktop resolution - Added two new advanced options: one to control GUI window opacity, and one to adjust the statusbar text |
|
![]() |
926ffd9695 |
Update to bsnes v028 release.
Changelog: - OpenGL (with hardware filter mode support) and SDL video drivers added to Linux port - OpenAL (with speed regulation disable support) and OSS audio drivers added to Linux port [Nach] - SDL input driver (with joypad support) added to Linux port - Emulator pause option added - Added option to select behavior of bsnes when idle: allow input, ignore input or pause emulator - Added support to remap common GUI actions to key/joypad presses on the "Input Configuration" screen - bsnes will now clamp the video output size when it is larger than the screen resolution - GUI library has been enhanced, and renamed to hiro - Fullscreen mode now always centers video, rather than approximates - Fullscreen mode now works correctly on Linux/Openbox - Extra layer of abstraction in src/ui has been removed, as GUI lib unifies all ports anyway - Video, audio and input drivers unified into standard library, named ruby - All custom headers have been merged into a new template library, named nall - Makefile rewritten, vastly improved. Allows quick toggling of compiled-in drivers - Makefile: all object files now placed in /src/obj, binary placed in / - libco greatly enhanced, no longer requires an assembler to build [byuu, blargg, Nach] - libco SJLJ driver added; bsnes should now build on any Unix-derivative now (Solaris, OS X, PS3, etc) [Nach] - Fixed register $213e.d4 PPU1 open bus behavior [zones] - Windows port will not activate screensaver while bsnes is running [Nightcrawler] - Visual C++ target no longer requires stdint.h - And lots more -- mostly code refactoring related |
|
![]() |
4c43e85141 |
Update to bsnes v027 release.
This version replaces libui with miu -- a new GUI wrapper library, and cleans up large portions of the source code. Unfortunately, the GUI rewrite took far, far longer than I ever imagined. As a result, no work has gone into the core emulation for this version. But with the GUI rewrite out of the way, that should change in the near future. And thanks to the new UI library, I can now begin work on adding a cross-platform debugger to bsnes, at long last. Changelog: - Major source code cleanup (lib/, ui/miu/, ui/vai/) - Cheat code editor was broken in v0.026, this is now fixed - Cheat code file format simplified for human readability - Makefile install target improvements [belegdol] - libui replaced with miu GUI library - Custom video / audio / input drivers replaced with vai HW library - ppc and ppc64 libco targets added [Vas Crabb] - x86 and x86-64 libco targets now work on OS X [Lucas Newman] |
|
![]() |
95547f4ff8 |
Update to bsnes v026 release.
- Major source code cleanup - Completely rewrote memory mapper to support runtime MMCs - Updated S-DD1 MMC to use new memory mapping interface - Improved S-DD1 emulation, thanks to information from orwannon - Added support for SameGame -- load via "Load Special -> Load BS-X Slotted Cart" menu option - Completely rewrote cartridge loader to support BS-X, BS-X slotted carts and ST carts - Created custom dialog windows for multicart loading - Improved generic memory mapper, which eliminates the need for cart.db [Nach] - Added BS-X slotted cart detection to generic memory mapper [Nach] - Linux port will now ignore keypresses when window is inactive - Linux port will use much less CPU power when idle - Added detailed compilation instructions to Makefile for Linux port - Added "make install" target and PNG program icon for Linux port - Switched Windows compiler to MinGW/GCC4 - Windows executable is now packed with UPX to decrease filesize - Removed .ufo, .gd7 and .078 ROM extensions; added .bs extension - Added preliminary support for the BS-X base unit, BS-X base cartridge + MMC, and BS-X flash I/O |
|
![]() |
85fa3cc968 |
Update to bsnes v025 release.
bsnes is exactly three years old today. I've posted a new version which adds DSP-3 and DSP-4 special chip support. The DSP-3 is used by SD Gundam GX, and the DSP-4 is used by Top Gear 3000. Please note that the DSP-3 is not fully emulated, thusly SD Gundam GX is not fully playable. Also, due to lack of timing emulation with the DSP-4, the Top Gear 3000 track sometimes flickers in split screen mode. However, it is believed that Top Gear 3000 is fully playable. I should also note that I have started on SuperFX emulation, as some will inevitably see said code in my source releases. What I have now is nothing more than a skeleton implementation, and absolutely nothing using it is playable yet. I am making absolutely no promises that I will ever be able to emulate this chip. It will take at least several months of work, and even then, the speed will probably be too slow to reach 60fps on any system, but ... I'm working on it. While I have no way to run tests on the actual SuperFX hardware, I will do the best I can to emulate the chip accurately. I will be emulating the caching and cycle delays as best I can, but the information I have on this chip is extremely limited, so don't expect miracles. Lastly, as promised, I have released the special chips I have personally emulated to the public domain. See license.txt for more information if interested. I cannot release the special chips whose code I did not write to the public domain, but all of that is already available under the GPLv2 (from ZSNES) or the SNES9x license. Changelog: - Added DSP-3 support, thanks to John Weidman, Kris Bleakley, Lancer, z80 gaiden - Added DSP-4 support, thanks to Dreamer Nom, John Weidman, Kris Bleakley, Nach, z80 gaiden - Started on support for SuperFX, no games playable as chip emulation is less than 1% complete - Unsupported special chips will now display an alert - Missing stbios.bin file when loading Sufami Turbo cartridges will now display an alert - Video settings now saved separately for windowed and fullscreen mode - Advanced option video<.mode>.synchronize can be enabled for vsync, but will cause sound crackling - Added menu option to toggle FPS counter - Minor source code cleanup |
|
![]() |
9fd379613a |
Update to bsnes v024 release.
This is an interim release between some major changes to the video mode support, which may take a long time to complete. It also fixes a bug with CGRAM access timing, re-adds the Sufami Turbo load menu, and adds support for the ST-010 coprocessor, used by F1 Race of Champions. To load Sufami Turbo cartridges, stbios.bin must be placed inside a folder named bios in the bsnes folder. There is not currently a warning if this file is missing. |
|
![]() |
c9ca01fe20 |
Update to bsnes v023 release.
I've recently fixed a bug in bsnes that I feel is serious enough to warrant a new release, even though little else has changed. I attempted to build this release with MinGW, but ran into problems with profiling and JMA support, so this release was built with Visual C++ once again. Changelog: - Fixed serious bug in S-SMP incw and decw instructions -- fixes sound bug in Emerald Dragon - Added Nach's MinGW fixes -- can now be compiled with MinGW/GCC3 or MinGW/GCC4 - Fixed const char* cast warnings in GCC 4.2, thanks to [vEX] for the feedback - Updated source to use latest libraries for libco, libui, etc. - Added new advanced options to adjust aspect ratio correction - Cleaned up source code a bit |
|
![]() |
c57c733d7d |
Update to bsnes v022 release.
Today marks a milestone for bsnes, and possibly for SNES emulation as a whole. With this new release, bsnes' compatibility has now reached 100.0%, with zero game-specific hacks. With every last commercially released game tested by both FitzRoy and tetsuo55 for at least five minutes each, all known bugs have been resolved. Now, needless to say, I am referring to the emulation of the base SNES unit. As many SNES cartridges contain additional coprocessors on their PCBs, there are still unplayable titles. So how can I claim compatibility of 100%? Because I don't consider special chips inside game cartridges as part of the base SNES hardware. I realize that many people enjoy these games, and I do actively attempt to emulate as many coprocessors as possible (six are supported thus far). However, coprocessors such as the SuperFX and SA-1 continue to pose very significant challenges. So, after nearly three years of development, I've finally achieved my primary goal. But it wasn't a complete victory ... I've learned a lot over the years. Emulation accuracy is not black and white -- there are heavy costs to pay and forced tradeoffs to achieve it. I no longer believe there is only one absolute path for emulation, as I did in 2004. So does this mean bsnes is now perfect? Of course not. There are many technical details that are not emulated correctly. This also does mean that there are no bugs, merely that there are no bugs that we are aware of. While absolute verification of 100% compatibility is obvioulsy impossible, even by actually beating every single game from start to finish, this very well should be the first time any SNES emulator could claim zero known bugs with all known games tested. I very much expect this announcement to entice many new users to begin actively searching for bugs, in an effort to discredit my above claim. My response? Go for it! I would very much appreciate any and all discovered bugs to be posted here, so that they can be verified and addressed. One major thing that needs to be said, is that there consists of one major hack in all SNES emulators, including bsnes: the use of scanline-based PPU renderers. This necessitates global hacks in all emulators to minimize their inaccuracies. I was going to write up a very long post here, going into specifics, but I've decided an article would be a better place for that. I will hopefully be writing up this article in a few days to post here. In the meantime, one very important issue does need to be addressed. This version fixes a bug in Uniracers 2-player mode, where the game writes to OAM during active display. Like other PPU global hacks, Uniracers required a special consession. But because this hack only affects one game, it can very fairly be seen as cheating. Suffice to say, bsnes does not contain a game-specific hack, and the change made to fix Uniracers affects all games, but I do still very much consider it to be a hack. The fix I have added is quite literally and honestly more accurate than the behavior of bsnes v0.021. Before, writes to OAM and CGRAM during active display went where a programmer would expect, which would cause bugs when ran on real hardware. Uniracers is the only game known to do this, and it is very dangerous to do so. The writes do go through, but not where one would expect. The access address basically changes as the screen is rendered. With a scanline-based PPU, it is not possible to emulate the individual steppings of the PPU, as there is not enough precision. Further, the entire SNES emulation community has virtually no information on how active display OAM and CGRAM writes work. Now, as Uniracers is the only game known to do this, I had the choice of either intentionally remapping the writes to an arbitrary location, or change it to the address Uniracers expects. Neither would be more accurate than the other, as both are completely wrong from a haradware standpoint. So the decision was to either fix Uniracers and deal with some calling it a game-specific hack, or to leave it broken with absolutely no gain to accuracy. Rather than decide for myself, I asked those who have supported me over the past three years for their opinions. The decision was unanimous to fix Uniracers. You can read the discussion, along with a more technical explanation of the issue, here. I will be addressing this topic in much greater detail in the article I will be writing up shortly. Changelog: - Fixed buffer overflow that was manifesting as corrupted tiles in Lemmings 2 - OAM and CGRAM addresses are now invalidated during active display, however the algorithms for how this address invalidation occurs is currently still unknown, so reads/writes are mapped to static addresses for now - Re-added cheat code editor. - Windows only: keypresses when main emulation window is not active are ignored once again |
|
![]() |
a1980fab09 |
Update to bsnes v021 release.
This is a maintainence release. I am mostly releasing this for the sake of the recently released Der Langrisser translation. Changelog: Windows port can once again map joypads through the Input Configuration panel Using enter or spacebar to assign a key should no longer instantly map those keys F11 now toggles fullscreen mode Esc now toggles menu on and off (use F11+Esc combined to hide UI completely) Fixed a bug in King of Dragons (J, U, E), KOFF was not cleared during S-DSP power(), thanks to FitzRoy for the report, and blargg for assistance fixing the bug Fixed serious crashing error with File->Load on Linux/amd64 port Hopefully fixed min/max undefined error on GCC 4.2.0, but I am unable to test to verify Fixed many cast const char* to char* warnings for GCC 4.2.0, but some probably remain, as again, I am unable to test as I lack GCC 4.2.0 Set XV_AUTO_COLORKEY to 1 for Video/Xv renderer. Should fix some video drivers where there was no output, especially after running mplayer, etc. Thanks to sinimas for the fix Added clear_video() to Video/Xv renderer. Green edges at the bottom and right sides of the video output are now gone, and unloading a ROM will clear video I have finally figured out how to poll the keyboard status in real-time through Xorg: the XQueryKeymap function. I will be rewriting the Linux key capture system to use this, instead of capturing window key up / down messages through GTK+. This will finally allow me to completely abstract the UI from the hardware video, audio and input interfaces: a necessary step toward Linux joypad support. |
|
![]() |
ebb234ba5f |
Update to bsnes v020 01 release.
[No changelog available] |
|
![]() |
2cc7fe30b4 |
Update to bsnes v020 release.
Five months and 43 WIP releases in the making, today I am releasing bsnes v0.020. I'd really like to express my thanks to blargg, for he has written a new S-DSP emulator that is an impressive 32 times more precise than all existing S-DSP emulators. It is now bus-accurate, and should produce bit-perfect sound output to that of a real SNES, excepting very minor, very extreme edge cases. Not only did he do this, he went out of his way to develop a special version exclusively for bsnes to ease licensing concerns and take advantage of bsnes' unique features, notably cothreads. I can't thank him enough. Unfortunately, bsnes has taken a ~10% speed hit over v0.019 by using this new S-DSP emulator, but I must stress the speed hit is entirely due to the way bsnes is implemented. blargg's standalone S-DSP emulator is very, very fast. Anyone is free to take a look at his S-DSP emulator, as he has released it as open source under the LGPL, by visiting his homepage, here. Unfortunately, the new cross-platform UI is not entirely finished. Some sacrifices had to be made to support libui. Specifically, the following features are missing from v0.019, but will hopefully be added back in future releases: - Fullscreen support - Input Configuration panel cannot capture joypad input. Joypad support is still present, but it must be mapped manually through the Advanced panel or through editing bsnes.cfg by hand - The Cheat Code Editor is missing, but cht files can still be used from bsnes v0.019, and created by hand - Sufami Turbo support is not accessible from the UI - The UI on Windows is slightly less polished due to compromises to allow the UI to be readable on Linux. I am sorry for the rough edges listed above, but I wanted to get a new release out, as it has been over five months since the last release, and I really want the world to be able to experience blargg's new S-DSP emulator. Changelog: - Added blargg's new S-DSP emulator, runs at 1.024mhz. Many thanks to blargg for this, as this puts all portions of SNES emulation except for the S-PPU at bus-accuracy - blargg's S-DSP core fixes bugs in both Koushien 2 (J) and Toy Story (U) - Corrected all S-SMP cycle timings to be hardware accurate. Thanks to blargg for creating an amazing test ROM that tested every possible opcode - Corrected S-CPU wai instruction timing, fixes Mortal Kombat II - Reverted HDMA sync emulation once more to fix Breath of Fire II (G) and Secret of Mana (U) - Completely rewrote user interface to use libui, which is a wrapper that allows the same code to produce the same UI on both Windows (through the Win32 API) and Linux (through the GTK+ API) - Corrected $2100.d7 OAM reset behavior, thanks to research from anomie - Massively revamped the Linux port, should compile with no warnings or errors now - Added 64-bit support to libco, tested on FreeBSD/amd64, should work on Linux as well - Revamped makefile with suggestions from Nach - Improved Linux Xv renderer to use the far more common YUY2 format, which should work on most Xorg drivers, allowing hardware accelerated video scaling - Completely rewrote config file system. bsnes.cfg is now saved to user's profile folder on both Windows and Linux, allowing multi-user support - A lot more work has been done behind the scenes, including massive code cleanups and portability improvements You may download the new version on the main bsnes page. |
|
![]() |
1ebdb69516 |
Update to bsnes v019 release.
I´m releasing bsnes v0.019 today. This version contains Bandai Sufami Turbo support, new IRQ emulation code, and some various bugfixes. Unfortunately, this release is not entirely cause for celebration. Due to fatal errors in Microsoft´s "enterprise class" c++ compiler package, I am no longer able to compile bsnes with profile guided optimizations. I have tested v0.018 with and without these optimizations, and the difference is a 40% speedup when PGO is used, even more significant than I had previously believed. However, bsnes has now become too complex for Visual C++ to handle. Unfortunately, there is nothing I can do about this, except wait for Microsoft to fix their compiler. (Warning: this paragraph contains personal opinions, skip it if you can´t handle that) As if this wasn´t enough, I´m now doing my best to wean my dependence from Microsoft´s line of operating systems, as I´m particularly concerned about the black box nature of Vista and its´ DRM control mechanisms. This isn´t a road I wish to begin traveling down, and thusly have no interest in upgrading to future versions of Windows. Therefore, as of late, I´ve been writing a UI wrapper that will allow me to code applications that are truly platform independent. The biggest goal for this library is to design a GUI for bsnes that runs virtually identically on both Windows and Linux/BSD. This is mostly complete, however there were many tricks I used in bsnes using the win32 API that I simply cannot do with GTK+ on Linux/BSD, such as the memory editor window subclassing. I will be porting bsnes to use this new UI wrapper, and in turn this will lessen the attractiveness / functionality of the bsnes UI to a certain degree. Perhaps the most devastating news is that I am still contemplating the idea of designing a dot-based PPU renderer for bsnes. As if the loss of PGO wasn´t bad enough, this will likely eat away an unimaginable level of performance as well. I can only estimate the speed loss being between 100-500%. Yes, it will be that bad. And despite weeks of planning, I cannot think of a way to allow a scanline-based and dot-based renderer to coexist as selectable options, given their massive differences in implementation. And let´s not even joke about SA-1 or SuperFX support ... those processors are each four to eight times more powerful than the SNES´ main CPU. All of these speed losses will basically make bsnes mostly irrelevant as an alternative to ZSNES, SNES9x et al. Although I believe I really came close to a viable alternative with v0.018, I know that I cannot both create a mainstream emulator, as well as keep with my original goal to emulate the SNES as accurately as possible. The past few months have been very tough for me; trying to decide which of the above two goals to pursue. I´ve still not absolutely made up my mind. But for now, I´ve been sitting on a mostly untouched version of bsnes for the last few months, and have decided to release it to the public, profile guided optimizations be damned. I´m once again asking for help, if anyone can figure out why bsnes won´t compile with PGO support, please let me know. I´d very much like to get one last PGO build of bsnes released before starting on a dot-based PPU renderer. But given the usual response I get from these requests for help, I´d suggest no one getting their hopes up that bsnes will ever be as fast as it once was again. The new version can be downloaded at the usual place. I´m leaving v0.018 up, as it may very well be the last stable, fast version of bsnes ever released. |
|
![]() |
04118be59a |
Update to bsnes v018r04 release.
Ok, _please_ be courteous to my webhost and only download this WIP if you're going to test it on a processor that hasn't been tested thus far. byuu.org/files/bsnes_v018_wip4.zip byuu.org/files/bsnes_tests.zip This has two separate builds. Neither have PGO, SSE, SSE2, ZIP or JMA support. They are identical except for the FAVOR_ flag define and title of the program. FAVOR_ACCURACY [bsnes_accurate.exe]: - Always tests OAM RTO flags even on skipped frames - Tests NMI/IRQ trigger every clock cycle FAVOR_SPEED [bsnes_fast.exe]: - Only tests OAM RTO flags on rendered frames (always with no frameskipping) - Tests NMI/IRQ trigger using ranges If you'd like to test, please run demo_mode3.smc on both versions of bsnes, turn off speed regulation, and report the framerate both with a frameskip of zero and a frameskip of nine (max), along with your processor speed. The other test ROMs are just to verify that IRQ behavior is still reliable in both versions. A blue screen indicates passing, they all pass on both versions. Don't expect test_* ROMs to pass on other emulators, but demo_* ones should. Example (my main PC): AMD Athlon 3500+ Accurate: - 121.5 fps w/o frameskipping - 171 fps w/max frameskipping Fast: - 146.5 fps w/o frameskipping - 271.5 fps w/max frameskipping ----- As you can see, there are _major_ speed differences on my A64. Personally, I'm all for accuracy, but I also want people to actually be able to use this program in the interim. Perhaps in the future when a low end computer is a current low-end Core 2 Duo, we can remove all of the "speedhack" code. And in the meantime, the full 100% precision is there for people who have the CPU power to afford it. ----- If anyone wants to try and help, heh. src/cpu/scpu/timing/irqtiming_accurate.cpp and src/cpu/scpu/timing/irqtiming_fast.cpp are the two versions of the IRQ testing code. If you see any ways to optimize either (preferrably the former, obviously), I'd greatly appreciate it. Understand that both the CPU counters (VCOUNTER, HCLOCK) and the IRQ timing positions (VIRQPOS, HIRQPOS) can wrap not only the horizontal clock position (1362->0), but the vertical position as well (261->0). And also that they are "misaligned" by 10 clocks (which is really more of an internal CPU IC delay thing, we aren't entirely sure why the difference is there). You probably shouldn't mess with the code if you don't understand the implications of this on eg range testing :/ |
|
![]() |
35fd80bde7 |
Update to bsnes v018 release.
I began working on bsnes on October 14th, 2004. I am releasing bsnes v0.018 today to celebrate bsnes' two year anniversary. Please note that this release incurs a ~15% speed reduction since v0.017, due to IRQ and S-SMP timing improvements. Changelog: - Fixed many critical errors in IRQ timing, should be *very* close to real hardware now - Corrected major CPU timing bug involving CPU I/O condition 4 - Corrected bug with generic HiROM / LoROM memory maps - Corrected bug involving HDMA indirect channel termination [anomie] - OAM address reset now occurs when screen display is enabled, per recent research - Readded full DMA, HDMA and HDMA init bus sync timing - Added preliminary emulation of S-SMP $00f0 TEST register (6 of 8 bits are supported) - Readded emulation of known timing differences between CPU revisions 1 and 2 - Config file can now control scanline-based PPU render position. This will only be needed until a proper dot-based PPU renderer is added - Removed core debugging hooks so that debugging console can remain in public releases, it now functions as a tracer and memory editor - Config file paths once again work correctly even if missing trailing backslash - Video configuration simplified, sorry in advance to those who enjoyed the profile mode used before - Added new configuration screen to control some emulation settings - Replaced bsnes program icon with a much nicer one [FitzRoy] - Optimized memory speed detection algorithm - Preliminary UPS soft-patching support (do not use this yet!) - Decreased memory usage and optimized generic libraries used by bsnes (/src/lib) - Now caching OAM by one line, somewhat similar to a real SNES. Fixes Winter Gold, but causes line rendering error in Mega lo Mania - Lots more, as usual The following games have been fixed since v0.017 by the above bugfixes: - Battle Blaze (J, U) - Circuit USA (J) - F1 Grand Prix (J) - Funaki Masakatsu no Hybrid Wrestler - Tougi Denshou (J) - Jumbo Ozaki no Hole in One (J) - Mahjongg Taikai II (J) - RPG Tsukuru - Super Dante (J) - Robocop Versus The Terminator (U, E) - Sink or Swim (U, E) - Street Racer (J) - Touge Densetsu Saisoku Battle (J) - Winter Olympics (U, E) |
|
![]() |
e308cf4275 |
Update to bsnes v017 release.
- This version adds major accuracy improvements, countless bugfixes and DSP-1 support. At the time of this release, the only remaining known bug in bsnes is with Uniracers 2-player mode, with well over 300+ games tested. Changelog: - DSP-1 support added [Andreas Naive, byuu] - Added cooperative multithreading library, written by myself - Rewritten CPU core, now bus accurate - Rewritten APU core, now bus accurate - Added cartridge database - Added several PCB mappers, thanks to research from Overload - Added several games to database, fixing several mapping-related bugs - Improved mirroring [Nach, grinvader, byuu] - vscroll bug in hires, interlaced mode fixed. Fixes RPM racing - RTO X=256 bug corrected. Fixes Super Conflict title screen [anomie] - Fixed bug in NTSC filter with hires games - Updated snes_ntsc to version 2.0.1 [blargg] - Fixed bugs in HiROM / LoROM memory mapping. Fixes countless games - Fixed major bugs in HDMA routine. Fixes ToP, Mortal Kombat and Genjuu Ryodan - Added out-of-order execution to CPU, APU synchronization for major speedup with no accuracy loss - IRQs are now delayed after H/DMA transfers. Fixes Wild Guns - HDMA transfers now kill active DMA channels that are on the same channel. Fixes Bugs Bunny and World Class Rugby. Special thanks to zones for researching this - CPU emulation mode accuracy was improved - Cleaned up port-specific code to ease porting - Created unified Makefile, used by all ports [Nach] - Created GTK+ port of bsnes (although input is currently broken) - WRAM is now initialized to 0x55, SRAM to 0xff. Fixes Power Drive, Death Brade and RPM Racing - Fixed extreme NMI / IRQ edge case. Fixes Chou Aniki - Adjusted PAL execution speed. Fixes Earthworm Jim 2 (E) sound effects - Fixed auto joypad polling bug. Fixes La Wares - Fixed H/DMA bug that was preventing saves from working in Secret of Evermore - bsnes low loads d3dx9_*.dll dynamically at runtime, it is no longer required - Added support for 239-line PAL mode rendering - As usual, there have been much more changes I've forgotten about since the last release - Two C4 bugs fixed. Mega Man X2 / X3 have no remaining known bugs [anomie, byuu] |