-
-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathNOTICE
More file actions
207 lines (173 loc) · 11.6 KB
/
Copy pathNOTICE
File metadata and controls
207 lines (173 loc) · 11.6 KB
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
RustyNES
Copyright 2026 DoubleGate (parobek@gmail.com)
RustyNES is free software: you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation, either version 3 of the License, or (at your option) any later
version.
RustyNES is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE. See the GNU General Public License for more details. You
should have received a copy of the GNU General Public License along with
RustyNES (see the LICENSE file); if not, see <https://www.gnu.org/licenses/>.
RustyNES is licensed GPL-3.0-or-later because it is a DERIVATIVE WORK of
GPL-licensed NES emulators: it incorporates code derived from Mesen2
(GPL-3.0-or-later) and, for several mappers and the FDS drive model, from puNES,
FCEUX, and Nestopia UE (all GPL-2.0-or-later). The complete per-file derivation
record is in docs/originality-and-provenance.md (Section 1). An earlier version
of this file incorrectly stated that no GPL emulator source was incorporated and
licensed the project MIT/Apache-2.0; that was wrong and is corrected here.
--------------------------------------------------------------------------------
Code derived from GPL-licensed emulators
--------------------------------------------------------------------------------
The following upstream emulators' code was ported, adapted, or closely modeled
into RustyNES. This is derivation, not oracle use, and is why RustyNES is
GPL-3.0-or-later. See docs/originality-and-provenance.md Section 1 for the
file-by-file table (source file, function, and line references).
* Mesen2 / MesenCE -- Copyright Sour et al. -- GPL-3.0-or-later
https://github.com/SourMesen/Mesen2
Derived: CPU unstable-store opcodes (NesCpu.h); the PPU sprite-evaluation FSM
and OAM-data-bus model (NesPpu.cpp ProcessSpriteEvaluation / ReadSpriteRam);
~15 mapper board implementations (Bandai EEPROM, JY Company, Waixing, Sachen,
Txc, NTDEC, Kaiser, MMC3 variants, FK23C, CoolBoy); the Bisqwit NTSC filter as
Mesen2 implements it; the UNIF board tables; the debug-symbol importer
(DbgImporter); and the PGO training harness (PGOHelper).
* puNES -- Copyright FHorse -- GPL-2.0-or-later
https://github.com/FHorse/puNES
Derived: the JV001 security chip / mapper 147 (ported bit-for-bit from JV001.c
/ mapper_147.c) and the per-CRC FDS drive-timing table (fds.c).
* FCEUX -- Copyright the FCEUX team -- GPL-2.0-or-later
https://github.com/TASEmulators/fceux
Derived: UNIF board handling (unif.cpp) and several mapper banking transforms.
* Nestopia UE -- Copyright Martin Freij et al. -- GPL-2.0-or-later
Derived: Sunsoft FME-7 / 5B audio detail (cross-referenced with Mesen2).
All of the above grant "version N or (at your option) any later version," so the
GPL-2.0-or-later material upgrades cleanly to v3 and the combined work is
distributable as GPL-3.0-or-later.
--------------------------------------------------------------------------------
Reference emulators consulted as behavioral oracles (no code derived)
--------------------------------------------------------------------------------
Separately from the derived code above, these were used to observe and
cross-check documented hardware behavior (no code incorporated):
* GeraNES -- GPL-3.0-only -- reference / cross-check for several mapper boards
and some frontend UI conventions. Its source was consulted (not purely
black-box) as a cross-reference to confirm publicly-documented behavior -- the
nesdev-wiki bus-conflict / address-decode masks and RetroArch's public
`#pragma parameter` shader-UI convention -- but no GeraNES code was copied: the
RustyNES implementations are independent Rust of that documented behavior.
The maintainers' ASSESSMENT is that only the unprotectable documented behavior
was relied on (not GeraNES's copyrightable expression), and therefore that no
GPL-3.0-only code is incorporated and the project's "or-later" grant is
unaffected. That is a position supported by a two-sided review, NOT a
certification: whether a given coincidence is the single correct expression of
a documented fact is a legal judgement, and this project does not self-certify
license cleanliness. Offered for human and expert review; a qualified reviewer
who disagrees should be treated as authoritative. See
docs/originality-and-provenance.md sec. 3 for the evidence and the residual
uncertainties.
* higan -- GPL-3.0-or-later -- scheduler-structure reference / oracle.
* ares -- BSD-2-Clause / Apache-2.0 -- palette-integration reference and oracle.
(Mesen2, puNES, FCEUX, and Nestopia were used as oracles too, but because code
was also derived from them they are listed above under derivation.)
--------------------------------------------------------------------------------
Hardware documentation
--------------------------------------------------------------------------------
Behaviors not covered above are written from public hardware documentation: the
NESdev community wiki (https://www.nesdev.org/wiki/), the Visual 6502 / Visual
2C02 die studies (http://www.visual6502.org/), Disch's mapper write-ups, Brad
Taylor's 2C02 technical reference, published Xicor/Intersil I2C serial-EEPROM and
Yamaha YM2413 datasheets, and the documented 6502 unofficial-opcode behavior,
pinned against public test ROMs (tests/roms/LICENSES.md). No code from those
documentation projects is incorporated.
--------------------------------------------------------------------------------
Incorporated third-party components (permissively licensed, GPL-compatible)
--------------------------------------------------------------------------------
* emu2413 v1.5.9 -- Yamaha YM2413 (OPLL) FM synthesizer, used for VRC7 audio.
Rust port in crates/rustynes-apu/src/opll.rs.
https://github.com/digital-sound-antiques/emu2413
Copyright (c) 2020 Mitsutaka Okazaki -- MIT
* TriCNES -- cycle-accurate C# NES emulator by the AccuracyCoin author, built
around a detailed sub-cycle CPU/PPU/APU/DMA state machine (the author
describes it as written "for playing back TASes" with "a focus on
test-driven accuracy"); its
PPU address/data-multiplex (ALE / octal-latch), OAM-corruption, and per-cycle
DMA-dispatch models are ported into RustyNES (crates/rustynes-ppu,
rustynes-cpu, rustynes-core), and its full source is vendored as a golden
oracle at crates/rustynes-test-harness/golden/tricnes/tricnes-full-src/.
https://github.com/100thCoin/TriCNES (commit 9199870)
Copyright (c) 2025 Chris Siebert -- MIT
Note (v2.2.6 -> resolved v2.3.0): v2.2.6 disclosed that the octal-latch /
hybrid-address *timing* had been calibrated to TriCNES's per-dot behavior
rather than derived independently, and flagged a suspected TriCNES-specific
artifact (mid-render $2006 writes mis-rendering, e.g. Rad Racer) for a v2.3.0
rework. v2.3.0 investigated it against the authoritative in-repo oracle: the
model passes the AccuracyCoin "Hybrid Addresses" / "ALE + Read" tests
(141/141 -- disabling the delayed-CopyV drops exactly that test to 140/141),
and Rad Racer's road/horizon renders cleanly. The suspected artifact does NOT
reproduce: it lived in the pre-v2.0.3 "+1 coarse-X" approximation, superseded
by the 2-cycle-ALE / delayed-CopyV model promoted in v2.0.3 (ADR 0030). The
current behavior is therefore documentation/oracle-derived -- it matches the
NESdev-documented delayed-`CopyV`-during-render timing and is pinned by the
MIT AccuracyCoin test ROM plus an exact-141/141 CI gate. TriCNES (MIT) remains
the original cross-reference; its source is vendored with attribution. See
docs/originality-and-provenance.md sec. 4 and ADR 0030.
* rcheevos v12.3.0 -- RetroAchievements client runtime, vendored at
crates/rustynes-cheevos/vendor/rcheevos/ (compiled only under the optional
`retroachievements` feature).
https://github.com/RetroAchievements/rcheevos
Copyright (c) 2018 RetroAchievements.org -- MIT
* blip_buf -- band-limited synthesis, basis of crates/rustynes-apu/src/blip.rs.
Copyright (c) Shay Green (Blargg) -- LGPL-2.1-or-later (GPLv3-compatible)
The MIT License text (for emu2413, TriCNES, rcheevos):
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
--------------------------------------------------------------------------------
Bundled fonts
--------------------------------------------------------------------------------
* Font Awesome Free -- Fonticons, Inc. -- see
crates/rustynes-frontend/assets/fonts/LICENSE-FontAwesome.txt.
* Press Start 2P -- CodeMan38 -- SIL Open Font License 1.1. The OFL text ships
alongside each copy of the font: assets/RustyNES_Icon/OFL.txt (desktop),
ios/RustyNES/Fonts/PressStart2P-OFL.txt (iOS), and
android/app/src/main/assets/PressStart2P-OFL.txt (Android).
--------------------------------------------------------------------------------
Video shaders and NTSC filters
--------------------------------------------------------------------------------
RustyNES's optional CRT shader stack (crates/rustynes-gfx-shaders/) and NTSC
filters (crates/rustynes-frontend/src/ntsc_bisqwit.rs, ntsc_lmp88959.rs):
* The Bisqwit NTSC filter's numeric coefficient tables were ported verbatim (via
Mesen2's implementation) and are therefore GPL-derived (listed above and in
docs/originality-and-provenance.md Section 1). The two-level NES composite
signal shape is documented at the NESdev wiki ("NTSC video").
* The CRT shaders (CRT-Royale -- TroggleMonkey, GPL-2.0-or-later;
crt-guest-advanced -- guest.r; Sony Megatron -- MajorPainInTheCactus) are
single-pass WGSL reimplementations of the upstream multi-pass looks. Whether or
not that reimplementation is a derivative work of the shader code, the whole
project is GPL-3.0-or-later, so these are covered; they are credited as the
looks they reproduce.
* NTSC-CRT -- EMMIR (LMP88959) -- https://github.com/LMP88959/NTSC-CRT --
free use, credit appreciated.
--------------------------------------------------------------------------------
Bundled test ROMs
--------------------------------------------------------------------------------
The ROMs committed under tests/roms/ are public-domain or permissively-licensed
homebrew test programs, catalogued per-author in tests/roms/LICENSES.md. No
commercial Nintendo software is bundled. Notices that must be preserved include:
* AccuracyCoin -- Chris Siebert (100thCoin) -- MIT -- upstream LICENSE vendored at
tests/roms/accuracycoin/LICENSE.
* Holy Mapperel and other Damian Yerrick test ROMs -- zlib -- notices preserved
with the ROMs (see tests/roms/LICENSES.md).
blargg's and kevtris's suites are public domain. See tests/roms/LICENSES.md for
the full per-ROM provenance.