1use core::fmt;
2
3use super::{Instruction, Opcode, Operand};
4
5impl fmt::Display for Instruction {
6 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
7 write!(f, "{} {}", self.opcode, self.operand)
8 }
9}
10
11impl fmt::Display for Opcode {
12 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
13 match self {
14 Opcode::Invalid(o) => {
15 write!(f, "invalid(#${:02x})", o)
16 }
17 Opcode::ADC => {
18 write!(f, "ADC")
19 }
20 Opcode::AND => {
21 write!(f, "AND")
22 }
23 Opcode::ASL => {
24 write!(f, "ASL")
25 }
26 Opcode::BCC => {
27 write!(f, "BCC")
28 }
29 Opcode::BCS => {
30 write!(f, "BCS")
31 }
32 Opcode::BEQ => {
33 write!(f, "BEQ")
34 }
35 Opcode::BIT => {
36 write!(f, "BIT")
37 }
38 Opcode::BMI => {
39 write!(f, "BMI")
40 }
41 Opcode::BNE => {
42 write!(f, "BNE")
43 }
44 Opcode::BPL => {
45 write!(f, "BPL")
46 }
47 Opcode::BRK => {
48 write!(f, "BRK")
49 }
50 Opcode::BVC => {
51 write!(f, "BVC")
52 }
53 Opcode::BVS => {
54 write!(f, "BVS")
55 }
56 Opcode::CLC => {
57 write!(f, "CLC")
58 }
59 Opcode::CLD => {
60 write!(f, "CLD")
61 }
62 Opcode::CLI => {
63 write!(f, "CLI")
64 }
65 Opcode::CLV => {
66 write!(f, "CLV")
67 }
68 Opcode::CMP => {
69 write!(f, "CMP")
70 }
71 Opcode::CPX => {
72 write!(f, "CPX")
73 }
74 Opcode::CPY => {
75 write!(f, "CPY")
76 }
77 Opcode::DEC => {
78 write!(f, "DEC")
79 }
80 Opcode::DEX => {
81 write!(f, "DEX")
82 }
83 Opcode::DEY => {
84 write!(f, "DEY")
85 }
86 Opcode::EOR => {
87 write!(f, "EOR")
88 }
89 Opcode::INC => {
90 write!(f, "INC")
91 }
92 Opcode::INX => {
93 write!(f, "INX")
94 }
95 Opcode::INY => {
96 write!(f, "INY")
97 }
98 Opcode::JMP => {
99 write!(f, "JMP")
100 }
101 Opcode::JSR => {
102 write!(f, "JSR")
103 }
104 Opcode::LDA => {
105 write!(f, "LDA")
106 }
107 Opcode::LDX => {
108 write!(f, "LDX")
109 }
110 Opcode::LDY => {
111 write!(f, "LDY")
112 }
113 Opcode::LSR => {
114 write!(f, "LSR")
115 }
116 Opcode::NOP => {
117 write!(f, "NOP")
118 }
119 Opcode::ORA => {
120 write!(f, "ORA")
121 }
122 Opcode::PHA => {
123 write!(f, "PHA")
124 }
125 Opcode::PHP => {
126 write!(f, "PHP")
127 }
128 Opcode::PLA => {
129 write!(f, "PLA")
130 }
131 Opcode::PLP => {
132 write!(f, "PLP")
133 }
134 Opcode::ROL => {
135 write!(f, "ROL")
136 }
137 Opcode::ROR => {
138 write!(f, "ROR")
139 }
140 Opcode::RTI => {
141 write!(f, "RTI")
142 }
143 Opcode::RTS => {
144 write!(f, "RTS")
145 }
146 Opcode::SBC => {
147 write!(f, "SBC")
148 }
149 Opcode::SEC => {
150 write!(f, "SEC")
151 }
152 Opcode::SED => {
153 write!(f, "SED")
154 }
155 Opcode::SEI => {
156 write!(f, "SEI")
157 }
158 Opcode::STA => {
159 write!(f, "STA")
160 }
161 Opcode::STX => {
162 write!(f, "STX")
163 }
164 Opcode::STY => {
165 write!(f, "STY")
166 }
167 Opcode::TAX => {
168 write!(f, "TAX")
169 }
170 Opcode::TAY => {
171 write!(f, "TAY")
172 }
173 Opcode::TSX => {
174 write!(f, "TSX")
175 }
176 Opcode::TXA => {
177 write!(f, "TXA")
178 }
179 Opcode::TXS => {
180 write!(f, "TXS")
181 }
182 Opcode::TYA => {
183 write!(f, "TYA")
184 }
185 }
186 }
187}
188
189impl fmt::Display for Operand {
190 fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
191 match self {
192 Operand::Accumulator => {
193 write!(f, "A")
194 }
195 Operand::Absolute(w) => {
196 write!(f, "${:04x}", w)
197 }
198 Operand::AbsoluteX(w) => {
199 write!(f, "${:04x}, X", w)
200 }
201 Operand::AbsoluteY(w) => {
202 write!(f, "${:04x}, Y", w)
203 }
204 Operand::Immediate(b) => {
205 write!(f, "#${:02x}", b)
206 }
207 Operand::Implied => Ok(()),
208 Operand::Indirect(w) => {
209 write!(f, "(${:04x})", w)
210 }
211 Operand::IndirectYIndexed(b) => {
212 write!(f, "(${:02x}), Y", b)
213 }
214 Operand::XIndexedIndirect(b) => {
215 write!(f, "(${:02x}, X)", b)
216 }
217 Operand::Relative(b) | Operand::ZeroPage(b) => {
218 write!(f, "${:02x}", b)
219 }
220 Operand::ZeroPageX(b) => {
221 write!(f, "${:02x}, X", b)
222 }
223 Operand::ZeroPageY(b) => {
224 write!(f, "${:02x}, Y", b)
225 }
226 }
227 }
228}