yaxpeax_6502/
display.rs

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}