trunk/src/emu/cpu/hmcs40/hmcs40.c
| r244976 | r244977 | |
| 459 | 459 | { |
| 460 | 460 | m_icount--; |
| 461 | 461 | push_stack(); |
| 462 | m_ie = 0; |
| 462 | 463 | |
| 463 | 464 | // line 0/1 for external interrupt, let's use 2 for t/c interrupt |
| 464 | 465 | int line = (m_iri) ? m_eint_line : 2; |
| r244976 | r244977 | |
| 466 | 467 | // vector $3f, on page 0(timer/counter), or page 1(external) |
| 467 | 468 | // external interrupt has priority over t/c interrupt |
| 468 | 469 | m_pc = 0x3f | (m_iri ? 0x40 : 0); |
| 469 | | m_iri = m_irt = 0; |
| 470 | | m_ie = 0; |
| 470 | if (m_iri) |
| 471 | m_iri = 0; |
| 472 | else |
| 473 | m_irt = 0; |
| 471 | 474 | |
| 472 | 475 | standard_irq_callback(line); |
| 473 | 476 | } |
| r244976 | r244977 | |
| 554 | 557 | |
| 555 | 558 | // LPU is handled 1 cycle later |
| 556 | 559 | if ((m_prev_op & 0x3e0) == 0x340) |
| 560 | { |
| 561 | if ((m_op & 0x1c0) != 0x1c0) |
| 562 | logerror("%s LPU without BR/CAL at $%04X\n", tag(), m_prev_pc); |
| 563 | |
| 557 | 564 | m_pc = ((m_page << 6) | (m_pc & 0x3f)) & m_pcmask; |
| 565 | } |
| 558 | 566 | |
| 559 | 567 | // check/handle interrupt, but not in the middle of a long jump |
| 560 | 568 | if (m_ie && (m_iri || m_irt) && (m_op & 0x3e0) != 0x340) |
| r244976 | r244977 | |
| 567 | 575 | // fetch next opcode |
| 568 | 576 | debugger_instruction_hook(this, m_pc); |
| 569 | 577 | m_op = m_program->read_word(m_pc << 1) & 0x3ff; |
| 570 | | m_i = BITSWAP8(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for immediate param |
| 578 | m_i = BITSWAP8(m_op,7,6,5,4,0,1,2,3) & 0xf; // reversed bit-order for immediate param (except for XAMR?) |
| 571 | 579 | increment_pc(); |
| 572 | 580 | |
| 573 | 581 | // handle opcode |
| r244976 | r244977 | |
| 633 | 641 | break; |
| 634 | 642 | case 0x034: |
| 635 | 643 | //op_illegal(); |
| 636 | | op_amc(); // mirror? |
| 644 | //op_amc(); // mirror? |
| 645 | op_am(); |
| 637 | 646 | break; |
| 638 | 647 | |
| 639 | 648 | case 0x230: |
| r244976 | r244977 | |
| 641 | 650 | break; |
| 642 | 651 | case 0x234: |
| 643 | 652 | //op_illegal(); |
| 644 | | op_smc(); // mirror? |
| 653 | //op_smc(); // mirror? |
| 654 | op_nega(); |
| 645 | 655 | break; |
| 646 | 656 | |
| 647 | 657 | |