trunk/src/mame/drivers/nwk-tr.c
r17596 | r17597 | |
236 | 236 | UINT8 m_led_reg0; |
237 | 237 | UINT8 m_led_reg1; |
238 | 238 | required_shared_ptr<UINT32> m_work_ram; |
| 239 | emu_timer *m_sound_irq_timer; |
239 | 240 | int m_fpga_uploaded; |
240 | 241 | int m_lanc2_ram_r; |
241 | 242 | int m_lanc2_ram_w; |
r17596 | r17597 | |
354 | 355 | if (ACCESSING_BITS_0_7) |
355 | 356 | { |
356 | 357 | 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); |
360 | 359 | 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); |
364 | 363 | } |
365 | 364 | return; |
366 | 365 | } |
r17596 | r17597 | |
454 | 453 | |
455 | 454 | //printf("lanc2_fpga_w: %02X at %08X\n", value, cpu_get_pc(&space.device())); |
456 | 455 | } |
| 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 | } |
457 | 465 | else if (ACCESSING_BITS_0_7) |
458 | 466 | { |
459 | 467 | m_lanc2_ram[m_lanc2_ram_w & 0x7fff] = data & 0xff; |
r17596 | r17597 | |
466 | 474 | } |
467 | 475 | if (offset == 4) |
468 | 476 | { |
| 477 | // TODO: check if these should be transferred via PPC DMA. |
| 478 | |
469 | 479 | if (mame_stricmp(machine().system().name, "thrilld") == 0) |
470 | 480 | { |
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; // * |
475 | 485 | |
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 |
480 | 490 | } |
| 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 | } |
481 | 498 | } |
482 | 499 | |
483 | 500 | //printf("lanc2_w: %08X, %08X, %08X at %08X\n", data, offset, mem_mask, cpu_get_pc(&space.device())); |
r17596 | r17597 | |
485 | 502 | |
486 | 503 | /*****************************************************************************/ |
487 | 504 | |
| 505 | static TIMER_CALLBACK( irq_off ) |
| 506 | { |
| 507 | cputag_set_input_line(machine, "audiocpu", param, CLEAR_LINE); |
| 508 | } |
| 509 | |
488 | 510 | static MACHINE_START( nwktr ) |
489 | 511 | { |
490 | 512 | nwktr_state *state = machine.driver_data<nwktr_state>(); |
r17596 | r17597 | |
493 | 515 | |
494 | 516 | /* configure fast RAM regions for DRC */ |
495 | 517 | 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)); |
496 | 520 | } |
497 | 521 | |
498 | 522 | static ADDRESS_MAP_START( nwktr_map, AS_PROGRAM, 32, nwktr_state ) |
r17596 | r17597 | |
602 | 626 | PORT_BIT( 0xfff, 0x800, IPT_PADDLE ) PORT_MINMAX(0x000, 0xfff) PORT_SENSITIVITY(35) PORT_KEYDELTA(5) |
603 | 627 | |
604 | 628 | 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) |
606 | 630 | |
607 | 631 | 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) |
609 | 633 | |
610 | 634 | 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) |
612 | 636 | |
613 | 637 | 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) |
615 | 639 | |
616 | 640 | INPUT_PORTS_END |
617 | 641 | |
r17596 | r17597 | |
626 | 650 | int value = 0; |
627 | 651 | switch (input) |
628 | 652 | { |
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; |
630 | 654 | case 1: value = device->machine().root_device().ioport("ANALOG2")->read(); break; |
631 | 655 | case 2: value = device->machine().root_device().ioport("ANALOG3")->read(); break; |
632 | 656 | case 3: value = device->machine().root_device().ioport("ANALOG4")->read(); break; |
633 | 657 | case 4: value = device->machine().root_device().ioport("ANALOG5")->read(); break; |
634 | 658 | } |
635 | 659 | |
636 | | return (double)(value) / 2047.0; |
| 660 | return (double)(value) / 4095.0; |
637 | 661 | } |
638 | 662 | |
639 | 663 | static const adc12138_interface nwktr_adc_interface = { |
r17596 | r17597 | |
642 | 666 | |
643 | 667 | static void sound_irq_callback(running_machine &machine, int irq) |
644 | 668 | { |
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); |
649 | 674 | } |
650 | 675 | |
651 | 676 | static const k056800_interface nwktr_k056800_interface = |
r17596 | r17597 | |
701 | 726 | MCFG_CPU_CONFIG(sharc_cfg) |
702 | 727 | MCFG_CPU_DATA_MAP(sharc_map) |
703 | 728 | |
704 | | MCFG_QUANTUM_TIME(attotime::from_hz(6000)) |
| 729 | MCFG_QUANTUM_TIME(attotime::from_hz(9000)) |
705 | 730 | |
706 | 731 | MCFG_MACHINE_START(nwktr) |
707 | 732 | MCFG_MACHINE_RESET(nwktr) |
r17596 | r17597 | |
740 | 765 | MCFG_K001604_ADD("k001604", thrilld_k001604_intf) |
741 | 766 | MACHINE_CONFIG_END |
742 | 767 | |
743 | | |
744 | 768 | /*****************************************************************************/ |
745 | 769 | |
746 | | DRIVER_INIT_MEMBER(nwktr_state,nwktr) |
| 770 | DRIVER_INIT_MEMBER(nwktr_state, nwktr) |
747 | 771 | { |
748 | 772 | init_konami_cgboard(machine(), 1, CGBOARD_TYPE_NWKTR); |
749 | 773 | set_cgboard_texture_bank(machine(), 0, "bank5", memregion("user5")->base()); |
r17596 | r17597 | |
754 | 778 | lanc2_init(machine()); |
755 | 779 | } |
756 | 780 | |
757 | | |
758 | 781 | /*****************************************************************************/ |
759 | 782 | |
760 | 783 | ROM_START(racingj) |