1 
disassemble(unsigned char * memory,uint16_t ptr,char opcode[5],char param1[9],char param2[11],char comment[8],int * length,uint16_t * alt_ptr)2 static int disassemble (unsigned char *memory, uint16_t ptr, char opcode[5], char param1[9], char param2[11], char comment[8], int *length, uint16_t *alt_ptr)
3 {
4 	switch (memory[ptr])
5 	{
6 		case 0x00: strcpy (opcode, "BRK"); *length = 1;                                                                  return 0;
7 		case 0x01: strcpy (opcode, "ORA"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
8 		case 0x05: strcpy (opcode, "ORA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
9 		case 0x06: strcpy (opcode, "ASL"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
10 		case 0x08: strcpy (opcode, "PHP"); *length = 1;                                                                  return 0;
11 		case 0x09: strcpy (opcode, "ORA"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
12 		case 0x0A: strcpy (opcode, "ASL"); *length = 1; strcpy  (param1, "A");                                           return 0;
13 		case 0x0D: strcpy (opcode, "ORA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
14 		case 0x0E: strcpy (opcode, "ASL"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
15 
16 		case 0x10: strcpy (opcode, "BPL"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
17 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
18 		case 0x11: strcpy (opcode, "ORA"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
19 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
20 		case 0x15: strcpy (opcode, "ORA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
21 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
22 		case 0x16: strcpy (opcode, "ASL"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
23 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
24 		case 0x18: strcpy (opcode, "CLC"); *length = 1;                                                                  return 0;
25 		case 0x19: strcpy (opcode, "ORA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
26 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
27 		case 0x1D: strcpy (opcode, "ORA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
28 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
29 		case 0x1E: strcpy (opcode, "ASL"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
30 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
31 
32 		case 0x20: strcpy (opcode, "JSR"); *length = 3; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)((memory[ptr+2]<<8) | memory[ptr+1])); return 1;
33 		case 0x21: strcpy (opcode, "AND"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
34 		case 0x24: strcpy (opcode, "BIT"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
35 		case 0x25: strcpy (opcode, "AND"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
36 		case 0x26: strcpy (opcode, "ROL"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
37 		case 0x28: strcpy (opcode, "PLP"); *length = 1;                                                                  return 0;
38 		case 0x29: strcpy (opcode, "AND"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
39 		case 0x2A: strcpy (opcode, "ROL"); *length = 1; strcpy  (param1, "A");                                           return 0;
40 		case 0x2D: strcpy (opcode, "AND"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
41 		case 0x2C: strcpy (opcode, "BIT"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+3], memory[ptr+1]);     return 0;
42 		case 0x2E: strcpy (opcode, "ROL"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
43 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
44 
45 		case 0x30: strcpy (opcode, "BMI"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
46 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
47 		case 0x31: strcpy (opcode, "AND"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
48 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
49 
50 		case 0x35: strcpy (opcode, "AND"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
51 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
52 		case 0x36: strcpy (opcode, "ROL"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
53 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
54 		case 0x38: strcpy (opcode, "SEC"); *length = 1;                                                                  return 0;
55 		case 0x39: strcpy (opcode, "AND"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
56 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
57 		case 0x3D: strcpy (opcode, "AND"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
58 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
59 		case 0x3E: strcpy (opcode, "ROL"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
60 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
61 
62 		case 0x40: strcpy (opcode, "RTI"); *length = 1;                                                                  return -1;
63 		case 0x41: strcpy (opcode, "EOR"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);                      return 0;
64 		case 0x45: strcpy (opcode, "EOR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
65 		case 0x46: strcpy (opcode, "LSR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
66 		case 0x48: strcpy (opcode, "PHA"); *length = 1;                                                                  return 0;
67 		case 0x49: strcpy (opcode, "EOR"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
68 		case 0x4A: strcpy (opcode, "LSR"); *length = 1; strcpy  (param1, "A");                                           return 0;
69 		case 0x4C: strcpy (opcode, "JMP"); *length = 3; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)((memory[ptr+2] << 8) | memory[ptr+1])); return 2;
70 		case 0x4D: strcpy (opcode, "EOR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
71 		case 0x4E: strcpy (opcode, "LSR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
72 
73 		case 0x50: strcpy (opcode, "BVC"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
74 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
75 		case 0x51: strcpy (opcode, "EOR"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
76 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
77 		case 0x55: strcpy (opcode, "EOR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
78 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
79 		case 0x56: strcpy (opcode, "LSR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
80 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
81 		case 0x58: strcpy (opcode, "CLI"); *length = 1;                                                                  return 0;
82 		case 0x59: strcpy (opcode, "EOR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
83 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
84 		case 0x5D: strcpy (opcode, "EOR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
85 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
86 		case 0x5E: strcpy (opcode, "LSR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
87 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
88 
89 		case 0x60: strcpy (opcode, "RTS"); *length = 1;                                                                  return -1;
90 		case 0x61: strcpy (opcode, "ADC"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
91 		case 0x65: strcpy (opcode, "ADC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
92 		case 0x66: strcpy (opcode, "ROR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
93 		case 0x68: strcpy (opcode, "PLA"); *length = 1;                                                                  return 0;
94 		case 0x69: strcpy (opcode, "ADC"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
95 		case 0x6A: strcpy (opcode, "ROR"); *length = 1; strcpy  (param1, "A");                                           return 0;
96 		case 0x6C: strcpy (opcode, "JMP"); *length = 2; sprintf (param1, "&($%02x%02x)", memory[ptr+2], memory[ptr+1]);  return -1;
97 		case 0x6D: strcpy (opcode, "ADC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
98 		case 0x6E: strcpy (opcode, "ROR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
99 
100 		case 0x70: strcpy (opcode, "BVS"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
101 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
102 		case 0x71: strcpy (opcode, "ADC"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
103 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
104 		case 0x75: strcpy (opcode, "ADC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
105 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
106 		case 0x76: strcpy (opcode, "ROR"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
107 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
108 		case 0x78: strcpy (opcode, "SEI"); *length = 1;                                                                  return 0;
109 		case 0x79: strcpy (opcode, "ADC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
110 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
111 		case 0x7D: strcpy (opcode, "ADC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
112 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
113 		case 0x7E: strcpy (opcode, "ROR"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
114 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
115 
116 		case 0x81: strcpy (opcode, "STA"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
117 		case 0x84: strcpy (opcode, "STY"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
118 		case 0x85: strcpy (opcode, "STA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
119 		case 0x86: strcpy (opcode, "STX"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
120 		case 0x88: strcpy (opcode, "DEY"); *length = 1;                                                                  return 0;
121 		case 0x8A: strcpy (opcode, "TXA"); *length = 1;                                                                  return 0;
122 		case 0x8C: strcpy (opcode, "STY"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
123 		case 0x8D: strcpy (opcode, "STA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
124 		case 0x8E: strcpy (opcode, "STX"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
125 
126 		case 0x90: strcpy (opcode, "BCC"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
127 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
128 		case 0x91: strcpy (opcode, "STA"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
129 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
130 		case 0x94: strcpy (opcode, "STY"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
131 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
132 		case 0x95: strcpy (opcode, "STA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
133 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
134 		case 0x96: strcpy (opcode, "STX"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
135 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
136 		case 0x98: strcpy (opcode, "TYA"); *length = 1;                                                                  return 0;
137 		case 0x99: strcpy (opcode, "STA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
138 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
139 		case 0x9A: strcpy (opcode, "TXS"); *length = 1;                                                                  return 0;
140 		case 0x9D: strcpy (opcode, "STA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
141 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
142 
143 		case 0xA0: strcpy (opcode, "LDY"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
144 		case 0xA1: strcpy (opcode, "LDA"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
145 		case 0xA2: strcpy (opcode, "LDX"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
146 		case 0xA4: strcpy (opcode, "LDY"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
147 		case 0xA5: strcpy (opcode, "LDA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
148 		case 0xA6: strcpy (opcode, "LDX"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
149 		case 0xA8: strcpy (opcode, "TAY"); *length = 1;                                                                  return 0;
150 		case 0xA9: strcpy (opcode, "LDA"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
151 		case 0xAA: strcpy (opcode, "TAX"); *length = 1;                                                                  return 0;
152 		case 0xAC: strcpy (opcode, "LDY"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
153 		case 0xAD: strcpy (opcode, "LDA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
154 		case 0xAE: strcpy (opcode, "LDX"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
155 
156 		case 0xB0: strcpy (opcode, "BCS"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
157 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
158 		case 0xB1: strcpy (opcode, "LDA"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
159 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
160 		case 0xB4: strcpy (opcode, "LDY"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
161 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
162 		case 0xB5: strcpy (opcode, "LDA"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
163 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
164 		case 0xB6: strcpy (opcode, "LDX"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
165 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
166 		case 0xB8: strcpy (opcode, "CLV"); *length = 1;                                                                  return 0;
167 		case 0xB9: strcpy (opcode, "LDA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
168 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
169 		case 0xBA: strcpy (opcode, "TSX"); *length = 1;                                                                  return 0;
170 
171 		case 0xBC: strcpy (opcode, "LDY"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
172 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
173 		case 0xBD: strcpy (opcode, "LDA"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
174 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
175 		case 0xBE: strcpy (opcode, "LDX"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
176 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
177 
178 		case 0xC0: strcpy (opcode, "CPY"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
179 		case 0xC1: strcpy (opcode, "CMP"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
180 		case 0xC4: strcpy (opcode, "CPY"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
181 		case 0xC5: strcpy (opcode, "CMP"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
182 		case 0xC6: strcpy (opcode, "DEC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
183 		case 0xC8: strcpy (opcode, "INY"); *length = 1;                                                                  return 0;
184 		case 0xC9: strcpy (opcode, "CMP"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
185 		case 0xCA: strcpy (opcode, "DEX"); *length = 1;                                                                  return 0;
186 		case 0xCC: strcpy (opcode, "CPY"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
187 		case 0xCD: strcpy (opcode, "CMP"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
188 		case 0xCE: strcpy (opcode, "DEC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
189 
190 		case 0xD0: strcpy (opcode, "BNE"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
191 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
192 		case 0xD1: strcpy (opcode, "CMP"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
193 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
194 		case 0xD5: strcpy (opcode, "CMP"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
195 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
196 		case 0xD6: strcpy (opcode, "DEC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
197 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
198 		case 0xD8: strcpy (opcode, "CLD"); *length = 1;                                                                  return 0;
199 		case 0xD9: strcpy (opcode, "CMP"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
200 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
201 		case 0xDD: strcpy (opcode, "CMP"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
202 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
203 		case 0xDE: strcpy (opcode, "DEC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
204 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
205 
206 		case 0xE0: strcpy (opcode, "CPX"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
207 		case 0xE1: strcpy (opcode, "SBC"); *length = 2; sprintf (param1, "($%02x,X)", memory[ptr+1]);                    return 0;
208 		case 0xE4: strcpy (opcode, "CPX"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
209 		case 0xE5: strcpy (opcode, "SBC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
210 		case 0xE6: strcpy (opcode, "INC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);                        return 0;
211 		case 0xE8: strcpy (opcode, "INX"); *length = 1;                                                                  return 0;
212 		case 0xE9: strcpy (opcode, "SBC"); *length = 2; sprintf (param1, "#$%02x", memory[ptr+1]);                       return 0;
213 		case 0xEA: strcpy (opcode, "NOP"); *length = 1;                                                                  return 0;
214 		case 0xEC: strcpy (opcode, "CPX"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
215 		case 0xED: strcpy (opcode, "SBC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
216 		case 0xEE: strcpy (opcode, "INC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);     return 0;
217 
218 		case 0xF0: strcpy (opcode, "BEQ"); *length = 2; sprintf (param1, "&$%04x", *alt_ptr = (uint16_t)(ptr + (signed char)memory[ptr+1] + *length));
219 		                                                sprintf (comment, "%02x", memory[ptr+1]);                        return 1;
220 		case 0xF1: strcpy (opcode, "SBC"); *length = 2; sprintf (param1, "($%02x)", memory[ptr+1]);
221 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
222 		case 0xF5: strcpy (opcode, "SBC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
223 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
224 		case 0xF6: strcpy (opcode, "INC"); *length = 2; sprintf (param1, "$%02x", memory[ptr+1]);
225 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
226 		case 0xF8: strcpy (opcode, "SED"); *length = 1;                                                                  return 0;
227 		case 0xF9: strcpy (opcode, "SBC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
228 		                                                strcpy  (param2, "Y");                                           return 0; //// could merge into param1 ???
229 		case 0xFD: strcpy (opcode, "SBC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
230 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
231 		case 0xFE: strcpy (opcode, "SBC"); *length = 3; sprintf (param1, "$%02x%02x", memory[ptr+2], memory[ptr+1]);
232 		                                                strcpy  (param2, "X");                                           return 0; //// could merge into param1 ???
233 	}
234 	return -2;
235 }
236 
237