Previous 199869 Revisions Next

r17597 Sunday 2nd September, 2012 at 21:17:19 UTC by Ville Linde
nwk-tr.c: Improved LAN controller emulation [Ville Linde]
[src/mame/drivers]nwk-tr.c

trunk/src/mame/drivers/nwk-tr.c
r17596r17597
236236   UINT8 m_led_reg0;
237237   UINT8 m_led_reg1;
238238   required_shared_ptr<UINT32> m_work_ram;
239   emu_timer *m_sound_irq_timer;
239240   int m_fpga_uploaded;
240241   int m_lanc2_ram_r;
241242   int m_lanc2_ram_w;
r17596r17597
354355      if (ACCESSING_BITS_0_7)
355356      {
356357         if (data & 0x80)   // CG Board 1 IRQ Ack
357         {
358            //cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
359         }
358            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ1, CLEAR_LINE);
360359         if (data & 0x40)   // CG Board 0 IRQ Ack
361         {
362            //cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
363         }
360            cputag_set_input_line(machine(), "maincpu", INPUT_LINE_IRQ0, CLEAR_LINE);
361
362         //set_cgboard_id((data >> 4) & 3);
364363      }
365364      return;
366365   }
r17596r17597
454453
455454         //printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space.device()));
456455      }
456      else if (ACCESSING_BITS_8_15)
457      {
458         m_lanc2_ram_r = 0;
459         m_lanc2_ram_w = 0;
460      }
461      else if (ACCESSING_BITS_16_23)
462      {
463         m_lanc2_ram[2] = (data >> 20) & 0xf;
464      }
457465      else if (ACCESSING_BITS_0_7)
458466      {
459467         m_lanc2_ram[m_lanc2_ram_w & 0x7fff] = data & 0xff;
r17596r17597
466474   }
467475   if (offset == 4)
468476   {
477      // TODO: check if these should be transferred via PPC DMA.
478
469479      if (mame_stricmp(machine().system().name, "thrilld") == 0)
470480      {
471         m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;
472         m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;
473         m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;
474         m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;
481         m_work_ram[(0x3ffed0/4) + 0] = 0x472a3731;      // G*71
482         m_work_ram[(0x3ffed0/4) + 1] = 0x33202020;      // 3
483         m_work_ram[(0x3ffed0/4) + 2] = 0x2d2d2a2a;      // --**
484         m_work_ram[(0x3ffed0/4) + 3] = 0x2a207878;      // *
475485
476         m_work_ram[(0x3fff40/4) + 0] = 0x47433731;
477         m_work_ram[(0x3fff40/4) + 1] = 0x33000000;
478         m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;
479         m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;
486         m_work_ram[(0x3fff40/4) + 0] = 0x47433731;      // GC71
487         m_work_ram[(0x3fff40/4) + 1] = 0x33000000;      // 3
488         m_work_ram[(0x3fff40/4) + 2] = 0x19994a41;      //   JA
489         m_work_ram[(0x3fff40/4) + 3] = 0x4100a9b1;      // A
480490      }
491      else if (mame_stricmp(machine().system().name, "racingj2") == 0)
492      {
493         m_work_ram[(0x3ffc80/4) + 0] = 0x47453838;      // GE88
494         m_work_ram[(0x3ffc80/4) + 1] = 0x38003030;      // 8 00
495         m_work_ram[(0x3ffc80/4) + 2] = 0x39374541;      // 97EA
496         m_work_ram[(0x3ffc80/4) + 3] = 0x410058da;      // A
497      }
481498   }
482499
483500   //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space.device()));
r17596r17597
485502
486503/*****************************************************************************/
487504
505static TIMER_CALLBACK( irq_off )
506{
507   cputag_set_input_line(machine, "audiocpu", param, CLEAR_LINE);
508}
509
488510static MACHINE_START( nwktr )
489511{
490512   nwktr_state *state = machine.driver_data<nwktr_state>();
r17596r17597
493515
494516   /* configure fast RAM regions for DRC */
495517   ppcdrc_add_fastram(machine.device("maincpu"), 0x00000000, 0x003fffff, FALSE, state->m_work_ram);
518
519   state->m_sound_irq_timer = machine.scheduler().timer_alloc(FUNC(irq_off));
496520}
497521
498522static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32, nwktr_state )
r17596r17597
602626   PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
603627
604628   PORT_START("ANALOG2")      // Acceleration pedal
605   PORT_BIT( 0x7ff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
629   PORT_BIT( 0xfff, 0x000, IPT_PEDAL ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
606630
607631   PORT_START("ANALOG3")      // Foot brake pedal
608   PORT_BIT( 0x7ff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
632   PORT_BIT( 0xfff, 0x000, IPT_PEDAL2 ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
609633
610634   PORT_START("ANALOG4")      // Hand brake lever
611   PORT_BIT( 0x7ff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
635   PORT_BIT( 0xfff, 0x000, IPT_AD_STICK_Y ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
612636
613637   PORT_START("ANALOG5")      // Clutch pedal
614   PORT_BIT( 0x7ff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000, 0x7ff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
638   PORT_BIT( 0xfff, 0x000, IPT_PEDAL3 ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5)
615639
616640INPUT_PORTS_END
617641
r17596r17597
626650   int value = 0;
627651   switch (input)
628652   {
629      case 0:      value = device->machine().root_device().ioport("ANALOG1")->read() - 0x800; break;
653      case 0:      value = device->machine().root_device().ioport("ANALOG1")->read(); break;
630654      case 1:      value = device->machine().root_device().ioport("ANALOG2")->read(); break;
631655      case 2:      value = device->machine().root_device().ioport("ANALOG3")->read(); break;
632656      case 3:      value = device->machine().root_device().ioport("ANALOG4")->read(); break;
633657      case 4:      value = device->machine().root_device().ioport("ANALOG5")->read(); break;
634658   }
635659
636   return (double)(value) / 2047.0;
660   return (double)(value) / 4095.0;
637661}
638662
639663static const adc12138_interface nwktr_adc_interface = {
r17596r17597
642666
643667static void sound_irq_callback(running_machine &machine, int irq)
644668{
645   if (irq == 0)
646      generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ1, 1);
647   else
648      generic_pulse_irq_line(machine.device("audiocpu"), INPUT_LINE_IRQ2, 1);
669   nwktr_state *state = machine.driver_data<nwktr_state>();
670   int line = (irq == 0) ? INPUT_LINE_IRQ1 : INPUT_LINE_IRQ2;
671
672   cputag_set_input_line(machine, "audiocpu", line, ASSERT_LINE);
673    state->m_sound_irq_timer->adjust(attotime::from_usec(5), line);
649674}
650675
651676static const k056800_interface nwktr_k056800_interface =
r17596r17597
701726   MCFG_CPU_CONFIG(sharc_cfg)
702727   MCFG_CPU_DATA_MAP(sharc_map)
703728
704   MCFG_QUANTUM_TIME(attotime::from_hz(6000))
729   MCFG_QUANTUM_TIME(attotime::from_hz(9000))
705730
706731   MCFG_MACHINE_START(nwktr)
707732   MCFG_MACHINE_RESET(nwktr)
r17596r17597
740765   MCFG_K001604_ADD("k001604", thrilld_k001604_intf)
741766MACHINE_CONFIG_END
742767
743
744768/*****************************************************************************/
745769
746DRIVER_INIT_MEMBER(nwktr_state,nwktr)
770DRIVER_INIT_MEMBER(nwktr_state, nwktr)
747771{
748772   init_konami_cgboard(machine(), 1, CGBOARD_TYPE_NWKTR);
749773   set_cgboard_texture_bank(machine(), 0, "bank5", memregion("user5")->base());
r17596r17597
754778   lanc2_init(machine());
755779}
756780
757
758781/*****************************************************************************/
759782
760783ROM_START(racingj)

Previous 199869 Revisions Next


© 1997-2024 The MAME Team