19
19
*************************************/
21
static void set_videoram_offset( running_machine *machine, UINT16 data )
21
static void set_videoram_offset( running_machine &machine, UINT16 data )
23
neogeo_state *state = machine->driver_data<neogeo_state>();
24
state->videoram_offset = data;
23
neogeo_state *state = machine.driver_data<neogeo_state>();
24
state->m_videoram_offset = data;
26
26
/* the read happens right away */
27
state->videoram_read_buffer = state->videoram[state->videoram_offset];
31
static UINT16 get_videoram_data( running_machine *machine )
33
neogeo_state *state = machine->driver_data<neogeo_state>();
34
return state->videoram_read_buffer;
38
static void set_videoram_data( running_machine *machine, UINT16 data)
40
neogeo_state *state = machine->driver_data<neogeo_state>();
41
state->videoram[state->videoram_offset] = data;
27
state->m_videoram_read_buffer = state->m_videoram[state->m_videoram_offset];
31
static UINT16 get_videoram_data( running_machine &machine )
33
neogeo_state *state = machine.driver_data<neogeo_state>();
34
return state->m_videoram_read_buffer;
38
static void set_videoram_data( running_machine &machine, UINT16 data)
40
neogeo_state *state = machine.driver_data<neogeo_state>();
41
state->m_videoram[state->m_videoram_offset] = data;
43
43
/* auto increment/decrement the current offset - A15 is NOT effected */
44
state->videoram_offset = (state->videoram_offset & 0x8000) | ((state->videoram_offset + state->videoram_modulo) & 0x7fff);
44
state->m_videoram_offset = (state->m_videoram_offset & 0x8000) | ((state->m_videoram_offset + state->m_videoram_modulo) & 0x7fff);
46
46
/* read next value right away */
47
state->videoram_read_buffer = state->videoram[state->videoram_offset];
51
static void set_videoram_modulo( running_machine *machine, UINT16 data)
53
neogeo_state *state = machine->driver_data<neogeo_state>();
54
state->videoram_modulo = data;
58
static UINT16 get_videoram_modulo( running_machine *machine )
60
neogeo_state *state = machine->driver_data<neogeo_state>();
61
return state->videoram_modulo;
47
state->m_videoram_read_buffer = state->m_videoram[state->m_videoram_offset];
51
static void set_videoram_modulo( running_machine &machine, UINT16 data)
53
neogeo_state *state = machine.driver_data<neogeo_state>();
54
state->m_videoram_modulo = data;
58
static UINT16 get_videoram_modulo( running_machine &machine )
60
neogeo_state *state = machine.driver_data<neogeo_state>();
61
return state->m_videoram_modulo;
70
70
*************************************/
72
static void compute_rgb_weights( running_machine *machine )
72
static void compute_rgb_weights( running_machine &machine )
74
neogeo_state *state = machine->driver_data<neogeo_state>();
74
neogeo_state *state = machine.driver_data<neogeo_state>();
75
75
static const int resistances[] = { 220, 470, 1000, 2200, 3900 };
77
77
/* compute four sets of weights - with or without the pulldowns -
78
78
ensuring that we use the same scaler for all */
80
80
double scaler = compute_resistor_weights(0, 0xff, -1,
81
5, resistances, state->rgb_weights_normal, 0, 0,
85
compute_resistor_weights(0, 0xff, scaler,
86
5, resistances, state->rgb_weights_normal_bit15, 8200, 0,
90
compute_resistor_weights(0, 0xff, scaler,
91
5, resistances, state->rgb_weights_dark, 150, 0,
95
compute_resistor_weights(0, 0xff, scaler,
96
5, resistances, state->rgb_weights_dark_bit15, 1 / ((1.0 / 8200) + (1.0 / 150)), 0,
81
5, resistances, state->m_rgb_weights_normal, 0, 0,
85
compute_resistor_weights(0, 0xff, scaler,
86
5, resistances, state->m_rgb_weights_normal_bit15, 8200, 0,
90
compute_resistor_weights(0, 0xff, scaler,
91
5, resistances, state->m_rgb_weights_dark, 150, 0,
95
compute_resistor_weights(0, 0xff, scaler,
96
5, resistances, state->m_rgb_weights_dark_bit15, 1 / ((1.0 / 8200) + (1.0 / 150)), 0,
102
static pen_t get_pen( running_machine *machine, UINT16 data )
102
static pen_t get_pen( running_machine &machine, UINT16 data )
104
neogeo_state *state = machine->driver_data<neogeo_state>();
104
neogeo_state *state = machine.driver_data<neogeo_state>();
108
if (state->screen_dark)
108
if (state->m_screen_dark)
110
110
if (data & 0x8000)
111
weights = state->rgb_weights_dark_bit15;
111
weights = state->m_rgb_weights_dark_bit15;
113
weights = state->rgb_weights_dark;
113
weights = state->m_rgb_weights_dark;
117
117
if (data & 0x8000)
118
weights = state->rgb_weights_normal_bit15;
118
weights = state->m_rgb_weights_normal_bit15;
120
weights = state->rgb_weights_normal;
120
weights = state->m_rgb_weights_normal;
123
123
r = combine_5_weights(weights,
148
148
static STATE_POSTLOAD( regenerate_pens )
150
neogeo_state *state = machine->driver_data<neogeo_state>();
150
neogeo_state *state = machine.driver_data<neogeo_state>();
153
153
for (i = 0; i < NUM_PENS; i++)
154
state->pens[i] = get_pen(machine, state->palettes[state->palette_bank][i]);
154
state->m_pens[i] = get_pen(machine, state->m_palettes[state->m_palette_bank][i]);
158
void neogeo_set_palette_bank( running_machine *machine, UINT8 data )
158
void neogeo_set_palette_bank( running_machine &machine, UINT8 data )
160
neogeo_state *state = machine->driver_data<neogeo_state>();
161
if (data != state->palette_bank)
160
neogeo_state *state = machine.driver_data<neogeo_state>();
161
if (data != state->m_palette_bank)
163
state->palette_bank = data;
163
state->m_palette_bank = data;
165
165
regenerate_pens(machine, NULL);
170
void neogeo_set_screen_dark( running_machine *machine, UINT8 data )
170
void neogeo_set_screen_dark( running_machine &machine, UINT8 data )
172
neogeo_state *state = machine->driver_data<neogeo_state>();
173
if (data != state->screen_dark)
172
neogeo_state *state = machine.driver_data<neogeo_state>();
173
if (data != state->m_screen_dark)
175
state->screen_dark = data;
175
state->m_screen_dark = data;
177
177
regenerate_pens(machine, NULL);
182
182
READ16_HANDLER( neogeo_paletteram_r )
184
neogeo_state *state = space->machine->driver_data<neogeo_state>();
185
return state->palettes[state->palette_bank][offset];
184
neogeo_state *state = space->machine().driver_data<neogeo_state>();
185
return state->m_palettes[state->m_palette_bank][offset];
189
189
WRITE16_HANDLER( neogeo_paletteram_w )
191
neogeo_state *state = space->machine->driver_data<neogeo_state>();
192
UINT16 *addr = &state->palettes[state->palette_bank][offset];
191
neogeo_state *state = space->machine().driver_data<neogeo_state>();
192
UINT16 *addr = &state->m_palettes[state->m_palette_bank][offset];
194
194
COMBINE_DATA(addr);
196
state->pens[offset] = get_pen(space->machine, *addr);
196
state->m_pens[offset] = get_pen(space->machine(), *addr);
205
205
*************************************/
207
static void set_auto_animation_speed( running_machine *machine, UINT8 data)
209
neogeo_state *state = machine->driver_data<neogeo_state>();
210
state->auto_animation_speed = data;
214
static void set_auto_animation_disabled( running_machine *machine, UINT8 data)
216
neogeo_state *state = machine->driver_data<neogeo_state>();
217
state->auto_animation_disabled = data;
221
UINT8 neogeo_get_auto_animation_counter( running_machine *machine )
223
neogeo_state *state = machine->driver_data<neogeo_state>();
224
return state->auto_animation_counter;
207
static void set_auto_animation_speed( running_machine &machine, UINT8 data)
209
neogeo_state *state = machine.driver_data<neogeo_state>();
210
state->m_auto_animation_speed = data;
214
static void set_auto_animation_disabled( running_machine &machine, UINT8 data)
216
neogeo_state *state = machine.driver_data<neogeo_state>();
217
state->m_auto_animation_disabled = data;
221
UINT8 neogeo_get_auto_animation_counter( running_machine &machine )
223
neogeo_state *state = machine.driver_data<neogeo_state>();
224
return state->m_auto_animation_counter;
228
228
static TIMER_CALLBACK( auto_animation_timer_callback )
230
neogeo_state *state = machine->driver_data<neogeo_state>();
231
if (state->auto_animation_frame_counter == 0)
230
neogeo_state *state = machine.driver_data<neogeo_state>();
231
if (state->m_auto_animation_frame_counter == 0)
233
state->auto_animation_frame_counter = state->auto_animation_speed;
234
state->auto_animation_counter += 1;
233
state->m_auto_animation_frame_counter = state->m_auto_animation_speed;
234
state->m_auto_animation_counter += 1;
237
state->auto_animation_frame_counter = state->auto_animation_frame_counter - 1;
239
timer_adjust_oneshot(state->auto_animation_timer, machine->primary_screen->time_until_pos(NEOGEO_VSSTART), 0);
243
static void create_auto_animation_timer( running_machine *machine )
245
neogeo_state *state = machine->driver_data<neogeo_state>();
246
state->auto_animation_timer = timer_alloc(machine, auto_animation_timer_callback, NULL);
250
static void start_auto_animation_timer( running_machine *machine )
252
neogeo_state *state = machine->driver_data<neogeo_state>();
253
timer_adjust_oneshot(state->auto_animation_timer, machine->primary_screen->time_until_pos(NEOGEO_VSSTART), 0);
237
state->m_auto_animation_frame_counter = state->m_auto_animation_frame_counter - 1;
239
state->m_auto_animation_timer->adjust(machine.primary_screen->time_until_pos(NEOGEO_VSSTART));
243
static void create_auto_animation_timer( running_machine &machine )
245
neogeo_state *state = machine.driver_data<neogeo_state>();
246
state->m_auto_animation_timer = machine.scheduler().timer_alloc(FUNC(auto_animation_timer_callback));
250
static void start_auto_animation_timer( running_machine &machine )
252
neogeo_state *state = machine.driver_data<neogeo_state>();
253
state->m_auto_animation_timer->adjust(machine.primary_screen->time_until_pos(NEOGEO_VSSTART));
262
262
*************************************/
264
void neogeo_set_fixed_layer_source( running_machine *machine, UINT8 data )
264
void neogeo_set_fixed_layer_source( running_machine &machine, UINT8 data )
266
neogeo_state *state = machine->driver_data<neogeo_state>();
267
state->fixed_layer_source = data;
266
neogeo_state *state = machine.driver_data<neogeo_state>();
267
state->m_fixed_layer_source = data;
271
static void draw_fixed_layer( running_machine *machine, bitmap_t *bitmap, int scanline )
271
static void draw_fixed_layer( running_machine &machine, bitmap_t *bitmap, int scanline )
273
neogeo_state *state = machine->driver_data<neogeo_state>();
273
neogeo_state *state = machine.driver_data<neogeo_state>();
276
UINT8* gfx_base = machine->region(state->fixed_layer_source ? "fixed" : "fixedbios")->base();
277
UINT32 addr_mask = machine->region(state->fixed_layer_source ? "fixed" : "fixedbios")->bytes() - 1;
278
UINT16 *video_data = &state->videoram[0x7000 | (scanline >> 3)];
276
UINT8* gfx_base = machine.region(state->m_fixed_layer_source ? "fixed" : "fixedbios")->base();
277
UINT32 addr_mask = machine.region(state->m_fixed_layer_source ? "fixed" : "fixedbios")->bytes() - 1;
278
UINT16 *video_data = &state->m_videoram[0x7000 | (scanline >> 3)];
279
279
UINT32 *pixel_addr = BITMAP_ADDR32(bitmap, scanline, NEOGEO_HBEND);
281
281
int garouoffsets[32];
282
int banked = state->fixed_layer_source && (addr_mask > 0x1ffff);
282
int banked = state->m_fixed_layer_source && (addr_mask > 0x1ffff);
284
284
/* thanks to Mr K for the garou & kof2000 banking info */
285
285
/* Build line banking table for Garou & MS3 before starting render */
286
if (banked && state->fixed_layer_bank_type == 1)
286
if (banked && state->m_fixed_layer_bank_type == 1)
288
288
int garoubank = 0;
293
if (state->videoram[0x7500 + k] == 0x0200 && (state->videoram[0x7580 + k] & 0xff00) == 0xff00)
293
if (state->m_videoram[0x7500 + k] == 0x0200 && (state->m_videoram[0x7580 + k] & 0xff00) == 0xff00)
295
garoubank = state->videoram[0x7580 + k] & 3;
295
garoubank = state->m_videoram[0x7580 + k] & 3;
296
296
garouoffsets[y++] = garoubank;
298
298
garouoffsets[y++] = garoubank;
505
505
attr_and_code_offs = (sprite_number << 6) | (tile << 1);
506
attr = state->videoram[attr_and_code_offs + 1];
507
code = ((attr << 12) & 0x70000) | state->videoram[attr_and_code_offs];
506
attr = state->m_videoram[attr_and_code_offs + 1];
507
code = ((attr << 12) & 0x70000) | state->m_videoram[attr_and_code_offs];
509
509
/* substitute auto animation bits */
510
if (!state->auto_animation_disabled)
510
if (!state->m_auto_animation_disabled)
512
512
if (attr & 0x0008)
513
code = (code & ~0x07) | (state->auto_animation_counter & 0x07);
513
code = (code & ~0x07) | (state->m_auto_animation_counter & 0x07);
514
514
else if (attr & 0x0004)
515
code = (code & ~0x03) | (state->auto_animation_counter & 0x03);
515
code = (code & ~0x03) | (state->m_auto_animation_counter & 0x03);
518
518
/* vertical flip? */
603
603
/* select the active list */
604
604
if (scanline & 0x01)
605
sprite_list = &state->videoram[0x8680];
605
sprite_list = &state->m_videoram[0x8680];
607
sprite_list = &state->videoram[0x8600];
607
sprite_list = &state->m_videoram[0x8600];
609
609
/* scan all sprites */
610
610
for (sprite_number = 0; sprite_number < MAX_SPRITES_PER_SCREEN; sprite_number++)
612
UINT16 y_control = state->videoram[0x8200 | sprite_number];
612
UINT16 y_control = state->m_videoram[0x8200 | sprite_number];
614
614
/* if not chained, get Y position and height, otherwise use previous values */
615
615
if (~y_control & 0x40)
645
645
static TIMER_CALLBACK( sprite_line_timer_callback )
647
neogeo_state *state = machine->driver_data<neogeo_state>();
647
neogeo_state *state = machine.driver_data<neogeo_state>();
648
648
int scanline = param;
650
650
/* we are at the beginning of a scanline -
651
651
we need to draw the previous scanline and parse the sprites on the current one */
652
652
if (scanline != 0)
653
machine->primary_screen->update_partial(scanline - 1);
653
machine.primary_screen->update_partial(scanline - 1);
655
655
parse_sprites(machine, scanline);
657
657
/* let's come back at the beginning of the next line */
658
658
scanline = (scanline + 1) % NEOGEO_VTOTAL;
660
timer_adjust_oneshot(state->sprite_line_timer, machine->primary_screen->time_until_pos(scanline), scanline);
664
static void create_sprite_line_timer( running_machine *machine )
666
neogeo_state *state = machine->driver_data<neogeo_state>();
667
state->sprite_line_timer = timer_alloc(machine, sprite_line_timer_callback, NULL);
671
static void start_sprite_line_timer( running_machine *machine )
673
neogeo_state *state = machine->driver_data<neogeo_state>();
674
timer_adjust_oneshot(state->sprite_line_timer, machine->primary_screen->time_until_pos(0), 0);
678
static void optimize_sprite_data( running_machine *machine )
680
neogeo_state *state = machine->driver_data<neogeo_state>();
660
state->m_sprite_line_timer->adjust(machine.primary_screen->time_until_pos(scanline), scanline);
664
static void create_sprite_line_timer( running_machine &machine )
666
neogeo_state *state = machine.driver_data<neogeo_state>();
667
state->m_sprite_line_timer = machine.scheduler().timer_alloc(FUNC(sprite_line_timer_callback));
671
static void start_sprite_line_timer( running_machine &machine )
673
neogeo_state *state = machine.driver_data<neogeo_state>();
674
state->m_sprite_line_timer->adjust(machine.primary_screen->time_until_pos(0));
678
static void optimize_sprite_data( running_machine &machine )
680
neogeo_state *state = machine.driver_data<neogeo_state>();
682
682
/* convert the sprite graphics data into a format that
683
683
allows faster blitting */
690
690
/* get mask based on the length rounded up to the nearest
692
state->sprite_gfx_address_mask = 0xffffffff;
692
state->m_sprite_gfx_address_mask = 0xffffffff;
694
len = machine->region("sprites")->bytes();
694
len = machine.region("sprites")->bytes();
696
696
for (bit = 0x80000000; bit != 0; bit >>= 1)
698
698
if (((len * 2) - 1) & bit)
701
state->sprite_gfx_address_mask >>= 1;
701
state->m_sprite_gfx_address_mask >>= 1;
704
state->sprite_gfx = auto_alloc_array_clear(machine, UINT8, state->sprite_gfx_address_mask + 1);
704
state->m_sprite_gfx = auto_alloc_array_clear(machine, UINT8, state->m_sprite_gfx_address_mask + 1);
706
src = machine->region("sprites")->base();
707
dest = state->sprite_gfx;
706
src = machine.region("sprites")->base();
707
dest = state->m_sprite_gfx;
709
709
for (i = 0; i < len; i += 0x80, src += 0x80)
770
770
/* the vertical counter chain goes from 0xf8 - 0x1ff */
771
v_counter = machine->primary_screen->vpos() + 0x100;
771
v_counter = machine.primary_screen->vpos() + 0x100;
773
773
if (v_counter >= 0x200)
774
774
v_counter = v_counter - NEOGEO_VTOTAL;
776
776
ret = (v_counter << 7) | (neogeo_get_auto_animation_counter(machine) & 0x0007);
778
if (VERBOSE) logerror("%s: video_control read (%04x)\n", cpuexec_describe_context(machine), ret);
778
if (VERBOSE) logerror("%s: video_control read (%04x)\n", machine.describe_context(), ret);
784
static void set_video_control( running_machine *machine, UINT16 data )
784
static void set_video_control( running_machine &machine, UINT16 data )
786
786
/* this does much more than this, but I'm not sure exactly what */
787
if (VERBOSE) logerror("%s: video control write %04x\n", cpuexec_describe_context(machine), data);
787
if (VERBOSE) logerror("%s: video control write %04x\n", machine.describe_context(), data);
789
789
set_auto_animation_speed(machine, data >> 8);
790
790
set_auto_animation_disabled(machine, data & 0x0008);
830
case 0x00: set_videoram_offset(space->machine, data); break;
831
case 0x01: set_videoram_data(space->machine, data); break;
832
case 0x02: set_videoram_modulo(space->machine, data); break;
833
case 0x03: set_video_control(space->machine, data); break;
830
case 0x00: set_videoram_offset(space->machine(), data); break;
831
case 0x01: set_videoram_data(space->machine(), data); break;
832
case 0x02: set_videoram_modulo(space->machine(), data); break;
833
case 0x03: set_video_control(space->machine(), data); break;
834
834
case 0x04: neogeo_set_display_counter_msb(space, data); break;
835
835
case 0x05: neogeo_set_display_counter_lsb(space, data); break;
836
case 0x06: neogeo_acknowledge_interrupt(space->machine, data); break;
836
case 0x06: neogeo_acknowledge_interrupt(space->machine(), data); break;
837
837
case 0x07: break; /* unknown, see get_video_control */
850
850
VIDEO_START( neogeo )
852
neogeo_state *state = machine->driver_data<neogeo_state>();
852
neogeo_state *state = machine.driver_data<neogeo_state>();
854
854
/* allocate memory not directly mapped */
855
state->palettes[0] = auto_alloc_array(machine, UINT16, NUM_PENS);
856
state->palettes[1] = auto_alloc_array(machine, UINT16, NUM_PENS);
857
state->pens = auto_alloc_array(machine, pen_t, NUM_PENS);
858
state->videoram = auto_alloc_array(machine, UINT16, 0x20000/2);
855
state->m_palettes[0] = auto_alloc_array(machine, UINT16, NUM_PENS);
856
state->m_palettes[1] = auto_alloc_array(machine, UINT16, NUM_PENS);
857
state->m_pens = auto_alloc_array(machine, pen_t, NUM_PENS);
858
state->m_videoram = auto_alloc_array(machine, UINT16, 0x20000/2);
860
860
/* clear allocated memory */
861
memset(state->palettes[0], 0x00, NUM_PENS * sizeof(UINT16));
862
memset(state->palettes[1], 0x00, NUM_PENS * sizeof(UINT16));
863
memset(state->pens, 0x00, NUM_PENS * sizeof(pen_t));
864
memset(state->videoram, 0x00, 0x20000);
861
memset(state->m_palettes[0], 0x00, NUM_PENS * sizeof(UINT16));
862
memset(state->m_palettes[1], 0x00, NUM_PENS * sizeof(UINT16));
863
memset(state->m_pens, 0x00, NUM_PENS * sizeof(pen_t));
864
memset(state->m_videoram, 0x00, 0x20000);
866
866
compute_rgb_weights(machine);
867
867
create_sprite_line_timer(machine);
869
869
optimize_sprite_data(machine);
871
871
/* initialize values that are not modified on a reset */
872
state->videoram_read_buffer = 0;
873
state->videoram_offset = 0;
874
state->videoram_modulo = 0;
875
state->auto_animation_speed = 0;
876
state->auto_animation_disabled = 0;
877
state->auto_animation_counter = 0;
878
state->auto_animation_frame_counter = 0;
872
state->m_videoram_read_buffer = 0;
873
state->m_videoram_offset = 0;
874
state->m_videoram_modulo = 0;
875
state->m_auto_animation_speed = 0;
876
state->m_auto_animation_disabled = 0;
877
state->m_auto_animation_counter = 0;
878
state->m_auto_animation_frame_counter = 0;
880
880
/* register for state saving */
881
state_save_register_global_pointer(machine, state->palettes[0], NUM_PENS);
882
state_save_register_global_pointer(machine, state->palettes[1], NUM_PENS);
883
state_save_register_global_pointer(machine, state->videoram, 0x20000/2);
884
state_save_register_global(machine, state->videoram_read_buffer);
885
state_save_register_global(machine, state->videoram_modulo);
886
state_save_register_global(machine, state->videoram_offset);
887
state_save_register_global(machine, state->fixed_layer_source);
888
state_save_register_global(machine, state->screen_dark);
889
state_save_register_global(machine, state->palette_bank);
890
state_save_register_global(machine, state->auto_animation_speed);
891
state_save_register_global(machine, state->auto_animation_disabled);
892
state_save_register_global(machine, state->auto_animation_counter);
893
state_save_register_global(machine, state->auto_animation_frame_counter);
895
state_save_register_postload(machine, regenerate_pens, NULL);
897
state->region_zoomy = machine->region("zoomy")->base();
881
state->save_pointer(NAME(state->m_palettes[0]), NUM_PENS);
882
state->save_pointer(NAME(state->m_palettes[1]), NUM_PENS);
883
state->save_pointer(NAME(state->m_videoram), 0x20000/2);
884
state->save_item(NAME(state->m_videoram_read_buffer));
885
state->save_item(NAME(state->m_videoram_modulo));
886
state->save_item(NAME(state->m_videoram_offset));
887
state->save_item(NAME(state->m_fixed_layer_source));
888
state->save_item(NAME(state->m_screen_dark));
889
state->save_item(NAME(state->m_palette_bank));
890
state->save_item(NAME(state->m_auto_animation_speed));
891
state->save_item(NAME(state->m_auto_animation_disabled));
892
state->save_item(NAME(state->m_auto_animation_counter));
893
state->save_item(NAME(state->m_auto_animation_frame_counter));
895
machine.state().register_postload(regenerate_pens, NULL);
897
state->m_region_zoomy = machine.region("zoomy")->base();
921
921
*************************************/
923
VIDEO_UPDATE( neogeo )
923
SCREEN_UPDATE( neogeo )
925
neogeo_state *state = screen->machine->driver_data<neogeo_state>();
925
neogeo_state *state = screen->machine().driver_data<neogeo_state>();
927
927
/* fill with background color first */
928
bitmap_fill(bitmap, cliprect, state->pens[0x0fff]);
930
draw_sprites(screen->machine, bitmap, cliprect->min_y);
932
draw_fixed_layer(screen->machine, bitmap, cliprect->min_y);
928
bitmap_fill(bitmap, cliprect, state->m_pens[0x0fff]);
930
draw_sprites(screen->machine(), bitmap, cliprect->min_y);
932
draw_fixed_layer(screen->machine(), bitmap, cliprect->min_y);