de0259c7a aarch64: set bit 14 for encoding [S|U]MULH (#370) fdb8e8ce2 Fix build warnings by avoid function pointer to object pointer casts (#368) 67893de6c alpha: Add 64-bit JIT backend (#364) f8d585b76 ppc: add SLJIT_BREAKPOINT (#367) 8c4127005 ubsan: avoid UB with << of a signed integer (#365) 3907e6900 Add zext.w support for riscv (#363) d8c86ea66 regexJIT: guard dfa_transitions allocation against size overflow (#361) d74aa8871 ppc64: Cast mask to sljit_sw in TEST_UI_IMM macro (#360) d9902b1ba config: prevent aarch64_be from being autodetected (#345) 35ffee1a8 remove smartquotes in C comment (#353) d034fb107 x86_64: fix near jump check (#352) acf9f8f85 Move modular header includes outside `extern "C"` scope (#351) 68f01a538 Improve overflow check on RISCV (#350) 8d40e0306 riscv: make sure platform identification for RISCV is succint (#348) 8d0d05c58 Improve carry flag handling (#347) a8d667f81 Improve signed/unsigned comparison of integers larger than a single register (#346) c2598a9c2 netbsd: allow mprotect exception for PAX in wxalloc (#344) 3150656bb x86: avoid SIGILL in test25 for older CPUs (#343) 45f910b78 Improve sljit_emit_op2_shift on x86 (#342) 72f95ea56 Small emit_select improvements (#341) 31d2e5308 loongarch: Implement compare select (min/max) operation (#340) 15c64bb72 Implement compare select (min/max) operation on s390x (#339) 39754d085 Implement compare select (min/max) operation (#338) b7442be1c loongarch: Implement sljit_emit_op2_shift (#337) f621129c0 \Implement sljit_emit_op2_shift on s390x (#336) 6612fe51e Attempt some further improvements to -Wimplicit-fallthrough support (#331) f9fd801f4 Implement sljit_emit_op2_shift (#335) 88d0ce0c0 Ensure that some log messages are written to the verbose stream (#333) c57378efb Correct doc string for sljit_emit_jump (#332) 1bec7a611 config: add SLJIT_FALLTHROUGH to exempt -Wimplicit-fallthrough or C5262 (#330) e281e199c Add more SLJIT_TMP_OPT_REG tests (#328) a9e5ec6ae Introducing SLJIT_TMP_OPT_REG (#327) d1fd994c1 Improve tmp register support (#326) 1fade852b aarch64: avoid -Wunused_parameter in older CPUs (#324) 1232958de Improve the description of sljit_emit_[f]select instructions 7779da89d Add test for dynamic code generation in buffers (#318) 8766c3abf Fix spelling in C code comments (#317) 2e7b6f2a7 Fix Docusaurus URL configuration (#316) 5e42fc93b Rework website (#310) 8b3029792 loongarch: improve immediate generator (#315) 1e66c9054 loongarch: Update toolchain and minor code style change (#314) f9beb306b Fix sljit_emit_icall on Linux x86_64 (#313) e93aa7c62 Fix test_buffer1 (#312) 98802d939 Improve jump/op_addr code generation on s390x (#309) f0a7de957 Implement add address operation (#308) 4ec49e599 Improve CI (#307) 2dd451147 Fix test fails on loongarch (#306) 4c9e95004 Fix test fails on s390x (#305) 5aa4885ee Add more buffer tests (#304) d7bf1f5b2 Implement read-only buffer allocation (#303) 994c013d6 Implement aligned labels on s390x 06e5b0ed5 Implement aligned labels (#302) abbb179b1 Consolidate docs (#301) a442875df Improve rewritable consts on s390x (#300) f57890048 Improve rewritable consts (#299) 959c13542 loongarch: Fix sljit_emit_single and sljit_emit_op2cmpz (#298) 370630ec0 Implement emit_op2cmp operation (#296) 8bacc9aee Rename doc to docs (#297) a96da7a86 Improve immediate generation on RISCV (#295) 2984ac7b1 Implement 16 bit branches for RISCV (#294) d3cec21d9 Implement compressed arithmetic instructions for RISCV (#293) 85782cfb7 Implement load/store compressed instructions for RISCV (#291) 500037920 Implement several compressed instructions for RISCV (#290) a969602da Better detection of available features on RISCV (#289) 2cdf4edee Change instruction size unit to 16 bit on RISCV (#288) 8481dde36 Enable -Wshadow warning, and rename shadowed variables (#286) 415ddeaea Fix sljit_emit_simd_sign RISCV (#284) eb8ef1e81 Fix sljit_get_local_base (#282) e51eabbfb Implement proper argument checks for float/simd registers (#280) f7037aa15 Improve vector reg support on s390x (#279) dcd3b10cd Improve vector reg support (#278) a5ecc9c2e Comment else-s and endif-s in macros (#277) 2cf8a2495 Checks for separated vector registers (#275) 9dc3a4cf2 loongarch: Add SLJIT_UPPER_BITS_SIGN_EXTENDED (#276) c0fd3d1ae Rename zeroed to zero extended 4b419b4bf Provide information about 32 bit operations on s390x 504672a9f Provide information about 32 bit operations register usage 20edfb055 CI: Update uraimo/run-on-arch-action to 2.8.1 (#274) 446e5c71f loongarch: Optimize jump maximum offset prediction & update action compiler (#273) git-subtree-dir: thirdparty/sljit git-subtree-split: de0259c7aaf36aa40cba8014f3fad3edde9307f9
4.1 KiB
ares is a multi-system emulator that began development on October 14th, 2004. It is a descendant of higan and bsnes, and focuses on accuracy and preservation.
It's worth noting that ares takes some uncommon design approaches that essentially trade speed for code clarity. We avoid state machines and bitmasks (when possible). Most cores end up being half the amount of code, but slower. The code is clearer and less spaghettified, especially for systems with lots of processors. C bitfields being non-portable incurs a speedhit. Windows also has a speedhit over Linux due to its ABI needing more instructions to switch contexts.
Official Releases
Official releases are available from the ares website.
Nightly Builds
Automated, untested builds of ares are available for Windows and macOS as a pre-release. Only the latest nightly build is kept.
Building ares
ares supports building on Windows, macOS, and various Linux/BSD distributions. See build instructions for:
Command-line options
When started from the command-line, ares accepts a few options.
Usage: ./ares [options] game(s)
--help Displays available options and exit
--version Displays the version string of the application
--terminal Create new terminal window (Windows only)
--fullscreen Start in full screen mode
--pseudofullscreen Start in pseudo full screen mode
--kiosk Start in minimal UI mode (implies --no-file-prompt)
--system system Specify the system name
--shader shader Specify a slang shader to load (requires OpenGL or Metal)
--setting name=value Specify a value for a setting
--dump-all-settings Show a list of all existing settings and exit
--no-file-prompt Do not prompt to load (optional) additional roms (eg: 64DD)
--settings-file path Specify a settings file override (settings.bml)
--save-state slot Specify a save state slot to load (1-9)
The --system option is useful when the system type cannot be auto-detected. --fullscreen will only have an effect if a game is also passed in argument.
Example:
ares --system MSX examples.rom --fullscreen
Specifying multiple games allows for multi-cart support. For example, to load the Super GameBoy BIOS and a game in one command (to avoid a file prompt), you can do:
ares "Super GameBoy.sfc" "Super Mario Land.gb"
The --no-file-prompt option is useful if you wish to launch a game from CLI without being prompted to load additional roms. For example, some Nintendo 64 games optionally support 64DD expansion disks, so this option can be used to suppress the "64DD Disk" file dialog, and assume any secondary content is disconnected.
High-level Components
- ares: emulator cores and component implementations
- desktop-ui: main GUI implementation for this project
- hiro: cross-platform GUI toolkit that utilizes native APIs on supported platforms
- nall: Near's alternative to the C++ standard library
- ruby: interface between a hiro application and platform-specific APIs for emulator video, audio, and input
- mia: internal ROM database and ROM/image loader
- libco: cooperative multithreading library
Contributing
Please join our discord to chat with other ares developers: https://discord.com/invite/gz2quhk2kv