1. 25 Oct, 2017 1 commit
    • Talarubi's avatar
      Update version and license · 9e06857e
      Talarubi authored
      Added LICENSE.txt and GPLv3.txt. Also updated libco documentation.
      After discussion with byuu, libco gets a more specific ISC license
      to match nall, ruby and hiro. higan, as clarified in LICENSE.txt,
      continues to be GPL version 3 only (no "or later" clause).
  2. 22 Jan, 2017 1 commit
    • Screwtape's avatar
      Update to v102r02 release. · bdc100e1
      Screwtape authored
      byuu says:
        - I caved on the `samples[] = {0.0}` thing, but I'm very unhappy about it
            - if it's really invalid C++, then GCC needs to stop accepting it
              in strict `-std=c++14` mode
        - Emulator::Interface::Information::resettable is gone
        - Emulator::Interface::reset() is gone
        - FC, SFC, MD cores updated to remove soft reset behavior
        - split GameBoy::Interface into GameBoyInterface,
        - split WonderSwan::Interface into WonderSwanInterface,
        - PCE: fixed off-by-one scanline error [hex_usr]
        - PCE: temporary hack to prevent crashing when VDS is set to < 2
        - hiro: Cocoa: removed (u)int(#) constants; converted (u)int(#)
          types to (u)int_(#)t types
        - icarus: replaced usage of unique with strip instead (so we don't
          mess up frameworks on macOS)
        - libco: added macOS-specific section marker [Ryphecha]
      So ... the major news this time is the removal of the soft reset
      behavior. This is a major!! change that results in a 100KiB diff file,
      and it's very prone to accidental mistakes!! If anyone is up for
      testing, or even better -- looking over the code changes between v102r01
      and v102r02 and looking for any issues, please do so. Ideally we'll want
      to test every NES mapper type and every SNES coprocessor type by loading
      said games and power cycling to make sure the games are all cleanly
      resetting. It's too big of a change for me to cover there not being any
      issues on my own, but this is truly critical code, so yeah ... please
      help if you can.
      We technically lose a bit of hardware documentation here. The soft reset
      events do all kinds of interesting things in all kinds of different
      chips -- or at least they do on the SNES. This is obviously not ideal.
      But in the process of removing these portions of code, I found a few
      mistakes I had made previously. It simplifies resetting the system state
      a lot when not trying to have all the power() functions call the reset()
      functions to share partial functionality.
      In the future, the goal will be to come up with a way to add back in the
      soft reset behavior via keyboard binding as with the Master System core.
      What's going to have to happen is that the key binding will have to send
      a "reset pulse" to every emulated chip, and those chips are going to
      have to act independently to power() instead of reusing functionality.
      We'll get there eventually, but there's many things of vastly greater
      importance to work on right now, so it'll be a while. The information
      isn't lost ... we'll just have to pull it out of v102 when we are ready.
      Note that I left the SNES reset vector simulation code in, even though
      it's not possible to trigger, for the time being.
      Also ... the Super Game Boy core is still disconnected. To be honest, it
      totally slipped my mind when I released v102 that it wasn't connected
      again yet. This one's going to be pretty tricky to be honest. I'm
      thinking about making a third GameBoy::Interface class just for SGB, and
      coming up with some way of bypassing platform-> calls when in this
  3. 14 Sep, 2016 1 commit
    • Screwtape's avatar
      Update to v101r18 release. · c6fc15f8
      Screwtape authored
      byuu says:
        - added 30 new PAL games to icarus (courtesy of Mikerochip)
        - new version of libco no longer requires mprotect nor W|X permissions
        - nall: default C compiler to -std=c11 instead of -std=c99
        - nall: use `-fno-strict-aliasing` during compilation
        - updated nall/certificates (hopefully for the last time)
        - updated nall/http to newer coding conventions
        - nall: improve handling of range() function
      I didn't really work on higan at all, this is mostly just a release
      because lots of other things have changed.
      The most interesting is `-fno-strict-aliasing` ... basically, it joins
      `-fwrapv` as being "stop the GCC developers from doing *really* evil
      shit that could lead to security vulnerabilities or instabilities."
      For the most part, it's a ~2% speed penalty for higan. Except for the
      Sega Genesis, where it's a ~10% speedup. I have no idea how that's
      possible, but clearly something's going very wrong with strict aliasing
      on the Genesis core.
      So ... it is what it is. If you need the performance for the non-Genesis
      cores, you can turn it off in your builds. But I'm getting quite sick of
      C++'s "surprises" and clever compiler developers, so I'm keeping it on
      in all of my software going forward.
  4. 22 Jun, 2015 1 commit
    • Screwtape's avatar
      Update to v094r29 release. · 83f684c6
      Screwtape authored
      byuu says:
      Note: for Windows users, please go to nall/intrinsics.hpp line 60 and
      correct the typo from "DISPLAY_WINDOW" to "DISPLAY_WINDOWS" before
      compiling, otherwise things won't work at all.
      This will be a really major WIP for the core SNES emulation, so please
      test as thoroughly as possible.
      I rewrote the 65816 CPU core's dispatcher from a jump table to a switch
      table. This was so that I could pass class variables as parameters to
      opcodes without crazy theatrics.
      With that, I killed the regs.r[N] stuff, the flag_t operator|=, &=, ^=
      stuff, and all of the template versions of opcodes.
      I also removed some stupid pointless flag tests in xcn and pflag that
      would always be true.
      I sure hope that AWJ is happy with this; because this change was so that
      my flag assignments and branch tests won't need to build regs.P into
      a full 8-bit variable anymore.
      It does of course incur a slight performance hit when you pass in
      variables by-value to functions, but it should help with binary size
      (and thus cache) by reducing a lot of extra functions. (I know I could
      have used template parameters for some things even with a switch table,
      but chose not to for the aforementioned reasons.)
      Overall, it's about a ~1% speedup from the previous build. The CPU core
      instructions were never a bottleneck, but I did want to fix the P flag
      building stuff because that really was a dumb mistake v_v'
  5. 18 Aug, 2013 1 commit
    • Screwtape's avatar
      Update to v093 release. · 4e2eb238
      Screwtape authored
      byuu says:
      - added Cocoa target: higan can now be compiled for OS X Lion
        [Cydrak, byuu]
      - SNES/accuracy profile hires color blending improvements - fixes
        Marvelous text [AWJ]
      - fixed a slight bug in SNES/SA-1 VBR support caused by a typo
      - added support for multi-pass shaders that can load external textures
        (requires OpenGL 3.2+)
      - added game library path (used by ananke->Import Game) to
      - system profiles, shaders and cheats database can be stored in "all
        users" shared folders now (eg /usr/share on Linux)
      - all configuration files are in BML format now, instead of XML (much
        easier to read and edit this way)
      - main window supports drag-and-drop of game folders (but not game files
        / ZIP archives)
      - audio buffer clears when entering a modal loop on Windows (prevents
        audio repetition with DirectSound driver)
      - a substantial amount of code clean-up (probably the biggest
        refactoring to date)
      One highly desired target for this release was to default to the optimal
      drivers instead of the safest drivers, but because AMD drivers don't
      seem to like my OpenGL 3.2 driver, I've decided to postpone that. AMD
      has too big a market share. Hopefully with v093 officially released, we
      can get some public input on what AMD doesn't like.
  6. 26 Dec, 2012 1 commit
    • Screwtape's avatar
      Update to higan v091 release. · 94b2538a
      Screwtape authored
      byuu says:
      Basically just a project rename, with s/bsnes/higan and the new icon
      from lowkee added in.
      It won't compile on Windows because I forgot to update the resource.rc
      file, and a path transform command isn't working on Windows.
      It was really just meant as a starting point, so that v091 WIPs can flow
      starting from .00 with the new name (it overshadows bsnes v091, so
      publicly speaking this "shouldn't exist" and will probably be deleted
      from Google Code when v092 is ready.)
  7. 07 Aug, 2012 1 commit
    • Screwtape's avatar
      Update to v090 release. · 47dffcae
      Screwtape authored
      byuu says:
      Most notably, this release adds Nintendo DS emulation. The Nintendo DS
      module was written entirely by Cydrak, so please give him all of the
      credit for it. I for one am extremely grateful to be allowed to use his
      module in bsnes.
      The Nintendo DS emulator's standalone name is dasShiny. You will need
      the Nintendo DS firmware, which I cannot provide, in order to use it. It
      also cannot (currently?) detect the save type used by NDS games. As
      such, manifest.xml files must be created manually for this purpose. The
      long-term plan is to create a database of save types for each game.
      Also, you will need an analog input device for the touch screen for now
      (joypad axes work well.)
      There have also been a lot of changes from my end: a unified
      manifest.xml format across all systems, major improvements to SPC7110
      emulation, enhancements to RTC emulation, MSU1 enhancements, icons in
      the file browser list, improvements to SNES coprocessor memory mapping,
      cleanups and improvements in the libraries used to build bsnes, etc.
      I've also included kaijuu (which allows launching game folders directly
      with bsnes) and purify (which allows opening images that are compressed,
      have copier headers, and have wrong extensions); both of which are fully
      This release only loads game folders, not files. Use purify to load ROM
      files in bsnes.
      Note that this will likely be the last release for a long time, and that
      I will probably rename the emulator for the next release, due to how
      many additional systems it now supports.
  8. 26 Dec, 2010 1 commit
    • Screwtape's avatar
      Update to v073 release. · 6ea4bc03
      Screwtape authored
      byuu says:
      This release marks a major step forward, offering full low-level
      emulation of all four DSP coprocessors based on the NEC uPD77C25
      processor core. Many people were responsible for this milestone: Dr.
      Decapitator for the actual decapping and extraction; Lord Nightmare for
      the cartridges and some special analysis tools; myself, Jonas Quinn and
      Cydrak for the uPD77C25 emulation; and all of the donors who raised the
      necessary $1,000 for the necessary hardware and equipment needed to pull
      this all off. To say thanks to the donors, I am releasing the uPD77C25
      emulation core to the public domain, so that everyone can benefit from
      All four DSP emulations will be improved by this by way of having
      realistic timing; the DSP-4 will benefit further as the high-level
      emulation was incomplete and somewhat buggy; and the DSP-3 will benefit
      the most as the high-levle emulation there was not complete enough to be
      playable. As a result, most notably, this means bsnes v073 is the first
      emulator to fully be able to play SD Gundam GX (J)!
      As bsnes' primary goal is accuracy, the LLE DSP support renders the old
      HLE DSP support obsolete. Ergo, I have removed the 166KB of HLE source
      code, and replaced it with the uPD77C25 core, which comprises a mere
      20KB of source code. As this LLE module supports save states, this also
      means that for the first time, DSP-3 and DSP-4 games have save state
      On the other hand, this also means that to run any DSP game, you will
      need the appropriate program ROM. As these are copyrighted, I cannot
      distribute them nor tell you where to get them. All I can do is provide
      you with the necessary filenames and hashes.
      Changelog (since v072 release):
      * added NEC uPD77C25 emulation core
      * added low-level emulation of the DSP-1, DSP-1B, DSP-2, DSP-3, DSP-4
      * removed high-level emulation of the DSP-n coprocessors
      * added blargg's libco::ppc.c module, which is far more portable, even
        running on the PS3
      * added software filter support via binary plugins
      * added debugger (currently Linux-only); but it is as yet unstable
      * added pause shortcut
      * updated mightymo's cheat code database
  9. 20 Oct, 2010 1 commit
    • Screwtape's avatar
      Include all the code from the bsnes v068 tarball. · a59ecb3d
      Screwtape authored
      byuu describes the changes since v067:
      This release officially introduces the accuracy and performance cores,
      alongside the previously-existing compatibility core. The accuracy core
      allows the most accurate SNES emulation ever seen, with every last
      processor running at the lowest possible clock synchronization level.
      The performance core allows slower computers the chance to finally use
      bsnes. It is capable of attaining 60fps in standard games even on an
      entry-level Intel Atom processor, commonly found in netbooks.
      The accuracy core is absolutely not meant for casual gaming at all. It
      is meant solely for getting as close to 100% perfection as possible, no
      matter the cost to speed. It should only be used for testing,
      development or debugging.
      The compatibility core is identical to bsnes v067 and earlier, but is
      now roughly 10% faster. This is the default and recommended core for
      casual gaming.
      The performance core contains an entirely new S-CPU core, with
      range-tested IRQs; and uses blargg's heavily-optimized S-DSP core
      directly. Although there are very minor accuracy tradeoffs to increase
      speed, I am confident that the performance core is still more accurate
      and compatible than any other SNES emulator. The S-CPU, S-SMP, S-DSP,
      SuperFX and SA-1 processors are all clock-based, just as in the accuracy
      and compatibility cores; and as always, there are zero game-specific
      hacks. Its compatibility is still well above 99%, running even the most
      challenging games flawlessly.
      If you have held off from using bsnes in the past due to its system
      requirements, please give the performance core a try. I think you will
      be impressed. I'm also not finished: I believe performance can be
      increased even further.
      I would also strongly suggest Windows Vista and Windows 7 users to take
      advantage of the new XAudio2 driver by OV2. Not only does it give you
      a performance boost, it also lowers latency and provides better sound by
      way of skipping an API emulation layer.
      - Split core into three profiles: accuracy, compatibility and
      - Accuracy core now takes advantage of variable-bitlength integers (eg
      - Performance core uses a new S-CPU core, written from scratch for speed
      - Performance core uses blargg's snes_dsp library for S-DSP emulation
      - Binaries are now compiled using GCC 4.5
      - Added a workaround in the SA-1 core for a bug in GCC 4.5+
      - The clock-based S-PPU renderer has greatly improved OAM emulation;
        fixing Winter Gold and Megalomania rendering issues
      - Corrected pseudo-hires color math in the clock-based S-PPU renderer;
        fixing Super Buster Bros backgrounds
      - Fixed a clamping bug in the Cx4 16-bit triangle operation [Jonas
        Quinn]; fixing Mega Man X2 "gained weapon" star background effect
      - Updated video renderer to properly handle mixed-resolution screens
        with interlace enabled; fixing Air Strike Patrol level briefing screen
      - Added mightymo's 2010-08-19 cheat code pack
      - Windows port: added XAudio2 output support [OV2]
      - Source: major code restructuring; virtual base classes for processor
      - cores removed, build system heavily modified, etc.
  10. 09 Aug, 2010 1 commit