Previous 199869 Revisions Next

r20847 Friday 8th February, 2013 at 21:30:18 UTC by Wilbert Pol
(MESS) trs80.c: Reduce tagmap lookups (nw)
[src/mess/includes]trs80.h
[src/mess/machine]trs80.c

trunk/src/mess/machine/trs80.c
r20846r20847
3737      {
3838         m_cassette_data = 0;
3939         m_irq |= CASS_FALL;
40         machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE);
40         m_maincpu->set_input_line(0, HOLD_LINE);
4141      }
4242   }
4343   else
r20846r20847
4747      {
4848         m_cassette_data = 1;
4949         m_irq |= CASS_RISE;
50         machine().device("maincpu")->execute().set_input_line(0, HOLD_LINE);
50         m_maincpu->set_input_line(0, HOLD_LINE);
5151      }
5252   }
5353
r20846r20847
7878    d1 Cass 1500 baud Falling
7979    d0 Cass 1500 baud Rising */
8080
81   machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE);
81   m_maincpu->set_input_line(0, CLEAR_LINE);
8282   return ~(m_mask & m_irq);
8383}
8484
r20846r20847
9494    d6 status of Motor Timeout (0=true)
9595    d5 status of Reset signal (0=true - this will reboot the computer) */
9696
97   machine().device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
97   m_maincpu->set_input_line(INPUT_LINE_NMI, CLEAR_LINE);
9898
9999   return ~(m_nmi_mask & m_nmi_data);
100100}
r20846r20847
216216
217217   /* get address space instead of io space */
218218   address_space &mem = m_maincpu->space(AS_PROGRAM);
219   UINT8 *base = memregion("maincpu")->base();
219   UINT8 *base = m_region_maincpu->base();
220220
221221   m_mode = (m_mode & 0x73) | (data & 0x8c);
222222
r20846r20847
361361      switch (m_model4 & 8)
362362      {
363363         case 0:     /* Read-only RAM replaces rom */
364            membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base() + 0x10000);
364            membank("bank1")->set_base(m_region_maincpu->base() + 0x10000);
365365            break;
366366         case 8:     /* Normal setup - rom enabled */
367            membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base());
367            membank("bank1")->set_base(m_region_maincpu->base());
368368            break;
369369      }
370370   }
r20846r20847
572572   {
573573      mem.unmap_readwrite (0x0000, 0x3fff);
574574      mem.install_read_bank (0x0000, 0x2fff, "bank1");
575      membank("bank1")->set_base(machine().root_device().memregion("maincpu")->base());
575      membank("bank1")->set_base(m_region_maincpu->base());
576576      mem.install_readwrite_handler (0x37e0, 0x37e3, read8_delegate(FUNC(trs80_state::trs80_irq_status_r), this), write8_delegate(FUNC(trs80_state::trs80_motor_w), this));
577577      mem.install_readwrite_handler (0x37e8, 0x37eb, read8_delegate(FUNC(trs80_state::trs80_printer_r), this), write8_delegate(FUNC(trs80_state::trs80_printer_w), this));
578578      mem.install_read_handler (0x37ec, 0x37ec, read8_delegate(FUNC(trs80_state::trs80_wd179x_r), this));
r20846r20847
643643   }
644644}
645645
646static void trs80_fdc_interrupt_internal(running_machine &machine)
646void trs80_state::trs80_fdc_interrupt_internal()
647647{
648   trs80_state *state = machine.driver_data<trs80_state>();
649   if (state->m_model4)
648   if (m_model4)
650649   {
651      if (state->m_nmi_mask & 0x80)   // Model 4 does a NMI
650      if (m_nmi_mask & 0x80)   // Model 4 does a NMI
652651      {
653         state->m_nmi_data = 0x80;
654         machine.device("maincpu")->execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
652         m_nmi_data = 0x80;
653         m_maincpu->set_input_line(INPUT_LINE_NMI, PULSE_LINE);
655654      }
656655   }
657656   else        // Model 1 does a IRQ
658657   {
659      state->m_irq |= IRQ_M1_FDC;
660      machine.device("maincpu")->execute().set_input_line(0, HOLD_LINE);
658      m_irq |= IRQ_M1_FDC;
659      m_maincpu->set_input_line(0, HOLD_LINE);
661660   }
662661}
663662
664663INTERRUPT_GEN_MEMBER(trs80_state::trs80_fdc_interrupt)/* not used - should it be? */
665664{
666   trs80_fdc_interrupt_internal(machine());
665   trs80_fdc_interrupt_internal();
667666}
668667
669668WRITE_LINE_MEMBER(trs80_state::trs80_fdc_intrq_w)
670669{
671670   if (state)
672671   {
673      trs80_fdc_interrupt_internal(machine());
672      trs80_fdc_interrupt_internal();
674673   }
675674   else
676675   {
r20846r20847
748747    which is dealt with by the DOS. We take the opportunity to reset the cpu INT line. */
749748
750749   int result = m_irq;
751   machine().device("maincpu")->execute().set_input_line(0, CLEAR_LINE);
750   m_maincpu->set_input_line(0, CLEAR_LINE);
752751   m_irq = 0;
753752   return result;
754753}
trunk/src/mess/includes/trs80.h
r20846r20847
3333   m_fdc(*this, "wd179x"),
3434   m_speaker(*this, SPEAKER_TAG),
3535   m_cass(*this, CASSETTE_TAG),
36   m_p_videoram(*this, "p_videoram")
36   m_p_videoram(*this, "p_videoram"),
37   m_region_maincpu(*this, "maincpu")
3738   { }
3839
3940   required_device<cpu_device> m_maincpu;
r20846r20847
126127   INTERRUPT_GEN_MEMBER(trs80_fdc_interrupt);
127128   TIMER_CALLBACK_MEMBER(cassette_data_callback);
128129   DECLARE_WRITE_LINE_MEMBER(trs80_fdc_intrq_w);
130
131protected:
132   required_memory_region m_region_maincpu;
133
134   void trs80_fdc_interrupt_internal();
129135};
130136
131137

Previous 199869 Revisions Next


© 1997-2024 The MAME Team