Previous 199869 Revisions Next

r36465 Wednesday 18th March, 2015 at 14:35:40 UTC by hap
another small interrupt bugfix
[src/emu/cpu/hmcs40]hmcs40.c

trunk/src/emu/cpu/hmcs40/hmcs40.c
r244976r244977
459459{
460460   m_icount--;
461461   push_stack();
462   m_ie = 0;
462463   
463464   // line 0/1 for external interrupt, let's use 2 for t/c interrupt
464465   int line = (m_iri) ? m_eint_line : 2;
r244976r244977
466467   // vector $3f, on page 0(timer/counter), or page 1(external)
467468   // external interrupt has priority over t/c interrupt
468469   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;
471474
472475   standard_irq_callback(line);
473476}
r244976r244977
554557     
555558      // LPU is handled 1 cycle later
556559      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
557564         m_pc = ((m_page << 6) | (m_pc & 0x3f)) & m_pcmask;
565      }
558566
559567      // check/handle interrupt, but not in the middle of a long jump
560568      if (m_ie && (m_iri || m_irt) && (m_op & 0x3e0) != 0x340)
r244976r244977
567575      // fetch next opcode
568576      debugger_instruction_hook(this, m_pc);
569577      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?)
571579      increment_pc();
572580
573581      // handle opcode
r244976r244977
633641            break;
634642         case 0x034:
635643            //op_illegal();
636            op_amc(); // mirror?
644            //op_amc(); // mirror?
645            op_am();
637646            break;
638647
639648         case 0x230:
r244976r244977
641650            break;
642651         case 0x234:
643652            //op_illegal();
644            op_smc(); // mirror?
653            //op_smc(); // mirror?
654            op_nega();
645655            break;
646656
647657


Previous 199869 Revisions Next


© 1997-2024 The MAME Team