Previous 199869 Revisions Next

r24768 Tuesday 6th August, 2013 at 04:31:30 UTC by Aaron Giles
Cave cleanup
[src/mame/includes]cave.h
[src/mame/video]cave.c

trunk/src/mame/includes/cave.h
r24767r24768
6262   } m_blit;
6363
6464
65   void (*m_get_sprite_info)(running_machine &machine);
66   void (*m_sprite_draw)(running_machine &machine, int priority);
65   void (cave_state::*m_get_sprite_info)();
66   void (cave_state::*m_sprite_draw)(int priority);
6767
6868   tilemap_t    *m_tilemap[4];
6969   int          m_tiledim[4];
r24767r24768
213213private:
214214   inline void get_tile_info( tile_data &tileinfo, int tile_index, int GFX );
215215   inline void tilemap_draw( screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, UINT32 flags, UINT32 priority, UINT32 priority2, int GFX );
216   inline void vram_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX );
217   inline void vram_8x8_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX );
218   void set_pens();
219   void cave_vh_start( int num );
220   void get_sprite_info_cave();
221   void get_sprite_info_donpachi();
222   void sprite_init_cave();
223   void cave_sprite_check(screen_device &screen, const rectangle &clip);
224   void do_blit_zoom16_cave(const struct sprite_cave *sprite);
225   void do_blit_zoom16_cave_zb( const struct sprite_cave *sprite );
226   void do_blit_16_cave( const struct sprite_cave *sprite );
227   void do_blit_16_cave_zb( const struct sprite_cave *sprite );
228   void sprite_draw_cave( int priority );
229   void sprite_draw_cave_zbuf( int priority );
230   void sprite_draw_donpachi( int priority );
231   void sprite_draw_donpachi_zbuf( int priority );
216232};
trunk/src/mame/video/cave.c
r24767r24768
5757
5858#define SWAP(X,Y) { int temp = X; X = Y; Y = temp; }
5959
60static void sprite_init_cave(running_machine &machine);
61static void sprite_draw_cave(running_machine &machine, int priority);
62static void sprite_draw_cave_zbuf(running_machine &machine, int priority);
63static void sprite_draw_donpachi(running_machine &machine, int priority);
64static void sprite_draw_donpachi_zbuf(running_machine &machine, int priority);
6560
6661/***************************************************************************
6762
r24767r24768
178173}
179174
180175
181static void set_pens( running_machine &machine )
176void cave_state::set_pens()
182177{
183   cave_state *state = machine.driver_data<cave_state>();
184178   int pen;
185179
186   for (pen = 0; pen < machine.total_colors(); pen++)
180   for (pen = 0; pen < machine().total_colors(); pen++)
187181   {
188      UINT16 data = state->m_paletteram[state->m_palette_map[pen]];
182      UINT16 data = m_paletteram[m_palette_map[pen]];
189183
190184      rgb_t color = MAKE_RGB(pal5bit(data >> 5), pal5bit(data >> 10), pal5bit(data >> 0));
191185
192      palette_set_color(machine, pen, color);
186      palette_set_color(machine(), pen, color);
193187   }
194188}
195189
r24767r24768
293287}
294288
295289
296INLINE void vram_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX )
290inline void cave_state::vram_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX )
297291{
298   cave_state *state = space.machine().driver_data<cave_state>();
299   UINT16 *VRAM = state->m_vram[GFX];
300   tilemap_t *TILEMAP = state->m_tilemap[GFX];
292   UINT16 *VRAM = m_vram[GFX];
293   tilemap_t *TILEMAP = m_tilemap[GFX];
301294
302295   if ((VRAM[offset] & mem_mask) == (data & mem_mask))
303296      return;
r24767r24768
321314    and 408000-407fff both go to the 8x8 tilemap ram. Use this function
322315    in this cases. Note that the get_tile_info function looks in the
323316    4000-7fff range for tiles, so we have to write the data there. */
324INLINE void vram_8x8_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX )
317inline void cave_state::vram_8x8_w( address_space &space, ATTR_UNUSED offs_t offset, ATTR_UNUSED UINT16 data, ATTR_UNUSED UINT16 mem_mask, int GFX )
325318{
326   cave_state *state = space.machine().driver_data<cave_state>();
327   UINT16 *VRAM = state->m_vram[GFX];
328   tilemap_t *TILEMAP = state->m_tilemap[GFX];
319   UINT16 *VRAM = m_vram[GFX];
320   tilemap_t *TILEMAP = m_tilemap[GFX];
329321
330322   offset %= 0x4000 / 2;
331323   if ((VRAM[offset] & mem_mask) == (data & mem_mask))
r24767r24768
362354
363355***************************************************************************/
364356
365static void cave_vh_start( running_machine &machine, int num )
357void cave_state::cave_vh_start( int num )
366358{
367   cave_state *state = machine.driver_data<cave_state>();
359   assert(m_palette_map != NULL);
368360
369   assert(state->m_palette_map != NULL);
361   m_tilemap[0] = 0;
362   m_tilemap[1] = 0;
363   m_tilemap[2] = 0;
364   m_tilemap[3] = 0;
370365
371   state->m_tilemap[0] = 0;
372   state->m_tilemap[1] = 0;
373   state->m_tilemap[2] = 0;
374   state->m_tilemap[3] = 0;
366   m_tiledim[0] = 0;
367   m_tiledim[1] = 0;
368   m_tiledim[2] = 0;
369   m_tiledim[3] = 0;
375370
376   state->m_tiledim[0] = 0;
377   state->m_tiledim[1] = 0;
378   state->m_tiledim[2] = 0;
379   state->m_tiledim[3] = 0;
371   m_old_tiledim[0] = 0;
372   m_old_tiledim[1] = 0;
373   m_old_tiledim[2] = 0;
374   m_old_tiledim[3] = 0;
380375
381   state->m_old_tiledim[0] = 0;
382   state->m_old_tiledim[1] = 0;
383   state->m_old_tiledim[2] = 0;
384   state->m_old_tiledim[3] = 0;
385
386376   assert((num >= 1) && (num <= 4));
387377
388378   switch (num)
389379   {
390380      case 4:
391         state->m_tilemap[3] = &machine.tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_3),state), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
392         state->m_tilemap[3]->set_transparent_pen(0);
393         state->m_tilemap[3]->set_scroll_rows(1);
394         state->m_tilemap[3]->set_scroll_cols(1);
395         state->save_item(NAME(state->m_tiledim[3]));
396         state->save_item(NAME(state->m_old_tiledim[3]));
381         m_tilemap[3] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_3),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
382         m_tilemap[3]->set_transparent_pen(0);
383         m_tilemap[3]->set_scroll_rows(1);
384         m_tilemap[3]->set_scroll_cols(1);
385         save_item(NAME(m_tiledim[3]));
386         save_item(NAME(m_old_tiledim[3]));
397387
398388      case 3:
399         state->m_tilemap[2] = &machine.tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_2),state), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
400         state->m_tilemap[2]->set_transparent_pen(0);
401         state->m_tilemap[2]->set_scroll_rows(1);
402         state->m_tilemap[2]->set_scroll_cols(1);
403         state->save_item(NAME(state->m_tiledim[2]));
404         state->save_item(NAME(state->m_old_tiledim[2]));
389         m_tilemap[2] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_2),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
390         m_tilemap[2]->set_transparent_pen(0);
391         m_tilemap[2]->set_scroll_rows(1);
392         m_tilemap[2]->set_scroll_cols(1);
393         save_item(NAME(m_tiledim[2]));
394         save_item(NAME(m_old_tiledim[2]));
405395
406396      case 2:
407         state->m_tilemap[1] = &machine.tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_1),state), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
408         state->m_tilemap[1]->set_transparent_pen(0);
409         state->m_tilemap[1]->set_scroll_rows(1);
410         state->m_tilemap[1]->set_scroll_cols(1);
411         state->save_item(NAME(state->m_tiledim[1]));
412         state->save_item(NAME(state->m_old_tiledim[1]));
397         m_tilemap[1] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_1),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
398         m_tilemap[1]->set_transparent_pen(0);
399         m_tilemap[1]->set_scroll_rows(1);
400         m_tilemap[1]->set_scroll_cols(1);
401         save_item(NAME(m_tiledim[1]));
402         save_item(NAME(m_old_tiledim[1]));
413403
414404      case 1:
415         state->m_tilemap[0] = &machine.tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_0),state), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
416         state->m_tilemap[0]->set_transparent_pen(0);
417         state->m_tilemap[0]->set_scroll_rows(1);
418         state->m_tilemap[0]->set_scroll_cols(1);
419         state->save_item(NAME(state->m_tiledim[0]));
420         state->save_item(NAME(state->m_old_tiledim[0]));
405         m_tilemap[0] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::get_tile_info_0),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8);
406         m_tilemap[0]->set_transparent_pen(0);
407         m_tilemap[0]->set_scroll_rows(1);
408         m_tilemap[0]->set_scroll_cols(1);
409         save_item(NAME(m_tiledim[0]));
410         save_item(NAME(m_old_tiledim[0]));
421411
422412         break;
423413   }
424414
425   sprite_init_cave(machine);
415   sprite_init_cave();
426416
427   state->m_layers_offs_x = 0x13;
428   state->m_layers_offs_y = -0x12;
417   m_layers_offs_x = 0x13;
418   m_layers_offs_y = -0x12;
429419
430   state->m_row_effect_offs_n = -1;
431   state->m_row_effect_offs_f = 1;
420   m_row_effect_offs_n = -1;
421   m_row_effect_offs_f = 1;
432422
433   state->m_background_color = machine.config().m_gfxdecodeinfo[0].color_codes_start +
434               (machine.config().m_gfxdecodeinfo[0].total_color_codes - 1) *
435                  machine.gfx[0]->granularity();
423   m_background_color = machine().config().m_gfxdecodeinfo[0].color_codes_start +
424               (machine().config().m_gfxdecodeinfo[0].total_color_codes - 1) *
425                  machine().gfx[0]->granularity();
436426
437   switch (state->m_kludge)
427   switch (m_kludge)
438428   {
439429      case 1: /* sailormn */
440         state->m_row_effect_offs_n = -1;
441         state->m_row_effect_offs_f = -1;
430         m_row_effect_offs_n = -1;
431         m_row_effect_offs_f = -1;
442432         break;
443433      case 2: /* uopoko dfeveron */
444         state->m_background_color = 0x3f00;
434         m_background_color = 0x3f00;
445435         break;
446436      case 4: /* pwrinst2 */
447         state->m_background_color = 0x7f00;
448         state->m_layers_offs_y++;
437         m_background_color = 0x7f00;
438         m_layers_offs_y++;
449439         break;
450440   }
451441}
452442
453VIDEO_START_MEMBER(cave_state,cave_1_layer){    cave_vh_start(machine(), 1);    }
454VIDEO_START_MEMBER(cave_state,cave_2_layers){   cave_vh_start(machine(), 2);    }
455VIDEO_START_MEMBER(cave_state,cave_3_layers){   cave_vh_start(machine(), 3);    }
456VIDEO_START_MEMBER(cave_state,cave_4_layers){   cave_vh_start(machine(), 4);    }
443VIDEO_START_MEMBER(cave_state,cave_1_layer){    cave_vh_start(1);    }
444VIDEO_START_MEMBER(cave_state,cave_2_layers){   cave_vh_start(2);    }
445VIDEO_START_MEMBER(cave_state,cave_3_layers){   cave_vh_start(3);    }
446VIDEO_START_MEMBER(cave_state,cave_4_layers){   cave_vh_start(4);    }
457447
458448
459449VIDEO_START_MEMBER(cave_state,sailormn_3_layers)
460450{
461   cave_vh_start(machine(), 2);
451   cave_vh_start(2);
462452
463453   /* Layer 2 (8x8) needs to be handled differently */
464454   m_tilemap[2] = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(cave_state::sailormn_get_tile_info_2),this), TILEMAP_SCAN_ROWS, 8, 8, 512 / 8, 512 / 8 );
r24767r24768
500490
501491***************************************************************************/
502492
503static void get_sprite_info_cave( running_machine &machine )
493void cave_state::get_sprite_info_cave()
504494{
505   cave_state *state = machine.driver_data<cave_state>();
506495   pen_t base_pal = 0;
507   const UINT8 *base_gfx = state->memregion("sprites")->base();
508   int code_max = state->memregion("sprites")->bytes() / (16*16);
496   const UINT8 *base_gfx = memregion("sprites")->base();
497   int code_max = memregion("sprites")->bytes() / (16*16);
509498
510499   UINT16 *source;
511500   UINT16 *finish;
512   struct sprite_cave *sprite = state->m_sprite;
501   struct sprite_cave *sprite = m_sprite;
513502
514   int glob_flipx = state->m_videoregs[0] & 0x8000;
515   int glob_flipy = state->m_videoregs[1] & 0x8000;
503   int glob_flipx = m_videoregs[0] & 0x8000;
504   int glob_flipy = m_videoregs[1] & 0x8000;
516505
517   int max_x = machine.primary_screen->width();
518   int max_y = machine.primary_screen->height();
506   int max_x = m_screen->width();
507   int max_y = m_screen->height();
519508
520   source = state->m_spriteram + ((state->m_spriteram.bytes() / 2) / 2) * state->m_spriteram_bank;
509   source = m_spriteram + ((m_spriteram.bytes() / 2) / 2) * m_spriteram_bank;
521510
522   if (state->m_videoregs[4] & 0x02)
523      if (state->m_spriteram_2)
524         source = state->m_spriteram_2 + ((state->m_spriteram.bytes() / 2) / 2) * state->m_spriteram_bank;
511   if (m_videoregs[4] & 0x02)
512      if (m_spriteram_2)
513         source = m_spriteram_2 + ((m_spriteram.bytes() / 2) / 2) * m_spriteram_bank;
525514
526   finish = source + ((state->m_spriteram.bytes() / 2) / 2);
515   finish = source + ((m_spriteram.bytes() / 2) / 2);
527516
528517
529518   for (; source < finish; source += 8)
r24767r24768
531520      int x, y, attr, code, zoomx, zoomy, size, flipx, flipy;
532521      int total_width_f, total_height_f;
533522
534      if (state->m_spritetype[0] == 2)    /* Hot Dog Storm */
523      if (m_spritetype[0] == 2)    /* Hot Dog Storm */
535524      {
536525         x = (source[0] & 0x3ff) << 8;
537526         y = (source[1] & 0x3ff) << 8;
r24767r24768
589578         sprite->ycount0 = sprite->zoomy_re - 1;
590579      }
591580
592      if (state->m_spritetype[0] == 2)
581      if (m_spritetype[0] == 2)
593582      {
594583         x >>= 8;
595584         y >>= 8;
r24767r24768
626615
627616      sprite++;
628617   }
629   state->m_num_sprites = sprite - state->m_sprite;
618   m_num_sprites = sprite - m_sprite;
630619}
631620
632static void get_sprite_info_donpachi( running_machine &machine )
621void cave_state::get_sprite_info_donpachi()
633622{
634   cave_state *state = machine.driver_data<cave_state>();
635623   pen_t base_pal = 0;
636   const UINT8 *base_gfx = state->memregion("sprites")->base();
637   int code_max = state->memregion("sprites")->bytes() / (16*16);
624   const UINT8 *base_gfx = memregion("sprites")->base();
625   int code_max = memregion("sprites")->bytes() / (16*16);
638626
639627   UINT16 *source;
640628   UINT16 *finish;
641629
642   struct sprite_cave *sprite = state->m_sprite;
630   struct sprite_cave *sprite = m_sprite;
643631
644   int glob_flipx = state->m_videoregs[0] & 0x8000;
645   int glob_flipy = state->m_videoregs[1] & 0x8000;
632   int glob_flipx = m_videoregs[0] & 0x8000;
633   int glob_flipy = m_videoregs[1] & 0x8000;
646634
647   int max_x = machine.primary_screen->width();
648   int max_y = machine.primary_screen->height();
635   int max_x = m_screen->width();
636   int max_y = m_screen->height();
649637
650   source = state->m_spriteram + ((state->m_spriteram.bytes() / 2) / 2) * state->m_spriteram_bank;
638   source = m_spriteram + ((m_spriteram.bytes() / 2) / 2) * m_spriteram_bank;
651639
652   if (state->m_videoregs[4] & 0x02)
653      if (state->m_spriteram_2)
654         source = state->m_spriteram_2 + ((state->m_spriteram.bytes() / 2) / 2) * state->m_spriteram_bank;
640   if (m_videoregs[4] & 0x02)
641      if (m_spriteram_2)
642         source = m_spriteram_2 + ((m_spriteram.bytes() / 2) / 2) * m_spriteram_bank;
655643
656   finish = source + ((state->m_spriteram.bytes() / 2) / 2);
644   finish = source + ((m_spriteram.bytes() / 2) / 2);
657645
658646   for (; source < finish; source += 8)
659647   {
r24767r24768
663651      code = source[1] + ((attr & 3) << 16);
664652      x    = source[2] & 0x3ff;
665653
666      if (state->m_spritetype[0] == 3)    /* pwrinst2 */
654      if (m_spritetype[0] == 3)    /* pwrinst2 */
667655         y = (source[3] + 1) & 0x3ff;
668656      else
669657         y = source[3] & 0x3ff;
r24767r24768
687675      flipx    = attr & 0x0008;
688676      flipy    = attr & 0x0004;
689677
690      if (state->m_spritetype[0] == 3)    /* pwrinst2 */
678      if (m_spritetype[0] == 3)    /* pwrinst2 */
691679      {
692680         sprite->priority = ((attr & 0x0010) >> 4) + 2;
693681         sprite->base_pen = base_pal + (attr & 0x3f00) + 0x4000 * ((attr & 0x0020) >> 5);
r24767r24768
712700
713701      sprite++;
714702   }
715   state->m_num_sprites = sprite - state->m_sprite;
703   m_num_sprites = sprite - m_sprite;
716704}
717705
718706
719static void sprite_init_cave( running_machine &machine )
707void cave_state::sprite_init_cave()
720708{
721   cave_state *state = machine.driver_data<cave_state>();
722
723   if (state->m_spritetype[0] == 0 || state->m_spritetype[0] == 2) // most of the games
709   if (m_spritetype[0] == 0 || m_spritetype[0] == 2) // most of the games
724710   {
725      state->m_get_sprite_info = get_sprite_info_cave;
726      state->m_spritetype[1] = CAVE_SPRITETYPE_ZOOM;
711      m_get_sprite_info = &cave_state::get_sprite_info_cave;
712      m_spritetype[1] = CAVE_SPRITETYPE_ZOOM;
727713   }
728714   else                        // donpachi ddonpach
729715   {
730      state->m_get_sprite_info = get_sprite_info_donpachi;
731      state->m_spritetype[1] = 0;
716      m_get_sprite_info = &cave_state::get_sprite_info_donpachi;
717      m_spritetype[1] = 0;
732718   }
733719
734   state->m_sprite_zbuf_baseval = 0x10000 - MAX_SPRITE_NUM;
735   machine.primary_screen->register_screen_bitmap(state->m_sprite_zbuf);
720   m_sprite_zbuf_baseval = 0x10000 - MAX_SPRITE_NUM;
721   m_screen->register_screen_bitmap(m_sprite_zbuf);
736722
737   state->m_num_sprites = state->m_spriteram.bytes() / 0x10 / 2;
738   state->m_sprite = auto_alloc_array_clear(machine, struct sprite_cave, state->m_num_sprites);
723   m_num_sprites = m_spriteram.bytes() / 0x10 / 2;
724   m_sprite = auto_alloc_array_clear(machine(), struct sprite_cave, m_num_sprites);
739725
740   memset(state->m_sprite_table, 0, sizeof(state->m_sprite_table));
741   state->m_sprite_draw = sprite_draw_donpachi;
726   memset(m_sprite_table, 0, sizeof(m_sprite_table));
727   m_sprite_draw = &cave_state::sprite_draw_donpachi;
742728
743   state->save_item(NAME(state->m_sprite_zbuf));
744   state->save_item(NAME(state->m_sprite_zbuf_baseval));
745   state->save_item(NAME(state->m_num_sprites));
746   state->save_item(NAME(state->m_spriteram_bank));
747   state->save_item(NAME(state->m_spriteram_bank_delay));
729   save_item(NAME(m_sprite_zbuf));
730   save_item(NAME(m_sprite_zbuf_baseval));
731   save_item(NAME(m_num_sprites));
732   save_item(NAME(m_spriteram_bank));
733   save_item(NAME(m_spriteram_bank_delay));
748734
749   state->save_item(NAME(state->m_blit.clip_left));
750   state->save_item(NAME(state->m_blit.clip_right));
751   state->save_item(NAME(state->m_blit.clip_top));
752   state->save_item(NAME(state->m_blit.clip_bottom));
735   save_item(NAME(m_blit.clip_left));
736   save_item(NAME(m_blit.clip_right));
737   save_item(NAME(m_blit.clip_top));
738   save_item(NAME(m_blit.clip_bottom));
753739
754   machine.save().register_postload(save_prepost_delegate(FUNC(cave_state::cave_get_sprite_info), state));
740   machine().save().register_postload(save_prepost_delegate(FUNC(cave_state::cave_get_sprite_info), this));
755741}
756742
757static void cave_sprite_check( screen_device &screen, const rectangle &clip )
743void cave_state::cave_sprite_check(screen_device &screen, const rectangle &clip)
758744{
759   cave_state *state = screen.machine().driver_data<cave_state>();
760
761745   {   /* set clip */
762746      int left = clip.min_x;
763747      int top = clip.min_y;
764748      int right = clip.max_x + 1;
765749      int bottom = clip.max_y + 1;
766750
767      state->m_blit.clip_left = left;
768      state->m_blit.clip_top = top;
769      state->m_blit.clip_right = right;
770      state->m_blit.clip_bottom = bottom;
751      m_blit.clip_left = left;
752      m_blit.clip_top = top;
753      m_blit.clip_right = right;
754      m_blit.clip_bottom = bottom;
771755   }
772756
773757   {   /* check priority & sprite type */
774      struct sprite_cave *sprite = state->m_sprite;
775      const struct sprite_cave *finish = &sprite[state->m_num_sprites];
758      struct sprite_cave *sprite = m_sprite;
759      const struct sprite_cave *finish = &sprite[m_num_sprites];
776760      int i[4] = {0,0,0,0};
777761      int priority_check = 0;
778      int spritetype = state->m_spritetype[1];
762      int spritetype = m_spritetype[1];
779763      const rectangle &visarea = screen.visible_area();
780764
781765      while (sprite < finish)
782766      {
783         if (sprite->x + sprite->total_width  > state->m_blit.clip_left && sprite->x < state->m_blit.clip_right  &&
784            sprite->y + sprite->total_height > state->m_blit.clip_top  && sprite->y < state->m_blit.clip_bottom    )
767         if (sprite->x + sprite->total_width  > m_blit.clip_left && sprite->x < m_blit.clip_right  &&
768            sprite->y + sprite->total_height > m_blit.clip_top  && sprite->y < m_blit.clip_bottom    )
785769         {
786            state->m_sprite_table[sprite->priority][i[sprite->priority]++] = sprite;
770            m_sprite_table[sprite->priority][i[sprite->priority]++] = sprite;
787771
788772            if(!(spritetype & CAVE_SPRITETYPE_ZBUF))
789773            {
r24767r24768
796780         sprite++;
797781      }
798782
799      state->m_sprite_table[0][i[0]] = 0;
800      state->m_sprite_table[1][i[1]] = 0;
801      state->m_sprite_table[2][i[2]] = 0;
802      state->m_sprite_table[3][i[3]] = 0;
783      m_sprite_table[0][i[0]] = 0;
784      m_sprite_table[1][i[1]] = 0;
785      m_sprite_table[2][i[2]] = 0;
786      m_sprite_table[3][i[3]] = 0;
803787
804788      switch (spritetype)
805789      {
806790         case CAVE_SPRITETYPE_ZOOM:
807            state->m_sprite_draw = sprite_draw_cave;
791            m_sprite_draw = &cave_state::sprite_draw_cave;
808792            break;
809793
810794         case CAVE_SPRITETYPE_ZOOM | CAVE_SPRITETYPE_ZBUF:
811            state->m_sprite_draw = sprite_draw_cave_zbuf;
795            m_sprite_draw = &cave_state::sprite_draw_cave_zbuf;
812796            if (clip.min_y == visarea.min_y)
813797            {
814               if(!(state->m_sprite_zbuf_baseval += MAX_SPRITE_NUM))
815                  state->m_sprite_zbuf.fill(0, visarea);
798               if(!(m_sprite_zbuf_baseval += MAX_SPRITE_NUM))
799                  m_sprite_zbuf.fill(0, visarea);
816800            }
817801            break;
818802
819803         case CAVE_SPRITETYPE_ZBUF:
820            state->m_sprite_draw = sprite_draw_donpachi_zbuf;
804            m_sprite_draw = &cave_state::sprite_draw_donpachi_zbuf;
821805            if (clip.min_y == visarea.min_y)
822806            {
823               if(!(state->m_sprite_zbuf_baseval += MAX_SPRITE_NUM))
824                  state->m_sprite_zbuf.fill(0, visarea);
807               if(!(m_sprite_zbuf_baseval += MAX_SPRITE_NUM))
808                  m_sprite_zbuf.fill(0, visarea);
825809            }
826810            break;
827811
828812         default:
829813         case 0:
830            state->m_sprite_draw = sprite_draw_donpachi;
814            m_sprite_draw = &cave_state::sprite_draw_donpachi;
831815      }
832816   }
833817}
834818
835static void do_blit_zoom16_cave( running_machine &machine, const struct sprite_cave *sprite )
819void cave_state::do_blit_zoom16_cave(const struct sprite_cave *sprite)
836820{
837821   /*  assumes SPRITE_LIST_RAW_DATA flag is set */
838   cave_state *state = machine.driver_data<cave_state>();
839822   int x1, x2, y1, y2, dx, dy;
840823   int xcount0 = 0x10000 + sprite->xcount0, ycount0 = 0x10000 + sprite->ycount0;
841824
r24767r24768
844827      x2 = sprite->x;
845828      x1 = x2 + sprite->total_width;
846829      dx = -1;
847      if (x2 < state->m_blit.clip_left)
848         x2 = state->m_blit.clip_left;
830      if (x2 < m_blit.clip_left)
831         x2 = m_blit.clip_left;
849832
850      if (x1 > state->m_blit.clip_right)
833      if (x1 > m_blit.clip_right)
851834      {
852         xcount0 += (x1 - state->m_blit.clip_right) * sprite->zoomx_re;
853         x1 = state->m_blit.clip_right;
835         xcount0 += (x1 - m_blit.clip_right) * sprite->zoomx_re;
836         x1 = m_blit.clip_right;
854837         while ((xcount0 & 0xffff) >= sprite->zoomx_re)
855838         {
856839            xcount0 += sprite->zoomx_re;
r24767r24768
867850      x1 = sprite->x;
868851      x2 = x1 + sprite->total_width;
869852      dx = 1;
870      if (x1 < state->m_blit.clip_left)
853      if (x1 < m_blit.clip_left)
871854      {
872         xcount0 += (state->m_blit.clip_left - x1) * sprite->zoomx_re;
873         x1 = state->m_blit.clip_left;
855         xcount0 += (m_blit.clip_left - x1) * sprite->zoomx_re;
856         x1 = m_blit.clip_left;
874857         while ((xcount0 & 0xffff) >= sprite->zoomx_re)
875858         {
876859            xcount0 += sprite->zoomx_re;
877860            x1++;
878861         }
879862      }
880      if (x2 > state->m_blit.clip_right)
881         x2 = state->m_blit.clip_right;
863      if (x2 > m_blit.clip_right)
864         x2 = m_blit.clip_right;
882865      if (x1 >= x2)
883866         return;
884867   }
r24767r24768
888871      y2 = sprite->y;
889872      y1 = y2 + sprite->total_height;
890873      dy = -1;
891      if (y2 < state->m_blit.clip_top)
892         y2 = state->m_blit.clip_top;
893      if (y1 > state->m_blit.clip_bottom)
874      if (y2 < m_blit.clip_top)
875         y2 = m_blit.clip_top;
876      if (y1 > m_blit.clip_bottom)
894877      {
895         ycount0 += (y1 - state->m_blit.clip_bottom) * sprite->zoomy_re;
896         y1 = state->m_blit.clip_bottom;
878         ycount0 += (y1 - m_blit.clip_bottom) * sprite->zoomy_re;
879         y1 = m_blit.clip_bottom;
897880         while ((ycount0 & 0xffff) >= sprite->zoomy_re)
898881         {
899882            ycount0 += sprite->zoomy_re;
r24767r24768
909892      y1 = sprite->y;
910893      y2 = y1 + sprite->total_height;
911894      dy = 1;
912      if (y1 < state->m_blit.clip_top)
895      if (y1 < m_blit.clip_top)
913896      {
914         ycount0 += (state->m_blit.clip_top - y1) * sprite->zoomy_re;
915         y1 = state->m_blit.clip_top;
897         ycount0 += (m_blit.clip_top - y1) * sprite->zoomy_re;
898         y1 = m_blit.clip_top;
916899         while ((ycount0 & 0xffff) >= sprite->zoomy_re)
917900         {
918901            ycount0 += sprite->zoomy_re;
919902            y1++;
920903         }
921904      }
922      if (y2 > state->m_blit.clip_bottom )
923         y2 = state->m_blit.clip_bottom;
905      if (y2 > m_blit.clip_bottom )
906         y2 = m_blit.clip_bottom;
924907      if (y1 >= y2)
925908         return;
926909   }
r24767r24768
930913      pen_t base_pen = sprite->base_pen;
931914      int x, y;
932915      UINT8 pen;
933      int pitch = state->m_blit.line_offset * dy / 2;
934      UINT16 *dest = (UINT16 *)(state->m_blit.baseaddr + state->m_blit.line_offset * y1);
916      int pitch = m_blit.line_offset * dy / 2;
917      UINT16 *dest = (UINT16 *)(m_blit.baseaddr + m_blit.line_offset * y1);
935918      int ycount = ycount0;
936919
937920      for (y = y1; y != y2; y += dy)
r24767r24768
965948}
966949
967950
968static void do_blit_zoom16_cave_zb( running_machine &machine, const struct sprite_cave *sprite )
951void cave_state::do_blit_zoom16_cave_zb( const struct sprite_cave *sprite )
969952{
970953   /*  assumes SPRITE_LIST_RAW_DATA flag is set */
971   cave_state *state = machine.driver_data<cave_state>();
972954   int x1, x2, y1, y2, dx, dy;
973955   int xcount0 = 0x10000 + sprite->xcount0, ycount0 = 0x10000 + sprite->ycount0;
974956
r24767r24768
977959      x2 = sprite->x;
978960      x1 = x2 + sprite->total_width;
979961      dx = -1;
980      if (x2 < state->m_blit.clip_left)
981         x2 = state->m_blit.clip_left;
982      if (x1 > state->m_blit.clip_right)
962      if (x2 < m_blit.clip_left)
963         x2 = m_blit.clip_left;
964      if (x1 > m_blit.clip_right)
983965      {
984         xcount0 += (x1 - state->m_blit.clip_right) * sprite->zoomx_re;
985         x1 = state->m_blit.clip_right;
966         xcount0 += (x1 - m_blit.clip_right) * sprite->zoomx_re;
967         x1 = m_blit.clip_right;
986968         while ((xcount0 & 0xffff) >= sprite->zoomx_re)
987969         {
988970            xcount0 += sprite->zoomx_re;
r24767r24768
998980      x1 = sprite->x;
999981      x2 = x1 + sprite->total_width;
1000982      dx = 1;
1001      if (x1 < state->m_blit.clip_left)
983      if (x1 < m_blit.clip_left)
1002984      {
1003         xcount0 += (state->m_blit.clip_left - x1) * sprite->zoomx_re;
1004         x1 = state->m_blit.clip_left;
985         xcount0 += (m_blit.clip_left - x1) * sprite->zoomx_re;
986         x1 = m_blit.clip_left;
1005987         while ((xcount0 & 0xffff) >= sprite->zoomx_re)
1006988         {
1007989            xcount0 += sprite->zoomx_re;
1008990            x1++;
1009991         }
1010992      }
1011      if (x2 > state->m_blit.clip_right)
1012         x2 = state->m_blit.clip_right;
993      if (x2 > m_blit.clip_right)
994         x2 = m_blit.clip_right;
1013995      if (x1 >= x2)
1014996         return;
1015997   }
r24767r24768
10181000      y2 = sprite->y;
10191001      y1 = y2 + sprite->total_height;
10201002      dy = -1;
1021      if (y2 < state->m_blit.clip_top)
1022         y2 = state->m_blit.clip_top;
1023      if (y1 > state->m_blit.clip_bottom)
1003      if (y2 < m_blit.clip_top)
1004         y2 = m_blit.clip_top;
1005      if (y1 > m_blit.clip_bottom)
10241006      {
1025         ycount0 += (y1 - state->m_blit.clip_bottom) * sprite->zoomy_re;
1026         y1 = state->m_blit.clip_bottom;
1007         ycount0 += (y1 - m_blit.clip_bottom) * sprite->zoomy_re;
1008         y1 = m_blit.clip_bottom;
10271009         while ((ycount0 & 0xffff) >= sprite->zoomy_re)
10281010         {
10291011            ycount0 += sprite->zoomy_re;
r24767r24768
10391021      y1 = sprite->y;
10401022      y2 = y1 + sprite->total_height;
10411023      dy = 1;
1042      if (y1 < state->m_blit.clip_top)
1024      if (y1 < m_blit.clip_top)
10431025      {
1044         ycount0 += (state->m_blit.clip_top - y1) * sprite->zoomy_re;
1045         y1 = state->m_blit.clip_top;
1026         ycount0 += (m_blit.clip_top - y1) * sprite->zoomy_re;
1027         y1 = m_blit.clip_top;
10461028         while ((ycount0 & 0xffff) >= sprite->zoomy_re)
10471029         {
10481030            ycount0 += sprite->zoomy_re;
10491031            y1++;
10501032         }
10511033      }
1052      if (y2 > state->m_blit.clip_bottom)
1053         y2 = state->m_blit.clip_bottom;
1034      if (y2 > m_blit.clip_bottom)
1035         y2 = m_blit.clip_bottom;
10541036      if (y1 >= y2)
10551037         return;
10561038   }
r24767r24768
10601042      pen_t base_pen = sprite->base_pen;
10611043      int x, y;
10621044      UINT8 pen;
1063      int pitch = state->m_blit.line_offset * dy / 2;
1064      UINT16 *dest = (UINT16 *)(state->m_blit.baseaddr + state->m_blit.line_offset * y1);
1065      int pitchz = state->m_blit.line_offset_zbuf * dy / 2;
1066      UINT16 *zbf = (UINT16 *)(state->m_blit.baseaddr_zbuf + state->m_blit.line_offset_zbuf * y1);
1067      UINT16 pri_sp = (UINT16)(sprite - state->m_sprite) + state->m_sprite_zbuf_baseval;
1045      int pitch = m_blit.line_offset * dy / 2;
1046      UINT16 *dest = (UINT16 *)(m_blit.baseaddr + m_blit.line_offset * y1);
1047      int pitchz = m_blit.line_offset_zbuf * dy / 2;
1048      UINT16 *zbf = (UINT16 *)(m_blit.baseaddr_zbuf + m_blit.line_offset_zbuf * y1);
1049      UINT16 pri_sp = (UINT16)(sprite - m_sprite) + m_sprite_zbuf_baseval;
10681050      int ycount = ycount0;
10691051
10701052      for (y = y1; y != y2; y += dy)
r24767r24768
11011083   }
11021084}
11031085
1104static void do_blit_16_cave( running_machine &machine, const struct sprite_cave *sprite )
1086void cave_state::do_blit_16_cave( const struct sprite_cave *sprite )
11051087{
11061088   /*  assumes SPRITE_LIST_RAW_DATA flag is set */
1107   cave_state *state = machine.driver_data<cave_state>();
11081089   int x1, x2, y1, y2, dx, dy;
11091090   int xcount0 = 0, ycount0 = 0;
11101091
r24767r24768
11131094      x2 = sprite->x;
11141095      x1 = x2 + sprite->total_width;
11151096      dx = -1;
1116      if (x2 < state->m_blit.clip_left)
1117         x2 = state->m_blit.clip_left;
1118      if (x1 > state->m_blit.clip_right)
1097      if (x2 < m_blit.clip_left)
1098         x2 = m_blit.clip_left;
1099      if (x1 > m_blit.clip_right)
11191100      {
1120         xcount0 = x1 - state->m_blit.clip_right;
1121         x1 = state->m_blit.clip_right;
1101         xcount0 = x1 - m_blit.clip_right;
1102         x1 = m_blit.clip_right;
11221103      }
11231104      if (x2 >= x1)
11241105         return;
r24767r24768
11291110      x1 = sprite->x;
11301111      x2 = x1 + sprite->total_width;
11311112      dx = 1;
1132      if (x1 < state->m_blit.clip_left)
1113      if (x1 < m_blit.clip_left)
11331114      {
1134         xcount0 = state->m_blit.clip_left - x1;
1135         x1 = state->m_blit.clip_left;
1115         xcount0 = m_blit.clip_left - x1;
1116         x1 = m_blit.clip_left;
11361117      }
1137      if (x2 > state->m_blit.clip_right)
1138         x2 = state->m_blit.clip_right;
1118      if (x2 > m_blit.clip_right)
1119         x2 = m_blit.clip_right;
11391120      if (x1 >= x2)
11401121         return;
11411122   }
r24767r24768
11441125      y2 = sprite->y;
11451126      y1 = y2 + sprite->total_height;
11461127      dy = -1;
1147      if (y2 < state->m_blit.clip_top)
1148         y2 = state->m_blit.clip_top;
1149      if (y1 > state->m_blit.clip_bottom)
1128      if (y2 < m_blit.clip_top)
1129         y2 = m_blit.clip_top;
1130      if (y1 > m_blit.clip_bottom)
11501131      {
1151         ycount0 = y1 - state->m_blit.clip_bottom;
1152         y1 = state->m_blit.clip_bottom;
1132         ycount0 = y1 - m_blit.clip_bottom;
1133         y1 = m_blit.clip_bottom;
11531134      }
11541135      if (y2 >= y1)
11551136         return;
r24767r24768
11591140      y1 = sprite->y;
11601141      y2 = y1 + sprite->total_height;
11611142      dy = 1;
1162      if (y1 < state->m_blit.clip_top )
1143      if (y1 < m_blit.clip_top )
11631144      {
1164         ycount0 = state->m_blit.clip_top - y1;
1165         y1 = state->m_blit.clip_top;
1145         ycount0 = m_blit.clip_top - y1;
1146         y1 = m_blit.clip_top;
11661147      }
1167      if (y2 > state->m_blit.clip_bottom)
1168         y2 = state->m_blit.clip_bottom;
1148      if (y2 > m_blit.clip_bottom)
1149         y2 = m_blit.clip_bottom;
11691150      if (y1 >= y2)
11701151         return;
11711152   }
r24767r24768
11751156      pen_t base_pen = sprite->base_pen;
11761157      int x, y;
11771158      UINT8 pen;
1178      int pitch = state->m_blit.line_offset * dy / 2;
1179      UINT16 *dest = (UINT16 *)(state->m_blit.baseaddr + state->m_blit.line_offset * y1);
1159      int pitch = m_blit.line_offset * dy / 2;
1160      UINT16 *dest = (UINT16 *)(m_blit.baseaddr + m_blit.line_offset * y1);
11801161
11811162      pen_data += sprite->line_offset * ycount0 + xcount0;
11821163      for (y = y1; y != y2; y += dy)
r24767r24768
11971178}
11981179
11991180
1200static void do_blit_16_cave_zb( running_machine &machine, const struct sprite_cave *sprite )
1181void cave_state::do_blit_16_cave_zb( const struct sprite_cave *sprite )
12011182{
12021183   /*  assumes SPRITE_LIST_RAW_DATA flag is set */
1203   cave_state *state = machine.driver_data<cave_state>();
12041184   int x1, x2, y1, y2, dx, dy;
12051185   int xcount0 = 0, ycount0 = 0;
12061186
r24767r24768
12091189      x2 = sprite->x;
12101190      x1 = x2 + sprite->total_width;
12111191      dx = -1;
1212      if (x2 < state->m_blit.clip_left)
1213         x2 = state->m_blit.clip_left;
1214      if (x1 > state->m_blit.clip_right)
1192      if (x2 < m_blit.clip_left)
1193         x2 = m_blit.clip_left;
1194      if (x1 > m_blit.clip_right)
12151195      {
1216         xcount0 = x1 - state->m_blit.clip_right;
1217         x1 = state->m_blit.clip_right;
1196         xcount0 = x1 - m_blit.clip_right;
1197         x1 = m_blit.clip_right;
12181198      }
12191199      if (x2 >= x1)
12201200         return;
r24767r24768
12251205      x1 = sprite->x;
12261206      x2 = x1 + sprite->total_width;
12271207      dx = 1;
1228      if (x1 < state->m_blit.clip_left)
1208      if (x1 < m_blit.clip_left)
12291209      {
1230         xcount0 = state->m_blit.clip_left - x1;
1231         x1 = state->m_blit.clip_left;
1210         xcount0 = m_blit.clip_left - x1;
1211         x1 = m_blit.clip_left;
12321212      }
1233      if (x2 > state->m_blit.clip_right)
1234         x2 = state->m_blit.clip_right;
1213      if (x2 > m_blit.clip_right)
1214         x2 = m_blit.clip_right;
12351215      if (x1 >= x2)
12361216         return;
12371217   }
r24767r24768
12401220      y2 = sprite->y;
12411221      y1 = y2 + sprite->total_height;
12421222      dy = -1;
1243      if (y2 < state->m_blit.clip_top)
1244         y2 = state->m_blit.clip_top;
1245      if (y1 > state->m_blit.clip_bottom)
1223      if (y2 < m_blit.clip_top)
1224         y2 = m_blit.clip_top;
1225      if (y1 > m_blit.clip_bottom)
12461226      {
1247         ycount0 = y1 - state->m_blit.clip_bottom;
1248         y1 = state->m_blit.clip_bottom;
1227         ycount0 = y1 - m_blit.clip_bottom;
1228         y1 = m_blit.clip_bottom;
12491229      }
12501230      if (y2 >= y1)
12511231         return;
r24767r24768
12561236      y1 = sprite->y;
12571237      y2 = y1 + sprite->total_height;
12581238      dy = 1;
1259      if (y1 < state->m_blit.clip_top)
1239      if (y1 < m_blit.clip_top)
12601240      {
1261         ycount0 = state->m_blit.clip_top - y1;
1262         y1 = state->m_blit.clip_top;
1241         ycount0 = m_blit.clip_top - y1;
1242         y1 = m_blit.clip_top;
12631243      }
1264      if (y2 > state->m_blit.clip_bottom)
1265         y2 = state->m_blit.clip_bottom;
1244      if (y2 > m_blit.clip_bottom)
1245         y2 = m_blit.clip_bottom;
12661246      if (y1 >= y2)
12671247         return;
12681248   }
r24767r24768
12721252      pen_t base_pen = sprite->base_pen;
12731253      int x, y;
12741254      UINT8 pen;
1275      int pitch = state->m_blit.line_offset * dy / 2;
1276      UINT16 *dest = (UINT16 *)(state->m_blit.baseaddr + state->m_blit.line_offset * y1);
1277      int pitchz = state->m_blit.line_offset_zbuf * dy / 2;
1278      UINT16 *zbf = (UINT16 *)(state->m_blit.baseaddr_zbuf + state->m_blit.line_offset_zbuf * y1);
1279      UINT16 pri_sp = (UINT16)(sprite - state->m_sprite) + state->m_sprite_zbuf_baseval;
1255      int pitch = m_blit.line_offset * dy / 2;
1256      UINT16 *dest = (UINT16 *)(m_blit.baseaddr + m_blit.line_offset * y1);
1257      int pitchz = m_blit.line_offset_zbuf * dy / 2;
1258      UINT16 *zbf = (UINT16 *)(m_blit.baseaddr_zbuf + m_blit.line_offset_zbuf * y1);
1259      UINT16 pri_sp = (UINT16)(sprite - m_sprite) + m_sprite_zbuf_baseval;
12801260
12811261      pen_data += sprite->line_offset * ycount0 + xcount0;
12821262      for (y = y1; y != y2; y += dy)
r24767r24768
13011281}
13021282
13031283
1304static void sprite_draw_cave( running_machine &machine, int priority )
1284void cave_state::sprite_draw_cave( int priority )
13051285{
1306   cave_state *state = machine.driver_data<cave_state>();
13071286   int i = 0;
1308   while (state->m_sprite_table[priority][i])
1287   while (m_sprite_table[priority][i])
13091288   {
1310      const struct sprite_cave *sprite = state->m_sprite_table[priority][i++];
1289      const struct sprite_cave *sprite = m_sprite_table[priority][i++];
13111290      if ((sprite->tile_width == sprite->total_width) && (sprite->tile_height == sprite->total_height))
1312         do_blit_16_cave(machine, sprite);
1291         do_blit_16_cave(sprite);
13131292      else
1314         do_blit_zoom16_cave(machine, sprite);
1293         do_blit_zoom16_cave(sprite);
13151294   }
13161295}
13171296
1318static void sprite_draw_cave_zbuf( running_machine &machine, int priority )
1297void cave_state::sprite_draw_cave_zbuf( int priority )
13191298{
1320   cave_state *state = machine.driver_data<cave_state>();
13211299   int i = 0;
1322   while (state->m_sprite_table[priority][i])
1300   while (m_sprite_table[priority][i])
13231301   {
1324      const struct sprite_cave *sprite = state->m_sprite_table[priority][i++];
1302      const struct sprite_cave *sprite = m_sprite_table[priority][i++];
13251303      if ((sprite->tile_width == sprite->total_width) && (sprite->tile_height == sprite->total_height))
1326         do_blit_16_cave_zb(machine, sprite);
1304         do_blit_16_cave_zb(sprite);
13271305      else
1328         do_blit_zoom16_cave_zb(machine, sprite);
1306         do_blit_zoom16_cave_zb(sprite);
13291307   }
13301308}
13311309
1332static void sprite_draw_donpachi( running_machine &machine, int priority )
1310void cave_state::sprite_draw_donpachi( int priority )
13331311{
1334   cave_state *state = machine.driver_data<cave_state>();
13351312   int i = 0;
1336   while (state->m_sprite_table[priority][i])
1337      do_blit_16_cave(machine, state->m_sprite_table[priority][i++]);
1313   while (m_sprite_table[priority][i])
1314      do_blit_16_cave(m_sprite_table[priority][i++]);
13381315}
13391316
1340static void sprite_draw_donpachi_zbuf( running_machine &machine, int priority )
1317void cave_state::sprite_draw_donpachi_zbuf( int priority )
13411318{
1342   cave_state *state = machine.driver_data<cave_state>();
13431319   int i = 0;
1344   while (state->m_sprite_table[priority][i])
1345      do_blit_16_cave_zb(machine, state->m_sprite_table[priority][i++]);
1320   while (m_sprite_table[priority][i])
1321      do_blit_16_cave_zb(m_sprite_table[priority][i++]);
13461322}
13471323
13481324
r24767r24768
15291505   int pri, pri2, GFX;
15301506   int layers_ctrl = -1;
15311507
1532   set_pens(machine());
1508   set_pens();
15331509
15341510   m_blit.baseaddr = reinterpret_cast<UINT8 *>(bitmap.raw_pixptr(0));
15351511   m_blit.line_offset = bitmap.rowbytes();
r24767r24768
16221598   */
16231599   for (pri = 0; pri <= 3; pri++)  // tile / sprite priority
16241600   {
1625      if (layers_ctrl & (1 << (pri + 16)))    (*m_sprite_draw)(screen.machine(), pri);
1601      if (layers_ctrl & (1 << (pri + 16)))    (this->*m_sprite_draw)(pri);
16261602
16271603      for (pri2 = 0; pri2 <= 3; pri2++)   // priority of the whole layer
16281604      {
r24767r24768
16461622      if (machine().video().skip_this_frame() == 0)
16471623      {
16481624         m_spriteram_bank = m_spriteram_bank_delay;
1649         (*m_get_sprite_info)(machine());
1625         (this->*m_get_sprite_info)();
16501626      }
16511627      m_spriteram_bank_delay = m_videoregs[4] & 1;
16521628   }
r24767r24768
16551631      if (machine().video().skip_this_frame() == 0)
16561632      {
16571633         m_spriteram_bank = m_videoregs[4] & 1;
1658         (*m_get_sprite_info)(machine());
1634         (this->*m_get_sprite_info)();
16591635      }
16601636   }
16611637}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team