| 1 |
|
|
| 2 |
|
|
| 3 |
|
|
| 4 |
|
|
| 5 |
|
|
| 6 |
|
|
| 7 |
|
|
| 8 |
|
|
| 9 |
|
|
| 10 |
|
|
| 11 |
|
|
| 12 |
|
|
| 13 |
|
|
| 14 |
|
|
| 15 |
|
|
| 16 |
|
|
| 17 |
|
|
| 18 |
|
|
| 19 |
|
|
| 20 |
|
|
| 21 |
|
package uk.co.javagear; |
| 22 |
|
|
| 23 |
|
|
| 24 |
|
|
| 25 |
|
|
| 26 |
|
|
| 27 |
|
|
| 28 |
|
|
| 29 |
|
|
| 30 |
|
public final class Mnemonic { |
| 31 |
|
|
| 32 |
|
|
| 33 |
|
|
| 34 |
|
|
| 35 |
0 |
private Mnemonic() { |
| 36 |
0 |
} |
| 37 |
|
|
| 38 |
|
public static String getOP(int opcode) { |
| 39 |
0 |
return OPCODES[opcode & 0xff]; |
| 40 |
|
} |
| 41 |
|
|
| 42 |
|
public static String getCB(int opcode) { |
| 43 |
0 |
return CB_OPCODES[opcode & 0xff]; |
| 44 |
|
} |
| 45 |
|
|
| 46 |
|
public static String getED(int opcode) { |
| 47 |
0 |
return ED_OPCODES[opcode & 0xff]; |
| 48 |
|
} |
| 49 |
|
|
| 50 |
|
public static String getIndex(int opcode) { |
| 51 |
0 |
return INDEX_OPCODES[opcode & 0xff]; |
| 52 |
|
} |
| 53 |
|
|
| 54 |
0 |
private static final String[] OPCODES = |
| 55 |
|
{ |
| 56 |
|
"NOP", "LD BC,nn", "LD (BC),A", "INC BC", "INC B", "DEC B", "LD B, n", "RLCA", |
| 57 |
|
"EX AF,AF", "ADD HL,BC", "LD A,(BC)", "DEC BC", "INC C", "DEC C", "LD C, n", "RRCA", |
| 58 |
|
"DJNZ", "LD DE,nn", "LD (DE),A", "INC DE", "INC D", "DEC D", "LD D, n", "RLA", |
| 59 |
|
"JR", "ADD HL,DE", "LD A,(DE)", "DEC DE", "INC E", "DEC E", "LD E, n", "RRA", |
| 60 |
|
"JR NZ,(PC+e)", "LD HL,nn", "LD (nn),HL", "INC HL", "INC H", "DEC H", "LD H, n", "DAA", |
| 61 |
|
"JR Z,(PC+e)", "ADD HL,HL", "LD HL,nn", "DEC HL", "INC L", "DEC L", "LD L, n", "CPL", |
| 62 |
|
"JR NC,(PC+e)", "LD SP,nn", "LD (nn),A", "INC SP", "INC (HL)", "DEC (HL)", "LD (HL),", "SCF", |
| 63 |
|
"JR C,(PC+e)", "ADD HL,SP", "LD A,nn", "DEC SP", "INC A", "DEC A", "LD A, n", "CCF", |
| 64 |
|
"LD B,B", "LD B,C", "LD B,D", "LD B,E", "LD B,H", "LD B,L", "LD B,(HL)", "LD B,A", |
| 65 |
|
"LD C,B", "LD C,C", "LD C,D", "LD C,E", "LD C,H", "LD C,L", "LD C,(HL)", "LD C,A", |
| 66 |
|
"LD D,B", "LD D,C", "LD D,D", "LD D,E", "LD D,H", "LD D,L", "LD D,(HL)", "LD D,A", |
| 67 |
|
"LD E,B", "LD E,C", "LD E,D", "LD E,E", "LD E,H", "LD E,L", "LD E,(HL)", "LD E,A", |
| 68 |
|
"LD H,B", "LD H,C", "LD H,D", "LD H,E", "LD H,H", "LD H,L", "LD H,(HL)", "LD H,A", |
| 69 |
|
"LD L,B", "LD L,C", "LD L,D", "LD L,E", "LD L,H", "LD L,L", "LD L,(HL)", "LD L,A", |
| 70 |
|
"LD (HL),B", "LD (HL),C", "LD (HL),D", "LD (HL),E", "LD (HL),H", "LD (HL),L", "HALT", "LD (HL),A", |
| 71 |
|
"LD A,B", "LD A,C", "LD A,D", "LD A,E", "LD A,H", "LD A,L", "LD A,(HL)", "LD A,A", |
| 72 |
|
"ADD A,B", "ADD A,C", "ADD A,D", "ADD A,E", "ADD A,H", "ADD A,L", "ADD A,(HL)", "ADD A,A", |
| 73 |
|
"ADC A,B", "ADC A,C", "ADC A,D", "ADC A,E", "ADC A,H", "ADC A,L", "ADC A,(HL)", "ADC A,A", |
| 74 |
|
"SUB B", "SUB C", "SUB D", "SUB E", "SUB H", "SUB L", "SUB (HL)", "SUB A", |
| 75 |
|
"SBC A,B", "SBC A,C", "SBC A,D", "SBC A,E", "SBC A,H", "SBC A,L", "SBC A,(HL)", "SBC A,A", |
| 76 |
|
"AND B", "AND C", "AND D", "AND E", "AND H", "AND L", "AND (HL)", "AND A", |
| 77 |
|
"XOR B", "XOR C", "XOR D", "XOR E", "XOR H", "XOR L", "XOR (HL)", "XOR A", |
| 78 |
|
"OR B", "OR C", "OR D", "OR E", "OR H", "OR L", "OR (HL)", "OR A", |
| 79 |
|
"CP B", "CP C", "CP D", "CP E", "CP H", "CP L", "CP (HL)", "CP A", |
| 80 |
|
"RET NZ", "POP BC", "JP NZ,(nn)", "JP (nn)", "CALL NZ,(nn)", "PUSH BC", "ADD A,", "RST 0H", |
| 81 |
|
"RET Z", "RET", "JP Z,(nn)", "CB OPCODE", "CALL Z,(nn)", "CALL (nn)", "ADC A,", "RST 8H", |
| 82 |
|
"RET NC", "POP DE", "JP NC,(nn)", "OUT (n),A", "CALL NC,(nn)", "PUSH DE", "SUB n", "RST 10H", |
| 83 |
|
"RET C", "EXX", "JP C,(nn)", "IN A,(n)", "CALL C,(nn)", "DD OPCODE", "SBC A,", "RST 18H", |
| 84 |
|
"RET PO", "POP HL", "JP PO,(nn)", "EX (SP),HL", "CALL PO,(nn)", "PUSH HL", "AND n", "RST 20H", |
| 85 |
|
"RET PE", "JP (HL)", "JP PE,(nn)", "EX DE,HL", "CALL PE,(nn)", "ED OPCODE", "XOR n", "RST 28H", |
| 86 |
|
"RET P", "POP AF", "JP P,(nn)", "DI", "CALL P,(nn)", "PUSH AF", "OR n", "RST 30H", |
| 87 |
|
"RET M", "LD SP,HL", "JP M,(nn)", "EI", "CALL M,(nn)", "FD OPCODE", "CP n", "RST 38H" |
| 88 |
|
}; |
| 89 |
|
|
| 90 |
0 |
private static final String[] CB_OPCODES = |
| 91 |
|
{ |
| 92 |
|
"RLC B", "RLC C", "RLC D", "RLC E", "RLC H", "RLC L", "RLC (HL)", "RLC A", |
| 93 |
|
"RRC B", "RRC C", "RRC D", "RRC E", "RRC H", "RRC L", "RRC (HL)", "RRC A", |
| 94 |
|
"RL B", "RL C", "RL D", "RL E", "RL H", "RL L", "RL (HL)", "RL A", |
| 95 |
|
"RR B", "RR C", "RR D", "RR E", "RR H", "RR L", "RR (HL)", "RR A", |
| 96 |
|
"SLA B", "SLA C", "SLA D", "SLA E", "SLA H", "SLA L", "SLA (HL)", "SLA A", |
| 97 |
|
"SRA B", "SRA C", "SRA D", "SRA E", "SRA H", "SRA L", "SRA (HL)", "SRA A", |
| 98 |
|
"SLL B", "SLL C", "SLL D", "SLL E", "SLL H", "SLL L", "SLL (HL)", "SLL A", |
| 99 |
|
"SRL B", "SRL C", "SRL D", "SRL E", "SRL H", "SRL L", "SRL (HL)", "SRL A", |
| 100 |
|
"BIT 0,B", "BIT 0,C", "BIT 0,D", "BIT 0,E", "BIT 0,H", "BIT 0,L", "BIT 0,(HL)", "BIT 0,A", |
| 101 |
|
"BIT 1,B", "BIT 1,C", "BIT 1,D", "BIT 1,E", "BIT 1,H", "BIT 1,L", "BIT 1,(HL)", "BIT 1,A", |
| 102 |
|
"BIT 2,B", "BIT 2,C", "BIT 2,D", "BIT 2,E", "BIT 2,H", "BIT 2,L", "BIT 2,(HL)", "BIT 2,A", |
| 103 |
|
"BIT 3,B", "BIT 3,C", "BIT 3,D", "BIT 3,E", "BIT 3,H", "BIT 3,L", "BIT 3,(HL)", "BIT 3,A", |
| 104 |
|
"BIT 4,B", "BIT 4,C", "BIT 4,D", "BIT 4,E", "BIT 4,H", "BIT 4,L", "BIT 4,(HL)", "BIT 4,A", |
| 105 |
|
"BIT 5,B", "BIT 5,C", "BIT 5,D", "BIT 5,E", "BIT 5,H", "BIT 5,L", "BIT 5,(HL)", "BIT 5,A", |
| 106 |
|
"BIT 6,B", "BIT 6,C", "BIT 6,D", "BIT 6,E", "BIT 6,H", "BIT 6,L", "BIT 6,(HL)", "BIT 6,A", |
| 107 |
|
"BIT 7,B", "BIT 7,C", "BIT 7,D", "BIT 7,E", "BIT 7,H", "BIT 7,L", "BIT 7,(HL)", "BIT 7,A", |
| 108 |
|
"RES 0,B", "RES 0,C", "RES 0,D", "RES 0,E", "RES 0,H", "RES 0,L", "RES 0,(HL)", "RES 0,A", |
| 109 |
|
"RES 1,B", "RES 1,C", "RES 1,D", "RES 1,E", "RES 1,H", "RES 1,L", "RES 1,(HL)", "RES 1,A", |
| 110 |
|
"RES 2,B", "RES 2,C", "RES 2,D", "RES 2,E", "RES 2,H", "RES 2,L", "RES 2,(HL)", "RES 2,A", |
| 111 |
|
"RES 3,B", "RES 3,C", "RES 3,D", "RES 3,E", "RES 3,H", "RES 3,L", "RES 3,(HL)", "RES 3,A", |
| 112 |
|
"RES 4,B", "RES 4,C", "RES 4,D", "RES 4,E", "RES 4,H", "RES 4,L", "RES 4,(HL)", "RES 4,A", |
| 113 |
|
"RES 5,B", "RES 5,C", "RES 5,D", "RES 5,E", "RES 5,H", "RES 5,L", "RES 5,(HL)", "RES 5,A", |
| 114 |
|
"RES 6,B", "RES 6,C", "RES 6,D", "RES 6,E", "RES 6,H", "RES 6,L", "RES 6,(HL)", "RES 6,A", |
| 115 |
|
"RES 7,B", "RES 7,C", "RES 7,D", "RES 7,E", "RES 7,H", "RES 7,L", "RES 7,(HL)", "RES 7,A", |
| 116 |
|
"SET 0,B", "SET 0,C", "SET 0,D", "SET 0,E", "SET 0,H", "SET 0,L", "SET 0,(HL)", "SET 0,A", |
| 117 |
|
"SET 1,B", "SET 1,C", "SET 1,D", "SET 1,E", "SET 1,H", "SET 1,L", "SET 1,(HL)", "SET 1,A", |
| 118 |
|
"SET 2,B", "SET 2,C", "SET 2,D", "SET 2,E", "SET 2,H", "SET 2,L", "SET 2,(HL)", "SET 2,A", |
| 119 |
|
"SET 3,B", "SET 3,C", "SET 3,D", "SET 3,E", "SET 3,H", "SET 3,L", "SET 3,(HL)", "SET 3,A", |
| 120 |
|
"SET 4,B", "SET 4,C", "SET 4,D", "SET 4,E", "SET 4,H", "SET 4,L", "SET 4,(HL)", "SET 4,A", |
| 121 |
|
"SET 5,B", "SET 5,C", "SET 5,D", "SET 5,E", "SET 5,H", "SET 5,L", "SET 5,(HL)", "SET 5,A", |
| 122 |
|
"SET 6,B", "SET 6,C", "SET 6,D", "SET 6,E", "SET 6,H", "SET 6,L", "SET 6,(HL)", "SET 6,A", |
| 123 |
|
"SET 7,B", "SET 7,C", "SET 7,D", "SET 7,E", "SET 7,H", "SET 7,L", "SET 7,(HL)", "SET 7,A", |
| 124 |
|
}; |
| 125 |
|
|
| 126 |
0 |
private static final String[] ED_OPCODES = |
| 127 |
|
{ |
| 128 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 129 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 130 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 131 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 132 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 133 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 134 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 135 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 136 |
|
"IN B,(C)", "OUT (C),B", "SBC HL,BC", "LD (nn),BC", "NEG", "RETN", "IM 0", "LD I,A", |
| 137 |
|
"IN C,(C)", "OUT (C),C", "ADC HL,BC", "LD BC,(nn)", "?", "RETI", "?", "LD R,A", |
| 138 |
|
"IN D,(C)", "OUT (C),D", "SBC HL,DE", "LD (nn),DE", "?", "?", "IM 1", "LD A,I", |
| 139 |
|
"IN E,(C)", "OUT (C),E", "ADC HL,DE", "LD DE,(nn)", "?", "?", "IM 2", "LD A,R", |
| 140 |
|
"IN H,(C)", "OUT (C),H", "SBC HL,HL", "LD (nn),HL", "?", "?", "?", "RRD", |
| 141 |
|
"IN L,(C)", "OUT (C),L", "ADC HL,HL", "LD HL,(nn)", "?", "?", "?", "RLD", |
| 142 |
|
"IN 0,(C)", "OUT (C),0", "SBC HL,SP", "LD (nn),SP", "?", "?", "?", "?", |
| 143 |
|
"IN A,(C)", "OUT (C),A", "ADC HL,SP", "LD SP,(nn)", "?", "?", "?", "?", |
| 144 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 145 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 146 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 147 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 148 |
|
"LDI", "CPI", "INI", "OUTI", "?", "?", "?", "?", |
| 149 |
|
"LDD", "CPD", "IND", "OUTD", "?", "?", "?", "?", |
| 150 |
|
"LDIR", "CPIR", "INIR", "OTIR", "?", "?", "?", "?", |
| 151 |
|
"LDDR", "CPDR", "INDR", "OTDR", "?", "?", "?", "?", |
| 152 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 153 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 154 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 155 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 156 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 157 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 158 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 159 |
|
"?", "?", "?", "?", "?", "?", "?", "?" |
| 160 |
|
}; |
| 161 |
|
|
| 162 |
0 |
private static final String[] INDEX_OPCODES = |
| 163 |
|
{ |
| 164 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 165 |
|
"?", "ADD I,BC", "?", "?", "?", "?", "?", "?", |
| 166 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 167 |
|
"?", "ADD I,DE", "?", "?", "?", "?", "?", "?", |
| 168 |
|
"?", "LD I,nn", "LD (nn),I", "INC I", "INC Ih", "DEC Ih", "LD Ih,B", "?", |
| 169 |
|
"?", "ADD I,I", "LD I,(nn)", "DEC I", "INC Il", "DEC Il", "LD Il,B", "?", |
| 170 |
|
"?", "?", "?", "?", "INC I+d", "DEC I+d", "LD I,B", "?", |
| 171 |
|
"?", "ADD I,SP", "?", "?", "?", "?", "?", "?", |
| 172 |
|
"?", "?", "?", "?", "LD B,Ih", "LD B,Il", "LD B,I+d", "?", |
| 173 |
|
"?", "?", "?", "?", "LD C,Ih", "LD C,Il", "LD C,I+d", "?", |
| 174 |
|
"?", "?", "?", "?", "LD D,Ih", "LD D,Il", "LD D,I+d", "?", |
| 175 |
|
"?", "?", "?", "?", "LD E,Ih", "LD E,Il", "LD E,I+d", "?", |
| 176 |
|
"LD Ih,B", "LD Ih,C", "LD Ih,D", "LD Ih,E", "LD Ih,H", "LD Ih,L", "LD H,I+d", "LD Ih,A", |
| 177 |
|
"LD Il,B", "LD Il,C", "LD Il,D", "LD Il,E", "LD Il,H", "LD Il,L", "LD L,I+d", "LD Il,A", |
| 178 |
|
"LD I+d,B", "LD I+d,C", "LD I+d,D", "LD I+d,E", "LD I+d,H", "LD I+d,L", "?", "LD I+d,A", |
| 179 |
|
"?", "?", "?", "?", "LD A,Ih", "LD A,Il", "LD A,I+d", "?", |
| 180 |
|
"?", "?", "?", "?", "ADD A,Ih", "ADD A,Il", "ADD A,I+d", "?", |
| 181 |
|
"?", "?", "?", "?", "ADC A,Ih", "ADC A,Il", "ADC A,I+d", "?", |
| 182 |
|
"?", "?", "?", "?", "SUB Ih", "SUB Il", "SUB I+d", "?", |
| 183 |
|
"?", "?", "?", "?", "SBC A,Ih", "SBC A,Il", "SBC A,I+d", "?", |
| 184 |
|
"?", "?", "?", "?", "AND Ih", "AND Il", "AND I+d", "?", |
| 185 |
|
"?", "?", "?", "?", "XOR Ih", "XOR Il", "XOR I+d", "?", |
| 186 |
|
"?", "?", "?", "?", "OR Ih", "OR Il", "OR I+d", "?", |
| 187 |
|
"?", "?", "?", "?", "CP Ih", "CP Il", "CP I+d", "?", |
| 188 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 189 |
|
"?", "?", "?", "FD CB", "?", "?", "?", "?", |
| 190 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 191 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 192 |
|
"?", "POP I", "?", "EX (SP),I", "?", "PUSH I", "?", "?", |
| 193 |
|
"?", "JP (I)", "?", "?", "?", "?", "?", "?", |
| 194 |
|
"?", "?", "?", "?", "?", "?", "?", "?", |
| 195 |
|
"?", "LD SP,I", "?", "?", "?", "?", "?", "?" |
| 196 |
|
}; |
| 197 |
|
} |