trunk/src/emu/cpu/m6809/hd6309.ops
| r21595 | r21596 | |
| 796 | 796 | @set_ea(m_temp.w); |
| 797 | 797 | return; |
| 798 | 798 | |
| 799 | EXG: |
| 800 | { |
| 801 | UINT8 param = read_opcode_arg(); |
| 802 | exgtfr_register reg1 = read_exgtfr_register(param >> 4); |
| 803 | exgtfr_register reg2 = read_exgtfr_register(param >> 0); |
| 804 | write_exgtfr_register(param >> 4, reg2); |
| 805 | write_exgtfr_register(param >> 0, reg1); |
| 806 | } |
| 807 | eat(hd6309_native_mode() ? 3 : 6); |
| 808 | return; |
| 809 | |
| 810 | TFR: |
| 811 | { |
| 812 | UINT8 param = read_opcode_arg(); |
| 813 | exgtfr_register reg = read_exgtfr_register(param >> 4); |
| 814 | write_exgtfr_register(param >> 0, reg); |
| 815 | } |
| 816 | eat(hd6309_native_mode() ? 2 : 4); |
| 817 | return; |
| 818 | |
| 799 | 819 | ILLEGAL: |
| 800 | 820 | m_md |= 0x40; // illegal op flag |
| 801 | 821 | set_ea(VECTOR_ILLEGAL); |
trunk/src/emu/cpu/m6809/konami.ops
| r21595 | r21596 | |
| 210 | 210 | case 0xBF: %INDEXED; %ASLD; return; |
| 211 | 211 | |
| 212 | 212 | case 0xC0: %ROLD; return; |
| 213 | case 0xC1: %INDEXED; %ROL16; return; |
| 213 | 214 | case 0xC2: set_d(); %CLR16; return; |
| 215 | case 0xC3: %INDEXED; %CLR16; return; |
| 214 | 216 | case 0xC4: set_d(); %NEG16; return; |
| 217 | case 0xC5: %INDEXED; %NEG16; return; |
| 215 | 218 | case 0xC6: set_d(); %INC16; return; |
| 219 | case 0xC7: %INDEXED; %INC16; return; |
| 216 | 220 | case 0xC8: set_d(); %DEC16; return; |
| 221 | case 0xC9: %INDEXED; %DEC16; return; |
| 217 | 222 | case 0xCA: set_d(); %TST16; return; |
| 223 | case 0xCB: %INDEXED; %TST16; return; |
| 218 | 224 | case 0xCC: set_a(); %ABS8; return; |
| 219 | 225 | case 0xCD: set_b(); %ABS8; return; |
| 220 | 226 | case 0xCE: set_d(); %ABS16; return; |
| r21595 | r21596 | |
| 421 | 427 | set_ea(m_temp.w); |
| 422 | 428 | return; |
| 423 | 429 | |
| 430 | EXG: |
| 431 | { |
| 432 | // konami's TFR instruction differs enough from 6809 to fork the code |
| 433 | UINT8 param = read_opcode_arg(); |
| 434 | exgtfr_register reg1 = read_exgtfr_register(param >> 0); |
| 435 | exgtfr_register reg2 = read_exgtfr_register(param >> 4); |
| 436 | write_exgtfr_register(param >> 4, reg2); |
| 437 | write_exgtfr_register(param >> 0, reg1); |
| 438 | } |
| 439 | eat(hd6309_native_mode() ? 3 : 6); |
| 440 | return; |
| 441 | |
| 442 | TFR: |
| 443 | { |
| 444 | // konami's TFR instruction differs enough from 6809 to fork the code |
| 445 | UINT8 param = read_opcode_arg(); |
| 446 | exgtfr_register reg = read_exgtfr_register(param >> 0); |
| 447 | write_exgtfr_register((param >> 4) & 0x07, reg); |
| 448 | } |
| 449 | eat(hd6309_native_mode() ? 2 : 4); |
| 450 | return; |
| 451 | |
| 424 | 452 | SETLINE: |
| 425 | 453 | @set_lines(read_operand()); |
| 426 | 454 | return; |
trunk/src/emu/cpu/m6809/konami.c
| r21595 | r21596 | |
| 116 | 116 | |
| 117 | 117 | |
| 118 | 118 | //------------------------------------------------- |
| 119 | // read_operand |
| 120 | //------------------------------------------------- |
| 121 | |
| 122 | inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand() |
| 123 | { |
| 124 | return super::read_operand(); |
| 125 | } |
| 126 | |
| 127 | |
| 128 | //------------------------------------------------- |
| 129 | // read_operand |
| 130 | //------------------------------------------------- |
| 131 | |
| 132 | inline ATTR_FORCE_INLINE UINT8 konami_cpu_device::read_operand(int ordinal) |
| 133 | { |
| 134 | switch(m_addressing_mode) |
| 135 | { |
| 136 | case ADDRESSING_MODE_EA: return read_memory(m_ea.w + ordinal); |
| 137 | case ADDRESSING_MODE_IMMEDIATE: return read_opcode_arg(); |
| 138 | case ADDRESSING_MODE_REGISTER_D: return (ordinal & 1) ? m_d.b.l : m_d.b.h; |
| 139 | default: fatalerror("Unexpected"); return 0x00; |
| 140 | } |
| 141 | } |
| 142 | |
| 143 | |
| 144 | //------------------------------------------------- |
| 145 | // write_operand |
| 146 | //------------------------------------------------- |
| 147 | |
| 148 | ATTR_FORCE_INLINE void konami_cpu_device::write_operand(UINT8 data) |
| 149 | { |
| 150 | super::write_operand(data); |
| 151 | } |
| 152 | |
| 153 | |
| 154 | |
| 155 | //------------------------------------------------- |
| 156 | // write_operand |
| 157 | //------------------------------------------------- |
| 158 | |
| 159 | ATTR_FORCE_INLINE void konami_cpu_device::write_operand(int ordinal, UINT8 data) |
| 160 | { |
| 161 | switch(m_addressing_mode) |
| 162 | { |
| 163 | case ADDRESSING_MODE_IMMEDIATE: /* do nothing */ break; |
| 164 | case ADDRESSING_MODE_EA: write_memory(m_ea.w + ordinal, data); break; |
| 165 | case ADDRESSING_MODE_REGISTER_D: *((ordinal & 1) ? &m_d.b.l : &m_d.b.h) = data; break; |
| 166 | default: fatalerror("Unexpected"); break; |
| 167 | } |
| 168 | } |
| 169 | |
| 170 | |
| 171 | //------------------------------------------------- |
| 119 | 172 | // ireg |
| 120 | 173 | //------------------------------------------------- |
| 121 | 174 | |
| r21595 | r21596 | |
| 136 | 189 | |
| 137 | 190 | |
| 138 | 191 | //------------------------------------------------- |
| 192 | // read_exgtfr_register |
| 193 | //------------------------------------------------- |
| 194 | |
| 195 | ATTR_FORCE_INLINE m6809_base_device::exgtfr_register konami_cpu_device::read_exgtfr_register(UINT8 reg) |
| 196 | { |
| 197 | exgtfr_register result; |
| 198 | result.word_value = 0x00FF; |
| 199 | |
| 200 | switch(reg & 0x0F) |
| 201 | { |
| 202 | case 0: result.word_value = m_d.b.h; break; // A |
| 203 | case 1: result.word_value = m_d.b.l; break; // B |
| 204 | case 2: result.word_value = m_x.w; break; // X |
| 205 | case 3: result.word_value = m_y.w; break; // Y |
| 206 | case 4: result.word_value = m_s.w; break; // S |
| 207 | case 5: result.word_value = m_u.w; break; // U |
| 208 | } |
| 209 | result.byte_value = (UINT8) result.word_value; |
| 210 | return result; |
| 211 | } |
| 212 | |
| 213 | |
| 214 | //------------------------------------------------- |
| 215 | // write_exgtfr_register |
| 216 | //------------------------------------------------- |
| 217 | |
| 218 | ATTR_FORCE_INLINE void konami_cpu_device::write_exgtfr_register(UINT8 reg, m6809_base_device::exgtfr_register value) |
| 219 | { |
| 220 | switch(reg & 0x0F) |
| 221 | { |
| 222 | case 0: m_d.b.h = value.byte_value; break; // A |
| 223 | case 1: m_d.b.l = value.byte_value; break; // B |
| 224 | case 2: m_x.w = value.word_value; break; // X |
| 225 | case 3: m_y.w = value.word_value; break; // Y |
| 226 | case 4: m_s.w = value.word_value; break; // S |
| 227 | case 5: m_u.w = value.word_value; break; // U |
| 228 | } |
| 229 | } |
| 230 | |
| 231 | |
| 232 | //------------------------------------------------- |
| 139 | 233 | // safe_shift_right |
| 140 | 234 | //------------------------------------------------- |
| 141 | 235 | |
trunk/src/emu/cpu/m6809/base6x09.ops
| r21595 | r21596 | |
| 355 | 355 | eat(hd6309_native_mode() ? 0 : 1); |
| 356 | 356 | return; |
| 357 | 357 | |
| 358 | | EXG: |
| 359 | | { |
| 360 | | UINT8 param = read_opcode_arg(); |
| 361 | | exgtfr_register reg1 = read_exgtfr_register(param >> 4); |
| 362 | | exgtfr_register reg2 = read_exgtfr_register(param >> 0); |
| 363 | | write_exgtfr_register(param >> 4, reg2); |
| 364 | | write_exgtfr_register(param >> 0, reg1); |
| 365 | | } |
| 366 | | eat(hd6309_native_mode() ? 3 : 6); |
| 367 | | return; |
| 368 | | |
| 369 | | TFR: |
| 370 | | { |
| 371 | | UINT8 param = read_opcode_arg(); |
| 372 | | exgtfr_register reg = read_exgtfr_register(param >> 4); |
| 373 | | write_exgtfr_register(param >> 0, reg); |
| 374 | | } |
| 375 | | eat(hd6309_native_mode() ? 2 : 4); |
| 376 | | return; |
| 377 | | |
| 378 | 358 | BRANCH: |
| 379 | 359 | @m_temp.b.l = read_opcode_arg(); |
| 380 | 360 | eat(1); |
trunk/src/emu/cpu/m6809/m6809.ops
| r21595 | r21596 | |
| 554 | 554 | @set_ea(m_temp.w); |
| 555 | 555 | return; |
| 556 | 556 | |
| 557 | EXG: |
| 558 | { |
| 559 | UINT8 param = read_opcode_arg(); |
| 560 | exgtfr_register reg1 = read_exgtfr_register(param >> 4); |
| 561 | exgtfr_register reg2 = read_exgtfr_register(param >> 0); |
| 562 | write_exgtfr_register(param >> 4, reg2); |
| 563 | write_exgtfr_register(param >> 0, reg1); |
| 564 | } |
| 565 | eat(hd6309_native_mode() ? 3 : 6); |
| 566 | return; |
| 567 | |
| 568 | TFR: |
| 569 | { |
| 570 | UINT8 param = read_opcode_arg(); |
| 571 | exgtfr_register reg = read_exgtfr_register(param >> 4); |
| 572 | write_exgtfr_register(param >> 0, reg); |
| 573 | } |
| 574 | eat(hd6309_native_mode() ? 2 : 4); |
| 575 | return; |
| 576 | |
| 557 | 577 | ILLEGAL: |
| 558 | 578 | log_illegal(); |
| 559 | 579 | return; |