trunk/src/mame/drivers/bbusters.c
r244732 | r244733 | |
166 | 166 | |
167 | 167 | HIGHWAYMAN's notes: |
168 | 168 | |
169 | | after adding the mechanized attack u.s. roms i suspect that there is more than just a few bytes changed ;-) |
| 169 | after adding the mechanized attack u.s. roms I suspect that there is more than just a few bytes changed ;-) |
170 | 170 | |
171 | 171 | |
172 | 172 | RansAckeR's notes: |
r244732 | r244733 | |
237 | 237 | |
238 | 238 | /******************************************************************************/ |
239 | 239 | |
| 240 | void bbusters_state::machine_start() |
| 241 | { |
| 242 | save_item(NAME(m_sound_status)); |
| 243 | save_item(NAME(m_gun_select)); |
| 244 | } |
| 245 | |
240 | 246 | READ16_MEMBER(bbusters_state::sound_status_r) |
241 | 247 | { |
242 | 248 | return m_sound_status; |
r244732 | r244733 | |
321 | 327 | static ADDRESS_MAP_START( bbusters_map, AS_PROGRAM, 16, bbusters_state ) |
322 | 328 | AM_RANGE(0x000000, 0x07ffff) AM_ROM |
323 | 329 | AM_RANGE(0x080000, 0x08ffff) AM_RAM AM_SHARE("ram") |
324 | | AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(bbusters_video_w) AM_SHARE("videoram") |
| 330 | AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(video_w) AM_SHARE("videoram") |
325 | 331 | AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram") |
326 | 332 | AM_RANGE(0x0a1000, 0x0a7fff) AM_RAM /* service mode */ |
327 | 333 | AM_RANGE(0x0a8000, 0x0a8fff) AM_RAM AM_SHARE("spriteram2") |
328 | 334 | AM_RANGE(0x0a9000, 0x0affff) AM_RAM /* service mode */ |
329 | | AM_RANGE(0x0b0000, 0x0b1fff) AM_RAM_WRITE(bbusters_pf1_w) AM_SHARE("pf1_data") |
330 | | AM_RANGE(0x0b2000, 0x0b3fff) AM_RAM_WRITE(bbusters_pf2_w) AM_SHARE("pf2_data") |
| 335 | AM_RANGE(0x0b0000, 0x0b1fff) AM_RAM_WRITE(pf1_w) AM_SHARE("pf1_data") |
| 336 | AM_RANGE(0x0b2000, 0x0b3fff) AM_RAM_WRITE(pf2_w) AM_SHARE("pf2_data") |
331 | 337 | AM_RANGE(0x0b4000, 0x0b5fff) AM_RAM /* service mode */ |
332 | 338 | AM_RANGE(0x0b8000, 0x0b8003) AM_WRITEONLY AM_SHARE("pf1_scroll_data") |
333 | 339 | AM_RANGE(0x0b8008, 0x0b800b) AM_WRITEONLY AM_SHARE("pf2_scroll_data") |
r244732 | r244733 | |
351 | 357 | static ADDRESS_MAP_START( mechatt_map, AS_PROGRAM, 16, bbusters_state ) |
352 | 358 | AM_RANGE(0x000000, 0x06ffff) AM_ROM |
353 | 359 | AM_RANGE(0x070000, 0x07ffff) AM_RAM AM_SHARE("ram") |
354 | | AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(bbusters_video_w) AM_SHARE("videoram") |
| 360 | AM_RANGE(0x090000, 0x090fff) AM_RAM_WRITE(video_w) AM_SHARE("videoram") |
355 | 361 | AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram") |
356 | 362 | AM_RANGE(0x0a1000, 0x0a7fff) AM_WRITENOP |
357 | | AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(bbusters_pf1_w) AM_SHARE("pf1_data") |
| 363 | AM_RANGE(0x0b0000, 0x0b3fff) AM_RAM_WRITE(pf1_w) AM_SHARE("pf1_data") |
358 | 364 | AM_RANGE(0x0b8000, 0x0b8003) AM_WRITEONLY AM_SHARE("pf1_scroll_data") |
359 | | AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM_WRITE(bbusters_pf2_w) AM_SHARE("pf2_data") |
| 365 | AM_RANGE(0x0c0000, 0x0c3fff) AM_RAM_WRITE(pf2_w) AM_SHARE("pf2_data") |
360 | 366 | AM_RANGE(0x0c8000, 0x0c8003) AM_WRITEONLY AM_SHARE("pf2_scroll_data") |
361 | 367 | AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") |
362 | 368 | AM_RANGE(0x0e0000, 0x0e0001) AM_READ_PORT("IN0") |
r244732 | r244733 | |
638 | 644 | GFXDECODE_ENTRY( "gfx5", 0, tilelayout, 768, 16 ) |
639 | 645 | GFXDECODE_END |
640 | 646 | |
641 | | /******************************************************************************/ |
642 | 647 | |
643 | | WRITE_LINE_MEMBER(bbusters_state::sound_irq) |
644 | | { |
645 | | m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE); |
646 | | } |
647 | | |
648 | 648 | /******************************************************************************/ |
649 | 649 | |
650 | 650 | void bbusters_state::screen_eof_bbuster(screen_device &screen, bool state) |
r244732 | r244733 | |
688 | 688 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
689 | 689 | |
690 | 690 | MCFG_SOUND_ADD("ymsnd", YM2610, 8000000) |
691 | | MCFG_YM2610_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq)) |
| 691 | MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) |
692 | 692 | MCFG_SOUND_ROUTE(0, "lspeaker", 1.0) |
693 | 693 | MCFG_SOUND_ROUTE(0, "rspeaker", 1.0) |
694 | 694 | MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) |
r244732 | r244733 | |
727 | 727 | MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") |
728 | 728 | |
729 | 729 | MCFG_SOUND_ADD("ymsnd", YM2608, 8000000) |
730 | | MCFG_YM2608_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq)) |
| 730 | MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0)) |
731 | 731 | MCFG_SOUND_ROUTE(0, "lspeaker", 0.50) |
732 | 732 | MCFG_SOUND_ROUTE(0, "rspeaker", 0.50) |
733 | 733 | MCFG_SOUND_ROUTE(1, "lspeaker", 1.0) |
r244732 | r244733 | |
1018 | 1018 | /******************************************************************************/ |
1019 | 1019 | |
1020 | 1020 | // as soon as you calibrate the guns in test mode the game refuses to boot |
1021 | | GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
1022 | | GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 1021 | GAME( 1989, bbusters, 0, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
| 1022 | GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0, "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE ) |
1023 | 1023 | |
1024 | | GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", 0 ) |
1025 | | GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", 0 ) |
1026 | | GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", 0 ) |
1027 | | GAME( 1989, mechattu1,mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", 0 ) |
| 1024 | GAME( 1989, mechatt, 0, mechatt, mechatt, driver_device, 0, ROT0, "SNK", "Mechanized Attack (World)", GAME_SUPPORTS_SAVE ) |
| 1025 | GAME( 1989, mechattj, mechatt, mechatt, mechattj, driver_device, 0, ROT0, "SNK", "Mechanized Attack (Japan)", GAME_SUPPORTS_SAVE ) |
| 1026 | GAME( 1989, mechattu, mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US)", GAME_SUPPORTS_SAVE ) |
| 1027 | GAME( 1989, mechattu1,mechatt, mechatt, mechattu, driver_device, 0, ROT0, "SNK", "Mechanized Attack (US, Version 1, Single Player)", GAME_SUPPORTS_SAVE ) |
trunk/src/mame/includes/bbusters.h
r244732 | r244733 | |
5 | 5 | public: |
6 | 6 | bbusters_state(const machine_config &mconfig, device_type type, const char *tag) |
7 | 7 | : driver_device(mconfig, type, tag), |
8 | | m_eprom_data(*this, "eeprom"), |
9 | | m_spriteram(*this, "spriteram"), |
10 | | m_spriteram2(*this, "spriteram2") , |
| 8 | m_maincpu(*this, "maincpu"), |
| 9 | m_audiocpu(*this, "audiocpu"), |
| 10 | m_gfxdecode(*this, "gfxdecode"), |
| 11 | m_spriteram(*this, "spriteram"), |
| 12 | m_spriteram2(*this, "spriteram2"), |
| 13 | m_eprom_data(*this, "eeprom"), |
11 | 14 | m_ram(*this, "ram"), |
12 | 15 | m_videoram(*this, "videoram"), |
13 | 16 | m_pf1_data(*this, "pf1_data"), |
14 | 17 | m_pf2_data(*this, "pf2_data"), |
15 | 18 | m_pf1_scroll_data(*this, "pf1_scroll_data"), |
16 | | m_pf2_scroll_data(*this, "pf2_scroll_data"), |
17 | | m_maincpu(*this, "maincpu"), |
18 | | m_audiocpu(*this, "audiocpu"), |
19 | | m_gfxdecode(*this, "gfxdecode") { } |
| 19 | m_pf2_scroll_data(*this, "pf2_scroll_data") { } |
20 | 20 | |
21 | | optional_shared_ptr<UINT16> m_eprom_data; |
| 21 | required_device<cpu_device> m_maincpu; |
| 22 | required_device<cpu_device> m_audiocpu; |
| 23 | required_device<gfxdecode_device> m_gfxdecode; |
22 | 24 | required_device<buffered_spriteram16_device> m_spriteram; |
23 | 25 | optional_device<buffered_spriteram16_device> m_spriteram2; |
24 | | |
| 26 | |
| 27 | optional_shared_ptr<UINT16> m_eprom_data; |
25 | 28 | required_shared_ptr<UINT16> m_ram; |
26 | 29 | required_shared_ptr<UINT16> m_videoram; |
27 | 30 | required_shared_ptr<UINT16> m_pf1_data; |
r244732 | r244733 | |
31 | 34 | |
32 | 35 | int m_sound_status; |
33 | 36 | int m_gun_select; |
34 | | |
35 | 37 | tilemap_t *m_fix_tilemap; |
36 | 38 | tilemap_t *m_pf1_tilemap; |
37 | 39 | tilemap_t *m_pf2_tilemap; |
38 | 40 | const UINT8 *m_scale_table_ptr; |
39 | 41 | UINT8 m_scale_line_count; |
40 | 42 | |
41 | | |
42 | 43 | DECLARE_READ16_MEMBER(sound_status_r); |
43 | 44 | DECLARE_WRITE8_MEMBER(sound_status_w); |
44 | 45 | DECLARE_WRITE16_MEMBER(sound_cpu_w); |
r244732 | r244733 | |
49 | 50 | DECLARE_WRITE16_MEMBER(three_gun_output_w); |
50 | 51 | DECLARE_READ16_MEMBER(kludge_r); |
51 | 52 | DECLARE_READ16_MEMBER(mechatt_gun_r); |
52 | | DECLARE_WRITE16_MEMBER(bbusters_video_w); |
53 | | DECLARE_WRITE16_MEMBER(bbusters_pf1_w); |
54 | | DECLARE_WRITE16_MEMBER(bbusters_pf2_w); |
55 | | TILE_GET_INFO_MEMBER(get_bbusters_tile_info); |
| 53 | DECLARE_WRITE16_MEMBER(video_w); |
| 54 | DECLARE_WRITE16_MEMBER(pf1_w); |
| 55 | DECLARE_WRITE16_MEMBER(pf2_w); |
| 56 | |
| 57 | TILE_GET_INFO_MEMBER(get_tile_info); |
56 | 58 | TILE_GET_INFO_MEMBER(get_pf1_tile_info); |
57 | 59 | TILE_GET_INFO_MEMBER(get_pf2_tile_info); |
| 60 | |
| 61 | virtual void machine_start(); |
58 | 62 | DECLARE_VIDEO_START(bbuster); |
59 | 63 | DECLARE_VIDEO_START(mechatt); |
| 64 | |
60 | 65 | UINT32 screen_update_bbuster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
61 | 66 | UINT32 screen_update_mechatt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); |
62 | 67 | void screen_eof_bbuster(screen_device &screen, bool state); |
63 | 68 | inline const UINT8 *get_source_ptr(gfx_element *gfx, UINT32 sprite, int dx, int dy, int block); |
64 | | void bbusters_draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block); |
| 69 | void draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block); |
65 | 70 | void draw_sprites(bitmap_ind16 &bitmap, const UINT16 *source, int bank, int colval, int colmask); |
66 | | DECLARE_WRITE_LINE_MEMBER(sound_irq); |
67 | | required_device<cpu_device> m_maincpu; |
68 | | required_device<cpu_device> m_audiocpu; |
69 | | required_device<gfxdecode_device> m_gfxdecode; |
70 | 71 | }; |
trunk/src/mame/video/bbusters.c
r244732 | r244733 | |
27 | 27 | |
28 | 28 | /******************************************************************************/ |
29 | 29 | |
30 | | TILE_GET_INFO_MEMBER(bbusters_state::get_bbusters_tile_info) |
| 30 | TILE_GET_INFO_MEMBER(bbusters_state::get_tile_info) |
31 | 31 | { |
32 | 32 | UINT16 tile = m_videoram[tile_index]; |
33 | 33 | |
r244732 | r244733 | |
48 | 48 | SET_TILE_INFO_MEMBER(4,tile&0xfff,tile>>12,0); |
49 | 49 | } |
50 | 50 | |
51 | | WRITE16_MEMBER(bbusters_state::bbusters_video_w) |
| 51 | WRITE16_MEMBER(bbusters_state::video_w) |
52 | 52 | { |
53 | 53 | COMBINE_DATA(&m_videoram[offset]); |
54 | 54 | m_fix_tilemap->mark_tile_dirty(offset); |
55 | 55 | } |
56 | 56 | |
57 | | WRITE16_MEMBER(bbusters_state::bbusters_pf1_w) |
| 57 | WRITE16_MEMBER(bbusters_state::pf1_w) |
58 | 58 | { |
59 | 59 | COMBINE_DATA(&m_pf1_data[offset]); |
60 | 60 | m_pf1_tilemap->mark_tile_dirty(offset); |
61 | 61 | } |
62 | 62 | |
63 | | WRITE16_MEMBER(bbusters_state::bbusters_pf2_w) |
| 63 | WRITE16_MEMBER(bbusters_state::pf2_w) |
64 | 64 | { |
65 | 65 | COMBINE_DATA(&m_pf2_data[offset]); |
66 | 66 | m_pf2_tilemap->mark_tile_dirty(offset); |
r244732 | r244733 | |
70 | 70 | |
71 | 71 | VIDEO_START_MEMBER(bbusters_state,bbuster) |
72 | 72 | { |
73 | | m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_bbusters_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 73 | m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
74 | 74 | m_pf1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32); |
75 | 75 | m_pf2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 128, 32); |
76 | 76 | |
77 | 77 | m_pf1_tilemap->set_transparent_pen(15); |
78 | 78 | m_fix_tilemap->set_transparent_pen(15); |
| 79 | |
| 80 | save_item(NAME(m_scale_line_count)); |
79 | 81 | } |
80 | 82 | |
81 | 83 | VIDEO_START_MEMBER(bbusters_state,mechatt) |
82 | 84 | { |
83 | | m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_bbusters_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
| 85 | m_fix_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 32, 32); |
84 | 86 | m_pf1_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf1_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 32); |
85 | 87 | m_pf2_tilemap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(bbusters_state::get_pf2_tile_info),this), TILEMAP_SCAN_COLS, 16, 16, 256, 32); |
86 | 88 | |
87 | 89 | m_pf1_tilemap->set_transparent_pen(15); |
88 | 90 | m_fix_tilemap->set_transparent_pen(15); |
| 91 | |
| 92 | save_item(NAME(m_scale_line_count)); |
89 | 93 | } |
90 | 94 | |
91 | 95 | /******************************************************************************/ |
r244732 | r244733 | |
143 | 147 | return gfx->get_data((sprite+code) % gfx->elements()) + ((dy%16) * gfx->rowbytes()); |
144 | 148 | } |
145 | 149 | |
146 | | void bbusters_state::bbusters_draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block) |
| 150 | void bbusters_state::draw_block(bitmap_ind16 &dest,int x,int y,int size,int flipx,int flipy,UINT32 sprite,int color,int bank,int block) |
147 | 151 | { |
148 | 152 | gfx_element *gfx = m_gfxdecode->gfx(bank); |
149 | 153 | pen_t pen_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors()); |
r244732 | r244733 | |
237 | 241 | scale=source[offs+0]&0x7; |
238 | 242 | m_scale_table_ptr = scale_table+0x387f+(0x80*scale); |
239 | 243 | m_scale_line_count = 0x10-scale; |
240 | | bbusters_draw_block(bitmap,x,y,16,fx,fy,sprite,colour,bank,block); |
| 244 | draw_block(bitmap,x,y,16,fx,fy,sprite,colour,bank,block); |
241 | 245 | break; |
242 | 246 | case 1: /* 2 x 2 */ |
243 | 247 | scale=source[offs+0]&0xf; |
244 | 248 | m_scale_table_ptr = scale_table+0x707f+(0x80*scale); |
245 | 249 | m_scale_line_count = 0x20-scale; |
246 | | bbusters_draw_block(bitmap,x,y,32,fx,fy,sprite,colour,bank,block); |
| 250 | draw_block(bitmap,x,y,32,fx,fy,sprite,colour,bank,block); |
247 | 251 | break; |
248 | 252 | case 2: /* 64 by 64 block (2 x 2) x 2 */ |
249 | 253 | scale=source[offs+0]&0x1f; |
250 | 254 | m_scale_table_ptr = scale_table+0xa07f+(0x80*scale); |
251 | 255 | m_scale_line_count = 0x40-scale; |
252 | | bbusters_draw_block(bitmap,x,y,64,fx,fy,sprite,colour,bank,block); |
| 256 | draw_block(bitmap,x,y,64,fx,fy,sprite,colour,bank,block); |
253 | 257 | break; |
254 | 258 | case 3: /* 2 x 2 x 2 x 2 */ |
255 | 259 | scale=source[offs+0]&0x3f; |
256 | 260 | m_scale_table_ptr = scale_table+0xc07f+(0x80*scale); |
257 | 261 | m_scale_line_count = 0x80-scale; |
258 | | bbusters_draw_block(bitmap,x,y,128,fx,fy,sprite,colour,bank,block); |
| 262 | draw_block(bitmap,x,y,128,fx,fy,sprite,colour,bank,block); |
259 | 263 | break; |
260 | 264 | } |
261 | 265 | } |