Previous 199869 Revisions Next

r32216 Friday 19th September, 2014 at 19:54:14 UTC by Wilbert Pol
(MESS) nes.c: Reduce some tagmap lookups (nw)
[src/emu/bus/nes]bandai.c bootleg.c cony.c datach.c disksys.c event.c ggenie.c henggedianzi.c hosenkan.c irem.c jaleco.c jy.c kaiser.c konami.c legacy.c mmc3.c mmc5.c namcot.c nes_slot.c nes_slot.h pirate.c rcm.c somari.c sunsoft.c sunsoft_dcs.c taito.c tengen.c waixing.c

trunk/src/emu/bus/nes/irem.c
r32215r32216
131131{
132132   common_start();
133133   irq_timer = timer_alloc(TIMER_IRQ);
134   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
134   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
135135
136136   save_item(NAME(m_irq_enable));
137137   save_item(NAME(m_irq_count));
r32215r32216
295295
296296         if (!m_irq_count)
297297         {
298            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
298            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
299299            m_irq_enable = 0;
300300         }
301301      }
r32215r32216
318318
319319      case 0x1003:
320320         m_irq_enable = data & 0x80;
321         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
321         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
322322         break;
323323
324324      case 0x1004:
325325         m_irq_count = m_irq_count_latch;
326         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
326         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
327327         break;
328328
329329      case 0x1005:
trunk/src/emu/bus/nes/mmc3.c
r32215r32216
202202      {
203203         LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
204204                  machine().first_screen()->vpos(), machine().first_screen()->hpos()));
205         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
205         m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
206206      }
207207   }
208208   m_irq_clear = 0;
r32215r32216
301301
302302      case 0x6000:
303303         m_irq_enable = 0;
304         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
304         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
305305         break;
306306
307307      case 0x6001:
trunk/src/emu/bus/nes/mmc5.c
r32215r32216
235235   if (scanline == m_irq_count)
236236   {
237237      if (m_irq_enable)
238         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
238         m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
239239
240240      m_irq_status = 0xff;
241241   }
r32215r32216
444444      case 0x1204:
445445         value = m_irq_status;
446446         m_irq_status &= ~0x80;
447         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
447         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
448448         return value;
449449
450450      case 0x1205:
trunk/src/emu/bus/nes/bandai.c
r32215r32216
129129{
130130   common_start();
131131   irq_timer = timer_alloc(TIMER_IRQ);
132   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
132   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
133133
134134   save_item(NAME(m_irq_enable));
135135   save_item(NAME(m_irq_count));
r32215r32216
150150{
151151   common_start();
152152   irq_timer = timer_alloc(TIMER_IRQ);
153   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
153   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
154154
155155   save_item(NAME(m_irq_enable));
156156   save_item(NAME(m_irq_count));
r32215r32216
173173{
174174   common_start();
175175   irq_timer = timer_alloc(TIMER_IRQ);
176   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
176   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
177177
178178   save_item(NAME(m_reg));
179179}
r32215r32216
306306
307307         if (!m_irq_count)
308308         {
309            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
309            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
310310            m_irq_enable = 0;
311311         }
312312      }
r32215r32216
337337         break;
338338      case 0x0a:
339339         m_irq_enable = data & 0x01;
340         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
340         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
341341         break;
342342      case 0x0b:
343343         m_irq_count = (m_irq_count & 0xff00) | data;
trunk/src/emu/bus/nes/konami.c
r32215r32216
129129{
130130   common_start();
131131   irq_timer = timer_alloc(TIMER_IRQ);
132   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
132   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
133133
134134   save_item(NAME(m_irq_mode));
135135   save_item(NAME(m_irq_enable));
r32215r32216
157157{
158158   common_start();
159159   irq_timer = timer_alloc(TIMER_IRQ);
160   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
160   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
161161
162162   save_item(NAME(m_irq_mode));
163163   save_item(NAME(m_irq_prescale));
r32215r32216
198198{
199199   common_start();
200200   irq_timer = timer_alloc(TIMER_IRQ);
201   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
201   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
202202
203203   save_item(NAME(m_irq_mode));
204204   save_item(NAME(m_irq_prescale));
r32215r32216
369369         {
370370            if ((m_irq_count & 0x00ff) == 0xff)
371371            {
372               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
372               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
373373               m_irq_count = m_irq_count_latch;
374374            }
375375            else
r32215r32216
379379         {
380380            if (m_irq_count == 0xffff)
381381            {
382               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
382               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
383383               m_irq_count = m_irq_count_latch;
384384            }
385385            else
r32215r32216
413413         m_irq_enable_latch = data & 0x01;
414414         if (data & 0x02)
415415            m_irq_count = m_irq_count_latch;
416         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
416         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
417417         break;
418418      case 0x5000:
419419         m_irq_enable = m_irq_enable_latch;
420         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
420         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
421421         break;
422422      case 0x7000:
423423         prg16_89ab(data);
r32215r32216
441441   if (m_irq_count == 0xff)
442442   {
443443      m_irq_count = m_irq_count_latch;
444      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
444      m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
445445   }
446446   else
447447      m_irq_count++;
r32215r32216
543543               m_irq_enable_latch = data & 0x01;
544544               if (data & 0x02)
545545                  m_irq_count = m_irq_count_latch;
546               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
546               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
547547               break;
548548            case 0x300:
549549               m_irq_enable = m_irq_enable_latch;
550               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
550               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
551551               break;
552552         }
553553         break;
r32215r32216
619619               m_irq_enable_latch = data & 0x01;
620620               if (data & 0x02)
621621                  m_irq_count = m_irq_count_latch;
622               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
622               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
623623               break;
624624            case 0x200:
625625               m_irq_enable = m_irq_enable_latch;
626               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
626               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
627627               break;
628628            default:
629629               logerror("VRC-6 write_h uncaught write, addr: %04x value: %02x\n", ((offset & 0x7000) | add_lines) + 0x8000, data);
r32215r32216
734734         m_irq_enable_latch = data & 0x01;
735735         if (data & 0x02)
736736            m_irq_count = m_irq_count_latch;
737         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
737         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
738738         break;
739739      case 0x7008: case 0x7010: case 0x7018:
740740         m_irq_enable = m_irq_enable_latch;
741         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
741         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
742742         break;
743743
744744      default:
trunk/src/emu/bus/nes/namcot.c
r32215r32216
146146{
147147   common_start();
148148   irq_timer = timer_alloc(TIMER_IRQ);
149   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
149   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
150150
151151   save_item(NAME(m_irq_enable));
152152   save_item(NAME(m_irq_count));
r32215r32216
172172{
173173   common_start();
174174   irq_timer = timer_alloc(TIMER_IRQ);
175   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
175   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
176176
177177   save_item(NAME(m_irq_enable));
178178   save_item(NAME(m_irq_count));
r32215r32216
200200{
201201   common_start();
202202   irq_timer = timer_alloc(TIMER_IRQ);
203   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
203   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
204204
205205   save_item(NAME(m_irq_enable));
206206   save_item(NAME(m_irq_count));
r32215r32216
403403      if (m_irq_enable)
404404      {
405405         if (m_irq_count == 0x7fff)  // counter does not wrap to 0!
406            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
406            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
407407         else
408408            m_irq_count++;
409409      }
r32215r32216
419419   {
420420      case 0x1000: /* low byte of IRQ */
421421         m_irq_count = (m_irq_count & 0x7f00) | data;
422         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
422         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
423423         break;
424424      case 0x1800: /* high byte of IRQ, IRQ enable in high bit */
425425         m_irq_count = (m_irq_count & 0xff) | ((data & 0x7f) << 8);
426426         m_irq_enable = data & 0x80;
427         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
427         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
428428         break;
429429   }
430430}
r32215r32216
438438   {
439439      case 0x1000:
440440         return m_irq_count & 0xff;
441         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
441         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
442442      case 0x1800:
443443         return (m_irq_count >> 8) & 0xff;
444         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
444         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
445445      default:
446446         return 0x00;
447447   }
trunk/src/emu/bus/nes/datach.c
r32215r32216
242242   common_start();
243243   irq_timer = timer_alloc(TIMER_IRQ);
244244   serial_timer = timer_alloc(TIMER_SERIAL);
245   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
246   serial_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1000));
245   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
246   serial_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1000));
247247
248248   save_item(NAME(m_irq_enable));
249249   save_item(NAME(m_irq_count));
r32215r32216
409409
410410         if (!m_irq_count)
411411         {
412            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
412            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
413413            m_irq_enable = 0;
414414         }
415415      }
trunk/src/emu/bus/nes/pirate.c
r32215r32216
427427{
428428   common_start();
429429   irq_timer = timer_alloc(TIMER_IRQ);
430   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
430   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
431431
432432   save_item(NAME(m_prg_reg));
433433   save_item(NAME(m_prg_mode));
r32215r32216
580580      {
581581         m_irq_count--;
582582         if (!m_irq_count)
583            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
583            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
584584      }
585585   }
586586}
r32215r32216
904904   {
905905      m_irq_count = m_irq_count_latch;
906906      m_irq_enable = m_irq_enable_latch;
907      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
907      m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
908908   }
909909}
910910
r32215r32216
985985      {
986986         LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
987987                  machine().first_screen()->vpos(), machine().first_screen()->hpos()));
988         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
988         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
989989      }
990990   }
991991   m_irq_clear = 0;
r32215r32216
10391039   {
10401040      m_irq_count = m_irq_count_latch;
10411041      m_irq_enable = m_irq_enable_latch;
1042      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1042      m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
10431043   }
10441044}
10451045
r32215r32216
11661166   {
11671167      m_irq_count++;
11681168      if ((m_irq_count & 0xff) == 238)
1169         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1169         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
11701170   }
11711171}
11721172
r32215r32216
12451245      {
12461246         if (!m_irq_count)
12471247         {
1248            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1248            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
12491249            m_irq_count = 0xffff;
12501250         }
12511251         else
trunk/src/emu/bus/nes/nes_slot.c
r32215r32216
665665
666666void device_nes_cart_interface::pcb_start(running_machine &machine, UINT8 *ciram_ptr, bool cart_mounted)
667667{
668
669   m_maincpu = machine.device<cpu_device>("maincpu");
670
668671   if (cart_mounted)      // disksys expansion can arrive here without the memory banks!
669672   {
670673      // Setup PRG
trunk/src/emu/bus/nes/sunsoft_dcs.c
r32215r32216
175175   common_start();
176176   ntb_enable_timer = timer_alloc(TIMER_PROTECT);
177177   ntb_enable_timer->reset();
178   timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(107520);
178   timer_freq = m_maincpu->cycles_to_attotime(107520);
179179
180180   save_item(NAME(m_latch1));
181181   save_item(NAME(m_latch2));
trunk/src/emu/bus/nes/bootleg.c
r32215r32216
208208   common_start();
209209   irq_timer = timer_alloc(TIMER_IRQ);
210210   irq_timer->reset();
211   timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(24576);
211   timer_freq = m_maincpu->cycles_to_attotime(24576);
212212
213213   save_item(NAME(m_irq_enable));
214214   save_item(NAME(m_latch));
r32215r32216
243243{
244244   common_start();
245245   irq_timer = timer_alloc(TIMER_IRQ);
246   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
246   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
247247
248248   save_item(NAME(m_irq_enable));
249249   save_item(NAME(m_irq_count));
r32215r32216
297297{
298298   common_start();
299299   irq_timer = timer_alloc(TIMER_IRQ);
300   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
300   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
301301
302302   save_item(NAME(m_irq_enable));
303303   save_item(NAME(m_irq_count));
r32215r32216
320320{
321321   common_start();
322322   irq_timer = timer_alloc(TIMER_IRQ);
323   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
323   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
324324
325325   save_item(NAME(m_irq_enable));
326326   save_item(NAME(m_irq_count));
r32215r32216
343343{
344344   common_start();
345345   irq_timer = timer_alloc(TIMER_IRQ);
346   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
346   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
347347
348348   save_item(NAME(m_irq_enable));
349349   save_item(NAME(m_irq_count));
r32215r32216
429429{
430430   common_start();
431431   irq_timer = timer_alloc(TIMER_IRQ);
432   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
432   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
433433
434434   save_item(NAME(m_irq_enable));
435435   save_item(NAME(m_irq_count));
r32215r32216
510510   common_start();
511511   irq_timer = timer_alloc(TIMER_IRQ);
512512   // always running and checking for IRQ every 114 cycles? or resetting every frame?
513   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(114));
513   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(114));
514514
515515   save_item(NAME(m_irq_enable));
516516   save_item(NAME(m_irq_count));
r32215r32216
627627      {
628628         LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
629629                  machine().first_screen()->vpos(), machine().first_screen()->hpos()));
630         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
630         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
631631         m_irq_enable = 0;
632632      }
633633   }
r32215r32216
691691{
692692   if (id == TIMER_IRQ)
693693   {
694      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
694      m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
695695      irq_timer->adjust(attotime::never);
696696   }
697697}
r32215r32216
783783      {
784784         if (m_irq_count == 0xffff)
785785         {
786            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
786            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
787787            m_irq_enable = 0;
788788         }
789789         else
r32215r32216
857857      return;
858858
859859   m_irq_count = 0;
860   machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
860   m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
861861}
862862
863863WRITE8_MEMBER(nes_btl_dn_device::write_h)
r32215r32216
946946      {
947947         if (m_irq_count == 0xfff)
948948         {
949            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
949            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
950950            m_irq_enable = 0;
951951            m_irq_count = 0;
952952         }
r32215r32216
10281028      {
10291029         if (m_irq_count == 0xfff)
10301030         {
1031            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1031            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
10321032            m_irq_enable = 0;
10331033            m_irq_count = 0;
10341034         }
r32215r32216
10851085      {
10861086         if (m_irq_count == 0xfff)
10871087         {
1088            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1088            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
10891089            m_irq_enable = 0;
10901090            m_irq_count = 0;
10911091         }
r32215r32216
13301330         if (m_irq_count > 7560)//value from FCEUMM...
13311331         {
13321332            m_irq_count = 0;
1333            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
1333            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
13341334         }
13351335      }
13361336   }
r32215r32216
13671367            m_irq_enable = BIT(data, 1);
13681368            m_irq_count = 0;
13691369            if (!m_irq_enable)
1370               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
1370               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
13711371            break;
13721372         case 0x7000:
13731373            m_reg = data & 0x0f;
r32215r32216
15721572      m_irq_count &= 0xff;
15731573
15741574      if (m_irq_enable && !m_irq_count)
1575         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
1575         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
15761576   }
15771577}
15781578
trunk/src/emu/bus/nes/nes_slot.h
r32215r32216
232232   dynamic_buffer m_vram;
233233   dynamic_buffer m_battery;
234234   UINT8 *m_ciram;
235   cpu_device *m_maincpu;
235236
236237   // these are specific of some boards but must be accessible from the driver
237238   // E.g. additional save ram for HKROM, X1-005 & X1-017 boards, or ExRAM for MMC5
trunk/src/emu/bus/nes/jaleco.c
r32215r32216
209209{
210210   common_start();
211211   irq_timer = timer_alloc(TIMER_IRQ);
212   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
212   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
213213
214214   save_item(NAME(m_mmc_prg_bank));
215215   save_item(NAME(m_mmc_vrom_bank));
r32215r32216
434434         {
435435            if (!(m_irq_count & 0x000f))
436436            {
437               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
437               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
438438               m_irq_count = (m_irq_count & 0xfff0) | 0x000f;
439439            }
440440            else
r32215r32216
444444         {
445445            if (!(m_irq_count & 0x00ff))
446446            {
447               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
447               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
448448               m_irq_count = (m_irq_count & 0xff00) | 0x00ff;
449449            }
450450            else
r32215r32216
454454         {
455455            if (!(m_irq_count & 0x0fff))
456456            {
457               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
457               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
458458               m_irq_count = (m_irq_count & 0xf000) | 0x0fff;
459459            }
460460            else
r32215r32216
464464         {
465465            if (!m_irq_count)
466466            {
467               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
467               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
468468               m_irq_count = 0xffff;
469469            }
470470            else
r32215r32216
536536         break;
537537      case 0x7000:
538538         m_irq_count = m_irq_count_latch;
539         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
539         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
540540         break;
541541      case 0x7001:
542542         m_irq_enable = data & 0x01;
543543         m_irq_mode = data & 0x0e;
544         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
544         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
545545         break;
546546
547547      case 0x7002:
trunk/src/emu/bus/nes/cony.c
r32215r32216
6262{
6363   common_start();
6464   irq_timer = timer_alloc(TIMER_IRQ);
65   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
65   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
6666
6767   save_item(NAME(m_irq_enable));
6868   save_item(NAME(m_irq_count));
r32215r32216
9898{
9999   common_start();
100100   irq_timer = timer_alloc(TIMER_IRQ);
101   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
101   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
102102
103103   save_item(NAME(m_irq_enable));
104104   save_item(NAME(m_irq_count));
r32215r32216
161161      {
162162         if (!m_irq_count)
163163         {
164            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
164            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
165165            m_irq_enable = 0;
166166            m_irq_count = 0xffff;
167167         }
trunk/src/emu/bus/nes/kaiser.c
r32215r32216
138138{
139139   common_start();
140140   irq_timer = timer_alloc(TIMER_IRQ);
141   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
141   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
142142
143143   save_item(NAME(m_latch));
144144   save_item(NAME(m_irq_enable));
r32215r32216
164164{
165165   common_start();
166166   irq_timer = timer_alloc(TIMER_IRQ);
167   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
167   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
168168
169169   save_item(NAME(m_latch));
170170   save_item(NAME(m_irq_enable));
r32215r32216
329329         {
330330            m_irq_enable = 0;
331331            m_irq_count = 0;
332            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
332            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
333333         }
334334         else
335335            m_irq_count++;
r32215r32216
445445      {
446446         if (!m_irq_count)
447447         {
448            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
448            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
449449            m_irq_enable = 0;
450450            m_irq_status |= 0x01;
451451         }
trunk/src/emu/bus/nes/tengen.c
r32215r32216
8484   common_start();
8585   irq_timer = timer_alloc(TIMER_IRQ);
8686   irq_timer->reset();
87   timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(4);
87   timer_freq = m_maincpu->cycles_to_attotime(4);
8888
8989   save_item(NAME(m_mmc_prg_bank));
9090   save_item(NAME(m_mmc_vrom_bank));
r32215r32216
177177
178178   m_irq_count--;
179179   if (m_irq_enable && !blanked && !m_irq_count)
180      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
180      m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
181181}
182182
183183// we use the HBLANK IRQ latch from PPU for the scanline based IRQ mode
r32215r32216
306306
307307      case 0x6000:
308308         m_irq_enable = 0;
309         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
309         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
310310         break;
311311
312312      case 0x6001:
trunk/src/emu/bus/nes/jy.c
r32215r32216
7676   common_start();
7777   irq_timer = timer_alloc(TIMER_IRQ);
7878   irq_timer->reset();
79   timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(1);
79   timer_freq = m_maincpu->cycles_to_attotime(1);
8080
8181   save_item(NAME(m_mul));
8282   save_item(NAME(m_latch));
r32215r32216
221221
222222      // if count wraps, check if IRQ is enabled
223223      if (fire && m_irq_enable && !blanked)
224         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
224         m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
225225
226226   }
227227}
r32215r32216
478478                  m_irq_enable = 1;
479479               else
480480               {
481                  machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
481                  m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
482482                  m_irq_enable = 0;
483483               }
484484               break;
r32215r32216
493493                  irq_timer->adjust(attotime::never);
494494               break;
495495            case 2:
496               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
496               m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
497497               m_irq_enable = 0;
498498               break;
499499            case 3:
trunk/src/emu/bus/nes/henggedianzi.c
r32215r32216
196196      {
197197         m_irq_count = m_irq_count_latch;
198198         m_irq_enable = m_irq_enable | ((m_irq_enable & 0x01) << 1);
199         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
199         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
200200      }
201201      else
202202         m_irq_count++;
trunk/src/emu/bus/nes/sunsoft.c
r32215r32216
123123{
124124   common_start();
125125   irq_timer = timer_alloc(TIMER_IRQ);
126   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
126   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
127127
128128   save_item(NAME(m_irq_enable));
129129   save_item(NAME(m_irq_toggle));
r32215r32216
169169   irq_timer = timer_alloc(TIMER_IRQ);
170170   // this has to be hardcoded because some some scanline code only suits NTSC... it will be fixed with PPU rewrite
171171   irq_timer->adjust(attotime::zero, 0, attotime::from_hz((21477272.724 / 12)));
172//  irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
172//  irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
173173
174174   save_item(NAME(m_wram_bank));
175175   save_item(NAME(m_latch));
r32215r32216
272272      {
273273         if (!m_irq_count)
274274         {
275            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
275            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
276276            m_irq_count = 0xffff;
277277            m_irq_enable = 0;
278278         }
r32215r32216
311311      case 0x5800:
312312         m_irq_enable = BIT(data, 4);
313313         m_irq_toggle = 0;
314         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
314         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
315315         break;
316316      case 0x6800:
317317         switch (data & 3)
r32215r32216
467467         {
468468            m_irq_count = 0xffff;
469469            if (m_irq_enable & 0x01) // bit0, trigger enable
470               machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
470               m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
471471         }
472472         else
473473            m_irq_count--;
r32215r32216
516516            case 0x0d:
517517               m_irq_enable = data;
518518               if (!(m_irq_enable & 1))
519                  machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
519                  m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
520520               break;
521521            case 0x0e:
522522               m_irq_count = (m_irq_count & 0xff00) | data;
trunk/src/emu/bus/nes/legacy.c
r32215r32216
7979{
8080   common_start();
8181   irq_timer = timer_alloc(TIMER_IRQ);
82   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
82   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
8383
8484   save_item(NAME(m_exram));
8585   save_item(NAME(m_exram_enabled));
r32215r32216
167167      {
168168         if (m_irq_count == 0xffff)
169169         {
170            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
170            m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
171171            m_irq_count = 0;
172172            m_irq_enable = 0;
173173         }
r32215r32216
193193
194194      case 0x401:
195195         m_irq_enable = 0;
196         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
196         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
197197         break;
198198      case 0x402:
199199         m_irq_count = (m_irq_count & 0xff00) | data;
r32215r32216
275275
276276      case 0x401:
277277         m_irq_enable = 0;
278         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
278         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
279279         break;
280280      case 0x402:
281281         m_irq_count = (m_irq_count & 0xff00) | data;
trunk/src/emu/bus/nes/waixing.c
r32215r32216
979979   {
980980      m_irq_count = m_irq_count_latch;
981981      m_irq_enable = m_irq_enable_latch;
982      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
982      m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
983983   }
984984}
985985
trunk/src/emu/bus/nes/event.c
r32215r32216
4848   common_start();
4949   event_timer = timer_alloc(TIMER_EVENT);
5050   event_timer->adjust(attotime::never);
51   timer_freq = machine().device<cpu_device>("maincpu")->cycles_to_attotime(1);
51   timer_freq = m_maincpu->cycles_to_attotime(1);
5252
5353   save_item(NAME(m_latch));
5454   save_item(NAME(m_count));
r32215r32216
150150   if (m_reg[1] & 0x10)
151151   {
152152      m_timer_enabled = 1;
153      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
153      m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
154154   }
155155   else
156156   {
r32215r32216
233233      m_timer_count--;
234234      if (!m_timer_count)
235235      {
236         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
236         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
237237         event_timer->reset();
238238      }
239239   }
trunk/src/emu/bus/nes/rcm.c
r32215r32216
277277   {
278278      m_irq_count--;
279279      if (!m_irq_count)
280         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
280         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
281281   }
282282}
283283
trunk/src/emu/bus/nes/disksys.c
r32215r32216
123123   m_disk->floppy_install_unload_proc(nes_disksys_device::unload_proc);
124124
125125   irq_timer = timer_alloc(TIMER_IRQ);
126   irq_timer->adjust(attotime::zero, 0, machine().device<cpu_device>("maincpu")->cycles_to_attotime(1));
126   irq_timer->adjust(attotime::zero, 0, m_maincpu->cycles_to_attotime(1));
127127   
128128   save_item(NAME(m_fds_motor_on));
129129   save_item(NAME(m_fds_door_closed));
r32215r32216
212212void nes_disksys_device::hblank_irq(int scanline, int vblank, int blanked)
213213{   
214214   if (m_irq_transfer)
215      machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
215      m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
216216}
217217
218218WRITE8_MEMBER(nes_disksys_device::write_ex)
r32215r32216
378378         m_irq_count--;
379379         if (!m_irq_count)
380380         {
381            machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
381            m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
382382            m_irq_enable = 0;
383383            m_fds_status0 |= 0x01;
384384            m_irq_count_latch = 0;   // used in Kaettekita Mario Bros
trunk/src/emu/bus/nes/somari.c
r32215r32216
232232      case 0x2001: break;
233233      case 0x4000: m_irq_count_latch = data; break;
234234      case 0x4001: m_irq_count = 0; break;
235      case 0x6000: m_irq_enable = 0; machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE); break;
235      case 0x6000: m_irq_enable = 0; m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE); break;
236236      case 0x6001: m_irq_enable = 1; break;
237237   }
238238}
trunk/src/emu/bus/nes/ggenie.c
r32215r32216
119119      if (offset == 0 && data == 0)
120120      {
121121         m_gg_bypass = 1;
122         machine().device<cpu_device>("maincpu")->set_pc(0xfffc);
122         m_maincpu->set_pc(0xfffc);
123123      }
124124      else
125125      {
trunk/src/emu/bus/nes/hosenkan.c
r32215r32216
9696      {
9797         LOG_MMC(("irq fired, scanline: %d (MAME %d, beam pos: %d)\n", scanline,
9898                  machine().first_screen()->vpos(), machine().first_screen()->hpos()));
99         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, HOLD_LINE);
99         m_maincpu->set_input_line(M6502_IRQ_LINE, HOLD_LINE);
100100      }
101101   }
102102   m_irq_clear = 0;
trunk/src/emu/bus/nes/taito.c
r32215r32216
238238         m_irq_count--;
239239
240240      if (m_irq_enable && !blanked && (m_irq_count == 0) && prior_count)
241         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
241         m_maincpu->set_input_line(M6502_IRQ_LINE, ASSERT_LINE);
242242   }
243243}
244244
r32215r32216
271271         break;
272272      case 0x4003:
273273         m_irq_enable = 0;
274         machine().device("maincpu")->execute().set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
274         m_maincpu->set_input_line(M6502_IRQ_LINE, CLEAR_LINE);
275275         break;
276276      case 0x6000:
277277         set_nt_mirroring(BIT(data, 6) ? PPU_MIRROR_HORZ : PPU_MIRROR_VERT);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team