1. 22 Dec, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r68 release. · 3159285e
      Tim Allen authored
      byuu says:
        - nall: converted range, iterator, vector to 64-bit
        - added (very poor) ColecoVision emulation (including Coleco Adam
        - added MSX skeleton
        - added Neo Geo Pocket skeleton
        - moved audio,video,resource folders into emulator folder
        - SFC heuristics: BS-X Town cart is "ZBSJ" [hex_usr]
      The nall change is for future work on things like BPA: I need to be able
      to handle files larger than 4GB. It is extremely possible that there are
      still some truncations to 32-bit lurking around, and even more
      disastrously, possibly some -1s lurking that won't sign-extend to
      `(uint64_t)0-1`. There's a lot more classes left to do: `string`,
      `array_view`, `array_span`, etc.
  2. 21 Dec, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r67 release. · 90da6917
      Tim Allen authored
      byuu says:
        - added all pre-requisite to make install rule (note: only for higan,
          icarus so far)
        - added SG-1000 emulation
        - added SC-3000 emulation (no keyboard support yet)
        - added MS graphics mode 1 emulation (SC-1000)
        - added MS graphics mode 2 emulation (F-16 Fighter)
        - improve Audio::process() to prevent a possible hang
        - higan: repeat monaural audio to both left+right speakers
        - icarus: add heuristics for importing MSX games (not emulated in
          higan yet in this WIP)
        - added DC bias removal filter [jsd1982]
        - improved Audio::Stream::reset() [jsd1982]
      I was under the impression that the 20hz highpass filter would have
      removed DC bias ... if not, then I don't know why I added that filter to
      all of the emulation cores that have it. In any case, if anyone is up
      for helping me out ... if we could analyze the output with and without
      the DC bias filter to see if it's actually helping, then I'll enable it
      if it is. To enable it, edit
      higan/audio/stream.cpp::addDCRemovalFilter() and remove the return
      statement at the top of the function.
  3. 20 Dec, 2018 4 commits
    • Tim Allen's avatar
    • Tim Allen's avatar
    • Tim Allen's avatar
      Update .gitignore. · 41eccf6e
      Tim Allen authored
      At some point, higan moved system metadata from higan/profile to higan/systems.
      Also, higan's Super Famicom core added config options of its own, which it now
      writes out.
    • Tim Allen's avatar
      Update to v106r66 release. · 4c4e79aa
      Tim Allen authored
      byuu says:
        - moved to GCC 8.2 and C++17
        - fixed compilation under FreeBSD 12.0
        - don't read beyond the file size in
        - add missing I/O cycle HuC6280::instructionImmediate
        - serialize Mega Drive's Game Genie state
        - serialize SPC7110::Thread information
        - enable 30-bit color depth support under the GLX/OpenGL 2.0 driver
          (doesn't work with OpenGL 3.2 yet)
      The 30-bit color depth option isn't super useful, but why not? I need to
      update ruby to detect that the display is actually capable of it before
      exposing an option that can result in the driver failing to initialize,
  4. 16 Nov, 2018 1 commit
    • Tim Allen's avatar
      docs: Review and update docs for v107. · 0b44399c
      Tim Allen authored
      Changes include:
      - The "Library" menu was replaced with the "Systems" menu
      - The "Settings" menu was reorganised
      - Game Boy rumble is now under the MBC5 "controller" for the cartridge "port",
        instead of being presented as a part of the base console
      - Import instructions now mention that icarus ships with some firmware files,
        and describe the "Firmware" directory that icarus will use for firmware
        it needs.
      - Apparently the correct name is "MSU1", not "MSU-1"
      - v107 changes the way MSU1 data is stored in game folders
      - PowerFest '94 import instructions removed, since I can't get it to work
        with v107
      - Links to the official forum have been replaced with links to the unofficial
        forum archive, since the official forum is shutting down
      - Links to Mercurial Magic updated to point at qwertymodo's archive, since
        hex_usr is no longer developing it
      - Links to nSide updated, since hex_usr no longer uses GitHub.
      - Windows build instructions now describe a compiler that is actually
        maintained, instead of stale TDM64-GCC.
      - Linux build instructions now mention higan requires SDL 2.0.
      - minor wording changes, typos, broken links fixed, etc.
  5. 04 Oct, 2018 2 commits
    • Tim Allen's avatar
      Update build instructions. · 23dd2895
      Tim Allen authored
      The latest WIP renames icarus/database and icarus/firmware to
      icarus/Database and icarus/Firmware (in title case).
      Also, somewhere along the line we stopped building icarus for higan/Linux,
      which seems an oversight.
    • Tim Allen's avatar
      Update to v106r65 release. · 03b06257
      Tim Allen authored
      byuu says:
      This synchronizes bsnes/higan with many recent internal nall changes.
      This will be the last WIP until I am situated in Japan. Apologies for the
      bugfixes that didn't get applied yet, I ran out of time.
  6. 13 Sep, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r64 release. · 336d2012
      Tim Allen authored
      byuu says:
        - sfc: completed BS Memory Cassette emulation (sans bugs, of course --
          testing appreciated)
        - bsnes: don't strip - on MSU1 track names in game ROM mode
      I'm going with "metadata.bml" for the flash metadata filename for the
      time being, but I'll say that it's subject to change. I'll have to make
      a new extension for it to be supported with bsnes.
  7. 11 Sep, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r63 release. · c5816994
      Tim Allen authored
      byuu says:
        - gb/mbc7: rewrote the 93LCx6 EEPROM emulation
        - sfc/slot/bsmemory: rewrote the flash emulation for Satellaview
      As of this release, flash-based BS Memory cartridges will be writable.
      So without the bsnes patch to disable write limits, some games will lock
      out after a few plays.
  8. 10 Sep, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r62 release. · c2d0ed4c
      Tim Allen authored
      byuu says:
        - sfc/cx4: added missing instructions [info from Overload]
        - sfc/cx4: added instruction cache emulation [info from ikari]
        - sfc/sa1: don't let CPU access SA1-only I/O registers, and vice versa
        - sfc/sa1: fixed IRQs that were broken from the recent WIP
        - sfc/sa1: significantly improved bus conflict emulation
            - all tests match hardware now, other than HDMA ROMROM, which
              is 0.5 - 0.8% too fast
        - sfc/cpu: fixed a bug with DMA→CPU alignment timing
        - sfc/cpu: removed the DMA pipe; performs writes on the same cycles as
          reads [info from nocash]
        - sfc/memory: fix a crashing bug due to not clearing Memory size field
        - bsnes/gb: use .rtc for real-time clock file extensions on the Game
          Boy [hex_usr]
        - ruby/cgl: compilation fix [Sintendo]
      Now let's see if I can accept being off by ~0.65% on one of twelve SA1
      timing tests for the time being and prioritize much more important
      things or not.
  9. 04 Sep, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r61 release. · 3d34517f
      Tim Allen authored
      byuu says:
      This release adds ikari's Cx4 notes to bsnes. It fixes the MMX2 intro's
      boss fight sequence to be frame perfect to real hardware. It's also very
      slightly faster than before.
      I've also added an option to toggle the CPUcoprocessor cycle
      synchronization to the emulation settings panel, so you don't have to
      recompile to get the more accurate SA1 timings. I'm most likely going to
      default this to disabled in bsnes, and *maybe* enabled in higan out of
      the box.
      StaticRAM (wasn't used) and MappedRAM are gone from the Super Famicom
      core. Instead, there's now ReadableMemory, WritableMemory, and
      ProtectedMemory (WritableMemory with a toggle for write protection.)
      Cartridge::loadMap now takes a template Memory object, which bypasses an
      extra virtual function call on memory accesses, but it doesn't really
      impact speed much. Whatever.
  10. 02 Sep, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r60 release. · a3e0f6da
      Tim Allen authored
      byuu says:
      I added (imperfect) memory conflict timing to the SA1.
        - WRAMROM ran 7% too fast
        - ROMROM ran 100% too fast
        - WRAMIRAM ran 7% too fast
        - ROMIRAM ran 7% too fast
        - IRAMIRAM ran 287% too fast
        - BWRAMBWRAM ran 100% too fast
        - HDMA ROMROM ran 15% too fast
        - HDMA WRAMROM ran 15% too fast
        - DMA ROMROM ran 100% too fast
        - ROMROM runs 14% too fast
        - HDMA WRAMROM runs 7% too fast
        - DMA ROMROM runs 4% too fast
      If you enable this with the fast PPU + DSP, your framerate in SA1 games
      will drop by 51%. And even if you disable it, you'll still lose 9% speed
      in SA1 games, and 2% speed in non-SA1 games, because of changes needed
      to make this support possible.
      By default, I'm leaving this off. Compile with `-DACCURATE_SA1` (or
      uncomment the line in sfc/sfc.hpp) if you want to try it out.
      This'll almost certainly cause some SA1 regressions, so I guess we'll
      tackle those as they arise.
  11. 26 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r59 release. · bd814f03
      Tim Allen authored
      byuu says:
        - fixed bug in Emulator::Game::Memory::operator bool()
        - nall: renamed view<string> back to `string_view`
        - nall:: implemented `array_view`
        - Game Boy: split cartridge-specific input mappings (rumble,
          accelerometer) to their own separate ports
        - Game Boy: fixed MBC7 accelerometer x-axis
        - icarus: Game Boy, Super Famicom, Mega Drive cores output internal
          header game titles to heuristics manifests
        - higan, icarus, hiro/gtk: improve viewport geometry configuration;
          fixed higan crashing bug with XShm driver
        - higan: connect Video::poll(),update() functionality
        - hiro, ruby: several compilation / bugfixes, should get the macOS
          port compiling again, hopefully [Sintendo]
        - ruby/video/xshm: fix crashing bug on window resize
            - a bit hacky; it's throwing BadAccess Xlib warnings, but they're
              not fatal, so I am catching and ignoring them
        - bsnes: removed Application::Windows::onModalChange hook that's no
          longer needed [Screwtape]
  12. 21 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r58 release. · f9adb4d2
      Tim Allen authored
      byuu says:
      The main thing I worked on today was emulating the MBC7 EEPROM.
      And... I have many things to say about that, but not here, and not now...
      The missing EEPROM support is why the accelerometer was broken. Although
      it's not evidently clear that I'm emulating the actual values
      incorrectly. I'll think about it and get it fixed, though.
      bsnes went from ~308fps to ~328fps, and I don't even know why. Probably
      something somewhere in the 140KB of changes to other things made in this
  13. 10 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180809 release. · 9a6ae6da
      Tim Allen authored
      byuu says:
      The Windows port can now run the emulation while navigating menus,
      moving windows, and resizing windows. The main window also doesn't try
      so hard to constantly clear itself. This may leave a bit of unwelcome
      residue behind in some video drivers during resize, but under most
      drivers, it lets you resize without a huge amount of flickering.
      On all platforms, I now also run the emulation during MessageWindow
      modal events, where I didn't before.
      I'm thinking we should probably mute the audio during modal periods,
      since it can generate a good deal of distortion.
      The tooltip timeout was increased to ten seconds.
      On Windows, the enter key can now activate buttons, so you can more
      quickly dismiss MessageDialog windows. This part may not actually work
      ... I'm in the middle of trying to get messages out of the global
      `Application_windowProc` hook and into the individual `Widget_windowProc`
      hooks, so I need to do some testing.
      I fixed a bug where changing the input driver wouldn't immediately
      reload the input/hotkey settings lists properly.
      I also went from disabling the driver "Change" button when the currently
      active driver is selected in the list, to instead setting it to say
      "Reload", and I also added a tool tip to the input driver reload button,
      advising that if you're using DirectInput or SDL, you can hit "Reload"
      to rescan for hotplugged gamepads without needing to restart the
      emulator. XInput and udev have auto hotswap support. If we can ever get
      that into DirectInput and SDL, then I'll remove the tooltip. But
      regardless, the reload functionality is nice to have for all drivers.
      I'm not sure what should happen when a user changes their driver
      selection while a game is loaded, gets the warning dialog, chooses not
      to change it, and then closes the emulator. Currently, it will make the
      change happen the next time you start the emulator. This feels a bit
      unexpected, but when you change the selection without a game loaded, it
      takes immediate effect. So I'm not really sure what's best here.
  14. 09 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180808 release. · 1e4affe5
      Tim Allen authored
      byuu says:
      This release fixes the XAudio 2.1 and WASAPI drivers on Windows, and
      extends XAudio to support device selection (eg headphones, speakers,
      monitor, etc.) It also adds DRC to XAudio, however it's not currently
      The code is courtesy of Talarubi, I just botched it somewhere upon
      porting it to the newer version of ruby.
  15. 08 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r57 release. · 93a6a1ce
      Tim Allen authored
      byuu says:
      I've added tool tips to hiro for Windows, GTK, and Qt. I'm unsure how to
      add them for Cocoa. I wasted am embarrassing ~14 hours implementing tool
      tips from scratch on Windows, because the `TOOLTIPS_CLASS` widget just
      absolutely refused to show up, no matter what I tried. As such, they're
      not quite 100% native, but I would really appreciate any patch
      submissions to help improve my implementation.
      I added tool tips to all of the confusing settings in bsnes. And of
      course, for those of you who don't like them, there's a configuration
      file setting to turn them off globally.
      I also improved Mega Drive handling of the Game Genie a bit, and
      restructured the way the Settings class works in bsnes.
      Starting now, I'm feature-freezing bsnes and higan. From this point
        - polishing up and fixing bugs caused by the ruby/hiro changes
        - adding DRC to XAudio2, and maybe exclusive mode to WGL
        - correcting FEoEZ (English) to load and work again out of the box
      Once that's done, a final beta of bsnes will go out, I'll fix any
      reported bugs that I'm able to, and then v107 should be ready. This time
      with higan being functional, but marked as v107 beta. v108 will restore
      higan to production status again, alongside bsnes.
  16. 06 Aug, 2018 2 commits
    • Tim Allen's avatar
      Update to v106r56 release. · 3b4e8b6d
      Tim Allen authored
      byuu says:
      I fixed all outstanding bugs that I'm aware of, including all of the
      errata I listed yesterday.
      And now it's time for lots of regression testing.
      After that, I need to add Talarubi's XAudio2 DRC code, and then get a
      new public bsnes WIP out for final testing.
      New errata: when setting an icon (nall::image) larger than a Canvas on
      Windows, it's not centering the image, so you end up seeing the overscan
      area in the state manager previews, and the bottom of the image gets cut
      off. I also need to forcefully disable the Xlib screensaver disable
      support. I think I'll remove the GUI option to bypass it as well, and
      just force screensaver disable always on with Windows. I'll improve it
      in the future to toggle the effect between emulator pauses.
    • Tim Allen's avatar
  17. 05 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r55 release. · 5da45327
      Tim Allen authored
      byuu says:
      Everything *should* be working again, but of course that won't
      actually be the case. Here's where things stand:
        - bsnes, higan, icarus, and genius compile and run fine on FreeBSD
          with GTK
        - ruby video and audio drivers are untested on Windows, macOS, and
        - hiro is untested on macOS
        - bsnes' status bar is not showing up properly with hiro/qt
        - bsnes and higan's about screen is not showing up properly with
          hiro/qt (1x1 window size)
        - bsnes on Windows crashes often when saving states, and I'm not sure
          why ... it happens inside Encode::RLE
        - bsnes on Windows crashes with ruby.input.windows (unsure why)
        - bsnes on Windows fails to show the verified emblem on the status bar
        - hiro on Windows flickers when changing tabs
      To build the Windows bsnes and higan ports, use
          ruby="video.gdi audio.directsound"
      Compilation error logs for Linux will help me fix the inevitable list of
      typos there. I can fix the typos on other platforms, I just haven't
      gotten to it yet.
  18. 04 Aug, 2018 4 commits
    • Tim Allen's avatar
      Fix ST018 firmware hashes. · 552d3850
      Tim Allen authored
    • Tim Allen's avatar
      Remove redundant use of "classic". · 0595e9e8
      Tim Allen authored
    • Tim Allen's avatar
      Don't mention console dates in the documentation. · 23da4e4e
      Tim Allen authored
      The WonderSwan Color came out in 2000 and the GBA in 2001, so technically
      they're not "video-game consoles of the 1980s and 1990s". Since there's no
      elegant way to talk about the 2000-2009 timespan, let's just not mention
      dates at all.
    • Tim Allen's avatar
      Update to v106r54 release. · 41e127a0
      Tim Allen authored
      byuu says:
      Changes to hiro will break all but the GTK target. Not that it matters
      much given that the only ruby drivers that function are all on BSD
      But if you are fortunate enough to be able to run this ... you'll find
      lots of polishing improvements to the bsnes GUI. I posted some
      screenshots on Twitter, if anyone were interested.
  19. 01 Aug, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r53 release. · 5d135b55
      Tim Allen authored
      byuu says:
      Okay, so the WIPs-within-WIPs thing wasn't achieving its desired effect,
      and it ended up causing me to have to redo some work on hiro since my
      last local snapshot was of r52. So, heck it. I'll just do mostly
      non-functional WIPs for a bit, and worry about the fallout years later
      when I'm trying to find an emulation regression and cursing that the
      WIPs aren't compiling.
      I ported all of the ruby input drivers to the new syntax, as well as the
      OpenAL driver. If you patch the ruby drivers for Linux with this in
      mind, bsnes should compile and run there again.
      Also, the bsnes program icon has returned, now that the new hiro layout
      code is mature enough and I can simply add and remove the icon as a
      Canvas instead of having to try and render into a viewport. The icon
      shows up instantly with the main window.
  20. 31 Jul, 2018 2 commits
    • Tim Allen's avatar
      Update to 20180731 release. · 2335bb0d
      Tim Allen authored
      byuu says:
      I've completed moving all the class objects from `unique_pointer<T>` to
      just T. The one exception is the Emulator::Interface instance. I can
      absolutely make that a global object, but only in bsnes where there's
      just the one emulation core.
      I also moved all the SettingsWindow and ToolsWindow panels out to their
      own global objects, and fixed a very difficult bug with GTK TabFrame
      The configuration settings panel is now the emulator settings panel. And
      I added some spacing between bold label sections on both the emulator
      and driver settings panels.
      I gave fixing ComboButtonItem my best shot, given I can't reproduce the
      crash. Probably won't work, though.
      Also made a very slight consistency improvement to ruby and renamed
      driverName() to driver().
      An important change ... as a result of moving bsnes to global objects,
      this means that the constructors for all windows run before the
      presentation window is displayed. Before this change, only the
      presentation window was constructed first berore displaying it, followed
      by the construction of the rest of the GUI windows.
      The upside to this is that as soon as you see the main window, the GUI
      is ready to go without a period where it's unresponsive.
      The downside to this is it takes about 1.5 seconds to show the main
      window, compared to around 0.75 seconds before.
      I've no intention of changing that back. So if the startup time becomes
      a problem, then we'll just have to work on optimizing hiro, so that it
      can construct all the global Window objects quicker. The main way to do
      that would be to not do calls to the Layout::setGeometry functions for
      every widget added, and instead wait until the window is displayed. But
      I don't have an easy way to do that, because you want the widget
      geometry values to be sane even before the window is visible to help
      size certain things.
    • Tim Allen's avatar
      Update to 20180730 release. · 212da0a9
      Tim Allen authored
      byuu says:
      These WIPs-within-WIPs are getting more and more broken ... this isn't
      going the way I wanted.
      But ... this time around, I've revamped the entire ruby API again, to
      solve a bunch of tough problems that have always made using ruby really
      But there are *so many* ruby drivers that it's going to take a long
      time to work through them all. This WIP is only going to run bsnes, and
      only on FreeBSD, and only with some drivers.
      hiro's Application::initialize() now calls hiro::initialize(), which you
      define inside of your hiro apps. This lets you call
      Application::setName(...) before anything else in hiro runs. This is
      essential on Xorg to set program icons, for instance.
      With the ruby rewrite and the change to hiro, I can get away from the
      need to make everything in bsnes/higan pointers to objects, and can now
      just declare them as regular objects.
  21. 29 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180729 release. · 5deba5cb
      Tim Allen authored
      byuu wrote:
      Sigh ...
      asio.hpp needs #include <nall/windows/registry.hpp>
      [Since the last WIP, byuu also posted the following message. -Ed.]
      ruby drivers have all been updated (but not tested outside of BSD), and
      I redesigned the settings window. The driver functionality all exists on
      a new "Drivers" panel, the emulator/hack settings go to a
      "Configuration" panel, and the video/audio panels lose driver settings.
      As does the settings menu and its synchronize options.
      I want to start pushing toward a v107 release. Critically, I will need
      DirectSound and ALSA to support dynamic rate control. I'd also like to
      eliminate the other system manifest.bml files. I need to update the
      cheat code database format, and bundle at least a few quark shaders --
      although I still need to default to Direct3D on Windows.
      Turbo keys would be nice, if it's not too much effort. Aside from
      netplay, it's the last significant feature I'm missing.
      I think for v107, higan is going to be a bit rough around the edges
      compared to bsnes. And I don't think it's practical to finish the bsnes
      localization support.
      I'm thinking we probably want another WIP to iron out any critical
      issues, but this time there should be a feature freeze with the next
  22. 28 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180728 release. · 716c95f2
      Tim Allen authored
      byuu says:
      Sigh, I seem to be spiraling a bit here ... but the work is very
      important. Hopefully I can get a solid WIP together soon. But for now...
      I've integrated dynamic rate control into ruby::Audio via
      setDynamic(bool) for now. It's very demanding, as you would expect. When
      it's not in use, I realized the OSS driver's performance was pretty bad
      due to calling write() for every sample for every channel. I implemented
      a tiny 256-sample buffer and bsnes went from 290fps to 330fps on my
      FreeBSD desktop. It may be possible to do the same buffering with DRC,
      but for now, I'm not doing so, and adjusting the audio input frequency
      on every sample.
      I also added ruby::Video::setFlush(bool), which is available only in the
      OpenGL drivers, and this causes glFinish() to be called after swapping
      display buffers. I really couldn't think of a good name for this, "hard
      GPU sync" sounds kind of silly. In my view, flush is what commits queued
      events. Eg fflush(). OpenGL of course treats glFlush differently (I
      really don't even know what the point of it is even after reading the
      manual ...), and then has glFinish ... meh, whatever. It's
      setFlush(bool) until I come up with something better. Also as expected,
      this one's a big hit to performance.
      To implement the DRC, I started putting helper functions into the ruby
      video/audio/input core classes. And then the XVideo driver started
      crashing. It took hours and hours and hours to track down the problem:
      you have to clear XSetWindowAttributes to zero before calling
      XCreateWindow. No amount of `--sync`, `gdb break gdk_x_error`, `-Og`,
      etc will make Xlib be even remotely helpful in debugging errors like
      The GLX, GLX2, and XVideo drivers basically worked by chance before. If
      the stack frame had the right memory cleared, it worked. Otherwise it'd
      crash with BadValue, and my changing things broke that condition on the
      XVideo driver. So this has been fixed in all three now.
      Once XVideo was running again, I realized that non-power of two video
      sizes were completely broken for the YUV formats. It took a while, but I
      managed to fix all of that as well.
      At this point, most of ruby is going to be broken outside of FreeBSD, as
      I still need to finish updating all the drivers.
  23. 26 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180726 release. · 876b4be1
      Tim Allen authored
      byuu says:
      Once again, I wasn't able to complete a full WIP revision.
      This WIP-WIP adds very sophisticated emulation of the Sega Genesis
      Lock-On and Game Genie cartridges ... essentially, through recursion and
      a linked list, higan supports an infinite nesting of cartridges.
      Of course, on real hardware, after you stack more than three or four
      cartridges, the power draw gets too high and things start glitching out
      more and more as you keep stacking. I've heard that someone chained up
      to ten Sonic & Knuckles cartridges before it finally became completely
      And so of course, higan emulates this limitation as well ^-^. On the
      fourth cartridge and beyond, it will become more and more likely that
      address and/or data lines "glitch" out randomly, causing various
      glitches. It's a completely silly easter egg that requires no speed
      impact whatsoever beyond the impact of the new linked list cartridge
      I also designed the successor to Emulator::Interface::cap,get,set. Those
      were holdovers from the older, since-removed ruby-style accessors.
      In its place is the new Emulator::Interface::configuration,configure
      API. There's the usual per-property access, and there's also access to
      read and write all configurable options at once. In essence, this
      enables introspection into core-specific features.
      So far, you can control processor version#s, PPU VRAM size, video
      settings, and hacks. As such, the .sys/manifest.bml files are no longer
      necessary. Instead, it all goes into .sys/configuration.bml, which is
      generated by the emulator if it's missing.
      higan is going to take this even further and allow each option under
      "Systems" to have its own editable configuration file. So if you wanted,
      you could have a 1/1/1 SNES menu option, and a 2/1/3 SNES menu option.
      Or a Model 1 Genesis option, and a Model 2 Genesis option. Or the
      various Game Boy model revisions. Or an "SNES-Fast" and "SNES-Accurate"
      I've not fully settled on the syntax of the new configuration API. I
      feel it might be useful to provide type information, but I really quite
      passionately hate any<T> container objects. For now it's all
      string-based, because strings can hold anything in nall.
      I might also change the access rules. Right now it's like:
      emulator→configure("video/blurEmulation", true); but it might be nicer
      as "Video::Blur Emulation", or "Video.BlurEmulation", or something like
  24. 25 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r52 release. · 22bd4b92
      Tim Allen authored
      byuu says:
      I stand corrected, I managed to create and even larger diff than ever.
      This one weighs in at 309KiB `>__>`
      I'll have to create a changelog later, I'm too tired right now to go
      through all of that.
  25. 24 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to 20180724 release. · f1a4576a
      Tim Allen authored
      byuu says:
      I failed to complete a WIP, have five of eight cores updated with some
      major changes to Emulator::Interface. I'll just post a quick temporary
      WIP in the off chance someone wants to look over the new interface and
      comment on it.
      Also implemented screen saver suppression into hiro/GTK.
      I should also add ... a plan of mine is to develop target-bsnes into a
      more generic user interface, with the general idea being that
      target-higan is for multiple Emulator::Interface cores at the same time,
      and target-bsnes is for just one Emulator::Interface core.
      The idea being that if one were to compile target-bsnes with the GBA
      core, it'd become bgba, for instance.
      I don't plan on releasing single-core emulators like this, but ... I don't see any downsides to being more flexible.
  26. 21 Jul, 2018 2 commits
    • Tim Allen's avatar
      Update to v106r51 release. · 0aedb343
      Tim Allen authored
      byuu says:
        - added `Emulator::Interface::connected(uint port) -> uint device;`
        - higan, bsnes: updated emulators to use the new
          Emulator::Interface::connected() function
        - hiro: fixed Object::cast<T> finally
      So, Emulator::Interface::connected() solves two annoying problems at the
      same time.
      First, on first run of the emulator when the settings file is blank, it
      will retrieve the default "sane" device ID, which is usually a gamepad
      for a controller port, or nothing for an expansion/extension port.
      Second, if you were to select a multi-port device, like the NES Four
      Score, the core will set the other port to the Four Score device as
      well, and the GUIs query connected() right after any call to connect(),
      so it gets updated without needing a system for the emulation core to
      send messages alerting the GUI of changes.
    • Tim Allen's avatar
      Update to v106r50 release. · 35ff15f8
      Tim Allen authored
      byuu says:
        - emulator/video,audio: various cleanups
        - emulator/audio: removed reverb effect (it breaks very badly on
          high-frequency systems)
        - emulator/audio: the Nyquist anti-aliasing lowpass filter is now
          generated automatically instead of set per-core
            - at 44.1KHz output, it's set to 22KHz; at 48KHz, it's set to
              22KHz; at 96KHz, it's set to 25KHz
            - this filter now takes the bsnes emulation speed setting into
        - all system/video.cpp files removed; inlined in System::power() and
          Interface::set() instead
        - sfc/cpu: pre-compute `HTIME` as `HTIME+1<<2` for faster comparisons of
        - sfc/cpu: re-add check to block IRQs on the last dot of each frame
          (minor speed hit)
        - hiro/gtk3: fixed headers for Linux compilation finally
        - hiro/gtk,qt: fixed settings.cpp logic so initial values are used
          when no settings.bml file exists
        - hiro/gtk: started a minor experiment to specify theming information
          in settings.bml files
        - nall/dsp: allow the precision type (double) to be overridden (to
        - nall: add some helpers for generating pre-compiled headers
            - it was a failure to try using them for higan, however ...
        - nall: add some helpers for reading fallback values from empty
          `Markup::Node[search]` statements
        - CRITICAL: a lot of my IRQ/NMI/HDMA timing tests are failing with the
          fast PPU ... need to figure out why
        - space between Emulator::video functions and Emulator::audio
          functions in gb/system/system.cpp
        - remove Audio/Reverb/Enable from settings.bml in target-bsnes
  27. 19 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r49 release. · 65a3e6c6
      Tim Allen authored
      byuu says:
      This is a fairly radical WIP with extreme changes to lots of very
      important parts.
      The result is a ~7% emulation speedup (with bsnes, unsure how much it
      helps higan), but it's quite possible there are regressions. As such, I
      would really appreciate testing as many games as possible ... especially
      the old finnicky games that had issues with DMA and/or interrupts.
      One thing to note is that I removed an edge case test that suppresses
      IRQs from firing on the very last dot of every field, which is a
      behavior I've verified on real hardware in the past. I feel that the
      main interrupt polling function (the hottest portion of the entire
      emulator) is not the appropriate place for it, and I should instead
      factor it into assignment of NMITIMEN/VTIME/HTIME using the new
      io.irqEnable (==virqEnable||hirqEnable) flag. But since I haven't done
      that yet ... there's an old IRQ test ROM of mine that'll fail for this
      WIP. No commercial games will ever rely on this, so it's fine for
        - sfc/cpu.smp: inlined the global status functions
        - sfc/cpu: added readRAM, writeRAM to use a function pointer instead
          of a lambda for WRAM access
        - sfc/cpu,smp,ppu/counter: updated reset functionality to new style
          using class inline initializers
        - sfc/cpu: fixed power(false) to invoke the reset vector properly
        - sfc/cpu: completely rewrote DMA handling to have per-channel
        - sfc/cpu: removed unused joylatch(), io.joypadStrobeLatch
        - sfc/cpu: cleaned up io.cpp handlers
        - sfc/cpu: simplified interrupt polling code using
          nall::boolean::flip(),raise(),lower() functions
        - sfc/ppu/counter: cleaned up the class significantly and also
          optimized things for efficiency
        - sfc/ppu/counter: emulated PAL 1368-clock long scanline when
          interlace=1, field=1, vcounter=311
        - sfc/smp: factored out the I/O and port handlers to io.cpp
  28. 16 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r48 release. · 393c2395
      Tim Allen authored
      byuu says:
      The problems with the Windows and Qt4 ports have all been resolved,
      although there's a fairly gross hack on a few Qt widgets to not destruct
      once Application::quit() is called to avoid a double free crash (I'm
      unsure where Qt is destructing the widgets internally.) The Cocoa port
      compiles again at least, though it's bound to have endless problems. I
      improved the Label painting in the GTK ports, which fixes the background
      color on labels inside TabFrame widgets.
      I've optimized the Makefile system even further.
      I added a "redo state" command to bsnes, which is created whenever you
      load the undo state. There are also hotkeys for both now, although I
      don't think they're really something you want to map hotkeys to.
      I moved the nall::Locale object inside hiro::Application, so that it can
      be used to translate the BrowserDialog and MessageDialog window strings.
      I improved the Super Game Boy emulation of `MLT_REQ`, fixing Pokemon
      Yellow's custom border and probably more stuff.
      Lots of other small fixes and improvements. Things are finally stable
      once again after the harrowing layout redesign catastrophe.
        - ICD::joypID should be set to 3 on reset(). joypWrite() may as well
          take uint1 instead of bool.
        - hiro/Qt: remove pWindow::setMaximumSize() comment; found a
          workaround for it
        - nall/GNUmakefile: don't set object.path if it's already set (allow
          overrides before including the file)
  29. 14 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r47 release. · 6090c639
      Tim Allen authored
      byuu says:
      This is probably the largest code-change diff I've done in years.
      I spent four days working 10-16 hours a day reworking layouts in hiro
      The result is we now have TableLayout, which will allow for better
      horizontal+vertical combined alignment.
      Windows, GTK2, and now GTK3 are fully supported.
      Windows is getting the initial window geometry wrong by a bit.
      GTK2 and GTK3 work perfectly. I basically abandoned trying to detect
      resize signals, and instead keep a list of all hiro windows that are
      allocated, and every time the main loop runs, it will query all of them
      to see if they've been resized. I'm disgusted that I have to do this,
      but after fighting with GTK for years, I'm about sick of it. GTK was
      doing this crazy thing where it would trigger another size-allocate
      inside of a previous size-allocate, and so my layouts would be halfway
      through resizing all the widgets, and then the size-allocate would kick
      off another one. That would end up leaving the rest of the first layout
      loop with bad widget sizes. And if I detected a second re-entry and
      blocked it, then the entire window would end up with the older geometry.
      I started trying to build a message queue system to allow the second
      layout resize to occur after the first one completed, but this was just
      too much madness, so I went with the simpler solution.
      Qt4 has some geometry problems, and doesn't show tab frame layouts
      properly yet.
      Qt5 causes an ICE error and tanks my entire Xorg display server, so ...
      something is seriously wrong there, and it's not hiro's fault. Creating
      a dummy Qt5 application without even using hiro, just int main() {
      TestObject object; } with object performing a dynamic\_cast to a derived
      type segfaults. Memory is getting corrupted where GCC allocates the
      vtables for classes, just by linking in Qt. Could be somehow related to
      the -fPIC requirement that only Qt5 has ... could just be that FreeBSD
      10.1 has a buggy implementation of Qt5. I don't know. It's beyond my
      ability to debug, so this one's going to stay broken.
      The Cocoa port is busted. I'll fix it up to compile again, but that's
      about all I'm going to do.
      Many optimizations mean bsnes and higan open faster. GTK2 and GTK3 both
      resize windows very quickly now.
      higan crashes when you load a game, so that's not good. bsnes works
      bsnes also has the start of a localization engine now. Still a long way
      to go.
      The makefiles received a rather substantial restructuring. Including the
      ruby and hiro makefiles will add the necessary compilation rules for
      you, which also means that moc will run for the qt4 and qt5 targets, and
      windres will run for the Windows targets.
  30. 08 Jul, 2018 1 commit
    • Tim Allen's avatar
      Update to v106r46 release. · 0c557960
      Tim Allen authored
      byuu says:
        - bsnes, higan: simplified make output; reordered rules
        - hiro: added Window::set(Minimum,Maximum)Size() [only implemented in
          GTK+ so far]
        - bsnes: only allow the window to be shrunk to the 1x multiplier size
        - bsnes: refactored Integral Scaling checkbox to {Center, Scale,
          Stretch} radio selection
        - nall: call fflush() after nall::print() to stdout or stderr [needed
          for msys2/bash]
        - bsnes, higan: program/interface.cpp renamed to program/platform.cpp
        - bsnes: trim ".shader/" from names in Settings→Shader menu
        - bsnes: Settings→Shader menu updated on video driver changes
        - bsnes: remove missing games from recent files list each time it is
        - bsnes: video multiplier menu generated dynamically based on largest
          monitor size at program startup
        - bsnes: added shrink window and center window function to video
          multiplier menu
        - bsnes: de-minimize presentation window when exiting fullscreen mode
          or changing video multiplier
        - bsnes: center the load game dialog against the presentation window
          (important for multi-monitor setups)
        - bsnes: screenshots are not immediate instead of delayed one frame
        - bsnes: added frame advance menu option and hotkey
        - bsnes: added enable cheats checkbox and hotkey; can be used to
          quickly enable/disable all active cheats
        - hiro/Windows: `SW_MINIMIZED`, `SW_MAXIMIZED `=> `SW_MINIMIZE`,
        - hiro/Windows: add pMonitor::workspace()
        - hiro/Windows: add setMaximized(), setMinimized() in
        - bsnes: call setCentered() after setMaximized(false)