bsnes snes emulator

Higan - Multi System Emulator

higan emulator

higan is a multi-system emulator that began development on October 14th, 2004.

The purpose of higan is to serve as hardware documentation in source code form: it is meant to be as accurate and complete as possible, with code that is easy to read and understand.

higan currently emulates the following systems:

  • Famicom + Famicom Disk System
  • Super Famicom + Super Game Boy
  • Game Boy + Game Boy Color
  • Game Boy Advance + Game Boy Player
  • SG-1000 + SC-3000
  • Master System + Game Gear
  • Mega Drive + Mega CD
  • PC Engine + SuperGrafx
  • MSX + MSX2
  • ColecoVision
  • Neo Geo Pocket + Neo Geo Pocket Color
  • WonderSwan + WonderSwan Color + SwanCrystal + Pocket Challenge V2

Since higan v107, the then brand new tree-based gui has been rewritten and recreated to be able to express complex configurations for all 25 (and counting) systems that higan emulates.

Because of this paradigm it is highly recommended that you read this user guide before attempting to use higan.

User Guide | higan Setup

higan runs game paks instead of ROM image files. You will need to use the accompanying icarus tool in order to import ROM images into higan-compatible game paks.

Download higan and run icarus first. Do not run higan first. If you run higan first, then higan will not see the icarus-generated game paks, and will default to the wrong path. 

I’ll talk about how to handle this case anyway – later in this guide.

icarus higan
icarus on first run

You’re initially greeted with a list of all systems that higan currently supports. In this guide, we’re going to walk through setup with the SNES (Super Famicom), but the same steps work for all systems.

Choose the system from the left-hand system list, and you will see a blank window on the right. 

icarus does not replace your game ROMs: it creates game pak copies from them to the location specified by the blue text at the top right. This is a clickable link that will let you change the destination folder for importing, but for now you won’t want to change it.

Instead, hit import at the bottom right to import a new game ROM file. Utilize our SNES ROMs section for working ROMs on BSNES!

importing games in higan
icarus import window

Navigate to where your game ROMs are stored, and from here you can double-click to import games. You can multi-select files here to import many games at once. But in general, the idea is to import the games you want to play, rather than say an entire collection. You can always import more games later on. In any case, it’s your choice.

Hit open once your games are selected.

game imported within higan
icarus import log

Once you’ve imported the games, a completion log will be displayed. If the ROM image wasn’t recognized as valid, or if firmware was missing, you will be able to see those errors here. Firmware is a bit beyond the scope of this user guide for now, but in general it will tell you what files you need. Obtain those files and place them next to the game ROMs, and then try importing the games again.

Now hit close.

higan emulator
icarus after importing games

Now you’re brought back to the main window where you can see all of the games in your library. From here, you can import games for other systems, or stop.

Note that if you are importing Sega CD images, they need to be in BIN/CUE format presently. Also note that Sega CD emulation is very young.

By running icarus first, games will be imported to the Emulation folder inside your home directory, which is where higan will try to look for them.

We can now launch higan:

higan first launch
higan on first run

We are initially greeted with a rather empty window. The top-half is the video output region, which contains the menubar at the top and gray statusbar at the bottom. The bottom-half is the system panels region.

Let’s start first by configuring drivers and hotkeys:

higan settings dropdown

By opening the drop-down at the top-left of the system panels, you can change to the settings panels.

First, there’s a slight issue on Windows with mouse capture using the new multi-monitor support, so to fix that, choose Video on the left and then check the Exclusive box, like so:

higan emu
higan video settings

There’s another slight glitch with the GUI on Windows where sometimes the GUI widgets won’t be placed correctly and will overlap each other. Simply change the item selected on the left away and back (eg Video -> Audio -> Video) to correct this.

You’ll likely want to configure audio as well:

higan audio settings

And again because this is a beta, there are no hotkey assignments set out of the box, so do that now:

higan hotkey settings

While setting up your hotkeys, note that no hotkeys will fire while the hotkeys panel is open. This is so that you can e.g map the fullscreen toggle without actually toggling fullscreen.

There’s another bug where hotkeys will still not fire if you hide the system panels from the menu, so once hotkeys are mapped, be sure to choose a different setting option on the left or switch back to Systems in the top-left dropdown menu.

Now that the higan base setup is complete, we can start creating systems and then playing games.

From the top-left of the higan main window, choose System -> Create to begin creating a new system. This will switch your panel dropdown to Systems and present you with a list of supported systems on the right:

higan system creation list

Choose the system you want, and you will see a name box appear at the bottom right. You can name the system anything you want. The reason for the naming here is because you can have multiple instances of the same system. So it’s easy to have different entries for NTSC vs PAL machines, or for a Famicom with the Famicom Disk System attached to it, or for a Super Famicom with a Super Game Boy attached to it.

These system profiles remember all of their settings, so however you configure them and whatever cartridges and controllers you connect, they’ll be remembered the next time you run higan (barring any bugs.)

Now hit create, and the system will appear on the left:

higan system created

Double-click on a system on the left to launch it or click on Launch. You will see the menubar change to indicate the currently active system. You can always select the system name from the menubar and choose Unload to go back to the system selection and creation screen you were at previously.

Now that we’re in an active system profile, connect a cartridge that was previously imported by choosing the Cartridge Port option from the list at the bottom left:

higan cartridge connection screen

Double-click a game from this list to connect the cartridge to the system. You will see the list change to show the connected cart afterward. You can go back to Cartridge Port again to change the cartridge, or to disconnect it.

Now remember before how I said to run icarus first? The reason is because if you don’t, this will happen:

Running higan before icarus

What you’ll notice here is the path is set to “./Systems/Famicom/Famicom Cartridge/” instead of the desired “~/Emulation/Famicom” where icarus will import games to.

This is because higan on first launch of a new system tries to see if icarus already imported games to the common game pak location of “~/Emulation” (eg the Emulation folder in your home directory.) If it can’t find it, it will default to the location where settings are stored for the system profile you just created and named.

icarus doesn’t know about individual higan system profiles, since it’s a separate tool that runs on its own.

higan doesn’t just always default to the Emulation home folders because the new design does not make a distinction between cartridges, CD-ROMs, floppy disks, controllers, keyboards, and any other peripherals: they’re all folders that hold their memory and state inside of them. It wouldn’t make sense for an individual system profile to store gamepad configuration data inside the shared Emulation folder for game paks, so it falls back on the system configuration folder when you run higan before icarus.

If you reach this point anyway, click on the blue text at the top-right to open a path change dialog window, and you can navigate to select the appropriate Emulation folder instead for your current system.

Now let’s create a gamepad by going to Controller Port 1 and selecting Gamepad on the right:

higan gamepad connection panel

(note how the path this time defaults to being inside the system profile you created, as discussed above.)

Double-click on the entry and you’ll get a window to assign a name for the gamepad:

higan gamepad naming window

The default name will be the name of the device, in this case Gamepad, but you’ll need to have unique names for each controller port, so I recommend changing the name to Gamepad #1 here and then clicking on Create.

The idea here is we are treating gamepads like physical objects: you can make as many gamepads as you want, and you can configure their mappings however you like. Let’s say you then add a Super Multitap 4-player adapter, you can connect your controller right to the multitap. Or your Twin Tap. Or another Multitap, which you can do recursively as many times as you like (not that you should, but you could.)

A Super Multitap with four Twin Taps connected to it may be an odd edge case for one specific game, but that’s the kind of thing I’m trying to support with higan, and it’s something that’s previously not been possible with emulators that hard-code Super Multitap emulation as four gamepads.

Back to the setup: choose your new gamepad that has now appeared in the system tree on the left, and assign mappings to it:

higan gamepad assignment

It’s easiest to hit Assign All at the bottom right and map all inputs at once, but you can also double-click individual entries to map them one at a time if you prefer.

Finally, you might want to resize the window or change some other settings, so go to the menubar and choose Settings:

higan settings menu

At this point, the setup is finally completed and we can start running games. Choose Super Famicom -> Power to begin playing the connected game pak:

higan system menu

And with that, we finally have a game running and playable:

If you’d like to hide the panels while playing, you can do so from the Settings menu by unchecking Show System Panels, or by using the hotkey mapping to toggle them on and off.

higan emulator
higan running without panels

Note that you will need to turn the panels back again in order to change games, systems, settings, etc. But while playing you can hide it at least.

As a last point, the system trees tend to be rather complete, offering rarely used functionality such as setting the CPU revision. My initial design idea was to have the Advanced Mode checkbox in the Settings menu toggle the less commonly used options, but in practice this didn’t work out well, as sometimes common nodes would appear as leaves inside parent branches that were not common.

So instead, I’m moving toward having filters in the panel dropdown at the top-left. Choose this and you can select Ports to see only peripheral slots for things such as cartridges and controllers:

Higan port filter

There’s also an Events filter which is used for creating debugging trace logs of CPU instructions and interrupts (and in the future, even more events.) But that’s beyond the scope of this user guide.

Enjoy using higan and all of its emulated systems! Users only wanting to use a SNES emulator should stick with BSNES.