quickerNES/README.md

40 lines
2.7 KiB
Markdown
Raw Normal View History

2024-01-08 19:11:49 +00:00
quickerNES
-----------
2024-01-08 19:11:49 +00:00
2024-01-20 09:19:19 +00:00
[![Build & Tests](https://github.com/SergioMartin86/quickerNES/actions/workflows/make.yml/badge.svg)](https://github.com/SergioMartin86/quickerNES/actions/workflows/make.yml)
2024-01-19 18:36:33 +00:00
quickerNES is an attempt to modernizing [quickNES](https://github.com/kode54/QuickNES). The goals for this project are, in order of importance:
2024-01-08 19:11:49 +00:00
2024-01-19 18:36:33 +00:00
- Improve overall emulation performance for modern (x86) CPUs (portability to other systems not guaranteed)
2024-01-08 19:11:49 +00:00
- 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](https://github.com/SergioMartin86/jaffarPlus)) purposes. However, if this work can help regular play emulation, then much better.
2024-01-14 05:12:32 +00:00
Changes
--------
2024-01-14 05:12:32 +00:00
2024-01-14 08:21:17 +00:00
- 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
2024-01-20 06:09:31 +00:00
+ Multiple branch optimizations
2024-01-14 07:11:26 +00:00
- Minimize compiled code size to reduce pressure on L1i cache
2024-01-19 18:36:33 +00:00
- Assuming little endiannes to reduce unnecessary conversion operations (not portable to big endian systems)
2024-01-16 17:42:29 +00:00
- Reduce heap allocations
- General code reorganization (make it header only to help compiler optimizations)
2024-01-08 19:11:49 +00:00
Credits
---------
2024-01-08 19:11:49 +00:00
2024-01-08 19:19:59 +00:00
- quickNES was originally by Shay Green (a.k.a. [Blaarg](http://www.slack.net/~ant/)) under the GNU GPLv2 license. The source code is still located [here](https://github.com/kode54/QuickNES)
2024-01-08 19:12:49 +00:00
- The code was later improved and maintained by Christopher Snowhill (a.k.a. [kode54](https://kode54.net/))
- I could trace further contributions (e.g., new mappers) by retrowertz, CaH4e3, some adaptations from the [FCEUX emulator](https://github.com/TASEmulators/fceux) (see mapper021)
2024-01-08 19:19:59 +00:00
- The latest version of the code is maintained by Libretro's community [here](https://github.com/libretro/QuickNES_Core)
- For the interactive player, this project drew some code from [HeadlessQuickNES (HQN)](https://github.com/Bindernews/HeadlessQuickNes) by Drew (Binder News)
2024-01-10 18:48:57 +00:00
- We use some of the [NES test rom set](https://github.com/christopherpow/nes-test-roms) made by multiple authors and gathered by Christopher Pow et al.
2024-01-17 17:21:44 +00:00
- We also use some movies from the [TASVideos](tasvideos.org) website for testing. These movies are copied into this repository with authorization under the Creative Commons Attribution 2.0 license.
2024-01-08 19:11:49 +00:00
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.
2024-01-08 19:11:49 +00:00