26 KiB
higan, the multi-system emulator
higan emulates a number of classic videogame consoles of the 1980s and 1990s, allowing you to play classic games on a modern general-purpose computer.
As of v102, higan has top-tier support for the following consoles:
- Nintendo Super Famicom/Super Nintendo Entertainment System,
including addon hardware:
- Super Game Boy
- Sufami Turbo
- Nintendo Game Boy Advance
It also includes some level of support for these consoles:
- BS-X Satellaview addon for the Super Famicom
- Nintendo Famicom/Nintendo Entertainment System
- Nintendo Game Boy
- Nintendo Game Boy Color
- Sega Master System
- Sega Game Gear
- Sega Megadrive/Genesis
- NEC PC Engine/TurboGrafx 16 (but not the CD-ROM² System/TurboGrafx-CD)
- NEC SuperGrafx
- Bandai Wonderswan
- Bandai Wonderswan Color
Note: Some console were released under different names in different geographic regions. To avoid listing all possible names every time such a console is mentioned, higan uses the name from the console's region of origin. In practice, that means Japanese names: "Famicom" and "Super Famicom" instead of NES and SNES, "Mega Drive" instead of "Genesis", "PC Engine" instead of "TurboGrafx-16".
higan is actively supported on FreeBSD 10 and above, and Microsoft Windows 7 and above. It also includes some level of support for GNU/Linux and macOS.
higan is officially spelled with a lowercase "h", not a capital.
About this document
This is the unofficial higan README, a community-maintained introduction and reference. It may be out of date by the time you read this, and it may contain errors or omissions. If you find something that's wrong, or you have a suggestion, see "Unofficial higan resources" below.
Official higan resources
Unofficial higan resources
- Source code repository archives official higan releases and WIP snapshots since approximately v067r21.
- Quark shader repository collects shaders that higan can use to add special effects like TV scanlines to its video output, or smarter algorithms for scaling up to modern PC resolutions. See Installing custom shaders below for details.
- Mercurial Magic is a tool for converting MSU-1 games and mods into a format higan can use. See Importing MSU-1 games below for details.
There are also other projects based on current or older versions of higan, in whole or in part, that you might want to check out.
- Mednafen is another multi-system emulator. Its Super Famicom emulation is based on bsnes v059, from the time before bsnes was renamed to higan.
- BizHawk is another multi-system emulator, specialising in the creation of tool-assisted speedruns. Its Super Famicom emulation is based on bsnes v087.
- nSide is a fork of higan that greatly enhances its NES emulation support, and adds minor features to the other cores too. It also restores the "balanced" Super Famicom emulation core that was removed from higan in v099, which is less CPU intensive than the current accuracy-focussed core.
- bsnes-plus is a fork of bsnes v073 that adds improved support for debugging Super Famicom software.
Installing and uninstalling higan
The best way to install higan depends on what platform you're using, as well as whether you want to use official binaries or compile the source-code from scratch.
Installing an official release on Windows
Official higan releases are distributed in 7-zip archives. You will need to install 7-zip, or another compatible archiving tool, to install higan.
Once you have a suitable archiving tool, extract the contents of the higan archive into a new folder.
When you're done,
the new folder should contain higan.exe
and icarus.exe
along with other assorted files and directories
that describe the systems higan emulates.
You may put that folder wherever you like.
To run higan, open the higan.exe
file.
Before you can actually play games, you'll need to import them and configure higan. If you want to play Game Boy Advance games, you will need a GBA BIOS.
Uninstalling an official release on Windows
Delete the folder containing higan.exe
and the other associated data from the original archive.
To remove higan's configuration:
- Press Win+R to open the Run dialog
- Type
%LOCALAPPDATA%
and press Enter to open the folder where higan's configuration data lives - Delete the subdirectories named
icarus
andhigan
if they exist.
You might also want to remove the games imported into higan's library (including in-game saves and save-states):
- Press Win+R to open the Run dialog
- Type
%USERPROFILE%
and press Enter to open the folder where higan keeps its game library - Delete the folder named
Emulation
if it exists
Compiling from source on Windows
You will need a copy of the higan source-code. If you download an official release from the higan homepage, you will need 7-zip or a compatible tool to extract it. Alternatively, you may obtain higan source code from the unofficial git repo using the Git source-code management tool, or by clicking the download button on the right-hand side of the web-page and choosing an archive format.
You will need a C++ compiler to compile higan. We recommend installing TDM64-GCC, preferably the latest version but anything newer than 4.9 should be fine. higan does not support building with clang++ (Clang is still not quite there yet for Windows) nor Microsoft Visual C++ (last we checked, it didn't support all the C++ features higan uses).
Note: Make sure you get TDM64-GCC, not TDM-GCC. When compiled in x86 (32-bit) mode, higan may crash at startup because gcc targeting x86 does not support Windows' structured exception handling (SEH). Also, historically in x86 mode gcc has miscompiled a part of the NES emulation core. See the higan forum for details.
Once you've installed mingw-w64,
open a command-prompt window,
type g++ --version
then press Enter
to check it's installed correctly.
You should see a message like
g++ 1.2.3 20010101
Copyright (C) 2001 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
...except it should mention the version of mingw that you installed
and the corresponding dates.
If you see an error message like "command not found"
or "bad command or filename",
you may need to add mingw's "bin" folder
to your computer's %PATH%
.
See the mingw documentation for help with that.
Once mingw is installed and available from the command prompt:
- Put the higan source code in some convenient location,
like
C:\higan-src
- Open the command-prompt
- Type
cd C:\higan-src
(or wherever you put the higan source) and press Enter - Type
mingw32-make -C icarus compiler=g++
and press Enter to build the icarus import tool - Type
mingw32-make -C higan compiler=g++
and press Enter to build the main higan executable
Installing a compiled build on Windows
- In Windows Explorer, create the folder where you want higan to live
- Assuming you built higan in
C:\higan-src
, copyC:\higan-src\icarus\out\icarus.exe
into the new folder - Copy
C:\higan-src\icarus\Database
and its contents into the new folder - Copy
C:\higan-src\higan\out\higan.exe
into the new folder - Copy all the
*.sys
directories inC:\higan-src\higan\systems
into the new folder
The new folder should now contain
icarus.exe
,
higan.exe
,
a folder named Database
,
and half a dozen folders named after the systems higan emulates
with .sys
at the end.
This is what you would get by downloading an official build,
as described under
Installing an official release on Windows
above.
Before you can actually play games, you'll need to import them and configure higan. If you want to play Game Boy Advance games, you will need a GBA BIOS.
Uninstalling a compiled build on Windows
The process is the same as Uninstalling an official release on Windows above. You may also wish to delete the higan source folder.
Compiling from source on Linux
You will need a copy of the higan source-code. If you download an official release from the higan homepage, you will need 7-zip or a compatible tool to extract it. Alternatively, you may obtain higan source code from the unofficial git repo using the Git source-code management tool, or by clicking the download button on the right-hand side of the web-page and choosing an archive format.
You will also need GCC 4.9 or higher, including the C and C++ compiler, GNU Make, and development files (headers, etc.) for the following libraries:
- GTK 2.x
- PulseAudio
- Mesa
- gtksourceview 2.x
- Cairo
- SDL 1.2
- libXv
- libAO
- OpenAL
- udev
On a Debian-derived Linux distribution, you can install everything you need with a command like:
sudo apt-get install build-essential libgtk2.0-dev libpulse-dev \
mesa-common-dev libgtksourceview2.0-dev libcairo2-dev libsdl1.2-dev \
libxv-dev libao-dev libopenal-dev libudev-dev
Once you have all the dependencies installed:
- Put the higan source code in some convenient location,
like
~/higan-src
- Open a terminal window
- Type
cd ~/higan-src
(or wherever you put the higan source) and press Enter - Type
make -C icarus compiler=g++
and press Enter to build the icarus import tool - Type
make -C higan compiler=g++
and press Enter to build the main higan executable
Installing a compiled build on Linux
Assuming you have successfully compiled higan as described in the previous section:
- Open a terminal window
- Type
cd ~/higan-src
(or wherever you put the higan source) and press Enter - Type
make -C icarus install
and press Enter to install icarus and its game database - Type
make -C higan install
and press Enter to install higan and its supporting files
This installs higan and its associated data files
into the ~/.local
directory hierarchy.
To confirm higan is installed correctly,
type higan
in a terminal and press Enter.
If the higan window appears,
everything is working.
On the other hand,
if you get an error message like "command not found",
you should double-check that the directory ~/.local/bin
is included in your $PATH
environment variable
by running the following command in a terminal:
echo "$PATH" | tr ':' '\n' | grep ~/.local/bin
If the above command prints the full path of ~/.local/bin
(for example: /home/yourname/.local/bin
)
then you should be good.
If it prints nothing,
you need to add the following line to ~/.profile
:
export PATH=~/.local/bin:$PATH
(this line must be in ~/.profile
because
most GUIs do not read any other files at login)
If you also have a ~/.bash_profile
,
make sure it reads the contents of ~/.profile
with a line like this:
source ~/.profile
You will need to log out and log back in
for changes to ~/.profile
or ~/.bash_profile
to take effect.
Before you can actually play games, you'll need to import them and configure higan. If you want to play Game Boy Advance games, you will need a GBA BIOS.
Uninstalling a compiled build on Linux
To uninstall higan, as installed by the above instructions:
- Open a terminal window
- Type
cd ~/higan-src
(or wherever you put the higan source) and press Enter - Type
make -C icarus uninstall
and press Enter - Type
make -C higan uninstall
and press Enter
To remove higan's configuration,
delete the directory ~/.config/higan
as well.
To remove the games imported into higan's library
(including in-game saves and save-states),
delete the directory ~/Emulation
.
You may also wish to delete the higan source directory.
Installing the GBA BIOS
For most of the systems higan emulates, the console itself contains (almost) no actual software, so emulating the system does not require infringing the copyright of the hardware manufacturer. However, the Game Boy Advance is different: every device contains a standard library of software routines for common functions games require, often called a "BIOS" by analogy with the Basic Input/Output System used in IBM PC compatibles.
For the same legal reasons that commercial games cannot be distributed with emulators, the GBA BIOS cannot be distributed with higan, but is required for GBA software to run.
If you have a real GBA and a flashcart, the Internet contains many tools that will extract the BIOS image so it can be copied to your desktop computer. The correct GBA BIOS file is exactly 16384 bytes long, and has the SHA-256 hash fd2547724b505f487e6dcb29ec2ecff3af35a841a77ab2e85fd87350abd36570.
Once you have the correct BIOS file:
- rename it to
bios.rom
- if you're using Windows,
turn off "hide extensions for known file types"
so you don't wind up with a file called
bios.rom.dat
or whatever the file's original extension was.
- if you're using Windows,
turn off "hide extensions for known file types"
so you don't wind up with a file called
- Copy the file into higan
s
Game Boy Advance.sysdirectory, alongside the
manifest.bml` file that is already there.- In Windows,
find
Game Boy Advance.sys
in the same folder ashigan.exe
- In Linux,
find
Game Boy Advance.sys
in~/.local/share/higan/
- In Windows,
find
Note:
If you upgrade this version of higan to a newer version,
make sure the bios.rom
file
winds up in the Game Boy Advance.sys
directory
of the new version.
The higan interface
When you launch higan, the main window appears, with a menu-bar across the top, a status-bar across the bottom, and a large area in the middle where the game's video output appears.
The Library menu
The Library menu allows you to import games into higan's game library, and to load games from the library.
To play a game from your library, click on the Library menu, click on the console manufacturer submenu (Nintendo for the Super Famicom, Bandai for the WonderSwan, etc.) then click on the console menu item. A window will appear listing all the games in your library for that particular console. Select the game you want to play and click the Open button, or just double-click the game, and it will begin playing as though you'd just turned on the console.
To add a new game to your library,
choose "Load ROM File ..." from the Library menu.
A file-picker dialog will appear,
allowing you to pick any ROM image for any supported system,
with any of the most common file extensions.
It also allows loading ROM images from .zip
archives,
if the archive contains a single ROM image.
To add many games at once, run icarus, or choose "Import ROM Files ..." from the Library menu (which just runs icarus anyway). A file-picker will appear, with a check-box for each file in the current directory. Check the check-boxes for all the files you want to import, then click "Import ..." in the bottom right.
For more information about the higan game library, see The Game Library below.
The console menu
Note: The console menu does not appear until a game is loaded. Also, it's not named "console", it's named for the kind of console the loaded game runs on. For example, when playing a Game Boy game, you will have a "Game Boy" menu.
The console menu contains commands relevant to the particular console being emulated. All consoles will have some of the following items, but few consoles have all of them.
- Controller Port 1
allows you
to connect different emulated controllers
to the first controller port,
if there is one.
- See the Configuration dialog for information about configuring which host controller inputs are used for the emulated controllers.
- This menu appears for the Famicom, even though the Famicom did not support alternate controllers, because the Famicom emulation core also emulates the NES, which did.
- Controller Port 2
allows you
to connect different emulated controllers
to the second controller port,
if there is one.
- See the Configuration dialog for information about configuring which host controller inputs are used for the emulated controllers.
- This menu appears for the Famicom, even though the Famicom did not support alternate controllers, because the Famicom emulation core also emulates the NES, which did.
- Expansion Port
allows you
to connect different emulated devices
to the console's expansion port,
if there is one.
- For the Super Famicom, the 21fx is a homebrew device that allows a program running on a PC to control a physical Super Famicom (or SNES). This option allows the same program to control the emulated SNES, for development or testing.
- Power Cycle restarts the loaded game as though the emulated console were switched off and on again.
- Unload stops the current game, as though the emulated console were switched off. You can load the same or a different game from the Library menu.
The Settings menu
The Settings menu allows you to configure things that aren't specific to any particular console.
- Video Scale determines the size and shape
of the emulated console's video output
- Small, Medium and Large control the size of the video output when higan is running in windowed (as opposed to full-screen) mode.
- Aspect Correction, when enabled, stretches the image to match the aspect ratio produced by the original console hardware, since modern computer monitors use pixels that are exactly as wide as they are tall, but many TV-based consoles expected pixels to be wider or narrower. Aspect correction applies to full-screen mode as well as windowed mode.
- Video Emulation applies various effects
to the emulated console's video output
to reproduce some behaviours
that aren't technically part of the console itself.
- "Blurring" simulates the limited horizontal resolution of standard-definition TVs by blurring together horizontally-adjacent pixels. Games like Jurassic Park for the Super Famicom depend on this to emulate a transparency effect. For hand-held consoles like the Game Boy Advance, this simulates the slow response time of the cheap LCD screens these consoles used by blurring each output frame with the previous one.
- "Colors" simulates the way a console's display device differs from modern computer monitor's colour reproduction. In particular, it simulates the slightly-different gamma correction used by the Super Famicom, the dim, washed out colours of the original Game Boy Advance, and the pea-green display of the original Game Boy.
- "Mask Overscan" hides parts of the video output that would have been hidden by the bezel around the edge of a standard-definition television screen. Some games (particularly on the Famicom) allowed random glitchy output to be displayed in this area. The amount masked can be configured in the configuration dialog.
- Video Shader controls
how the low-resolution video output of the emulated console
is scaled up to suit modern high-resolution displays.
The availability of items in this submenu depends on
which video driver higan is using,
so see Drivers for more information.
- "None" draws each output pixel according to the colour of the single nearest input pixel, sometimes called "nearest neighbour" scaling. This produces unnaturally crisp and blocky images.
- "Blur" draws each output pixel by averaging the colours of the four nearest input pixels, sometimes called "bilinear" scaling. This produces unnaturally blurry images.
- When using the OpenGL driver, an additional item appears in this menu for each installed Quark shader. See Installing custom shaders for details.
- Synchronize Audio TODO
- Mute Audio TODO
- Show Status Bar TODO
- Configuration ... TODO
The Tools menu
TODO
The Help menu
TODO
The status bar
TODO
- FPS
- "Paused" flag
- "No cartridge loaded"
The Configuration dialog
TODO
The Cheat Editor
TODO
The State Manager
TODO
The Manifest Viewer
TODO
The Game Library
higan maintains a "game library" containing all the games you've played.
- In Windows, the game library is the
Emulation
folder inside your profile folder.- to find your profile folder,
press
Win+R
to open the Run dialog, then type%USERPROFILE%
and press Enter.
- to find your profile folder,
press
- In Linux, the game library is the
Emulation
directory inside your home directory.
On all platforms, the game library location can be configured. Launch higan, then from the Settings menu, choose "Configuration ..." then click the Advanced tab then click the "Change ..." button. A directory-picker window will appear, allowing you to choose any existing directory to be your game library. Next launch icarus, then click the "Settings ..." button in the lower-right, then click the "Change ..." button. A directory-picker window will appear, allowing you to choose the same directory again.
Inside the library directory there is a subdirectory for each system, and inside each system directory are the game folders for each imported game. For more information about game folders, see Why game folders? below.
Why game folders?
A game is more than just the raw data originally encased in a game's ROM chip. If a game allows you to save your progress, that information needs to be stored somewhere. If you use an emulator's save-state feature, those save-states need to be stored somewhere. If you use Game Genie or Pro Action Replay codes, information about what codes exist, what codes are enabled, and what they do needs to be stored somewhere.
On the technical side, a physical game cartridge contains a circuit board that makes the game data available to the console, and different games used circuit boards that work differently. That circuit-layout information needs to be stored somewhere. Some games included custom processors to do calculations the base console could not do quickly enough (like the SuperFX chip used in StarFox for the Super Famicom) and information about extra chips needs to be stored somewhere. Some of those custom processors require extra data to work that's not part of the main game data (like the DSP chip used in Super Mario Kart for the Super Famicom) and that data needs to be stored somewhere too.
higan keeps all this game-related information together in a single place: a game folder in the higan library.
Importing regular games
Importing games with co-processor firmware
Importing BS-X games
Importing Sufami Turbo games
Importing Super Game Boy games
Importing MSU-1 games
Configuring higan
Drivers
Installing custom shaders
Controls
- mapping PC inputs to emulated controllers
- configuring which emulated controllers are connected to the emulated system
Notes on specific emulation cores
The WonderSwan rotates!
Shaders look weird on Super Famicom because of interlace/hi-res
GBA in-game saves are Difficult
PSG volume for the Mega Drive (see https://board.byuu.org/viewtopic.php?p=42158#p42158 for info)
Frequently Asked Questions
where is the vsync option?
exclusive full-screen?
phones and tablets