In addition, it adds the Famicom expansion port for its own devices. The only
expansion port devices supported are:
*Standard controller (counts as Player 3)
*4-Players Adaptor
*Beam Gun (Zapper)
*Family Trainer (Power Pad)
*VS. Panel (VS. arcade games only; if you try to select this for a Famicom or
PlayChoice-10 game, it instead selects None, though the menu does not properly
recognize that the device change failed)

Please be aware that a great majority of Famicom and NES games support the use
of Player 3 and Player 4 as substitutes for Player 1 and Player 2, including
ones that use the NES Four Score such as A Nightmare on Elm Street. If the
expansion slot is not explicitly set to "None", this can result in Player 3's
controller controlling both Player 1 and Player 3.

The Export Memory functions for the Famicom and Super Famicom emulators now
export a limited selection of PPU registers in BML format and expansion chip
memory (except for the NEC DSPs). The Game Boy and Game Boy Advance emulators
will also dump their RAMs but not registers.
(This function was removed in higan v094r06. Preserved in nSide for the benefit
of 3rd-party tools that depend on it)

nSide uses different directories for storing configuration settings, save
states, and shaders so as to not conflict with higan.
In Windows, the configuration files are in "%AppData%\nSide-t".

You will need the GBA BIOS to play Game Boy Advance games. This is no different
from higan.

...but if you do not wish to emulate the PlayChoice-10, the above 3 files are
not necessary. Keep in mind that PlayChoice-10 emulation is still incomplete, so
these files will not be very useful right now.

Known Bugs:
Famicom:
*Saving a state while the Zapper or Beam Gun is connected will cause the
emulator to hang. If the cursor was captured, it can be hard to rescue.
*The VS. Zapper with its own separate protocol is badly supported (timing of
light sensor is not well understood).
Super Famicom:
*Magical Drop (JP) (1.0) does not play voice effects, and it hangs when trying
to show the Game Over screen in Endless Mode (とことんモード).
Inherited from higan v094.
*Super Bonk's demo sequence is mis-timed. Bonk falls short of entering a pipe,
which ruins the rest of the demo as he continues reading inputs and gets stuck
in the area above the pipe. It is likely that this bug is related to the
Magical Drop bug above.
Inherited from higan v094.
Game Boy:
*When loading a Game Boy game in Game Boy Color mode, colors are applied to
the wrong areas, making game displays terrible on the eyes.
Inherited from higan v094.
Game Boy Advance:
*The Classic NES Series games will not work. Loading them would cause higan
to hang, and so too do they cause nSide to hang.
There is still much to know about the Game Boy Advance's inner workings, so
it is recommended that you either use mGBA (by endrift) to play these games,
or play the original Famicom/NES versions instead.
Inherited from higan v095.

===========================
Changes from higan: General
===========================
Changed "higan" to "nSide" and added a Contributors field for Ryphecha and
Cydrak, which were credited in comments in fc.hpp and gba.hpp, on the
Configuration Settings Advanced tab and Cocoa About box.
Credited blargg and Jonas Quinn as contributors to higan (blargg wrote the
DSP code for the compatibility and performance cores, and Jonas Quinn
contributed many fixes for the SFC DSPs and the Game Boy).
There may still be more that I am missing, so let me know if you or someone
else needs to be credited.

Moved "/higan/library.bml" to "/nSide/library.bml".

Reformatted the "About" text to show contributors to higan and show which
program nSide branched from.

Renamed "{game}/higan" folder for save states to "{game}/nSide".

Renamed the ethos-based UI to "nSide-e", imported tomoko with hiro, and
re-branded it as "nSide-t".
Notable, nall v094r37 dropped nall::group, which phoenix depends on, so
moved nall::group's definition into phoenix/core/core.hpp.

Moved fc/video/*, fc/audio/*, and fc/input/* into fc/system and changed
references to point to the new locations.

Changed the Serializer version from 2 to 127. This step is necessary because
of the addition of the Famicom's expansion port. Why 127 instead of 3? To
account for official revisions in the future.

The read registers at $4016 and $4017 only have 5 bits each, not 6, so
cpu.mdr() is ANDed with 0xe0 instead of 0xc0.

Commented out a line in ppu_read for the OAMREAD register that was making
Magic Floor's ball sprite behave strangely. The mystery of this behavior is
still not solved, however: a shadow ball copies the ball's previous X
coördinate upon update, which does not appear in Nestopia or FCEUX.

Added emulation of PPU open bus behavior according to the notes blargg wrote
when he published his ppu_open_bus demo. ppu.status.mdr will decay to 0x00 if
not refreshed after about 600 milliseconds, and reading from the palette will
put the 2 highest MDR bits into the read value.

Changed PPU timing to account for the dummy tick in front of every scanline.
bnes had pixel rendering on ticks 0-255 of every scanline, whereas an actual
PPU renders on ticks 1-256.

Added direct color support (when rendering is disabled and PPUADDR points to
the palette at $3F00-$3FFF, the selected color will render instead of the
background color).

Added PAL support, which reduces games to 50Hz and swaps the red and green
color emphasis bits.

Overhauled the device implementation to depend on controller objects like in
the Super Famicom emulator.

Added the ability to change controllers for the Famicom, which required
adding an Interface#connect method that calls Input#connect.
Added Four Score support. It is split into 2 devices, so for best results,
plug a Four Score into both slots.
Added support for the Zapper/Beam Gun.
Added support for the Power Pad/Family Trainer.
Added support for the 4-Players Adaptor.
Light is defined as any Famicom color with a luma of 0x20 or greater and a
chroma less than 0x0D, not taking into account emphasis or RGB PPUs.

Added unlicensed board types: (note that they are sectioned off separately
from the licensed ones for easy removal):
CAMERICA-BF909x // Micro Machines
CAMERICA-ALGN
CAMERICA-ALGQ
COLORDREAMS-74*377.cpp // Bible Adventures
MLT-ACTION52 // Action 52
AVE-NINA-xx // Impossible Mission II
SingleChip // Magic Floor (nocash)
Many games published on Camerica boards were made by Codemasters who is
notorious for exploiting rarely-used aspects of the NES. This is not a problem
with the Camerica board but with Famicom hardware timing.

Prevented saving to non-existent SRAM/WRAM for the following board families:
SxROM
TxROM

The board definitions for the following board families now read the board and
chip types and choose a board and chip revisions accordingly:
NROM
HROM has no solder pads to select mirroring and is locked to vertical
mirroring.
SxROM (MMC1)
SEROM, SHROM, and SH1ROM have pin A14 hooked directly between the control
deck and the program ROM, which prevents the ROM from being bankswitched.
Prevented reading from and writing to non-existent PRG RAM. This bug
prevented Bionic Commando from booting.
Added tracking of the last CHR bank used, so that the legacy PRG RAM
disable bit and 256 KB PRG bank bit will dynamically switch as the PPU
renders. Can be used for software IRQs but will catastrophically crash the
game if misused.
TxROM (MMC3)
Added TQROM support, which has both CHR-ROM and CHR-RAM (selected via bit
6 of the bank number). Needed to play High Speed and Pin Bot.
Added TxSROM support, which selects mirroring via bit 7 of whichever CHR
banks control PPU $0000..$0FFF. Needed to play Armadillo.
Added support for TVROM. TR1ROM support already existed, which provides
four-screen mirroring, but it did not recognize TVROM as also having it.
Needed to play Rad Racer II.
Added support for Acclaim's MC-ACC chip, which fires IRQs on PPU A12
falling edges instead of rising edges. Needed to properly display The
Incredible Crash Dummies's messages during its intro.
ExROM (MMC5)
Fixed a bug in CHR mode 0 concerning background access to the PPU.
Originally, though an increment of 1 to $512B advanced by 0x2000 bytes,
PPU $1000..$1FFF acted as a mirror of $0000..$0FFF, making the latter half
of each bank inaccessible. It now accesses the latter half of the bank.
Sprite access was not affected by the bug.
AxROM
PxROM
FxROM

Added bus conflict emulation to the following board families (assuming that
the written value is ANDed with the ROM byte):
UxROM
Added support for the 74HC08 chip, which is required to play Crazy
Climber. Normal UxROM games use the 74HC32 chip.
CxROM
Added support for CPROM, which restricts PPU $0000-0FFF to the first bank
while $1000-1FFF is a 4KB switchable bank. Needed to play Videomation.
Added support for CNROM security CHR chip enables. Each game has a
specific CHR bank that is read from
manifest["cartridge/board/security/pass"], and that bank is the only one
that maps in the CHR. Spy vs. Spy uses 0x1.
AxROM (AMROM only; AOROM has no quality database coverage)
BNROM
GNROM/MHROM

Made the MMC3 read the PPU's address bus (status.chr_abus) instead of ticking
on every CHR ROM/RAM read.

Added support for VRC2a, which is similar to VRC2c except that CHR banks are
right-shifted by 1. "cartridge/chip/pinout/chr-shift" indicates the shift
amount, with 0 used by VRC2b and VRC2c, and 1 used by VRC2a.
VRC2a was used in ツインビー3 ポコポコ大魔王 (TwinBee 3: The Aimless Demon King).
VRC2b was used in 魂斗羅 (Contra).
VRC2c was used in がんばれゴエモン外伝 けいた黄金キセル (Ganbare Goemon Gaiden).

The variants VRC4a, VRC4b, VRC4d, VRC4e, and VRC4f (if it exists) were all
supported already, but VRC4c had been locked out, making it impossible to
run がんばれゴエモン外伝2 天下の財宝 (Ganbare Goemon Gaiden 2). Not anymore.
VRC4c's pinout is: "pinout a0=6 a1=7"

Added the ability to read the VRC6 pinout from manifest.bml. Before, it would
dynamically determine the pinout based on the presence of SRAM.
悪魔城伝説 (Akumajou Densetsu/Castlevania 3) uses "pinout a0=0 a1=1".
Esper Dream 2 and 魍魎戦記マダラ (Mouryou Senki Madara) use "pinout a0=1 a1=0".

Split chip code for the Bandai chips into a separate file alongside the MMCs
and VRCs.
Made register placement in the Bandai boards more strict based on board type.
"board type=???" determines how to lay out the registers.
FCG-1 and FCG-2 use $6000-7FFF, and LZ93D50 and JUMP2 uses $8000-FFFF.
Additionally, a second "chip type=???" line determines which type of EEPROM
to use (24C01 for 128-byte and 24C02 for 256-byte). Leave the second line out
to exclude EEPROM (and use SRAM if it exists). True EEPROM support is still
not in, however.
クレヨンしんちゃん オラとポイポイ (Crayon Shin-chan: Ora to Poi Poi) is the only game using
the LZ93D50 to not have any way of saving data, and
ファミコンジャンプII 最強の７人 (Famicom Jump II) is the only game on any variant of this
board to use normal SRAM at $6000-7FFF.

Added support for the Camerica boards ALGQ, BF9096 and BF9097. Needed to play
Fire Hawk and the Quattro multicarts.

Added limited support for the VS. System. Only UniSystem games will work
right now (Tennis and Baseball are DualSystem games that would require
emulating 2 Famicoms). The Start and Select buttons are disabled in favor of
Buttons 1, 2, 3, and 4, which can be configured in the new Famicom Expansion
device, the VS. Panel. The VS. Panel also controls the service button and coin
slots. It is connected automatically and cannot be disconnected, but a
limitation of the UI prevents the interface from acknowledging that a device
change was refused.
VS. games are stored in a separate "VS. System" folder in the library, just
like PlayChoice-10 games. The VS. manifest format selects the PPU revision in
"cartridge/vs/ppu/revision" and specifies DIP switch settings in the same
format as the Nintendo Super System's DIP switch settings
("cartridge/vs/setting/option/value").

Added support for loading games with the .pc10 extension.
Currently, PlayChoice-10 games load the same way as Famicom games but with the
RGB palette in the 2C03. It will now load the BIOS from the PlayChoice-10.sys
folder and throw a warning if one is not found, but because it is not
actually used in any way, you can put any 16384-byte file in there to avoid
the warning.
Note that RGB PPUs do not support the Color Emulation option or Display
Emulation shader. They display the same colors as when both are turned off.
Which PPU to use is decided by the presence of the "pc10" node in the
cartridge manifest, so if you want to bypass loading the PlayChoice-10 BIOS
while still using the RGB PPU, rename a ".pc10" folder to ".fc".

Prepared the video renderer for dynamic adjustment of screen width for
VS. DualSystem and PlayChoice-10 games. To set the width to 512 pixels for a
VS. DualSystem game, add a second "vs" node with a "ppu" child. It is not
enough to simply have a 2nd "vs" node, said node needs to have a "ppu" node as
a child to activate the double width. This is currently not useful because of
lack of true DualSystem support. The height is set to 480 if using the
PlayChoice-10's dual screen mode (set in PlayChoice-10.sys/manifest.bml), and,
as a basic demonstration of the horrid frame-based renderer, it will display
the PlayChoice-10 logo at the top as you play.

======================================================
Changes from higan: processor/r6502 (affects nSide-fc)
======================================================
BRK was improperly clearing the Decimal flag when it should leave it alone.
Only the interrupt flag is set now.
An NMI can now redirect a BRK if it occurs after BRK's 4th cycle (after
pushing the return vector into the stack but before pushing register P).
Opcode 0x80 was being treated as NOP abs, when it should be NOP #imm.
NOP #imm now advances the program counter properly, fixing Puzznic's columns
of corruption bug.
Added support for the unofficial opcodes ALR, ANC, AXS, DCP, ISC (ISB), LAX,
RLA, RRA, SAX, SLO, SRE, and STP (KIL).

=============================
Changes from higan: nSide-sfc
=============================
Revised emulator name and copyright information. Credited multiple people who
helped out with bsnes in the past.

Expanded exportMemory to dump expansion chip-specific memory.

Added exportRegisters for exporting some PPU registers to a debug report in
BML format. Not all registers are supported yet.

============================
Changes from higan: nSide-gb
============================
Added the exportMemory function, which can dump WRAM, HRAM (internal RAM),
VRAM, OAM, and the palette, which is different for the Game Boy and Game Boy
Color.

Added the exportMemory function, which can dump External WRAM, Internal WRAM,
VRAM, and PRAM (Palette RAM).
However, dumping External WRAM causes a crash with about 3/4 of the data
dumped, so it has been temporarily disabled (External WRAM is 262144 bytes
long, the longest of any file dumped by any emulator's exportMemory function).

Revised the header information for iNES mappers 21, 23, 24, 25, and 26 to
correctly detect VRC4 and VRC6 pinouts more often (but in VRC4's case, still
not 100% of the time)

Revised the header information for iNES mappers 16, 153, and 159 to select
which type of EEPROM/SRAM to use for the Bandai FCG series of boards.

Began planning support for purification based on bootgod's database.

Added preliminary support for NES 2.0. This allows submappers to influence
purification of Konami VRC games, distinguish between IREM-HOLYDIVER and
JALECO-JF-16 (Cosmo Carrier), among other things.

(auto_purify only) Added support for PRG ROMs that are 8192 bytes long, half
the minimum size needed for iNES and NES 2.0. If a 16384-byte PRG ROM has 2
halves with the same data, it is truncated to 8192 bytes.