trunk/src/devices/cpu/sm510/sm510op.cpp
r255100 | r255101 | |
450 | 450 | m_div = 0; |
451 | 451 | } |
452 | 452 | |
| 453 | void sm510_base_device::op_dta() |
| 454 | { |
| 455 | // DTA: transfer divider low bits to ACC |
| 456 | m_acc = BITSWAP16(m_div,0,0,0,0, 0,0,0,0, 0,0,0,0, 7,8,9,10) & 0xf; |
| 457 | } |
| 458 | |
453 | 459 | void sm510_base_device::op_illegal() |
454 | 460 | { |
455 | 461 | logerror("%s unknown opcode $%02X at $%04X\n", tag(), m_op, m_prev_pc); |
trunk/src/devices/cpu/sm510/sm511core.cpp
r255100 | r255101 | |
63 | 63 | |
64 | 64 | void sm511_device::get_opcode_param() |
65 | 65 | { |
66 | | // XXX?, LBL, PRE, TL, TML and prefix opcodes are 2 bytes |
67 | | if (m_op == 0x01 || (m_op >= 0x5f && m_op <= 0x61) || (m_op & 0xf0) == 0x70 || (m_op & 0xfc) == 0x68) |
| 66 | // LBL, PRE, TL, TML and prefix opcodes are 2 bytes |
| 67 | if ((m_op >= 0x5f && m_op <= 0x61) || (m_op & 0xf0) == 0x70 || (m_op & 0xfc) == 0x68) |
68 | 68 | { |
69 | 69 | m_icount--; |
70 | 70 | m_param = m_program->read_byte(m_pc); |
r255100 | r255101 | |
102 | 102 | switch (m_op) |
103 | 103 | { |
104 | 104 | case 0x00: op_rot(); break; |
105 | | // case 0x01: op_xxx(); break; // ? |
| 105 | case 0x01: op_dta(); break; // guessed |
106 | 106 | case 0x02: op_sbm(); break; |
107 | 107 | case 0x03: op_atpl(); break; |
108 | 108 | case 0x08: op_add(); break; |
r255100 | r255101 | |
119 | 119 | case 0x5a: op_ta0(); break; |
120 | 120 | case 0x5b: op_tabl(); break; |
121 | 121 | case 0x5c: op_atx(); break; |
122 | | // case 0x5d: op_cend(); break; |
| 122 | case 0x5d: op_cend(); break; |
123 | 123 | case 0x5e: op_tal(); break; |
124 | 124 | case 0x5f: op_lbl(); break; |
125 | 125 | |
r255100 | r255101 | |
127 | 127 | case 0x62: op_wr(); break; |
128 | 128 | case 0x63: op_ws(); break; |
129 | 129 | case 0x64: op_incb(); break; |
130 | | // case 0x65: op_idiv(); break; |
| 130 | case 0x65: op_idiv(); break; |
131 | 131 | case 0x66: op_rc(); break; |
132 | 132 | case 0x67: op_sc(); break; |
133 | 133 | case 0x6c: op_decb(); break; |