trunk/src/emu/cpu/tms0980/tms0980d.c
| r242796 | r242797 | |
| 1 | 1 | /******************************************************************* |
| 2 | 2 | |
| 3 | | tms0980d.c |
| 4 | | TMS0980 disassembly |
| 3 | TMS0980 disassembly |
| 5 | 4 | |
| 6 | 5 | *******************************************************************/ |
| 7 | 6 | |
| r242796 | r242797 | |
| 17 | 16 | enum e_mnemonics { |
| 18 | 17 | zA10AAC=0, zA6AAC, zA8AAC, zAC1AC, zACACC, zACNAA, zALEC, zALEM, zAMAAC, zBRANCH, zCALL, zCCLA, |
| 19 | 18 | zCLA, zCLO, zCOMC, zCOMX, zCOMX8, zCPAIZ, zCTMDYN, zDAN, zDMAN, zDMEA, zDNAA, |
| 20 | | zDYN, zIA, zIMAC, zIYC, zKNE, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ, |
| 19 | zDYN, zIA, zIMAC, zIYC, zKNEZ, zLDP, zLDX, zLDX3, zLDX4, zMNEA, zMNEZ, |
| 21 | 20 | zNDMEA, zOFF, zRBIT, zREAC, zRETN, zRSTR, zSAL, zSAMAN, zSBIT, |
| 22 | 21 | zSBL, zSEAC, zSETR, zTAM, zTAMACS, zTAMDYN, zTAMIY, zTAMIYC, zTAMZA, |
| 23 | 22 | zTAY, zTBIT, zTCMIY, zTCY, zTDO, zTKA, zTKM, zTMA, |
| r242796 | r242797 | |
| 27 | 26 | |
| 28 | 27 | |
| 29 | 28 | enum e_addressing { |
| 30 | | zB0=0, zB2, zI2, zI3, zI4, zB7 |
| 29 | zB0=0, zI2, zI3, zI4, zB7 |
| 31 | 30 | }; |
| 32 | 31 | |
| 33 | 32 | |
| 34 | 33 | static const char *const s_mnemonic[] = { |
| 35 | 34 | "a10aac", "a6aac", "a8aac", "ac1ac", "acacc", "acnaa", "alec", "alem", "amaac", "branch", "call", "ccla", |
| 36 | 35 | "cla", "clo", "comc", "comx", "comx8", "cpaiz", "ctmdyn", "dan", "dman", "dmea", "dnaa", |
| 37 | | "dyn", "ia", "imac", "iyc", "kne", "knez", "ldp", "ldx", "ldx", "ldx", "mnea", "mnez", |
| 36 | "dyn", "ia", "imac", "iyc", "knez", "ldp", "ldx", "ldx", "ldx", "mnea", "mnez", |
| 38 | 37 | "ndmea", "off", "rbit", "reac", "retn", "rstr", "sal", "saman", "sbit", |
| 39 | 38 | "sbl", "seac", "setr", "tam", "tamacs", "tamdyn", "tamiy", "tamiyc", "tamza", |
| 40 | 39 | "tay", "tbit", "tcmiy", "tcy", "tdo", "tka", "tkm", "tma", |
| r242796 | r242797 | |
| 46 | 45 | static const UINT32 s_flags[] = { |
| 47 | 46 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, _OVER, 0, |
| 48 | 47 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 49 | | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 48 | 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 50 | 49 | 0, 0, 0, 0, _OUT, 0, 0, 0, 0, |
| 51 | 50 | 0, 0, 0, 0, 0, 0, 0, 0, 0, |
| 52 | 51 | 0, 0, 0, 0, 0, 0, 0, 0, |
| r242796 | r242797 | |
| 58 | 57 | static const UINT8 s_addressing[] = { |
| 59 | 58 | zB0, zB0, zB0, zI4, zI4, zI4, zI4, zB0, zB0, zB7, zB7, zB0, |
| 60 | 59 | zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, |
| 61 | | zB0, zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0, |
| 62 | | zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, zB0, |
| 63 | | zB0, zB0, zB0, zB0, zI4, zB0, zB0, zB0, zB2, |
| 64 | | zB0, zB2, zI4, zI4, zB0, zB0, zB0, zB0, |
| 60 | zB0, zB0, zB0, zB0, zB0, zI4, zI2, zI3, zI4, zB0, zB0, |
| 61 | zB0, zB0, zI2, zB0, zB0, zB0, zB0, zB0, zI2, |
| 62 | zB0, zB0, zB0, zB0, zI4, zB0, zB0, zB0, zB0, |
| 63 | zB0, zI2, zI4, zI4, zB0, zB0, zB0, zB0, |
| 65 | 64 | zB0, zB0, zB0, zB0, zI4, zB0, zI4, |
| 66 | 65 | zB0 |
| 67 | 66 | }; |
| r242796 | r242797 | |
| 70 | 69 | static const UINT8 tms0980_mnemonic[512] = { |
| 71 | 70 | /* 0x000 */ |
| 72 | 71 | zCOMX, zALEM, zYNEA, zXMA, zDYN, zIYC, zCLA, zDMAN, |
| 73 | | zTKA, zMNEA, zTKM, zILL, zILL, zSETR, zKNE, zILL, |
| 72 | zTKA, zMNEA, zTKM, zILL, zILL, zSETR, zKNEZ, zILL, |
| 74 | 73 | /* 0x010 */ |
| 75 | 74 | zDMEA, zDNAA, zCCLA, zNDMEA, zILL, zAMAAC, zILL, zILL, |
| 76 | 75 | zCTMDYN, zXDA, zILL, zILL, zILL, zILL, zILL, zILL, |
| r242796 | r242797 | |
| 234 | 233 | zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, zCALL, |
| 235 | 234 | }; |
| 236 | 235 | |
| 236 | |
| 237 | 237 | static const UINT8 tms0980_i2_value[4] = |
| 238 | 238 | { |
| 239 | 239 | 0x00, 0x02, 0x01, 0x03 |
| r242796 | r242797 | |
| 246 | 246 | { |
| 247 | 247 | 0x00, 0x08, 0x04, 0x0C, 0x02, 0x0A, 0x06, 0x0E, 0x01, 0x09, 0x05, 0x0D, 0x03, 0x0B, 0x07, 0x0F |
| 248 | 248 | }; |
| 249 | | static const UINT8 tms0980_bit_value[4] = { 1, 4, 2, 8 }; |
| 250 | 249 | |
| 251 | 250 | |
| 252 | 251 | CPU_DISASSEMBLE( tms0980 ) { |
| r242796 | r242797 | |
| 262 | 261 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 263 | 262 | |
| 264 | 263 | switch( s_addressing[instr] ) { |
| 264 | default: |
| 265 | 265 | case zB0: |
| 266 | 266 | break; |
| 267 | | case zB2: |
| 268 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 269 | | break; |
| 270 | 267 | case zI2: |
| 271 | 268 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 272 | 269 | break; |
| r242796 | r242797 | |
| 295 | 292 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 296 | 293 | |
| 297 | 294 | switch( s_addressing[instr] ) { |
| 295 | default: |
| 298 | 296 | case zB0: |
| 299 | 297 | break; |
| 300 | | case zB2: |
| 301 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 302 | | break; |
| 303 | 298 | case zI2: |
| 304 | 299 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 305 | 300 | break; |
| r242796 | r242797 | |
| 328 | 323 | dst += sprintf( dst, "%-8s ", s_mnemonic[instr] ); |
| 329 | 324 | |
| 330 | 325 | switch( s_addressing[instr] ) { |
| 326 | default: |
| 331 | 327 | case zB0: |
| 332 | 328 | break; |
| 333 | | case zB2: |
| 334 | | dst += sprintf( dst, "%d", tms0980_bit_value[ op & 3 ] ); |
| 335 | | break; |
| 336 | 329 | case zI2: |
| 337 | 330 | dst += sprintf( dst, "%d", tms0980_i2_value[ op & 0x03 ] ); |
| 338 | 331 | break; |