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
// Copyright (C) 2014 The 6502-rs Developers
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// are met:
// 1. Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// 2. Redistributions in binary form must reproduce the above copyright
// notice, this list of conditions and the following disclaimer in the
// documentation and/or other materials provided with the distribution.
// 3. Neither the names of the copyright holders nor the names of any
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.
//! An emulator for the MOS 6502 CPU and its variants.
//!
//! The 6502 was one of the most influential microprocessors in history, powering
//! iconic systems like the Apple II, Commodore 64, Atari 2600, and Nintendo
//! Entertainment System. Its low cost democratized computing and helped birth
//! the personal computer industry.
//!
//! ## Variants
//!
//! This emulator supports multiple 6502 variants, each with subtle differences
//! in behavior. Choose the [variant] that matches your target system:
//!
//! - **NMOS 6502**: Original MOS Technology processor
//! - **65C02**: CMOS version with bug fixes and new instructions. Several
//! historical 65C02 chips are available as named type aliases:
//! - [`instruction::Cmos6502`] — WDC W65C02 original (WAI/STP only)
//! - [`instruction::W65C02S`] - Modern W65C02S, with low-power and Rockwell extensions.
//! - **Ricoh 2A03**: Nintendo's NES variant without decimal mode
//! - **Revision A**: Very early variant missing the ROR instruction
//!
//! [variant]: crate::Variant
// Registers and ops follow the 6502 naming convention and have similar names at
// times
/// Output of arithmetic instructions (ADC/SBC)
/// Trait for different 6502 CPU variants with their historical differences.
///
/// The 6502 family evolved over decades with various manufacturers creating
/// specialized versions for different applications:
///
/// - **Revision A (1975)**: Very early 6502 variant missing the ROR instruction
/// entirely. Found in early KIM-1 systems and some Apple-1 computers. The ROR
/// instruction was intentionally unimplemented due to design constraints, not
/// a "bug" as commonly believed. Production ended around June 1976.
///
/// - **NMOS 6502 (1976)**: Complete MOS Technology processor with working ROR
/// instruction, used in Apple II, Commodore 64, Atari 2600. Has unreliable
/// decimal mode flags but full BCD support. This became the standard reference
/// implementation.
///
/// - **65C02 (1983)**: WDC's CMOS version with bug fixes, additional instructions,
/// and reliable decimal mode flags. Development began in 1981 with samples
/// released in early 1983. Used in Apple IIc/IIe and many embedded systems.
///
/// - **Ricoh 2A03 (1983)**: Nintendo's cost-reduced variant for NES/Famicom
/// (released July 15, 1983). Removed decimal mode entirely to avoid patent
/// issues. Used as a core in their custom ASIC which also included sound
/// generation and other features.
///
/// Choose the variant that matches your target system for accurate emulation.
/// Note that software written for later variants may not run on earlier ones
/// due to missing instructions (particularly ROR on Revision A).