More actions
(Created page with "{{Infobox Switch Homebrews |title=UniPCemu |image=unipcemuswitch.png |description=Ever wanted to play your old PC games on your device(mobile and modern PC)? Now you can, with more accuracy than ever! |author=superfury |lastupdated=2021/09/20 |type=Computer |version=2021 |license=Mixed |download=https://dlhb.gamebrew.org/switchhomebrews/unipcemuswitch.7z |website=https://superfury.itch.io/unipcemu |source= |donation= }} {{#seo: |title=Switch Homebrew Emulators (Computer)...") |
No edit summary |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
{{Infobox Switch Homebrews | {{Infobox Switch Homebrews | ||
|title=UniPCemu | |title=UniPCemu | ||
|image= | |image=unipcemunx.png | ||
|description= | |description=The UniPCemu emulator (previously called x86EMU). | ||
|author=superfury | |author=superfury | ||
|lastupdated= | |lastupdated=2023/04/11 | ||
|type=Computer | |type=Computer | ||
|version= | |version=2023 | ||
|license=Mixed | |license=Mixed | ||
|download=https://dlhb.gamebrew.org/switchhomebrews/ | |download=https://dlhb.gamebrew.org/switchhomebrews/unipcemunx.7z | ||
|website=https://superfury.itch.io/unipcemu | |website=https://superfury.itch.io/unipcemu | ||
|source= | |source=https://bitbucket.org/superfury/unipcemu/ | ||
|donation= | |donation= | ||
}} | }} | ||
UniPCemu, or Universal PC emulator (formerly known as x86EMU, not to be confused with the x86emu CPU emulator), is a 8086(IBM PC) up to Pentium II (Compaq Deskpro 386, Compaq Deskpro 386 with PS/2 mouse (adds PS/2 mouse to the Compaq Deskpro 386 chipset, optional BIOS ROM replacement (loading it instead, alternatively a i430fx Pentium or i440fx/i450gx Pentium Pro/Pentium II chipset with PS/2 mouse. A 85c496/7 chipset is also supported.) and seperate CMOS settings like the other architectures) emulator (with various, configurable hardware), with up to 80386 timings (80486SX and Pentium using 80386 timings or 1 cycle for newer/unknown timings/instructions, both having no floating point unit)). | |||
UniPCemu supports all generations of basic CPUs, including the 8086/8088, 80186/80188, 80286, 80386sx/dx, 80486, Pentium, Pentium Pro, and Pentium II, while excluding FPU emulation (except for software FPU emulation using drivers). | |||
It can run many IBM PC XT games, and also various 286(*) up to Pentium II games. Support for ATAPI CD-ROM (using VIDE-CDD.SYS, OAKCDROM.SYS or compatible ATAPI drivers) also works. Many graphics cards and sound cards can be used (MIDI using a Soundfont renderer inside UniPCemu (recordable by UniPCemu's sound recording functionality) or passthrough(passthrough on Windows only, which is not recordable by the emulator's own recording functionality)), from PC speaker up to Sound Blaster 2.0 and from IBM Monochrome Display Adapter up to ET4000/W32 SVGA(up to 16M colors (in True Color mode) using it's SC15025 DAC). | |||
EMS is available using the Lo-tech 2MB EMS board on the XT and various EMM emulation software(e.g. JEMM386, EMM386) on IBM AT and up. | |||
Every pluggable hardware component (except the CPU, base motherboard and video card) can be turned on and off when the emulator isn't running from the settings menu or configuration file (SETTINGS.INI). | |||
Input, which is PSP style with Cross/Circle swapped for A/B compatibility on the Switch, can be customized in Gaming mode with up to 5 different mappings that can be chosen when activating or re-activating Gaming mode. Other input options can be using the OSK with the touch screen or using the default PSP input style, which is a Danzeff-inspired compressed layout showing the 4 keys to press with the current analog stick direction when in Keyboard mode. | |||
The Gaming mode itself is highly customizable, allowing for any PSP-mapped buttons (except minus/Select) to be mapped to different keyboard keys or mouse buttons. Each mapping can also map to either the emulated joystick (if enabled for said mapping) or normal mouse/keyboard inputs. When not using the joystick mode in Gaming mode, the analog stick can be optionally mapped to 4 extra keys instead of controlling mouse movement (if any is mapped at said settings). Exact specifics on all input-related settings and handling it can be found on the manual. | |||
UniPCemu was initially designed for PSP gaming that is now available on Android, Windows, [[UniPCemu PSP|PSP]], [[UniPCemu Vita|PS Vita]] and Nintendo Switch. | |||
(*)Note on emulated systems: Due to cycle-accuracy being too inaccurate on the 80286 AT system, currently the BIOS for the default 6MHz 80286 (2nd revision motherboard) won't allow the BIOS to continue due to the clock not being accurate enough. The Compaq Deskpro 386 architecture can be used to run the games on a 80386 or newer instead. Or adjusting the speed of the emulated system to a compatible speed(although not cycle-accurate for games requiring it). | |||
==Installation== | |||
A basic getting started tutorial can be found at the [https://bitbucket.org/superfury/unipcemu/wiki wiki (manual)]. There's also a getting started video which can be found below. | |||
For the Switch version, copy the NRO file to sdmc:/switch/. After that, follow the getting started tutorial to get it up and running. | |||
A basic XT BIOS that can be used is the [http://www.phatcode.net/downloads.php?id=101 Generic Super PC/Turbo XT BIOS]. Copyrighted ROMs for AT and up need to be supplied by the user itself (80386 and up might run the SeaBIOS and it's VGA ROMs. CGA graphics and below usually don't require a separate ROM (with IBM BIOSes and the Generic Super PC/Turbo XT BIOS) and run out-of-the-box. | |||
Empty, unbootable(except for floppy disks, which contain a simple message after which it reboots when pressing a key) disk images can be created from the Settings menu. Other disk images will need to be supplied by the user. | |||
Configuration can be done using either the Settings menu or the configuration textfile(.ini textfile). The application folder on Android can be redirected to another path using a simple redirect.txt containing the path to use(one-line file contents is the path to redirect the files directory to), as long as it's on the same (android internal) memory card. | |||
==Screenshots== | ==Screenshots== | ||
https://dlhb.gamebrew.org/switchhomebrews/ | https://dlhb.gamebrew.org/switchhomebrews/unipcemunx2.png | ||
https://dlhb.gamebrew.org/switchhomebrews/ | |||
https://dlhb.gamebrew.org/switchhomebrews/ | https://dlhb.gamebrew.org/switchhomebrews/unipcemunx3.png | ||
https:// | |||
https://dlhb.gamebrew.org/switchhomebrews/unipcemunx4.png | |||
https:// | ==Media== | ||
'''UniPCemu getting started tutorial''' ([https://www.youtube.com/watch?v=Y9oAZvDqJbg superfury]) <br> | |||
<youtube>Y9oAZvDqJbg</youtube> | |||
'''UniPCemu build 2018/09/08 14:39 running Pinball Illusions''' ([https://www.youtube.com/watch?v=e_uzF5b8_UI superfury]) <br> | |||
<youtube>e_uzF5b8_UI</youtube> | |||
==Changelog== | ==Changelog== | ||
''' | '''2023/04/11''' | ||
* | |||
UniPCemu: | |||
*Fixed second COM port detection. | |||
*Implemented a special COM0COM detection override flag. | |||
*Added support for overriding the used COM port to force COM0COM driver support on it. | |||
*Implemented a ::COM0COM:: suffix on the direct serial ports to enforce COM0COM driver to be detected if it isn't. | |||
*Improved packets to the subnet zero broadcast to be counted accordingly. | |||
*Added support for filtering multicast addresses on the client. | |||
*Filter multicast addresses on the packet server host. | |||
*Implemented some basic multicast local routing. | |||
*Just broadcast all network multicast packets. | |||
*Fixed Inboard PS/2 data port conflict on AT machines. | |||
*Implemented Inboard reserved RAM. | |||
*Implemented Inboard reserved RAM/ROM memory mapping and memory area. | |||
*Fixed Inboard reserved RAM area mapping. | |||
*Implemented support for unmapping video and BIOS ROMs on the Inboard chipset. | |||
*Improved Inboard speed setting to be more as documented. | |||
*Improved Inboard AT waitstates. | |||
*Fixed memory dumping. | |||
*Improved Inboard RAM/ROM mapping according to observed behaviour. | |||
*Added memory size limits depending on the Inboard XT/AT model emulated to reflect known configurations better. | |||
*Improved Inboard XT ROM shadowing. | |||
*Fixed the Inboard to properly update the RAM layout for remapping RAM and configuration values when changed. | |||
*Inboard memory remapping isn't always in a memory hole area. | |||
*Fixed mapping of non-reserved memory on the Inboard. | |||
*Always map the RAM acting as ROM on Inboard high as RAM. | |||
*Fixed Inboard reserved memory to not count as a memory hole. | |||
*Improved BIOS ROM shadowing to have only a bit for main motherboard BIOS ROM shadowing. | |||
*Fixed Inboard memory cache/speed configuration register to be registering bit 0 correctly. | |||
*Implemented Inboard 386/AT speed register affecting speed properly as observed behaviour. | |||
*Improved default Inboard 386/AT speed. | |||
*Fixed internal video ROM to register correctly. | |||
*Fixed internal video ROM to start out unhooked. | |||
*Internal video ROM now properly creates INT 10h handler code itself. | |||
*Lock internal video handlers to always be properly available. | |||
*Fixed Inboard 386/AT default speed code. | |||
*Fixed 80(1)86 linear/physical memory access to not wrap to 16-bit physical memory addresses. | |||
*Fixed emulated interrupts direct memory addressing. | |||
*Fixed 80(1)86 addressing memory directly without segment descriptors. | |||
*Restored internal BIOS real memory access using segmentation. | |||
*Implemented proper segmented addresses on CPU memory address translation. | |||
*Fixed memory addressing without segment descriptor. | |||
*Fixed generic segment addressing without segment descriptor. | |||
*Apply proper mandatory CPU depending on the motherboard emulated. | |||
*Extended the BIU to allow requesting 64-bits data as well. | |||
*Extended the BIU addresses to 64-bits.Extended more CPU functions to support 64-bit address width. | |||
*Added functions to request 64-bit memory reads/writes to the CPU execution module. | |||
*Extended the BIU result buffer to include more information about the request using the same basic structure as the request to the BIU. | |||
*Made PAE CR3-based loads properly lock the bus like other paging operations. | |||
*Fixed MOV DRn/TRn to work properly again. | |||
*i440fx requires a Pentium Pro processor to run. | |||
*Modified TSS task switches to support CR3 reloading performing checks and PDPT loads. | |||
*Fixed #TS fault on CR3 loads to properly fault when task switching. | |||
*Fixed VGA from never overflowing the GPU render buffer. | |||
*Cleaned up BIU code. | |||
*Fixed Inboard missing headers. | |||
*Fixed compiler warnings about unused variables without serial support added to the app. | |||
*Made most memory addresses cachable, for any size. | |||
*APIC and VGA memory mapped data is uncachable. | |||
*Optimized RAM layout updates to perform less work. | |||
*Optimized reading from RAM and ROM. | |||
*Fixed EMS memory writes to properly also invalidate other memory windows containing the same written data. | |||
*Use the improved common emulator framework data file paths and definitions. | |||
*Improved Android preprocessor defines. | |||
*Fixed default input settings to be loaded correctly. | |||
*Merged Paging TLB entries and their pointers. | |||
*Optimized moving allocated TLB entries to the MRU. | |||
*Made used TLB checks faster. | |||
*Optimized Paging TLB entries to take less memory. | |||
*Optimized Paging TLB entries to be using caches to run faster. | |||
*Cleaned up unused header. | |||
*Cleaned up COM0COM override when not supported. | |||
*Fixed CHS file size read from the file to be supporting all lengths properly. | |||
*Fixed joystick setting reading typecast. | |||
*Updated the common emulator framework to the latest commit. | |||
*Updated SDL2 to the latest available version on all platforms. | |||
Common emulator framework: | |||
*Improved mouse and gaming mode face buttons to be all available at the same time, instead of just one depending on a order. | |||
*Modified the keyboard mode to be able to handle all face buttons at the same time, except when performing single-key inputs. | |||
*Fixed display of inputted pressed buttons on the danzeff-style keyboard. | |||
*Improved caps lock and shift status registration to no longer spam press/release actions when not changing. | |||
*Moved many common emulator path support to the common emulator framework. | |||
*Implemented improved Android path detection using a directory on the root of the found storage. | |||
*Fixed some path module compiler warnings. | |||
*Fixed Android root directory detection. | |||
*Made Android become a proper common define like all other platforms. | |||
*Fixed Android root directory redirect file path. | |||
*Improved file deleting using wildcards to no longer affect the source filename input. | |||
*Prevent double redirection using redirect.txt being nested. | |||
*Added support for the redirect file to support relative paths as well. | |||
*Fixed default settings to be loaded correctly. | |||
*Improved support for Windows abosolute paths. | |||
*Protected redirect.txt path overflow to be counted as invalid. | |||
*Fixed root directory file path. | |||
*Properly convert the relative path into an absolute path in redirect.txt | |||
*Improved redirect.txt invalid path ending. | |||
*Improved reditect.txt unwritable path abort. | |||
*Fixed Windows absolute drive path detection. | |||
*Fixed Windows absolute drive path detection. | |||
*Improved invalid path detection. | |||
*Improved PSP path type detection for internal storage devices. | |||
*Improved PSP/Windows invalid path detection. | |||
*Fixed Windows only drive path detection. | |||
*Automatically try to create a directory structure when testing a path for writability. | |||
*Only create the app root directory when all redirects are finished. | |||
*Fixed paths Switch missing header. | |||
*Fixed some string size compiler warnings. | |||
*Fixed redirect size detected from the read file. | |||
*Fixed SDL2 runtime version check compiler warning. | |||
[https://superfury.itch.io/unipcemu/devlog Release notes.] | |||
== External links == | == External links == | ||
* | * itch.io - https://superfury.itch.io/unipcemu | ||
* | * Bitbucket - https://bitbucket.org/superfury/unipcemu | ||
* | * Documentation - https://bitbucket.org/superfury/unipcemu/wiki/ | ||
* GBAtemp - https://gbatemp.net/threads/release-unipcemu.600277/ |
Latest revision as of 14:05, 26 Mayıs 2023
UniPCemu | |
---|---|
General | |
Author | superfury |
Type | Computer |
Version | 2023 |
License | Mixed |
Last Updated | 2023/04/11 |
Links | |
Download | |
Website | |
Source | |
UniPCemu, or Universal PC emulator (formerly known as x86EMU, not to be confused with the x86emu CPU emulator), is a 8086(IBM PC) up to Pentium II (Compaq Deskpro 386, Compaq Deskpro 386 with PS/2 mouse (adds PS/2 mouse to the Compaq Deskpro 386 chipset, optional BIOS ROM replacement (loading it instead, alternatively a i430fx Pentium or i440fx/i450gx Pentium Pro/Pentium II chipset with PS/2 mouse. A 85c496/7 chipset is also supported.) and seperate CMOS settings like the other architectures) emulator (with various, configurable hardware), with up to 80386 timings (80486SX and Pentium using 80386 timings or 1 cycle for newer/unknown timings/instructions, both having no floating point unit)).
UniPCemu supports all generations of basic CPUs, including the 8086/8088, 80186/80188, 80286, 80386sx/dx, 80486, Pentium, Pentium Pro, and Pentium II, while excluding FPU emulation (except for software FPU emulation using drivers).
It can run many IBM PC XT games, and also various 286(*) up to Pentium II games. Support for ATAPI CD-ROM (using VIDE-CDD.SYS, OAKCDROM.SYS or compatible ATAPI drivers) also works. Many graphics cards and sound cards can be used (MIDI using a Soundfont renderer inside UniPCemu (recordable by UniPCemu's sound recording functionality) or passthrough(passthrough on Windows only, which is not recordable by the emulator's own recording functionality)), from PC speaker up to Sound Blaster 2.0 and from IBM Monochrome Display Adapter up to ET4000/W32 SVGA(up to 16M colors (in True Color mode) using it's SC15025 DAC).
EMS is available using the Lo-tech 2MB EMS board on the XT and various EMM emulation software(e.g. JEMM386, EMM386) on IBM AT and up.
Every pluggable hardware component (except the CPU, base motherboard and video card) can be turned on and off when the emulator isn't running from the settings menu or configuration file (SETTINGS.INI).
Input, which is PSP style with Cross/Circle swapped for A/B compatibility on the Switch, can be customized in Gaming mode with up to 5 different mappings that can be chosen when activating or re-activating Gaming mode. Other input options can be using the OSK with the touch screen or using the default PSP input style, which is a Danzeff-inspired compressed layout showing the 4 keys to press with the current analog stick direction when in Keyboard mode.
The Gaming mode itself is highly customizable, allowing for any PSP-mapped buttons (except minus/Select) to be mapped to different keyboard keys or mouse buttons. Each mapping can also map to either the emulated joystick (if enabled for said mapping) or normal mouse/keyboard inputs. When not using the joystick mode in Gaming mode, the analog stick can be optionally mapped to 4 extra keys instead of controlling mouse movement (if any is mapped at said settings). Exact specifics on all input-related settings and handling it can be found on the manual.
UniPCemu was initially designed for PSP gaming that is now available on Android, Windows, PSP, PS Vita and Nintendo Switch.
(*)Note on emulated systems: Due to cycle-accuracy being too inaccurate on the 80286 AT system, currently the BIOS for the default 6MHz 80286 (2nd revision motherboard) won't allow the BIOS to continue due to the clock not being accurate enough. The Compaq Deskpro 386 architecture can be used to run the games on a 80386 or newer instead. Or adjusting the speed of the emulated system to a compatible speed(although not cycle-accurate for games requiring it).
Installation
A basic getting started tutorial can be found at the wiki (manual). There's also a getting started video which can be found below.
For the Switch version, copy the NRO file to sdmc:/switch/. After that, follow the getting started tutorial to get it up and running.
A basic XT BIOS that can be used is the Generic Super PC/Turbo XT BIOS. Copyrighted ROMs for AT and up need to be supplied by the user itself (80386 and up might run the SeaBIOS and it's VGA ROMs. CGA graphics and below usually don't require a separate ROM (with IBM BIOSes and the Generic Super PC/Turbo XT BIOS) and run out-of-the-box.
Empty, unbootable(except for floppy disks, which contain a simple message after which it reboots when pressing a key) disk images can be created from the Settings menu. Other disk images will need to be supplied by the user.
Configuration can be done using either the Settings menu or the configuration textfile(.ini textfile). The application folder on Android can be redirected to another path using a simple redirect.txt containing the path to use(one-line file contents is the path to redirect the files directory to), as long as it's on the same (android internal) memory card.
Screenshots
Media
UniPCemu getting started tutorial (superfury)
UniPCemu build 2018/09/08 14:39 running Pinball Illusions (superfury)
Changelog
2023/04/11
UniPCemu:
- Fixed second COM port detection.
- Implemented a special COM0COM detection override flag.
- Added support for overriding the used COM port to force COM0COM driver support on it.
- Implemented a ::COM0COM:: suffix on the direct serial ports to enforce COM0COM driver to be detected if it isn't.
- Improved packets to the subnet zero broadcast to be counted accordingly.
- Added support for filtering multicast addresses on the client.
- Filter multicast addresses on the packet server host.
- Implemented some basic multicast local routing.
- Just broadcast all network multicast packets.
- Fixed Inboard PS/2 data port conflict on AT machines.
- Implemented Inboard reserved RAM.
- Implemented Inboard reserved RAM/ROM memory mapping and memory area.
- Fixed Inboard reserved RAM area mapping.
- Implemented support for unmapping video and BIOS ROMs on the Inboard chipset.
- Improved Inboard speed setting to be more as documented.
- Improved Inboard AT waitstates.
- Fixed memory dumping.
- Improved Inboard RAM/ROM mapping according to observed behaviour.
- Added memory size limits depending on the Inboard XT/AT model emulated to reflect known configurations better.
- Improved Inboard XT ROM shadowing.
- Fixed the Inboard to properly update the RAM layout for remapping RAM and configuration values when changed.
- Inboard memory remapping isn't always in a memory hole area.
- Fixed mapping of non-reserved memory on the Inboard.
- Always map the RAM acting as ROM on Inboard high as RAM.
- Fixed Inboard reserved memory to not count as a memory hole.
- Improved BIOS ROM shadowing to have only a bit for main motherboard BIOS ROM shadowing.
- Fixed Inboard memory cache/speed configuration register to be registering bit 0 correctly.
- Implemented Inboard 386/AT speed register affecting speed properly as observed behaviour.
- Improved default Inboard 386/AT speed.
- Fixed internal video ROM to register correctly.
- Fixed internal video ROM to start out unhooked.
- Internal video ROM now properly creates INT 10h handler code itself.
- Lock internal video handlers to always be properly available.
- Fixed Inboard 386/AT default speed code.
- Fixed 80(1)86 linear/physical memory access to not wrap to 16-bit physical memory addresses.
- Fixed emulated interrupts direct memory addressing.
- Fixed 80(1)86 addressing memory directly without segment descriptors.
- Restored internal BIOS real memory access using segmentation.
- Implemented proper segmented addresses on CPU memory address translation.
- Fixed memory addressing without segment descriptor.
- Fixed generic segment addressing without segment descriptor.
- Apply proper mandatory CPU depending on the motherboard emulated.
- Extended the BIU to allow requesting 64-bits data as well.
- Extended the BIU addresses to 64-bits.Extended more CPU functions to support 64-bit address width.
- Added functions to request 64-bit memory reads/writes to the CPU execution module.
- Extended the BIU result buffer to include more information about the request using the same basic structure as the request to the BIU.
- Made PAE CR3-based loads properly lock the bus like other paging operations.
- Fixed MOV DRn/TRn to work properly again.
- i440fx requires a Pentium Pro processor to run.
- Modified TSS task switches to support CR3 reloading performing checks and PDPT loads.
- Fixed #TS fault on CR3 loads to properly fault when task switching.
- Fixed VGA from never overflowing the GPU render buffer.
- Cleaned up BIU code.
- Fixed Inboard missing headers.
- Fixed compiler warnings about unused variables without serial support added to the app.
- Made most memory addresses cachable, for any size.
- APIC and VGA memory mapped data is uncachable.
- Optimized RAM layout updates to perform less work.
- Optimized reading from RAM and ROM.
- Fixed EMS memory writes to properly also invalidate other memory windows containing the same written data.
- Use the improved common emulator framework data file paths and definitions.
- Improved Android preprocessor defines.
- Fixed default input settings to be loaded correctly.
- Merged Paging TLB entries and their pointers.
- Optimized moving allocated TLB entries to the MRU.
- Made used TLB checks faster.
- Optimized Paging TLB entries to take less memory.
- Optimized Paging TLB entries to be using caches to run faster.
- Cleaned up unused header.
- Cleaned up COM0COM override when not supported.
- Fixed CHS file size read from the file to be supporting all lengths properly.
- Fixed joystick setting reading typecast.
- Updated the common emulator framework to the latest commit.
- Updated SDL2 to the latest available version on all platforms.
Common emulator framework:
- Improved mouse and gaming mode face buttons to be all available at the same time, instead of just one depending on a order.
- Modified the keyboard mode to be able to handle all face buttons at the same time, except when performing single-key inputs.
- Fixed display of inputted pressed buttons on the danzeff-style keyboard.
- Improved caps lock and shift status registration to no longer spam press/release actions when not changing.
- Moved many common emulator path support to the common emulator framework.
- Implemented improved Android path detection using a directory on the root of the found storage.
- Fixed some path module compiler warnings.
- Fixed Android root directory detection.
- Made Android become a proper common define like all other platforms.
- Fixed Android root directory redirect file path.
- Improved file deleting using wildcards to no longer affect the source filename input.
- Prevent double redirection using redirect.txt being nested.
- Added support for the redirect file to support relative paths as well.
- Fixed default settings to be loaded correctly.
- Improved support for Windows abosolute paths.
- Protected redirect.txt path overflow to be counted as invalid.
- Fixed root directory file path.
- Properly convert the relative path into an absolute path in redirect.txt
- Improved redirect.txt invalid path ending.
- Improved reditect.txt unwritable path abort.
- Fixed Windows absolute drive path detection.
- Fixed Windows absolute drive path detection.
- Improved invalid path detection.
- Improved PSP path type detection for internal storage devices.
- Improved PSP/Windows invalid path detection.
- Fixed Windows only drive path detection.
- Automatically try to create a directory structure when testing a path for writability.
- Only create the app root directory when all redirects are finished.
- Fixed paths Switch missing header.
- Fixed some string size compiler warnings.
- Fixed redirect size detected from the read file.
- Fixed SDL2 runtime version check compiler warning.
External links
- itch.io - https://superfury.itch.io/unipcemu
- Bitbucket - https://bitbucket.org/superfury/unipcemu
- Documentation - https://bitbucket.org/superfury/unipcemu/wiki/
- GBAtemp - https://gbatemp.net/threads/release-unipcemu.600277/