QuickerNES, a modern version of quickNES
Go to file
Sergio Martin 7d0abecdb5 Merge branch 'testFix' of github.com:SergioMartin86/quickerNES into testFix 2024-01-27 21:14:49 +01:00
.github/workflows Fixing tests 2024-01-25 07:15:48 +01:00
extern More simplifications 2024-01-22 19:30:14 +01:00
overlay Adding tests and moving code around 2024-01-10 19:48:57 +01:00
source Taking back changes on controllers as joypad do report 1s after the first 8 bits as per https://www.nesdev.org/wiki/Standard_controller 2024-01-27 21:14:21 +01:00
tests Removed all-ones signatures at the end of controller latch phase for normal joypads 2024-01-27 20:22:50 +01:00
.clang-format Standarizing header file extensions 2024-01-20 11:15:24 +01:00
.gitignore Standarizing header file extensions 2024-01-20 11:15:24 +01:00
.gitmodules Fixing submodule 2024-01-22 20:17:10 +01:00
.run-clang-format.sh Standarizing header file extensions 2024-01-20 11:15:24 +01:00
LICENSE Adding initial version 2024-01-08 20:11:49 +01:00
README.md Putting fourscore in the change list 2024-01-21 16:40:32 +01:00
meson.build Adding if to prevent targets from compiling if this is loaded as a subproject 2024-01-27 20:32:23 +01:00
meson_options.txt Upoloading open source test games 2024-01-20 08:42:22 +01:00

README.md

quickerNES

Build & Tests

quickerNES is an attempt to modernizing quickNES. The goals for this project are, in order of importance:

  • Improve overall emulation performance for modern (x86) CPUs (portability to other systems not guaranteed)
  • Modernize the code base with best programming practices, including CI tests, benchmarks, and coverage analysis
  • Add support for more mappers, controllers, and features supported by other emulators
  • Improve accuracy, if possible

The main aim is to improve the performance of headless re-recording for TASing and botting (See: JaffarPlus) purposes. However, if this work can help regular play emulation, then much better.

Improvements

  • Optimizations made in the CPU emulation core, including:
    • Forced alignment at the start of a page to prevent crossing cache line boundaries
    • Simplifying the 6502 CPU instruction fetching and decoding
    • Multiple branch optimizations
    • Assuming little endiannes to reduce unnecessary conversion operations (not portable to big endian systems)
    • Minimize compiled code size to reduce pressure on L1i cache
  • Added support for FourScore controller
  • General code reorganization (make it header only to help compiler optimizations)

Credits

  • quickNES was originally by Shay Green (a.k.a. Blaarg) under the GNU GPLv2 license. The source code is still located here
  • The code was later improved and maintained by Christopher Snowhill (a.k.a. kode54)
  • I could trace further contributions (e.g., new mappers) by retrowertz, CaH4e3, some adaptations from the FCEUX emulator (see mapper021)
  • The latest version of the code is maintained by Libretro's community here
  • For the interactive player, this project drew some code from HeadlessQuickNES (HQN) by Drew (Binder News)
  • We use some of the NES test rom set made by multiple authors and gathered by Christopher Pow et al.
  • We also use some movies from the TASVideos website for testing. These movies are copied into this repository with authorization under the Creative Commons Attribution 2.0 license.

All base code for this project was found under open source licenses, which I preserved in their corresponding files/folders. Any non-credited work is unintentional and shall be immediately rectfied.