bsnes is a Super Nintendo (SNES) emulator focused on performance, features, and ease of use.
Go to file
Tim Allen 41148b1024 Update to v106r74 release.
byuu says:

So I spent the better part of eight hours refactoring the TLCS900H core
to be more flexible in light of new edge cases.

I'm now including the size information inside of the types (eg
Register<Byte>, Memory<Word>) rather than as parameters to the
instruction handlers. This allows me to eg implement RETI without
needing template arguments in all the instructions. pop(SR), pop(PC) can
deduce how much to pop off of the stack. It's still highly templated,
but not unrolling the 3-bit register indexes and instead going through
the switch table to access registers is going to hurt the performance a
good deal.

A benefit of this is that Register{A} != Register{WA} != Register{XWA}
anymore, despite them sharing IDs.

I also renamed read/write to load/store for the CPU core, because
implicit conversions are nasty. They all call the virtual read/write.

I added more instructions, improved the memory addressing mode support,
and some other things.

I got rid of Byte, Word, Long because there's too many alternate sizes
needed: int8, int16, uint24, etc.

Ran into a really annoying C++ case ...

    struct TLCS900H {
      template<typename T> auto store(Register<T> target, T source) -> void;
    };

If you call store(Register<uint32>(x), uint16(y)); it errors out since
the T types don't match. But you can't specialize it:

    template<typename T, typename U> auto store(Register<T>, U) -> void;
    template<typename U> auto TLCS900H::store<uint32, U>(Register<uint32>, U) -> void;

Because somehow it's 2019 and we still can't do partial template
specialization inside classes ...

So as a result, I had to make T source be type uint32 even for
Register<uint8> and Register<uint16>. Doesn't matter too much, just
annoying.
2019-01-09 10:36:03 +11:00
docs Document that we now require GCC7 and/or C++17 features. 2019-01-03 20:43:08 +11:00
genius Update to v106r68 release. 2018-12-22 21:28:15 +11:00
higan Update to v106r74 release. 2019-01-09 10:36:03 +11:00
hiro Update to v106r70 release. 2019-01-03 21:05:20 +11:00
icarus Update to v106r70 release. 2019-01-03 21:05:20 +11:00
libco Update to v105r1 release. 2017-11-07 09:05:54 +11:00
nall Update to v106r73 release. 2019-01-07 18:59:04 +11:00
ruby Update to v106r66 release. 2018-12-20 11:55:47 +11:00
shaders Install shaders somewhere that higan will find them. 2017-08-23 20:46:24 +10:00
.gitignore Update .gitignore. 2018-12-20 12:15:34 +11:00
.gitlab-ci.yml Build with Ubuntu LTS instead of Debian Stable. 2019-01-03 20:37:30 +11:00
CONTRIBUTING.md docs: Review and update docs for v107. 2018-11-16 16:09:30 +11:00
GPLv3.txt Update version and license 2017-10-24 23:37:22 -04:00
LICENSE.txt Add icarus to LICENSE.txt 2017-10-25 18:22:10 -04:00
README.md docs: Review and update docs for v107. 2018-11-16 16:09:30 +11:00
README.txt docs: Review and update docs for v107. 2018-11-16 16:09:30 +11:00
mkdocs.yml Add credits from Talarubi's README.TXT to the docs. 2017-11-12 17:10:37 +11:00

README.md

The unofficial higan repository

higan emulates a number of classic video-game consoles of the 1980s and 1990s, allowing you to play classic games on a modern general-purpose computer.

This repository includes the source-code for stable and WIP releases of higan, starting during the development of v068. It also includes community-maintained documentation.

Basically, apart from .gitignore files, anything in the higan, hiro, icarus, libco, nall, ruby, or shaders directories should be exactly as it appeared in official releases. Everything else has been added for various reasons.

Official higan resources

Unofficial higan resources