Previous 199869 Revisions Next

r20170 Wednesday 9th January, 2013 at 23:26:45 UTC by Angelo Salese
Improved irq routine
[src/mame/includes]3do.h
[src/mame/machine]3do.c

trunk/src/mame/machine/3do.c
r20169r20170
6161#define LOG(x) do { if (VERBOSE) printf x; } while (0)
6262
6363/*
640x80000000 Second Priority (?)
640x80000000 Second Priority
65650x40000000 SW irq
66660x20000000 DMA<->EXP
67670x1fff0000 DMA RAM->DSPP *
68680x0000f000 DMA DSPP->RAM *
69690x00000800 DSPP
70700x00000400 Timer  1
710x00000200 Timer  3
710x00000200 Timer  3 <- needed to surpass current hang point
72720x00000100 Timer  5
73730x00000080 Timer  7
74740x00000040 Timer  9
r20169r20170
79790x00000002 Vertical 1
80800x00000001 Vertical 0
8181*/
82void _3do_state::m_3do_request_fiq0(UINT32 irq_req)
82void _3do_state::m_3do_request_fiq(UINT32 irq_req, UINT8 type)
8383{
84   m_clio.irq0 |= irq_req;
84   if(type)
85      m_clio.irq1 |= irq_req;
86   else
87      m_clio.irq0 |= irq_req;
8588
86   if(m_clio.irq0 & m_clio.irq0_enable)
87      m_maincpu->set_input_line(ARM7_FIRQ_LINE, ASSERT_LINE);
89   if(m_clio.irq1)
90      m_clio.irq0 |= 1 << 31; // Second Priority
91   else
92      m_clio.irq0 &= ~(1 << 31);
8893
89   if((m_clio.irq0 & m_clio.irq0_enable) == 0)
90      m_maincpu->set_input_line(ARM7_FIRQ_LINE, CLEAR_LINE);
94   if((m_clio.irq0 & m_clio.irq0_enable) || (m_clio.irq1 & m_clio.irq1_enable))
95   {
96      printf("Go irq %08x & %08x %08x & %08x\n",m_clio.irq0, m_clio.irq0_enable, m_clio.irq1, m_clio.irq1_enable);
97      generic_pulse_irq_line(m_maincpu, ARM7_FIRQ_LINE, 1);
98   }
9199}
92100
93101/*
r20169r20170
1031110x00000002 Disk Inserted
1041120x00000001 DMA Player bus
105113*/
106void _3do_state::m_3do_request_fiq1(UINT32 irq_req)
107{
108   m_clio.irq1 |= irq_req;
109114
110   if(m_clio.irq1 & m_clio.irq1_enable)
111      m_maincpu->set_input_line(ARM7_FIRQ_LINE, ASSERT_LINE);
112115
113   if((m_clio.irq1 & m_clio.irq1_enable) == 0)
114      m_maincpu->set_input_line(ARM7_FIRQ_LINE, CLEAR_LINE);
115}
116
117
118116READ32_MEMBER(_3do_state::_3do_nvarea_r){
119117   logerror( "%08X: NVRAM read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset );
120118   return 0;
r20169r20170
608606
609607READ32_MEMBER(_3do_state::_3do_clio_r)
610608{
611   logerror( "%08X: CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
609   if (!space.debugger_access())
610      logerror( "%08X: CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
612611
613612   switch( offset )
614613   {
r20169r20170
759758      return m_clio.uncle_rom;
760759
761760   default:
761   if (!space.debugger_access())
762762      logerror( "%08X: unhandled CLIO read offset = %08X\n", machine().device("maincpu")->safe_pc(), offset * 4 );
763763      break;
764764   }
r20169r20170
806806   case 0x0040/4:
807807      LOG(("%08x PEND0\n",data));
808808      m_clio.irq0 |= data;
809      m_3do_request_fiq0(0);
809      m_3do_request_fiq(0,0);
810810      break;
811811   case 0x0044/4:
812812      LOG(("%08x PEND0 CLEAR\n",data));
813813      m_clio.irq0 &= ~data;
814      m_3do_request_fiq0(0);
814      m_3do_request_fiq(0,0);
815815      break;
816816   case 0x0048/4:
817817      LOG(("%08x MASK0\n",data));
818818      m_clio.irq0_enable |= data;
819      m_3do_request_fiq0(0);
819      m_3do_request_fiq(0,0);
820820      break;
821821   case 0x004c/4:
822822      LOG(("%08x MASK0 CLEAR\n",data));
823823      m_clio.irq0_enable &= ~data;
824      m_3do_request_fiq0(0);
824      m_3do_request_fiq(0,0);
825825      break;
826826   case 0x0050/4:
827827      m_clio.mode |= data;
r20169r20170
838838   case 0x0060/4:
839839      LOG(("%08x PEND1\n",data));
840840      m_clio.irq1 |= data;
841      m_3do_request_fiq1(0);
841      m_3do_request_fiq(0,1);
842842      break;
843843   case 0x0064/4:
844844      LOG(("%08x PEND1 CLEAR\n",data));
845845      m_clio.irq1 &= ~data;
846      m_3do_request_fiq1(0);
846      m_3do_request_fiq(0,1);
847847      break;
848848   case 0x0068/4:
849849      LOG(("%08x MASK1\n",data));
850850      m_clio.irq1_enable |= data;
851      m_3do_request_fiq1(0);
851      m_3do_request_fiq(0,1);
852852      break;
853853   case 0x006c/4:
854854      LOG(("%08x MASK1 CLEAR\n",data));
855855      m_clio.irq1_enable &= ~data;
856      m_3do_request_fiq1(0);
856      m_3do_request_fiq(0,1);
857857      break;
858858   case 0x0080/4:
859859      m_clio.hdelay = data;
trunk/src/mame/includes/3do.h
r20169r20170
191191   UINT32 screen_update__3do(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
192192
193193private:
194   void m_3do_request_fiq0(UINT32 irq_req);
195   void m_3do_request_fiq1(UINT32 irq_req);
194   void m_3do_request_fiq(UINT32 irq_req, UINT8 type);
196195};
197196
198197/*----------- defined in machine/3do.c -----------*/

Previous 199869 Revisions Next


© 1997-2024 The MAME Team