summaryrefslogtreecommitdiff
path: root/README.md
blob: e14b9768bf666863d8ae380828287043c6a5aad9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Yet Another Entertainment System

> A simple portable NES emulator written in C++.

The emulator currently supports the following mapper types:
- NROM
- (TODO)

It was mainly targeted for a simple custom operating system to run on the bare-metal. Because of this, it does not use
any standard libraries and it does not do dynamic memory allocations. It also supports using a modified NES controller
via serial port.

## Using the Emulator

The emulator comes with its own GUI allowing the user to change some settings and select a ROM using its built-in file
browser. There is only some platform-specific functionality which needs to be implemented. Some frontends can be found
in the [app](app) directory:
- A macOS port using `GameController.framework` and `SpriteKit.framework`.
- A (WIP) SDL port using SDL 3.

In addition, you can find two more helper applications:
- `controller` for testing a controller connected using serial port (see below).
- `encrypt` for encrypting ROMs using AES (might one day be useful in some cases)

You can build all of the applications using CMake:
```
mkdir build
cd build
cmake ..
make
```

Dependencies on Linux can also be installed using Nix, by running a development shell:
```
nix develop .
```

## Using the Controller

It is also possible to modify an original NES controller to work with this emulator using an Arduino.

You can find the Arduino sketch for it in [controller](controller).

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.