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

trunk/src/mame/drivers/funkball.c
r244734r244735
8787      : pcat_base_state(mconfig, type, tag),
8888         m_voodoo(*this, "voodoo_0"),
8989         m_unk_ram(*this, "unk_ram"),
90         m_flashbank(*this, "flashbank")
90         m_flashbank(*this, "flashbank"),
91         m_inputs(*this, "IN")
9192   { }
9293
9394   UINT8 m_funkball_config_reg_sel;
r244734r244735
104105
105106   required_shared_ptr<UINT32> m_unk_ram;
106107   required_device<address_map_bank_device> m_flashbank;
108   required_ioport_array<16> m_inputs;
107109
108110   DECLARE_READ8_MEMBER( get_slave_ack );
109111   DECLARE_WRITE32_MEMBER( flash_w );
r244734r244735
135137   DECLARE_WRITE8_MEMBER(io20_w);
136138   virtual void machine_start();
137139   virtual void machine_reset();
138   UINT32 screen_update_funkball(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
139140};
140141
141142void funkball_state::video_start()
r244734r244735
324325
325326READ8_MEMBER( funkball_state::test_r )
326327{
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();
331329}
332330
333331static ADDRESS_MAP_START(funkball_map, AS_PROGRAM, 32, funkball_state)
r244734r244735
378376ADDRESS_MAP_END
379377
380378static INPUT_PORTS_START( funkball )
381   PORT_START("IN0")
379   PORT_START("IN.0")
382380   PORT_DIPNAME( 0x01, 0x01, "0" )
383381   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
384382   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
403401   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
404402   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
405403   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
406   PORT_START("IN1")
404   PORT_START("IN.1")
407405   PORT_DIPNAME( 0x01, 0x01, "1" )
408406   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
409407   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
428426   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
429427   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
430428   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
431   PORT_START("IN2")
429   PORT_START("IN.2")
432430   PORT_DIPNAME( 0x01, 0x01, "2" )
433431   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
434432   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
453451   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
454452   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
455453   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
456   PORT_START("IN3")
454   PORT_START("IN.3")
457455   PORT_DIPNAME( 0x01, 0x01, "3" )
458456   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
459457   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
478476   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
479477   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
480478   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
481   PORT_START("IN4")
479   PORT_START("IN.4")
482480   PORT_DIPNAME( 0x01, 0x01, "4" )
483481   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
484482   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
503501   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
504502   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
505503   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
506   PORT_START("IN5")
504   PORT_START("IN.5")
507505   PORT_DIPNAME( 0x01, 0x01, "5" )
508506   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
509507   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
528526   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
529527   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
530528   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
531   PORT_START("IN6")
529   PORT_START("IN.6")
532530   PORT_DIPNAME( 0x01, 0x01, "6" )
533531   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
534532   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
554552   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
555553   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
556554   /* 7-8 P1/P2 E-F "dgDelay" */
557   PORT_START("IN7")
555   PORT_START("IN.7")
558556   PORT_DIPNAME( 0x01, 0x01, "7" )
559557   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
560558   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
579577   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
580578   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
581579   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
582   PORT_START("IN8")
580   PORT_START("IN.8")
583581   PORT_DIPNAME( 0x01, 0x01, "8" )
584582   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
585583   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
604602   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
605603   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
606604   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
607   PORT_START("IN9")
605   PORT_START("IN.9")
608606   PORT_DIPNAME( 0x01, 0x01, "9" )
609607   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
610608   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
r244734r244735
629627   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
630628   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
631629   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" )
634632   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
635633   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
636634   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
654652   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
655653   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
656654   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" )
659657   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
660658   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
661659   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
679677   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
680678   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
681679   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" )
684682   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
685683   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
686684   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
704702   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
705703   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
706704   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" )
709707   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
710708   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
711709   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
729727   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
730728   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
731729   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" )
734732   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
735733   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
736734   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
754752   PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) )
755753   PORT_DIPSETTING(    0x80, DEF_STR( Off ) )
756754   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" )
759757   PORT_DIPSETTING(    0x01, DEF_STR( Off ) )
760758   PORT_DIPSETTING(    0x00, DEF_STR( On ) )
761759   PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) )
r244734r244735
803801   m_voodoo_pci_regs.base_addr = 0xff000000;
804802}
805803
806UINT32 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
812804static MACHINE_CONFIG_START( funkball, funkball_state )
813805   MCFG_CPU_ADD("maincpu", MEDIAGX, 66666666*3.5) // 66,6 MHz x 3.5
814806   MCFG_CPU_PROGRAM_MAP(funkball_map)


Previous 199869 Revisions Next


© 1997-2024 The MAME Team