Previous 199869 Revisions Next

r44560 Thursday 28th January, 2016 at 23:43:18 UTC by Dankan1890
Small code cleanup:
- corealloc.h: added macro definition for global_alloc (nothrow) memory allocation.
- textbuf.cpp / wavwrite.cpp: removed pointless cast.
- debugcmd.cpp / luaengine.cpp / render.cpp: avoid strlen calls in a loop.
- diimage.cpp: simplified "device_image_interface::set_image_filename" function.
- miscmenu.cpp / selgame.h / video.cpp(h): replaced int with bool where applicable.
- ui.cpp: removed unused code.
[src/emu]diimage.cpp luaengine.cpp render.cpp video.cpp video.h
[src/emu/debug]debugcmd.cpp textbuf.cpp
[src/emu/sound]wavwrite.cpp
[src/emu/ui]miscmenu.cpp selgame.h ui.cpp
[src/lib/util]corealloc.h
[src/mame/drivers]overdriv.cpp pulsar.cpp
[src/mame/includes]overdriv.h

trunk/src/emu/debug/debugcmd.cpp
r253071r253072
23812381   for (int i = 2; i < params; i++)
23822382   {
23832383      const char *pdata = param[i];
2384      size_t pdatalen = strlen(pdata) - 1;
23842385
23852386      /* check for a string */
2386      if (pdata[0] == '"' && pdata[strlen(pdata) - 1] == '"')
2387      if (pdata[0] == '"' && pdata[pdatalen] == '"')
23872388      {
2388         for (j = 1; j < strlen(pdata) - 1; j++)
2389         for (j = 1; j < pdatalen; j++)
23892390         {
23902391            data_to_find[data_count] = pdata[j];
23912392            data_size[data_count++] = 1;
trunk/src/emu/debug/textbuf.cpp
r253071r253072
8686   text_buffer *text;
8787
8888   /* allocate memory for the text buffer object */
89   text = (text_buffer *)global_alloc(text_buffer);
89   text = global_alloc_nothrow(text_buffer);
9090   if (!text)
9191      return nullptr;
9292
9393   /* allocate memory for the buffer itself */
94   text->buffer = (char *)global_alloc_array(char, bytes);
94   text->buffer = global_alloc_array_nothrow(char, bytes);
9595   if (!text->buffer)
9696   {
9797      global_free(text);
r253071r253072
9999   }
100100
101101   /* allocate memory for the lines array */
102   text->lineoffs = (INT32 *)global_alloc_array(INT32, lines);
102   text->lineoffs = global_alloc_array_nothrow(INT32, lines);
103103   if (!text->lineoffs)
104104   {
105105      global_free_array(text->buffer);
trunk/src/emu/diimage.cpp
r253071r253072
161161   zippath_parent(m_working_directory, filename);
162162   m_basename.assign(m_image_name);
163163
164   int loc1 = m_image_name.find_last_of('\\');
165   int loc2 = m_image_name.find_last_of('/');
166   int loc3 = m_image_name.find_last_of(':');
167   int loc = MAX(loc1,MAX(loc2,loc3));
168   if (loc!=-1) {
164   size_t loc1 = m_image_name.find_last_of('\\');
165   size_t loc2 = m_image_name.find_last_of('/');
166   size_t loc3 = m_image_name.find_last_of(':');
167   size_t loc = MAX(loc1,MAX(loc2, loc3));
168   if (loc != -1) {
169169      if (loc == loc3)
170170      {
171171         // temp workaround for softlists now that m_image_name contains the part name too (e.g. list:gamename:cart)
172172         m_basename = m_basename.substr(0, loc);
173         std::string tmpstr = std::string(m_basename);
174         int tmploc = tmpstr.find_last_of(':');
175         m_basename = m_basename.substr(tmploc + 1,loc-tmploc);
173         size_t tmploc = m_basename.find_last_of(':');
174         m_basename = m_basename.substr(tmploc + 1, loc - tmploc);
176175      }
177176      else
178         m_basename = m_basename.substr(loc + 1, m_basename.length() - loc);
177         m_basename = m_basename.substr(loc + 1);
179178   }
180   m_basename_noext = m_basename.assign(m_basename);
179   m_basename_noext = m_basename;
181180   m_filetype = "";
182181   loc = m_basename_noext.find_last_of('.');
183   if (loc!=-1) {
184      m_basename_noext = m_basename_noext.substr(0,loc);
185      m_filetype = m_basename.assign(m_basename);
186      m_filetype = m_filetype.substr(loc + 1, m_filetype.length() - loc);
182   if (loc != -1) {
183      m_basename_noext = m_basename_noext.substr(0, loc);
184      m_filetype = m_basename.substr(loc + 1);
187185   }
188186
189187   return IMAGE_ERROR_SUCCESS;
trunk/src/emu/luaengine.cpp
r253071r253072
10491049   osd_lock_acquire(lock);
10501050   if (msg.ready == 1) {
10511051   lua_settop(m_lua_state, 0);
1052   int status = luaL_loadbuffer(m_lua_state, msg.text.c_str(), strlen(msg.text.c_str()), "=stdin");
1052   int status = luaL_loadbuffer(m_lua_state, msg.text.c_str(), msg.text.length(), "=stdin");
10531053   if (incomplete(status)==0)  /* cannot try to add lines? */
10541054   {
10551055      if (status == LUA_OK) status = docall(0, LUA_MULTRET);
trunk/src/emu/render.cpp
r253071r253072
10551055   if (strcmp(viewname, "auto") != 0)
10561056   {
10571057      // scan for a matching view name
1058      size_t viewlen = strlen(viewname);
10581059      for (view = view_by_index(viewindex = 0); view != nullptr; view = view_by_index(++viewindex))
1059         if (core_strnicmp(view->name(), viewname, strlen(viewname)) == 0)
1060         if (core_strnicmp(view->name(), viewname, viewlen) == 0)
10601061            break;
10611062   }
10621063
trunk/src/emu/sound/wavwrite.cpp
r253071r253072
1818   UINT16 align, temp16;
1919
2020   /* allocate memory for the wav struct */
21   wav = (wav_file *) global_alloc(wav_file);
21   wav = global_alloc(wav_file);
2222   if (!wav)
2323      return nullptr;
2424
trunk/src/emu/ui/miscmenu.cpp
r253071r253072
434434         file_enumerator path(machine().options().crosshair_path());
435435         const osd_directory_entry *dir;
436436         /* reset search flags */
437         int using_default = false;
438         int finished = false;
439         int found = false;
437         bool using_default = false;
438         bool finished = false;
439         bool found = false;
440440
441441         /* if we are using the default, then we just need to find the first in the list */
442442         if (*(settings.name) == 0)
trunk/src/emu/ui/selgame.h
r253071r253072
3131   // internal state
3232   enum { VISIBLE_GAMES_IN_LIST = 15 };
3333   UINT8                   m_error;
34   UINT8                   m_rerandomize;
34   bool                    m_rerandomize;
3535   char                    m_search[40];
3636   int                     m_matchlist[VISIBLE_GAMES_IN_LIST];
3737   std::vector<const game_driver *> m_driverlist;
trunk/src/emu/ui/ui.cpp
r253071r253072
183183    CORE IMPLEMENTATION
184184***************************************************************************/
185185
186static const UINT32 mouse_bitmap[32*32] =
187{
186static const UINT32 mouse_bitmap[] = {
188187   0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,
189188   0x09a46f30,0x81ac7c43,0x24af8049,0x00ad7d45,0x00a8753a,0x00a46f30,0x009f6725,0x009b611c,0x00985b14,0x0095560d,0x00935308,0x00915004,0x00904e02,0x008f4e01,0x008f4d00,0x008f4d00,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,
190189   0x00a16a29,0xa2aa783d,0xffbb864a,0xc0b0824c,0x5aaf7f48,0x09ac7b42,0x00a9773c,0x00a67134,0x00a26b2b,0x009e6522,0x009a5e19,0x00965911,0x0094550b,0x00925207,0x00915004,0x008f4e01,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,0x00ffffff,
r253071r253072
237236   m_handler_param = 0;
238237   m_single_step = false;
239238   m_showfps = false;
240   m_showfps_end = false;
239   m_showfps_end = 0;
241240   m_show_profiler = false;
242241   m_popup_text_end = 0;
243242   m_use_natural_keyboard = false;
r253071r253072
458457      {
459458         float mouse_y=-1,mouse_x=-1;
460459         if (mouse_target->map_point_container(mouse_target_x, mouse_target_y, *container, mouse_x, mouse_y)) {
461            container->add_quad(mouse_x,mouse_y,mouse_x + 0.02f*container->manager().ui_aspect(container),mouse_y + 0.02f,UI_TEXT_COLOR,m_mouse_arrow_texture,PRIMFLAG_ANTIALIAS(1)|PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
460            container->add_quad(mouse_x,mouse_y,mouse_x + 0.05f*container->manager().ui_aspect(container),mouse_y + 0.05f,UI_TEXT_COLOR,m_mouse_arrow_texture,PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA));
462461         }
463462      }
464463   }
r253071r253072
15041503   // first draw the FPS counter
15051504   if (machine.ui().show_fps_counter())
15061505   {
1507      std::string tempstring;
15081506      machine.ui().draw_text_full(container, machine.video().speed_text().c_str(), 0.0f, 0.0f, 1.0f,
15091507               JUSTIFY_RIGHT, WRAP_WORD, DRAW_OPAQUE, ARGB_WHITE, ARGB_BLACK, nullptr, nullptr);
15101508   }
trunk/src/emu/video.cpp
r253071r253072
584584//  forward
585585//-------------------------------------------------
586586
587inline int video_manager::effective_autoframeskip() const
587inline bool video_manager::effective_autoframeskip() const
588588{
589589   // if we're fast forwarding or paused, autoframeskip is disabled
590590   if (m_fastforward || machine().paused())
trunk/src/emu/video.h
r253071r253072
100100   void postload();
101101
102102   // effective value helpers
103   int effective_autoframeskip() const;
103   bool effective_autoframeskip() const;
104104   int effective_frameskip() const;
105105   bool effective_throttle() const;
106106
trunk/src/lib/util/corealloc.h
r253071r253072
2727
2828// global allocation helpers -- use these instead of new and delete
2929#define global_alloc(_type)                         new _type
30#define global_alloc_nothrow(_type)                 new (std::nothrow) _type
3031#define global_alloc_array(_type, _num)             new _type[_num]
32#define global_alloc_array_nothrow(_type, _num)     new (std::nothrow) _type[_num]
3133#define global_free(_ptr)                           do { delete _ptr; } while (0)
3234#define global_free_array(_ptr)                     do { delete[] _ptr; } while (0)
3335
trunk/src/mame/drivers/overdriv.cpp
r253071r253072
7070
7171TIMER_DEVICE_CALLBACK_MEMBER(overdriv_state::overdriv_cpuA_scanline)
7272{
73   const int timer_threshold = 168; // fwiw matches 0 on mask ROM check, so IF it's a timer irq then should be close ...
7473   int scanline = param;
75   
76   m_fake_timer ++;
77   
78   // TODO: irqs routines are TOO slow right now, it ends up firing spurious irqs for whatever reason (shared ram fighting?)
79   //       this is a temporary solution to get rid of deprecat lib and the crashes, but also makes the game timer to be too slow.
80    //       Update: gameplay is actually too fast compared to timer, first attract mode shouldn't even surpass first blue car on right.
81   if(scanline == 256) // vblank-out irq
82   {
83      // m_screen->frame_number() & 1
74
75   /* TODO: irqs routines are TOO slow right now, it ends up firing spurious irqs for whatever reason (shared ram fighting?) */
76   /*       this is a temporary solution to get rid of deprecat lib and the crashes, but also makes the game timer to be too slow */
77   if(scanline == 256 && m_screen->frame_number() & 1) // vblank-out irq
8478      m_maincpu->set_input_line(4, HOLD_LINE);
85      m_subcpu->set_input_line(4, HOLD_LINE); // likely wrong
86   }
87   else if(m_fake_timer >= timer_threshold) // timer irq
88   {
89      m_fake_timer -= timer_threshold;
79   else if((scanline % 128) == 0) // timer irq
9080      m_maincpu->set_input_line(5, HOLD_LINE);
91   }
9281}
9382
9483INTERRUPT_GEN_MEMBER(overdriv_state::cpuB_interrupt)
9584{
9685   // this doesn't get turned on until the irq has happened? wrong irq?
97   if (m_k053246->k053246_is_irq_enabled())
98      m_subcpu->set_input_line(6, HOLD_LINE); // likely wrong
86//  if (m_k053246->k053246_is_irq_enabled())
87   m_subcpu->set_input_line(4, HOLD_LINE); // likely wrong
9988}
10089
10190
r253071r253072
138127
139128WRITE16_MEMBER(overdriv_state::overdriv_soundirq_w)
140129{
141   m_audiocpu->set_input_line(M6809_IRQ_LINE, ASSERT_LINE);
130   m_audiocpu->set_input_line(M6809_IRQ_LINE, HOLD_LINE);
142131}
143132
144
145133WRITE16_MEMBER(overdriv_state::overdriv_cpuB_irq_x_w)
146134{
147135   m_subcpu->set_input_line(5, HOLD_LINE); // likely wrong
r253071r253072
149137
150138WRITE16_MEMBER(overdriv_state::overdriv_cpuB_irq_y_w)
151139{
140   m_subcpu->set_input_line(6, HOLD_LINE); // likely wrong
152141}
153142
154143static ADDRESS_MAP_START( overdriv_master_map, AS_PROGRAM, 16, overdriv_state )
r253071r253072
178167   AM_RANGE(0x238000, 0x238001) AM_WRITE(overdriv_cpuB_irq_x_w)
179168ADDRESS_MAP_END
180169
181#ifdef UNUSED_FUNCTION
170// HACK ALERT
182171WRITE16_MEMBER( overdriv_state::overdriv_k053246_word_w )
183172{
184173   m_k053246->k053246_word_w(space,offset,data,mem_mask);
r253071r253072
201190   //printf("%02x %04x %04x\n", offset, data, mem_mask);
202191
203192}
204#endif
205193
206194static ADDRESS_MAP_START( overdriv_slave_map, AS_PROGRAM, 16, overdriv_state )
207195   AM_RANGE(0x000000, 0x03ffff) AM_ROM
r253071r253072
209197   AM_RANGE(0x0c0000, 0x0c1fff) AM_RAM //AM_DEVREADWRITE("k053250_1", k053250_device, ram_r, ram_w)
210198   AM_RANGE(0x100000, 0x10000f) AM_DEVREADWRITE("k053250_1", k053250_device, reg_r, reg_w)
211199   AM_RANGE(0x108000, 0x10800f) AM_DEVREADWRITE("k053250_2", k053250_device, reg_r, reg_w)
212   AM_RANGE(0x118000, 0x118fff) AM_DEVREADWRITE("k053246", k053247_device, k053247_word_r, k053247_word_w) // data gets copied to sprite chip with DMA..
200   AM_RANGE(0x118000, 0x118fff) AM_RAM AM_SHARE("sprram") //AM_DEVREADWRITE("k053246", k053247_device, k053247_word_r, k053247_word_w) // data gets copied to sprite chip with DMA..
213201   AM_RANGE(0x120000, 0x120001) AM_DEVREAD("k053246", k053247_device, k053246_word_r)
214202   AM_RANGE(0x128000, 0x128001) AM_READWRITE(cpuB_ctrl_r, cpuB_ctrl_w) /* enable K053247 ROM reading, plus something else */
215   AM_RANGE(0x130000, 0x130007) AM_DEVREADWRITE8("k053246", k053247_device, k053246_r,k053246_w,0xffff)
216   //AM_RANGE(0x140000, 0x140001) used in later stages
203   AM_RANGE(0x130000, 0x130007) AM_WRITE(overdriv_k053246_word_w) // AM_DEVWRITE("k053246", k053247_device, k053246_word_w)
217204   AM_RANGE(0x200000, 0x203fff) AM_RAM AM_SHARE("share1")
218205   AM_RANGE(0x208000, 0x20bfff) AM_RAM
219206   AM_RANGE(0x218000, 0x219fff) AM_DEVREAD("k053250_1", k053250_device, rom_r)
220207   AM_RANGE(0x220000, 0x221fff) AM_DEVREAD("k053250_2", k053250_device, rom_r)
221208ADDRESS_MAP_END
222209
223WRITE8_MEMBER(overdriv_state::sound_ack_w)
224{
225   m_audiocpu->set_input_line(M6809_IRQ_LINE, CLEAR_LINE);
226}
227
228210static ADDRESS_MAP_START( overdriv_sound_map, AS_PROGRAM, 8, overdriv_state )
229   AM_RANGE(0x0000, 0x0000) AM_WRITE(sound_ack_w)
230   // 0x012 read during explosions
231   // 0x180
232211   AM_RANGE(0x0200, 0x0201) AM_DEVREADWRITE("ymsnd", ym2151_device,read,write)
233212   AM_RANGE(0x0400, 0x042f) AM_DEVREADWRITE("k053260_1", k053260_device, read, write)
234213   AM_RANGE(0x0600, 0x062f) AM_DEVREADWRITE("k053260_2", k053260_device, read, write)
r253071r253072
243222
244223static INPUT_PORTS_START( overdriv )
245224   PORT_START("INPUTS")
246   PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_TOGGLE
225   PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_TOGGLE
247226   PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
248227   PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 )
249228   PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
r253071r253072
318297
319298   /* video hardware */
320299   MCFG_SCREEN_ADD("screen", RASTER)
321   MCFG_SCREEN_RAW_PARAMS(XTAL_24MHz/4,384,0,305,264,0,224)
300   MCFG_SCREEN_REFRESH_RATE(59)
301   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500))
302   MCFG_SCREEN_SIZE(64*8, 40*8)
303   MCFG_SCREEN_VISIBLE_AREA(13*8, (64-13)*8-1, 0*8, 32*8-1 )
322304   MCFG_SCREEN_UPDATE_DRIVER(overdriv_state, screen_update_overdriv)
323305   MCFG_SCREEN_PALETTE("palette")
324306
r253071r253072
493475   ROM_LOAD( "789e02.f1", 0x100000, 0x100000, CRC(bdd3b5c6) SHA1(412332d64052c0a3714f4002c944b0e7d32980a4) )
494476ROM_END
495477
496GAMEL( 1990, overdriv,         0, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv ) // US version
497GAMEL( 1990, overdriva, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv ) // Overseas?
498GAMEL( 1990, overdrivb, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv ) // Overseas?
478GAMEL( 1990, overdriv,         0, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 1)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv )
479GAMEL( 1990, overdriva, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 2)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv )
480GAMEL( 1990, overdrivb, overdriv, overdriv, overdriv, driver_device, 0, ROT90, "Konami", "Over Drive (set 3)", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE, layout_overdriv )
trunk/src/mame/drivers/pulsar.cpp
r253071r253072
254254/* ROM definition */
255255ROM_START( pulsarlb )
256256   ROM_REGION( 0x10800, "maincpu", ROMREGION_ERASEFF )
257   ROM_SYSTEM_BIOS(0, "mon7", "MP7A")
258   ROMX_LOAD( "mp7a.bin", 0x10000, 0x800, CRC(726b8a19) SHA1(43b2af84d5622c1f67584c501b730acf002a6113), ROM_BIOS(1))
259   ROM_SYSTEM_BIOS(1, "mon6", "LBOOT6") // Blank screen until floppy boots
260   ROMX_LOAD( "lboot6.rom", 0x10000, 0x800, CRC(3bca9096) SHA1(ff99288e51a9e832785ce8e3ab5a9452b1064231), ROM_BIOS(2))
257   ROM_LOAD( "mp7a.bin", 0x10000, 0x800, CRC(726b8a19) SHA1(43b2af84d5622c1f67584c501b730acf002a6113) )
261258ROM_END
262259
263260/* Driver */
trunk/src/mame/includes/overdriv.h
r253071r253072
2424      m_k053246(*this, "k053246"),
2525      m_k053251(*this, "k053251"),
2626      m_k053252(*this, "k053252"),
27      m_sprram(*this, "sprram"),
2728      m_screen(*this, "screen")
2829   { }
2930
r253071r253072
4445   required_device<k053247_device> m_k053246;
4546   required_device<k053251_device> m_k053251;
4647   required_device<k053252_device> m_k053252;
48   required_shared_ptr<UINT16> m_sprram;
4749   required_device<screen_device> m_screen;
4850   DECLARE_WRITE16_MEMBER(eeprom_w);
4951   DECLARE_WRITE16_MEMBER(cpuA_ctrl_w);
5052   DECLARE_READ16_MEMBER(cpuB_ctrl_r);
5153   DECLARE_WRITE16_MEMBER(cpuB_ctrl_w);
5254   DECLARE_WRITE16_MEMBER(overdriv_soundirq_w);
53   DECLARE_WRITE8_MEMBER(sound_ack_w);
5455   DECLARE_WRITE16_MEMBER(overdriv_cpuB_irq_x_w);
5556   DECLARE_WRITE16_MEMBER(overdriv_cpuB_irq_y_w);
5657   virtual void machine_start() override;
r253071r253072
5859   UINT32 screen_update_overdriv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5960   INTERRUPT_GEN_MEMBER(cpuB_interrupt);
6061   TIMER_DEVICE_CALLBACK_MEMBER(overdriv_cpuA_scanline);
61   int m_fake_timer;
62   
62
63   DECLARE_WRITE16_MEMBER( overdriv_k053246_word_w );
6364   K051316_CB_MEMBER(zoom_callback_1);
6465   K051316_CB_MEMBER(zoom_callback_2);
6566   K053246_CB_MEMBER(sprite_callback);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team