trunk/src/mame/machine/smpc.c
| r20876 | r20877 | |
| 529 | 529 | { |
| 530 | 530 | saturn_state *state = machine.driver_data<saturn_state>(); |
| 531 | 531 | |
| 532 | | if(state->m_smpc.IREG[0] != 0) |
| 532 | if(state->m_smpc.intback_buf[0] != 0) |
| 533 | 533 | { |
| 534 | 534 | { |
| 535 | 535 | int i; |
| r20876 | r20877 | |
| 560 | 560 | state->m_smpc.OREG[16+i]=0xff; // undefined |
| 561 | 561 | } |
| 562 | 562 | |
| 563 | | state->m_smpc.intback_stage = (state->m_smpc.IREG[1] & 8) >> 3; // first peripheral |
| 563 | state->m_smpc.intback_stage = (state->m_smpc.intback_buf[1] & 8) >> 3; // first peripheral |
| 564 | 564 | state->m_smpc.SR = 0x40 | state->m_smpc.intback_stage << 5; |
| 565 | | state->m_smpc.pmode = state->m_smpc.IREG[0]>>4; |
| 565 | state->m_smpc.pmode = state->m_smpc.intback_buf[0]>>4; |
| 566 | 566 | |
| 567 | 567 | if(!(state->m_scu.ism & IRQ_SMPC)) |
| 568 | 568 | state->m_maincpu->set_input_line_and_vector(8, HOLD_LINE, 0x47); |
| r20876 | r20877 | |
| 574 | 574 | /* clear hand-shake flag */ |
| 575 | 575 | state->m_smpc.SF = 0x00; |
| 576 | 576 | } |
| 577 | | else if(state->m_smpc.IREG[1] & 8) |
| 577 | else if(state->m_smpc.intback_buf[1] & 8) |
| 578 | 578 | { |
| 579 | | state->m_smpc.intback_stage = (state->m_smpc.IREG[1] & 8) >> 3; // first peripheral |
| 579 | state->m_smpc.intback_stage = (state->m_smpc.intback_buf[1] & 8) >> 3; // first peripheral |
| 580 | 580 | state->m_smpc.SR = 0x40; |
| 581 | 581 | state->m_smpc.OREG[31] = 0x10; |
| 582 | 582 | machine.scheduler().timer_set(attotime::from_usec(0), FUNC(intback_peripheral),0); |
| r20876 | r20877 | |
| 702 | 702 | timing += 700; |
| 703 | 703 | |
| 704 | 704 | /* TODO: check if IREG[2] is setted to 0xf0 */ |
| 705 | { |
| 706 | int i; |
| 705 | 707 | |
| 708 | for(i=0;i<3;i++) |
| 709 | state->m_smpc.intback_buf[i] = state->m_smpc.IREG[i]; |
| 710 | } |
| 711 | |
| 706 | 712 | if(LOG_PAD_CMD) printf("INTBACK %02x %02x %d %d\n",state->m_smpc.IREG[0],state->m_smpc.IREG[1],space.machine().primary_screen->vpos(),(int)space.machine().primary_screen->frame_number()); |
| 707 | 713 | space.machine().scheduler().timer_set(attotime::from_usec(timing), FUNC(saturn_smpc_intback),0); //TODO: is variable time correct? |
| 708 | 714 | } |