trunk/src/mame/drivers/m107.c
r245354 | r245355 | |
43 | 43 | |
44 | 44 | void m107_state::machine_start() |
45 | 45 | { |
46 | | // TODO: state save registrations |
| 46 | save_item(NAME(m_sound_status)); |
47 | 47 | } |
48 | 48 | |
49 | 49 | /*****************************************************************************/ |
50 | 50 | |
51 | | TIMER_DEVICE_CALLBACK_MEMBER(m107_state::m107_scanline_interrupt) |
| 51 | TIMER_DEVICE_CALLBACK_MEMBER(m107_state::scanline_interrupt) |
52 | 52 | { |
53 | 53 | int scanline = param; |
54 | 54 | |
r245354 | r245355 | |
69 | 69 | |
70 | 70 | /*****************************************************************************/ |
71 | 71 | |
72 | | WRITE16_MEMBER(m107_state::m107_coincounter_w) |
| 72 | WRITE16_MEMBER(m107_state::coincounter_w) |
73 | 73 | { |
74 | 74 | if (ACCESSING_BITS_0_7) |
75 | 75 | { |
r245354 | r245355 | |
78 | 78 | } |
79 | 79 | } |
80 | 80 | |
81 | | WRITE16_MEMBER(m107_state::m107_bankswitch_w) |
| 81 | WRITE16_MEMBER(m107_state::bankswitch_w) |
82 | 82 | { |
83 | 83 | if (ACCESSING_BITS_0_7) |
84 | 84 | { |
r245354 | r245355 | |
88 | 88 | } |
89 | 89 | } |
90 | 90 | |
91 | | WRITE16_MEMBER(m107_state::m107_soundlatch_w) |
| 91 | WRITE16_MEMBER(m107_state::soundlatch_w) |
92 | 92 | { |
93 | 93 | m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, ASSERT_LINE); |
94 | 94 | soundlatch_byte_w(space, 0, data & 0xff); |
95 | 95 | // logerror("soundlatch_byte_w %02x\n",data); |
96 | 96 | } |
97 | 97 | |
98 | | READ16_MEMBER(m107_state::m107_sound_status_r) |
| 98 | READ16_MEMBER(m107_state::sound_status_r) |
99 | 99 | { |
100 | 100 | return m_sound_status; |
101 | 101 | } |
102 | 102 | |
103 | | READ16_MEMBER(m107_state::m107_soundlatch_r) |
| 103 | READ16_MEMBER(m107_state::soundlatch_r) |
104 | 104 | { |
105 | 105 | m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, CLEAR_LINE); |
106 | 106 | return soundlatch_byte_r(space, offset) | 0xff00; |
107 | 107 | } |
108 | 108 | |
109 | | WRITE16_MEMBER(m107_state::m107_sound_irq_ack_w) |
| 109 | WRITE16_MEMBER(m107_state::sound_irq_ack_w) |
110 | 110 | { |
111 | 111 | m_soundcpu->set_input_line(NEC_INPUT_LINE_INTP1, CLEAR_LINE); |
112 | 112 | } |
113 | 113 | |
114 | | WRITE16_MEMBER(m107_state::m107_sound_status_w) |
| 114 | WRITE16_MEMBER(m107_state::sound_status_w) |
115 | 115 | { |
116 | 116 | COMBINE_DATA(&m_sound_status); |
117 | 117 | m_maincpu->set_input_line_and_vector(0, HOLD_LINE, M107_IRQ_3); |
118 | 118 | } |
119 | 119 | |
120 | | WRITE16_MEMBER(m107_state::m107_sound_reset_w) |
| 120 | WRITE16_MEMBER(m107_state::sound_reset_w) |
121 | 121 | { |
122 | 122 | m_soundcpu->set_input_line(INPUT_LINE_RESET, (data) ? CLEAR_LINE : ASSERT_LINE); |
123 | 123 | } |
r245354 | r245355 | |
127 | 127 | static ADDRESS_MAP_START( main_map, AS_PROGRAM, 16, m107_state ) |
128 | 128 | AM_RANGE(0x00000, 0x9ffff) AM_ROM |
129 | 129 | AM_RANGE(0xa0000, 0xbffff) AM_ROMBANK("bank1") |
130 | | AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(m107_vram_w) AM_SHARE("vram_data") |
| 130 | AM_RANGE(0xd0000, 0xdffff) AM_RAM_WRITE(vram_w) AM_SHARE("vram_data") |
131 | 131 | AM_RANGE(0xe0000, 0xeffff) AM_RAM /* System ram */ |
132 | 132 | AM_RANGE(0xf8000, 0xf8fff) AM_RAM AM_SHARE("spriteram") |
133 | 133 | AM_RANGE(0xf9000, 0xf9fff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
r245354 | r245355 | |
139 | 139 | AM_RANGE(0x02, 0x03) AM_READ_PORT("COINS_DSW3") |
140 | 140 | AM_RANGE(0x04, 0x05) AM_READ_PORT("DSW") |
141 | 141 | AM_RANGE(0x06, 0x07) AM_READ_PORT("P3_P4") |
142 | | AM_RANGE(0x08, 0x09) AM_READ(m107_sound_status_r) /* answer from sound CPU */ |
143 | | AM_RANGE(0x00, 0x01) AM_WRITE(m107_soundlatch_w) |
144 | | AM_RANGE(0x02, 0x03) AM_WRITE(m107_coincounter_w) |
| 142 | AM_RANGE(0x08, 0x09) AM_READ(sound_status_r) /* answer from sound CPU */ |
| 143 | AM_RANGE(0x00, 0x01) AM_WRITE(soundlatch_w) |
| 144 | AM_RANGE(0x02, 0x03) AM_WRITE(coincounter_w) |
145 | 145 | AM_RANGE(0x04, 0x05) AM_WRITENOP /* ??? 0008 */ |
146 | | AM_RANGE(0x80, 0x9f) AM_WRITE(m107_control_w) |
| 146 | AM_RANGE(0x80, 0x9f) AM_WRITE(control_w) |
147 | 147 | AM_RANGE(0xa0, 0xaf) AM_WRITENOP /* Written with 0's in interrupt */ |
148 | | AM_RANGE(0xb0, 0xb1) AM_WRITE(m107_spritebuffer_w) |
| 148 | AM_RANGE(0xb0, 0xb1) AM_WRITE(spritebuffer_w) |
149 | 149 | AM_RANGE(0xc0, 0xc3) AM_READNOP /* Only wpksoc: ticket related? */ |
150 | | AM_RANGE(0xc0, 0xc1) AM_WRITE(m107_sound_reset_w) |
| 150 | AM_RANGE(0xc0, 0xc1) AM_WRITE(sound_reset_w) |
151 | 151 | ADDRESS_MAP_END |
152 | 152 | |
153 | 153 | /* same as M107 but with an extra i/o board */ |
r245354 | r245355 | |
182 | 182 | AM_RANGE(0xa0000, 0xa3fff) AM_RAM |
183 | 183 | AM_RANGE(0xa8000, 0xa803f) AM_DEVREADWRITE8("irem", iremga20_device, irem_ga20_r, irem_ga20_w, 0x00ff) |
184 | 184 | AM_RANGE(0xa8040, 0xa8043) AM_DEVREADWRITE8("ymsnd", ym2151_device, read, write, 0x00ff) |
185 | | AM_RANGE(0xa8044, 0xa8045) AM_READWRITE(m107_soundlatch_r, m107_sound_irq_ack_w) |
186 | | AM_RANGE(0xa8046, 0xa8047) AM_WRITE(m107_sound_status_w) |
| 185 | AM_RANGE(0xa8044, 0xa8045) AM_READWRITE(soundlatch_r, sound_irq_ack_w) |
| 186 | AM_RANGE(0xa8046, 0xa8047) AM_WRITE(sound_status_w) |
187 | 187 | AM_RANGE(0xffff0, 0xfffff) AM_ROM AM_REGION("soundcpu", 0x1fff0) |
188 | 188 | ADDRESS_MAP_END |
189 | 189 | |
r245354 | r245355 | |
765 | 765 | MCFG_V25_CONFIG(rtypeleo_decryption_table) |
766 | 766 | |
767 | 767 | |
768 | | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m107_state, m107_scanline_interrupt, "screen", 0, 1) |
| 768 | MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", m107_state, scanline_interrupt, "screen", 0, 1) |
769 | 769 | |
770 | 770 | /* video hardware */ |
771 | 771 | MCFG_SCREEN_ADD("screen", RASTER) |
r245354 | r245355 | |
773 | 773 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */) |
774 | 774 | MCFG_SCREEN_SIZE(512, 256) |
775 | 775 | MCFG_SCREEN_VISIBLE_AREA(80, 511-112, 8, 247) /* 320 x 240 */ |
776 | | MCFG_SCREEN_UPDATE_DRIVER(m107_state, screen_update_m107) |
| 776 | MCFG_SCREEN_UPDATE_DRIVER(m107_state, screen_update) |
777 | 777 | MCFG_SCREEN_PALETTE("palette") |
778 | 778 | |
779 | 779 | MCFG_GFXDECODE_ADD("gfxdecode", "palette", firebarr) |
r245354 | r245355 | |
996 | 996 | UINT8 *ROM = memregion("maincpu")->base(); |
997 | 997 | |
998 | 998 | membank("bank1")->configure_entries(0, 4, &ROM[0x80000], 0x20000); |
999 | | m_maincpu->space(AS_IO).install_write_handler(0x06, 0x07, write16_delegate(FUNC(m107_state::m107_bankswitch_w),this)); |
| 999 | m_maincpu->space(AS_IO).install_write_handler(0x06, 0x07, write16_delegate(FUNC(m107_state::bankswitch_w),this)); |
1000 | 1000 | |
1001 | 1001 | m_irq_vectorbase = 0x80; |
1002 | 1002 | m_spritesystem = 0; |
r245354 | r245355 | |
1010 | 1010 | |
1011 | 1011 | /***************************************************************************/ |
1012 | 1012 | |
1013 | | GAME( 1993, airass, 0, airass, firebarr, m107_state, firebarr, ROT270, "Irem", "Air Assault (World)", GAME_NO_COCKTAIL ) // possible location test, but sound code is newer than Japan version |
1014 | | GAME( 1993, firebarr, airass, firebarr, firebarr, m107_state, firebarr, ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_COCKTAIL ) |
| 1013 | GAME( 1993, airass, 0, airass, firebarr, m107_state, firebarr, ROT270, "Irem", "Air Assault (World)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) // possible location test, but sound code is newer than Japan version |
| 1014 | GAME( 1993, firebarr, airass, firebarr, firebarr, m107_state, firebarr, ROT270, "Irem", "Fire Barrel (Japan)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
1015 | 1015 | |
1016 | | GAME( 1994, dsoccr94, 0, dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0, "Irem (Data East Corporation license)", "Dream Soccer '94 (World, M107 hardware)", GAME_NO_COCKTAIL ) |
| 1016 | GAME( 1994, dsoccr94, 0, dsoccr94, dsoccr94, m107_state, dsoccr94, ROT0, "Irem (Data East Corporation license)", "Dream Soccer '94 (World, M107 hardware)", GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE ) |
1017 | 1017 | |
1018 | | GAME( 1995, wpksoc, 0, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "World PK Soccer", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL ) |
1019 | | GAME( 1994, kftgoal, wpksoc, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "Kick for the Goal", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL ) |
| 1018 | GAME( 1995, wpksoc, 0, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "World PK Soccer", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE ) |
| 1019 | GAME( 1994, kftgoal, wpksoc, wpksoc, wpksoc, m107_state, wpksoc, ROT0, "Jaleco", "Kick for the Goal", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_MECHANICAL | GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/m107.h
r245354 | r245355 | |
9 | 9 | { |
10 | 10 | tilemap_t * tmap; |
11 | 11 | UINT16 vram_base; |
12 | | UINT16 control[4]; |
13 | 12 | }; |
14 | 13 | |
15 | 14 | class m107_state : public driver_device |
r245354 | r245355 | |
17 | 16 | public: |
18 | 17 | m107_state(const machine_config &mconfig, device_type type, const char *tag) |
19 | 18 | : driver_device(mconfig, type, tag), |
20 | | m_spriteram(*this, "spriteram"), |
21 | | m_vram_data(*this, "vram_data"), |
22 | 19 | m_maincpu(*this, "maincpu"), |
23 | 20 | m_soundcpu(*this, "soundcpu"), |
24 | 21 | m_gfxdecode(*this, "gfxdecode"), |
25 | 22 | m_screen(*this, "screen"), |
26 | | m_palette(*this, "palette") { } |
| 23 | m_palette(*this, "palette"), |
| 24 | m_spriteram(*this, "spriteram"), |
| 25 | m_vram_data(*this, "vram_data") { } |
27 | 26 | |
28 | | required_shared_ptr<UINT16> m_spriteram; |
29 | | required_shared_ptr<UINT16> m_vram_data; |
30 | 27 | required_device<cpu_device> m_maincpu; |
31 | 28 | required_device<cpu_device> m_soundcpu; |
32 | 29 | required_device<gfxdecode_device> m_gfxdecode; |
33 | 30 | required_device<screen_device> m_screen; |
34 | 31 | required_device<palette_device> m_palette; |
35 | 32 | |
| 33 | required_shared_ptr<UINT16> m_spriteram; |
| 34 | required_shared_ptr<UINT16> m_vram_data; |
| 35 | |
| 36 | // driver init |
36 | 37 | UINT8 m_irq_vectorbase; |
| 38 | UINT8 m_spritesystem; |
| 39 | |
37 | 40 | int m_sound_status; |
38 | | UINT8 m_spritesystem; |
39 | 41 | UINT8 m_sprite_display; |
40 | 42 | UINT16 m_raster_irq_position; |
41 | 43 | pf_layer_info m_pf_layer[4]; |
42 | 44 | UINT16 m_control[0x10]; |
43 | 45 | UINT16 *m_buffered_spriteram; |
44 | | DECLARE_WRITE16_MEMBER(m107_coincounter_w); |
45 | | DECLARE_WRITE16_MEMBER(m107_bankswitch_w); |
46 | | DECLARE_WRITE16_MEMBER(m107_soundlatch_w); |
47 | | DECLARE_READ16_MEMBER(m107_sound_status_r); |
48 | | DECLARE_READ16_MEMBER(m107_soundlatch_r); |
49 | | DECLARE_WRITE16_MEMBER(m107_sound_irq_ack_w); |
50 | | DECLARE_WRITE16_MEMBER(m107_sound_status_w); |
51 | | DECLARE_WRITE16_MEMBER(m107_sound_reset_w); |
| 46 | |
| 47 | DECLARE_WRITE16_MEMBER(coincounter_w); |
| 48 | DECLARE_WRITE16_MEMBER(bankswitch_w); |
| 49 | DECLARE_WRITE16_MEMBER(soundlatch_w); |
| 50 | DECLARE_READ16_MEMBER(sound_status_r); |
| 51 | DECLARE_READ16_MEMBER(soundlatch_r); |
| 52 | DECLARE_WRITE16_MEMBER(sound_irq_ack_w); |
| 53 | DECLARE_WRITE16_MEMBER(sound_status_w); |
| 54 | DECLARE_WRITE16_MEMBER(sound_reset_w); |
52 | 55 | DECLARE_WRITE16_MEMBER(wpksoc_output_w); |
53 | | DECLARE_WRITE16_MEMBER(m107_vram_w); |
54 | | DECLARE_WRITE16_MEMBER(m107_control_w); |
55 | | DECLARE_WRITE16_MEMBER(m107_spritebuffer_w); |
| 56 | DECLARE_WRITE16_MEMBER(vram_w); |
| 57 | DECLARE_WRITE16_MEMBER(control_w); |
| 58 | DECLARE_WRITE16_MEMBER(spritebuffer_w); |
| 59 | |
| 60 | TILE_GET_INFO_MEMBER(get_pf_tile_info); |
| 61 | |
| 62 | TIMER_DEVICE_CALLBACK_MEMBER(scanline_interrupt); |
| 63 | |
56 | 64 | DECLARE_DRIVER_INIT(firebarr); |
57 | 65 | DECLARE_DRIVER_INIT(dsoccr94); |
58 | 66 | DECLARE_DRIVER_INIT(wpksoc); |
59 | | TILE_GET_INFO_MEMBER(get_pf_tile_info); |
60 | 67 | virtual void machine_start(); |
61 | 68 | virtual void video_start(); |
62 | | UINT32 screen_update_m107(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
63 | | TIMER_DEVICE_CALLBACK_MEMBER(m107_scanline_interrupt); |
| 69 | |
| 70 | UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
64 | 71 | void draw_sprites(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
65 | | void m107_update_scroll_positions(); |
66 | | void m107_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque); |
67 | | void m107_screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
| 72 | void update_scroll_positions(); |
| 73 | void tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque); |
| 74 | void screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
68 | 75 | }; |
trunk/src/mame/video/m107.c
r245354 | r245355 | |
62 | 62 | |
63 | 63 | /*****************************************************************************/ |
64 | 64 | |
65 | | WRITE16_MEMBER(m107_state::m107_vram_w) |
| 65 | WRITE16_MEMBER(m107_state::vram_w) |
66 | 66 | { |
67 | 67 | int laynum; |
68 | 68 | |
r245354 | r245355 | |
74 | 74 | |
75 | 75 | /*****************************************************************************/ |
76 | 76 | |
77 | | WRITE16_MEMBER(m107_state::m107_control_w) |
| 77 | WRITE16_MEMBER(m107_state::control_w) |
78 | 78 | { |
79 | 79 | UINT16 old = m_control[offset]; |
80 | 80 | pf_layer_info *layer; |
r245354 | r245355 | |
141 | 141 | } |
142 | 142 | |
143 | 143 | m_buffered_spriteram = auto_alloc_array_clear(machine(), UINT16, 0x1000/2); |
| 144 | |
| 145 | save_item(NAME(m_sprite_display)); |
| 146 | save_item(NAME(m_raster_irq_position)); |
| 147 | save_item(NAME(m_control)); |
| 148 | save_pointer(NAME(m_buffered_spriteram), 0x1000/2); |
| 149 | |
| 150 | for (int i = 0; i < 4; i++) |
| 151 | { |
| 152 | save_item(NAME(m_pf_layer[i].vram_base), i); |
| 153 | } |
144 | 154 | } |
145 | 155 | |
146 | 156 | /*****************************************************************************/ |
r245354 | r245355 | |
267 | 277 | |
268 | 278 | /*****************************************************************************/ |
269 | 279 | |
270 | | void m107_state::m107_update_scroll_positions() |
| 280 | void m107_state::update_scroll_positions() |
271 | 281 | { |
272 | 282 | int laynum; |
273 | 283 | int i; |
r245354 | r245355 | |
306 | 316 | |
307 | 317 | /*****************************************************************************/ |
308 | 318 | |
309 | | void m107_state::m107_tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque) |
| 319 | void m107_state::tilemap_draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int laynum, int category,int opaque) |
310 | 320 | { |
311 | 321 | int line; |
312 | 322 | rectangle clip; |
r245354 | r245355 | |
331 | 341 | } |
332 | 342 | |
333 | 343 | |
334 | | void m107_state::m107_screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 344 | void m107_state::screenrefresh(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
335 | 345 | { |
336 | 346 | screen.priority().fill(0, cliprect); |
337 | 347 | |
338 | 348 | if ((~m_control[0x0b] >> 7) & 1) |
339 | 349 | { |
340 | | m107_tilemap_draw(screen, bitmap, cliprect, 3, 0,0); |
341 | | m107_tilemap_draw(screen, bitmap, cliprect, 3, 1,0); |
| 350 | tilemap_draw(screen, bitmap, cliprect, 3, 0,0); |
| 351 | tilemap_draw(screen, bitmap, cliprect, 3, 1,0); |
342 | 352 | } |
343 | 353 | else |
344 | 354 | bitmap.fill(0, cliprect); |
345 | 355 | |
346 | 356 | /* note: the opaque flag is used if layer 3 is disabled, noticeable in World PK Soccer title and gameplay screens */ |
347 | | m107_tilemap_draw(screen, bitmap, cliprect, 2, 0,(((m_control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0)); |
348 | | m107_tilemap_draw(screen, bitmap, cliprect, 1, 0,0); |
349 | | m107_tilemap_draw(screen, bitmap, cliprect, 0, 0,0); |
350 | | m107_tilemap_draw(screen, bitmap, cliprect, 2, 1,0); |
351 | | m107_tilemap_draw(screen, bitmap, cliprect, 1, 1,0); |
352 | | m107_tilemap_draw(screen, bitmap, cliprect, 0, 1,0); |
| 357 | tilemap_draw(screen, bitmap, cliprect, 2, 0,(((m_control[0x0b] >> 7) & 1) ? TILEMAP_DRAW_OPAQUE : 0)); |
| 358 | tilemap_draw(screen, bitmap, cliprect, 1, 0,0); |
| 359 | tilemap_draw(screen, bitmap, cliprect, 0, 0,0); |
| 360 | tilemap_draw(screen, bitmap, cliprect, 2, 1,0); |
| 361 | tilemap_draw(screen, bitmap, cliprect, 1, 1,0); |
| 362 | tilemap_draw(screen, bitmap, cliprect, 0, 1,0); |
353 | 363 | |
354 | 364 | if(m_sprite_display) |
355 | 365 | draw_sprites(screen, bitmap, cliprect); |
r245354 | r245355 | |
360 | 370 | |
361 | 371 | /*****************************************************************************/ |
362 | 372 | |
363 | | WRITE16_MEMBER(m107_state::m107_spritebuffer_w) |
| 373 | WRITE16_MEMBER(m107_state::spritebuffer_w) |
364 | 374 | { |
365 | 375 | if (ACCESSING_BITS_0_7) { |
366 | 376 | /* |
r245354 | r245355 | |
375 | 385 | |
376 | 386 | /*****************************************************************************/ |
377 | 387 | |
378 | | UINT32 m107_state::screen_update_m107(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 388 | UINT32 m107_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
379 | 389 | { |
380 | | m107_update_scroll_positions(); |
381 | | m107_screenrefresh(screen, bitmap, cliprect); |
| 390 | update_scroll_positions(); |
| 391 | screenrefresh(screen, bitmap, cliprect); |
382 | 392 | return 0; |
383 | 393 | } |