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) |