bsnes-jg
--------
bsnes-jg is a cycle accurate emulator for the Super Famicom/Super Nintendo
Entertainment System, including support for the Super Game Boy, BS-X
Satellaview, and Sufami Turbo.

This is a fork of bsnes v115. Many changes have been made post-fork:
 - Higher quality resampler with settings
 - Improved performance without loss of accuracy
 - Portability improvements
 - Removal of accuracy-reducing hacks and unnecessary code
 - Significant increase in standards compliance
 - Translation to the C++ Standard Library (ISO C++11)

This repository lives at https://gitlab.com/jgemu/bsnes

Compiling
---------
Make sure you have The Jolly Good API's header files installed. If you did
not install them, you will be required to include their path in CXXFLAGS.

GNU Make's default behaviour for compiling C++ sources is to use g++. If your
platform of choice uses an unpatched GNU Make, you will need to override the
CXX implicit variable if you wish to use a different compiler.

Options:
  DISABLE_MODULE - Set to a non-zero value to disable building the module.
  ENABLE_EXAMPLE - Set to a non-zero value to build an example frontend.
  ENABLE_SHARED - Set to a non-zero value to build a shared library.
  ENABLE_HTML - Set to a non-zero value to generate the html documentation.
  ENABLE_STATIC - Set to a non-zero value to build a static archive.
  ENABLE_STATIC_JG - Set to a non-zero value to build a static JG archive.
  USE_VENDORED_SAMPLERATE - Set non-zero to use vendored libsamplerate

Linux:
  make

macOS:
  make

BSD:
  gmake

Windows (MSYS2):
  make

Cross Compile:
(For example compiling on Linux for MinGW)
  AR=x86_64-w64-mingw32-ar \
  CC=x86_64-w64-mingw32-cc \
  CXX=x86_64-w64-mingw32-c++ \
  PKG_CONFIG=x86_64-w64-mingw32-pkg-config \
  STRIP=x86_64-w64-mingw32-strip \
  make

The build will be output to "bsnes/". This directory may be used as is
locally by copying it to your local "cores" directory, or may be installed
system-wide using the "install" target specified in the Makefile.

Input Devices
-------------
bsnes-jg uses a game database to determine which input devices must be
plugged in. The following input devices are currently supported:

SNES Control Pad
SNES Mouse
Super Multitap
Super Scope
Justifier

Auxiliary Files
---------------
Super Game Boy ROM images, the BS-X Satellaview BIOS, and the Sufami Turbo
ROM must be loaded as auxiliary files. Sufami Turbo Slot A cartridges must
also be loaded in this manner when loading two Sufami Turbo cartridges.

Settings
--------
port1 = 0
0 = Auto, 1 = Controller, 2 = Mouse

port2 = 0
0 = Auto, 1 = Controller, 2 = Mouse, 3 = Multitap, 4 = Super Scope,
5 = Justifier",

region = 0
0 = Auto, 1 = NTSC, 2 = PAL

aspect_ratio = 0
0 = Auto Region, 1 = 1:1 PAR, 2 = NTSC, 3 = PAL

overscan_t = 8
N = Hide N pixels of Overscan (Top)

overscan_b = 8
N = Hide N pixels of Overscan (Bottom)

overscan_l = 0
N = Hide N pixels of Overscan (Left)

overscan_r = 0
N = Hide N pixels of Overscan (Right)

luminance = 10
0 = 0%, 1 = 10%, 2 = 20%, 3 = 30%, 4 = 40%, 5 = 50%, 6 = 60%, 7 = 70%, 8 = 80%,
9 = 90%, 10 = 100%",

saturation = 10
0 = 0%, 1 = 10%, 2 = 20%, 3 = 30%, 4 = 40%, 5 = 50%, 6 = 60%, 7 = 70%, 8 = 80%,
9 = 90%, 10 = 100%, 11 = 110%, 12 = 120%, 13 = 130%, 14 = 140%, 15 = 150%,
16 = 160%, 17 = 170%, 18 = 180%, 19 = 190%, 20 = 200%

gamma = 2
0 = 100%, 1 = 110%, 2 = 120%, 3 = 130%, 4 = 140%, 5 = 150%, 6 = 160%, 7 = 170%,
8 = 180%, 9 = 190%, 10 = 200%

coproc_delaysync = 0
0 = Off, 1 = On

coproc_preferhle = 0
0 = Off, 1 = On

rsqual = 0
0 = Fastest, 1 = Medium, 2 = Best

spc_interp = 0
0 = Gaussian, 1 = Sinc

hotfixes = 0
0 = Off, 1 = On

runahead = 0
N = Number of frames to run ahead

cmptn_timer = 6
N = Minutes of game time (competition boards)

Notes
-----
- Coprocessor Delayed Sync only applies for LLE coprocessor emulation.
- Firmware is required for LLE coprocessor emulation in some cases.
- Firmware is required for DSP3, ST011, and ST018 in all cases.
- Save states created with LLE coprocessor emulation are incompatible with
  states created with HLE coprocessor emulation.
- The equivalent of the "Accuracy Profile" from previous versions of the
  emulator may be used by setting Coprocessor Delayed Sync and Coprocessor
  HLE off. The defaults are similar to the "Balanced Profile". The "Performance
  Profile" is gone. If this is still too slow, try Mednafen's snes_faust.

Contributing
------------
Any contributions should respect the direction and goals of the project. This
emulator project is aligned with the originally stated goal of its original
author, which is to preserve the SFC/SNES console accurately for future
generations. To achieve this, the codebase must be as standards-compliant as
possible to ensure it will remain buildable and usable even in the absence of
active developers. The project therefore avoids complicated hacks or
enhancements in order to focus purely on preservation.

Copyright
---------
bsnes-jg (GPL-3.0-or-later)
  Copyright (c) 2004-2020 byuu et al
  Copyright (c) 2020-2026 Rupert Carmichael
  See COPYING

byuuML (Zlib)
  Copyright (c) 2017 Solra Bizna
  See deps/byuuML/LICENSE (https://github.com/SolraBizna/byuuML)

libco (ISC)
  Copyright (c) 2006-2020 byuu et al
  See deps/libco/LICENSE (https://github.com/higan-emu/libco)

libsamplerate (BSD-2-Clause)
  Copyright (c) 2002-2021, Erik de Castro Lopo
  See deps/libsamplerate/COPYING (https://github.com/libsndfile/libsamplerate)

SameBoy (Expat)
  Copyright (c) 2015-2025 Lior Halphon
  See deps/gb/LICENSE (https://github.com/LIJI32/SameBoy)

snes_spc (LGPL-2.1-or-later)
  Copyright (C) 2007 Shay Green.
  See deps/snes_spc/license.txt (https://slack.net/~ant/libs/audio.html)
