Previous | 199869 Revisions | Next |
r36223 Tuesday 3rd March, 2015 at 18:23:33 UTC by Osso |
---|
funkball.c: used ioport_array. (nw) This enormously reduces tagmap lookups, but doesn't help much with performance: mame64d 0.159 253140209 tagmap lookups Average speed: 8.30% (19 seconds) mame64d current 153521 tagmap lookups Average speed: 9.67% (19 seconds) |
[src/mame/drivers] | funkball.c |
r244734 | r244735 | |
---|---|---|
87 | 87 | : pcat_base_state(mconfig, type, tag), |
88 | 88 | m_voodoo(*this, "voodoo_0"), |
89 | 89 | m_unk_ram(*this, "unk_ram"), |
90 | m_flashbank(*this, "flashbank") | |
90 | m_flashbank(*this, "flashbank"), | |
91 | m_inputs(*this, "IN") | |
91 | 92 | { } |
92 | 93 | |
93 | 94 | UINT8 m_funkball_config_reg_sel; |
r244734 | r244735 | |
104 | 105 | |
105 | 106 | required_shared_ptr<UINT32> m_unk_ram; |
106 | 107 | required_device<address_map_bank_device> m_flashbank; |
108 | required_ioport_array<16> m_inputs; | |
107 | 109 | |
108 | 110 | DECLARE_READ8_MEMBER( get_slave_ack ); |
109 | 111 | DECLARE_WRITE32_MEMBER( flash_w ); |
r244734 | r244735 | |
135 | 137 | DECLARE_WRITE8_MEMBER(io20_w); |
136 | 138 | virtual void machine_start(); |
137 | 139 | virtual void machine_reset(); |
138 | UINT32 screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); | |
139 | 140 | }; |
140 | 141 | |
141 | 142 | void funkball_state::video_start() |
r244734 | r244735 | |
324 | 325 | |
325 | 326 | READ8_MEMBER( funkball_state::test_r ) |
326 | 327 | { |
327 | static const char *const portnames[] = { "IN0", "IN1", "IN2", "IN3", "IN4", "IN5", "IN6", "IN7", | |
328 | "IN8", "IN9", "INA", "INB", "INC", "IND", "INE", "INF",}; | |
329 | ||
330 | return ioport(portnames[offset])->read(); | |
328 | return m_inputs[offset]->read(); | |
331 | 329 | } |
332 | 330 | |
333 | 331 | static ADDRESS_MAP_START(funkball_map, AS_PROGRAM, 32, funkball_state) |
r244734 | r244735 | |
378 | 376 | ADDRESS_MAP_END |
379 | 377 | |
380 | 378 | static INPUT_PORTS_START( funkball ) |
381 | PORT_START("IN0") | |
379 | PORT_START("IN.0") | |
382 | 380 | PORT_DIPNAME( 0x01, 0x01, "0" ) |
383 | 381 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
384 | 382 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
403 | 401 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
404 | 402 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
405 | 403 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
406 | PORT_START("IN1") | |
404 | PORT_START("IN.1") | |
407 | 405 | PORT_DIPNAME( 0x01, 0x01, "1" ) |
408 | 406 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
409 | 407 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
428 | 426 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
429 | 427 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
430 | 428 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
431 | PORT_START("IN2") | |
429 | PORT_START("IN.2") | |
432 | 430 | PORT_DIPNAME( 0x01, 0x01, "2" ) |
433 | 431 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
434 | 432 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
453 | 451 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
454 | 452 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
455 | 453 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
456 | PORT_START("IN3") | |
454 | PORT_START("IN.3") | |
457 | 455 | PORT_DIPNAME( 0x01, 0x01, "3" ) |
458 | 456 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
459 | 457 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
478 | 476 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
479 | 477 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
480 | 478 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
481 | PORT_START("IN4") | |
479 | PORT_START("IN.4") | |
482 | 480 | PORT_DIPNAME( 0x01, 0x01, "4" ) |
483 | 481 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
484 | 482 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
503 | 501 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
504 | 502 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
505 | 503 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
506 | PORT_START("IN5") | |
504 | PORT_START("IN.5") | |
507 | 505 | PORT_DIPNAME( 0x01, 0x01, "5" ) |
508 | 506 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
509 | 507 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
528 | 526 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
529 | 527 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
530 | 528 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
531 | PORT_START("IN6") | |
529 | PORT_START("IN.6") | |
532 | 530 | PORT_DIPNAME( 0x01, 0x01, "6" ) |
533 | 531 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
534 | 532 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
554 | 552 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
555 | 553 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
556 | 554 | /* 7-8 P1/P2 E-F "dgDelay" */ |
557 | PORT_START("IN7") | |
555 | PORT_START("IN.7") | |
558 | 556 | PORT_DIPNAME( 0x01, 0x01, "7" ) |
559 | 557 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
560 | 558 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
579 | 577 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
580 | 578 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
581 | 579 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
582 | PORT_START("IN8") | |
580 | PORT_START("IN.8") | |
583 | 581 | PORT_DIPNAME( 0x01, 0x01, "8" ) |
584 | 582 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
585 | 583 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
604 | 602 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
605 | 603 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
606 | 604 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
607 | PORT_START("IN9") | |
605 | PORT_START("IN.9") | |
608 | 606 | PORT_DIPNAME( 0x01, 0x01, "9" ) |
609 | 607 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
610 | 608 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
r244734 | r244735 | |
629 | 627 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
630 | 628 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
631 | 629 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
632 | PORT_START("INA") | |
633 | PORT_DIPNAME( 0x01, 0x01, "A" ) | |
630 | PORT_START("IN.10") | |
631 | PORT_DIPNAME( 0x01, 0x01, "10" ) | |
634 | 632 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
635 | 633 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
636 | 634 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
654 | 652 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
655 | 653 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
656 | 654 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
657 | PORT_START("INB") | |
658 | PORT_DIPNAME( 0x01, 0x01, "B" ) | |
655 | PORT_START("IN.11") | |
656 | PORT_DIPNAME( 0x01, 0x01, "11" ) | |
659 | 657 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
660 | 658 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
661 | 659 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
679 | 677 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
680 | 678 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
681 | 679 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
682 | PORT_START("INC") | |
683 | PORT_DIPNAME( 0x01, 0x01, "C" ) | |
680 | PORT_START("IN.12") | |
681 | PORT_DIPNAME( 0x01, 0x01, "12" ) | |
684 | 682 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
685 | 683 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
686 | 684 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
704 | 702 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
705 | 703 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
706 | 704 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
707 | PORT_START("IND") | |
708 | PORT_DIPNAME( 0x01, 0x01, "D" ) | |
705 | PORT_START("IN.13") | |
706 | PORT_DIPNAME( 0x01, 0x01, "13" ) | |
709 | 707 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
710 | 708 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
711 | 709 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
729 | 727 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
730 | 728 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
731 | 729 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
732 | PORT_START("INE") | |
733 | PORT_DIPNAME( 0x01, 0x01, "E" ) | |
730 | PORT_START("IN.14") | |
731 | PORT_DIPNAME( 0x01, 0x01, "14" ) | |
734 | 732 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
735 | 733 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
736 | 734 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
754 | 752 | PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) |
755 | 753 | PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) |
756 | 754 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
757 | PORT_START("INF") | |
758 | PORT_DIPNAME( 0x01, 0x01, "F" ) | |
755 | PORT_START("IN.15") | |
756 | PORT_DIPNAME( 0x01, 0x01, "15" ) | |
759 | 757 | PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) |
760 | 758 | PORT_DIPSETTING( 0x00, DEF_STR( On ) ) |
761 | 759 | PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) |
r244734 | r244735 | |
803 | 801 | m_voodoo_pci_regs.base_addr = 0xff000000; |
804 | 802 | } |
805 | 803 | |
806 | UINT32 funkball_state::screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) | |
807 | { | |
808 | voodoo_update(machine().device("voodoo_0"), bitmap, cliprect); | |
809 | return 0; | |
810 | } | |
811 | ||
812 | 804 | static MACHINE_CONFIG_START( funkball, funkball_state ) |
813 | 805 | MCFG_CPU_ADD("maincpu", MEDIAGX, 66666666*3.5) // 66,6 MHz x 3.5 |
814 | 806 | MCFG_CPU_PROGRAM_MAP(funkball_map) |
https://github.com/mamedev/mame/commit/0f3906a2d818c02eaaf38cdbc2ea77e04735b7a5 |
Previous | 199869 Revisions | Next |