Commit Graph

2629 Commits

Author SHA1 Message Date
asuramaru 6b38388a67 I have added comments to clarify the unknown behaviors that remain.
Specifically, we don't know what happens when reading from 4016-4017 or 4218-421f, or when writing to 4016 or 4200, during the auto joypad polling sequence.
Presumably, nothing good.
2020-10-29 15:24:40 +11:00
Asura 42f9e68fb2 Update timing.cpp
I have updated the comment to reflect the new stepOnce() name, instead of the older step() name.
2020-10-29 15:24:40 +11:00
asuramaru 39c37ec2d1 Fix SNES auto-joypad polling
anomie's notes indicate that polling begins between cycles 32.5-95.5, but his
notes were slightly off. 32.5-95.5 is referring to the PPU dot clock. If you
multiply by 4 you get the cycle count, 130-382. It's pretty clear that in
256-cycle units, that would need to be 130-384 or you'd have no event when it
lands on cycle 384. Jonas Quinn confirmed that with his testing in any case.

I chose to split the cycle range in half and run things every 128 clocks. So
that reduces us to 32.5-64.0, or 130 to 256 + 258-384. The reason I chose 128
over 256 was so I could emulate the time it takes to perform the joypad
latching. I don't believe you can set the controller latch to 1 and then 0
immediately. It needs time to let the controllers see this happening and then
release the latch, and time to let that take effect. Polling the controllers is
only one operation so it makes sense that happens once every 256 cycles, which
is why I have the (counter&1) test for that.

Think about it this way: we know the polling sequence takes 4224 cycles, and
4224/256 is 16.5. Isn't that a little strange to have half a cycle? But if we
consider the latching is actually twice as fast, then it's 2x128 + 16x256. If we
run on a 128-clock counter, it becomes 2x128 + 16x2x128, or 34 total states. But
now since we don't actually poll on the second half of each 16x2x256 states, we
don't need to bother running the event there, so we can stop at 33 instead of 34
and it's the same thing. And by doing that, it turns our polling duration into
4224 cycles, just like we've observed.

Fixes #61.
2020-10-29 15:24:40 +11:00
jsd1982 9d262ed113 nall: fix bad memory access pattern in string.format 2020-10-28 18:35:28 +11:00
Tim Allen ac37afd153 Use byuu.org/bsnes as the official homepage.
Previously, we didn't have control of byuu.org and it wasn't obvious what we
should do about hosting. Now we can update byuu.org, though, we should continue
using it as the authoritative source information.

Fixes #2.
2020-10-27 23:21:19 +11:00
Tim Allen f09c45f3e4 Fix region auto-detection when using native file dialogs.
hiro has two confusingly-named file-picker dialogs. "BrowserDialog" is the
custom dialog built entirely with hiro widgets, "BrowserWindow" is a wrapper
around the native file-picker. bsnes is built for BrowserDialog, but if you tick
"Use native file picker" in the Emulator options, when it needs a file it will
construct a BrowserDialog, copy the relevant config options across to a new
BrowserWindow and invoke that.

Unfortunately, BrowserDialog and BrowserWindow have different capabilities.
Specifically, BrowserDialog includes an "options" list which bsnes uses to let
the user override region detection when loading a game. BrowserWindow has no
such widget. Thus, when using a BrowserDialog the options list worked as intended,
but when using a BrowserWindow the options list was never initialised and no
option was ever chosen. As a result, when opening a game with the native file-
picker, bsnes always used NTSC emulation mode, instead of auto-detecting.

Previously, constructing a BrowserDialog and calling setOptions would leave the
BrowserDialog in an inconsistent state (with no option selected). This was OK if
you immediately displayed the dialog to the user (this would complete the
initialisation and choose a default), but bsnes also used BrowserDialog as an
*interface* typee, to represent the parameters and results of a file-picker
operation that was implemented elsewhere. For this use-case, the inconsistent
state caused problems.

Therefore, BrowserDialog has been changed:

  - setting the list of options always chooses a default, maintaining the
    invariant that `.options()` always returns one of the available options.
  - The internal BrowserDialogWindow class now takes a reference to a Response
    object, instead of constructing one from scratch and having to duplicate
    the "set .option to a reasonable value" code.

Fixes #44.
2020-10-27 23:20:56 +11:00
Tim Allen 090b79b3be Strip whitespace and empty lines from the cheat editor.
Previously, bsnes would turn the cheat text into a list of cheats by splitting
on '\n', producing an empty "cheat" after the last line of the editor:

    "7e0003=00\n".split("\n") -> ["7e0003=00", ""]

That empty "cheat" is not a valid cheat, so the result would be marked invalid.
Teaching bsnes to silently skip empty lines worked, but it would preserve
multiple blank lines between two cheats, which was silly.

Now we iterate over all the lines of the cheat editor, putting valid codes in a
new vector, and setting a flag for invalid codes.

Fixes #63.
2020-10-21 16:39:39 +11:00
John Chadwick 968e6b5feb Implement GitHub Actions Based CI.
This is lightly adapted from the implementation in Higan. For more
information, see that PR in higan-emu/higan#118.

The main difference is that we only compile one binary here, and
packaging is similar to (but adapted from) packaging byuu.
2020-10-19 17:37:02 +11:00
Tim Allen e866a909dc Apply bsnes' customisations back on top of the upstream SameBoy source.
This includes changes to SameBoy (updating the README to be clear about
provenance, and adding a GNUmakefile to integrate with bsnes' build system),
updates the SameBoy version number in the about box, and adds SameBoy to the
list of subtrees updated by update-subtrees.sh.
2020-10-12 18:40:44 +11:00
Tim Allen ec18efcb04 Add 'bsnes/gb/' from commit '919a88ec23f8011dd0389a4abceb62b3d0c83e00'
git-subtree-dir: bsnes/gb
git-subtree-mainline: 844e23d0f4
git-subtree-split: 919a88ec23
2020-10-12 16:43:40 +11:00
Tim Allen 844e23d0f4 Remove old SameBoy snapshot. 2020-10-12 16:41:26 +11:00
Lior Halphon 919a88ec23
Merge pull request #301 from SimpleTease1/patch1
libretro changes
2020-10-11 02:42:02 +03:00
SimpleTease eb295de218 shared version.mk 2020-10-10 23:33:58 +00:00
SimpleTease 696bebc673 libretro: joypad bitmasks 2020-10-10 17:14:53 +00:00
SimpleTease 714227883f cross-compile friendly 2020-10-10 13:46:44 +00:00
Lior Halphon 526c2e029a
Fix #296 2020-10-10 14:50:11 +03:00
SimpleTease 2bfca48e0f libretro: fix core version 2020-10-10 04:02:21 +00:00
SimpleTease cd526d960e libretro: changing model requires manual game restart 2020-10-10 04:00:30 +00:00
radius 8dc60d0b87 update makefile 2020-10-10 03:52:22 +00:00
twinaphex efe8d6b643 Update Makefile 2020-10-10 01:22:51 +00:00
slash0042 faeb1d2e18 Add libnx port 2020-10-10 01:02:22 +00:00
Lior Halphon 8b45c32d77 Merge branch 'master' of https://github.com/LIJI32/SameBoy 2020-10-09 16:40:00 +03:00
Lior Halphon c35fe8b517 Make `gb.h` compatible with C++ again for bsnes integration. Fixed #300 2020-10-09 16:39:23 +03:00
Lior Halphon 195329463b
Merge pull request #294 from yo-wotop/master
Windows Updates
2020-10-09 16:03:57 +03:00
Lior Halphon 99ec5b32fc
Update build-faq.md 2020-10-09 16:03:32 +03:00
Lior Halphon 64963e1746
Update README.md 2020-10-09 15:57:23 +03:00
Tim Allen 0ab0ab6957 Merge commit '5e109224fb3480d806e44d74587d052c7f88bf83' into master 2020-10-09 02:31:32 +11:00
Ruslan Tretiakov 5e109224fb Make comments ANSI C compliant 2020-10-09 02:30:21 +11:00
yo 38afb187cf Resolving some comments and clarifying some language 2020-10-06 23:03:39 -07:00
yo 0b5853070a Updated instructions for Windows building 2020-10-05 14:37:49 -07:00
yo 28234da2d2 Updated instructions for Windows building 2020-10-05 14:34:00 -07:00
yo 04e5f1b8cf Updated for Windows clang and SDL2 changes 2020-10-05 14:33:36 -07:00
Ruslan Tretiakov d0efbfbcd9 libretro: Add support for BS-X Satellaview 2020-10-02 23:57:23 +10:00
Tim Allen d72874fa59 Merge libco repository's commit 'd31c6e75a54be12307d65fd80f55adfbe7aa9d67' into master 2020-10-01 16:34:55 +10:00
Ruslan Tretiakov a2255f6052 Add update-subtrees.sh based on script from higan 2020-10-01 16:34:50 +10:00
Ruslan Tretiakov fcc982dff0 PPU Mosaic fixes imported from higan 2020-10-01 09:47:47 +10:00
Lior Halphon 2a5aed626d
Update README.md 2020-09-29 20:50:14 +03:00
Lior Halphon 1e9e961e9c
Create CONTRIBUTING.md 2020-09-29 20:43:47 +03:00
Ruslan Tretiakov 9517080349 Merge fix from higan for Sound Novel Tsukura/Derby Stallion 96 (jbo-85) 2020-09-29 23:09:59 +10:00
Ruslan Tretiakov 7eee058864 libretro: sync Boards dump with upstream 2020-09-29 23:09:59 +10:00
Sanaki 366a20386c Corrected valid extensions to fix archive loading of GB/GBC 2020-09-29 23:09:59 +10:00
Rouven Spreckels 9ef085fb06 Add games Bahamut Lagoon and Tales of Phantasia.
This updates the game database to match higan's version.
2020-09-28 18:59:20 +10:00
Rouven Spreckels 1c83a6fe44 Add boards SHVC-1K1X-10 and SHVC-LJ3M-01. 2020-09-25 14:22:41 +10:00
Sintendo a8c1f19f75 Add 'Unload Game' hotkey 2020-09-22 23:43:01 +10:00
Sintendo c2c479440e Add 'Power Cycle' hotkey
Closes #25.
2020-09-22 23:43:01 +10:00
Lior Halphon 7c92845882 Merge branch 'master' of https://github.com/LIJI32/SameBoy 2020-09-19 19:31:31 +03:00
Lior Halphon 7ff3556bc3 Workboy emulation (Cocoa only) 2020-09-19 19:31:24 +03:00
Alcaro b9ccb90324 GNU Make 4.3 compatibility
* WARNING: Backward-incompatibility!
  Previously appending using '+=' to an empty variable would result in a value
  starting with a space.  Now the initial space is only added if the variable
  already contains some value.  Similarly, appending an empty string does not
  add a trailing space.

https://lwn.net/Articles/810071/
2020-09-19 23:22:13 +10:00
Tim Allen 24503fc922 hiro: qt.moc should be generated, not committed to the repo. 2020-09-18 22:31:17 +10:00
Zeno Sebastian Endemann d383f0e883 Use pkg-config instead of hardcoded path to Qt5 moc 2020-09-18 22:31:17 +10:00