1 // license:BSD-3-Clause 2 // copyright-holders:Juergen Buchmueller 3 /***************************************************************************** 4 * 5 * Portable uPD7810/11, 7810H/11H, 78C10/C11/C14 disassembler 6 * 7 * NS20030112: added 7807. 8 * 9 *****************************************************************************/ 10 11 #ifndef MAME_CPU_UPD7810_UPD7810DASM_H 12 #define MAME_CPU_UPD7810_UPD7810DASM_H 13 14 #pragma once 15 16 class upd7810_base_disassembler : public util::disasm_interface 17 { 18 public: 19 struct dasm_s { 20 public: 21 dasm_s(); 22 dasm_s(uint8_t t, const char *a); 23 dasm_s(const dasm_s (&a)[256]); 24 25 const char *name() const; 26 const char *args() const; 27 28 bool is_prefix() const; 29 bool is_call() const; 30 bool is_return() const; 31 32 const dasm_s &prefix_get(uint8_t op) const; 33 34 uint8_t m_token; 35 const void *m_args; 36 37 static const char *const token_names[]; 38 }; 39 40 enum 41 { 42 prefix = 0, 43 illegal, 44 ACI, 45 ADC, 46 ADCW, 47 ADCX, 48 ADD, 49 ADDNC, 50 ADDNCW, 51 ADDNCX, 52 ADDW, 53 ADDX, 54 ADI, 55 ADINC, 56 ANA, 57 ANAW, 58 ANAX, 59 AND, 60 ANI, 61 ANIW, 62 BIT, 63 BLOCK, 64 CALB, 65 CALF, 66 CALL, 67 CALT, 68 CLC, 69 CLR, /* 7807 */ 70 CMC, /* 7807 */ 71 DAA, 72 DADC, 73 DADD, 74 DADDNC, 75 DAN, 76 DCR, 77 DCRW, 78 DCX, 79 DEQ, 80 DGT, 81 DI, 82 DIV, 83 DLT, 84 DMOV, 85 DNE, 86 DOFF, 87 DON, 88 DOR, 89 DRLL, 90 DRLR, 91 DSBB, 92 DSLL, 93 DSLR, 94 DSUB, 95 DSUBNB, 96 DXR, 97 EADD, 98 EI, 99 EQA, 100 EQAW, 101 EQAX, 102 EQI, 103 EQIW, 104 ESUB, 105 EX, /* 7801 */ 106 EXA, 107 EXH, 108 EXX, 109 EXR, /* 7807 */ 110 GTA, 111 GTAW, 112 GTAX, 113 GTI, 114 GTIW, 115 HALT, 116 IN, /* 7801 */ 117 INR, 118 INRW, 119 INX, 120 JB, 121 JEA, 122 JMP, 123 JR, 124 JRE, 125 LBCD, 126 LDAW, 127 LDAX, 128 LDEAX, 129 LDED, 130 LHLD, 131 LSPD, 132 LTA, 133 LTAW, 134 LTAX, 135 LTI, 136 LTIW, 137 LXI, 138 MOV, 139 MUL, 140 MVI, 141 MVIW, 142 MVIX, 143 NEA, 144 NEAW, 145 NEAX, 146 NEGA, 147 NEI, 148 NEIW, 149 NOP, 150 NOT, /* 7807 */ 151 OFFA, 152 OFFAW, 153 OFFAX, 154 OFFI, 155 OFFIW, 156 ONA, 157 ONAW, 158 ONAX, 159 ONI, 160 ONIW, 161 OR, /* 7807 */ 162 ORA, 163 ORAW, 164 ORAX, 165 ORI, 166 ORIW, 167 OUT, /* 7801 */ 168 PER, /* 7801 */ 169 PEX, /* 7801 */ 170 POP, 171 PUSH, 172 RET, 173 RETI, 174 RETS, 175 RLD, 176 RLL, 177 RLR, 178 RRD, 179 SBB, 180 SBBW, 181 SBBX, 182 SBCD, 183 SBI, 184 SDED, 185 SETB, /* 7807 */ 186 SHLD, 187 SIO, /* 7801 */ 188 SK, 189 SKIT, 190 SKN, 191 SKNIT, 192 SLL, 193 SLLC, 194 SLR, 195 SLRC, 196 SOFTI, 197 SSPD, 198 STAW, 199 STAX, 200 STC, 201 STEAX, 202 STM, /* 7801 */ 203 STOP, 204 SUB, 205 SUBNB, 206 SUBNBW, 207 SUBNBX, 208 SUBW, 209 SUBX, 210 SUI, 211 SUINB, 212 TABLE, 213 XOR, /* 7807 */ 214 XRA, 215 XRAW, 216 XRAX, 217 XRI 218 }; 219 220 upd7810_base_disassembler(const dasm_s *table, bool is_7810); 221 virtual u32 opcode_alignment() const override; 222 virtual offs_t disassemble(std::ostream &stream, offs_t pc, const data_buffer &opcodes, const data_buffer ¶ms) override; 223 224 static const char *const regname[32]; 225 static const dasm_s d60[256]; 226 static const dasm_s d70[256]; 227 static const dasm_s d74[256]; 228 229 bool m_is_7810; 230 const dasm_s *m_dasmXX; 231 }; 232 233 class upd7810_disassembler : public upd7810_base_disassembler 234 { 235 public: 236 static const dasm_s XX_7810[256]; 237 static const dasm_s d48_7810[256]; 238 static const dasm_s d4C_7810[256]; 239 static const dasm_s d4D_7810[256]; 240 static const dasm_s d64_7810[256]; 241 242 upd7810_disassembler(); 243 virtual ~upd7810_disassembler() = default; 244 }; 245 246 class upd7807_disassembler : public upd7810_base_disassembler 247 { 248 public: 249 static const dasm_s XX_7807[256]; 250 static const dasm_s d48_7807[256]; 251 static const dasm_s d4C_7807[256]; 252 static const dasm_s d4D_7807[256]; 253 static const dasm_s d64_7807[256]; 254 255 upd7807_disassembler(); 256 virtual ~upd7807_disassembler() = default; 257 }; 258 259 class upd7801_disassembler : public upd7810_base_disassembler 260 { 261 public: 262 static const dasm_s XX_7801[256]; 263 static const dasm_s d48_7801[256]; 264 static const dasm_s d4C_7801[256]; 265 static const dasm_s d4D_7801[256]; 266 static const dasm_s d60_7801[256]; 267 static const dasm_s d64_7801[256]; 268 static const dasm_s d70_7801[256]; 269 static const dasm_s d74_7801[256]; 270 271 upd7801_disassembler(); 272 virtual ~upd7801_disassembler() = default; 273 }; 274 275 class upd78c05_disassembler : public upd7810_base_disassembler 276 { 277 public: 278 static const dasm_s XX_78c05[256]; 279 static const dasm_s d48_78c05[256]; 280 static const dasm_s d4C_78c05[256]; 281 static const dasm_s d4D_78c05[256]; 282 static const dasm_s d60_78c05[256]; 283 static const dasm_s d64_78c05[256]; 284 static const dasm_s d70_78c05[256]; 285 static const dasm_s d74_78c05[256]; 286 287 upd78c05_disassembler(); 288 virtual ~upd78c05_disassembler() = default; 289 }; 290 291 #endif 292