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
47
48
49
50
51
52
53
54
55
56
|
Tools I have created to help with NES/Famicom development.
**Note**: this is under heavy development and it's not currently usable.
## `nasm`
`nasm` is an assembler specifically tailored for the NES/Famicom. Read more
about it in [./crates/nasm/README.md](./crates/nasm/README.md).
## `xa65`
Since `nasm` is still under heavy development, it's a good idea to compare the
results that it produces with a mature and stable assembler like
[cc65](https://github.com/cc65/cc65). The purpose of `xa65` is to provide a
bridge, and so it simply executes both `nasm` and `cc65` with the given
arguments. If the results from both assemblers are not the same, then it will
display a warning and produce the binary as taken from `cc65`. Moreover, if you
want this warning to be an error instead, then use the `--no-errors`.
Last but not least, you can also pass flags to `xa65` like `--strict`, which
will invoke `nasm` with more pedantic features like its address sanitizer.
## `readrom`
`readrom` is an objdump-like utility that reads a given ROM file and shows
information about it. Read more about it in
[./crates/readrom/README.md](./crates/readrom/README.md).
## `runrom`
`runrom` is an NES/Famicom emulator that doesn't attempt to run a ROM
graphically. Instead, it just runs code and exposes the data on memory,
registers, etc. for a given run. This is all done via the [vnf](./lib/vnf)
library, which allows a developer to programatically run a ROM file from a given
address, poke memory addresses, submit joypad inputs, etc. For some uses,
running `runrom` will be fine to get a glimpse of the execution of a piece of
code, but in some other cases (e.g. unit tests for a specific function on your
NES game), using `vnf` will be a better fit. In any case, you can read more
about all of this on [runrom's documentation](./crates/runrom/README.md), and on
[vnf's documentation](./lib/vnf/README.md).
## License
This repository holds two licenses, as you can also note on the `Cargo.toml`
file. As it's written there:
- The source code on the `crates/` directory is licensed under the GNU GPLv3 (or
any later version).
- The source code on the `lib/` directory is licensed under the GNU LGPLv3 (or
any later version).
In practice, for the libraries under `lib/` this means that if you plan to
compile your binary statically, you still need to abide by the LGPLv3+ license.
This means at least providing the object files necessary to allow someone to
recompile your program using a modified version of these libraries. See the
LGPLv3 license for more details.
|