Previous 199869 Revisions Next

r36221 Tuesday 3rd March, 2015 at 17:19:11 UTC by Osso
bbusters.c: added save state support (nw)
[src/mame/drivers]bbusters.c
[src/mame/includes]bbusters.h
[src/mame/video]bbusters.c

trunk/src/mame/drivers/bbusters.c
r244732r244733
166166
167167HIGHWAYMAN's notes:
168168
169after adding the mechanized attack u.s. roms i suspect that there is more than just a few bytes changed ;-)
169after adding the mechanized attack u.s. roms I suspect that there is more than just a few bytes changed ;-)
170170
171171
172172RansAckeR's notes:
r244732r244733
237237
238238/******************************************************************************/
239239
240void bbusters_state::machine_start()
241{
242   save_item(NAME(m_sound_status));
243   save_item(NAME(m_gun_select));
244}
245
240246READ16_MEMBER(bbusters_state::sound_status_r)
241247{
242248   return m_sound_status;
r244732r244733
321327static ADDRESS_MAP_START( bbusters_map, AS_PROGRAM, 16, bbusters_state )
322328   AM_RANGE(0x000000, 0x07ffff) AM_ROM
323329   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")
325331   AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram")
326332   AM_RANGE(0x0a1000, 0x0a7fff) AM_RAM     /* service mode */
327333   AM_RANGE(0x0a8000, 0x0a8fff) AM_RAM AM_SHARE("spriteram2")
328334   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")
331337   AM_RANGE(0x0b4000, 0x0b5fff) AM_RAM     /* service mode */
332338   AM_RANGE(0x0b8000, 0x0b8003) AM_WRITEONLY AM_SHARE("pf1_scroll_data")
333339   AM_RANGE(0x0b8008, 0x0b800b) AM_WRITEONLY AM_SHARE("pf2_scroll_data")
r244732r244733
351357static ADDRESS_MAP_START( mechatt_map, AS_PROGRAM, 16, bbusters_state )
352358   AM_RANGE(0x000000, 0x06ffff) AM_ROM
353359   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")
355361   AM_RANGE(0x0a0000, 0x0a0fff) AM_RAM AM_SHARE("spriteram")
356362   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")
358364   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")
360366   AM_RANGE(0x0c8000, 0x0c8003) AM_WRITEONLY AM_SHARE("pf2_scroll_data")
361367   AM_RANGE(0x0d0000, 0x0d07ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
362368   AM_RANGE(0x0e0000, 0x0e0001) AM_READ_PORT("IN0")
r244732r244733
638644   GFXDECODE_ENTRY( "gfx5", 0, tilelayout,   768, 16 )
639645GFXDECODE_END
640646
641/******************************************************************************/
642647
643WRITE_LINE_MEMBER(bbusters_state::sound_irq)
644{
645   m_audiocpu->set_input_line(0, state ? ASSERT_LINE : CLEAR_LINE);
646}
647
648648/******************************************************************************/
649649
650650void bbusters_state::screen_eof_bbuster(screen_device &screen, bool state)
r244732r244733
688688   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
689689
690690   MCFG_SOUND_ADD("ymsnd", YM2610, 8000000)
691   MCFG_YM2610_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq))
691   MCFG_YM2610_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
692692   MCFG_SOUND_ROUTE(0, "lspeaker",  1.0)
693693   MCFG_SOUND_ROUTE(0, "rspeaker", 1.0)
694694   MCFG_SOUND_ROUTE(1, "lspeaker",  1.0)
r244732r244733
727727   MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker")
728728
729729   MCFG_SOUND_ADD("ymsnd", YM2608, 8000000)
730   MCFG_YM2608_IRQ_HANDLER(WRITELINE(bbusters_state, sound_irq))
730   MCFG_YM2608_IRQ_HANDLER(INPUTLINE("audiocpu", 0))
731731   MCFG_SOUND_ROUTE(0, "lspeaker",  0.50)
732732   MCFG_SOUND_ROUTE(0, "rspeaker", 0.50)
733733   MCFG_SOUND_ROUTE(1, "lspeaker",  1.0)
r244732r244733
10181018/******************************************************************************/
10191019
10201020// as soon as you calibrate the guns in test mode the game refuses to boot
1021GAME( 1989, bbusters, 0,        bbusters, bbusters, driver_device, 0, ROT0,  "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
1022GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0,  "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND )
1021GAME( 1989, bbusters, 0,        bbusters, bbusters, driver_device, 0, ROT0,  "SNK", "Beast Busters (World)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
1022GAME( 1989, bbustersu,bbusters, bbusters, bbusters, driver_device, 0, ROT0,  "SNK", "Beast Busters (US, Version 2)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND | GAME_SUPPORTS_SAVE )
10231023
1024GAME( 1989, mechatt,  0,        mechatt,  mechatt,  driver_device, 0, ROT0,  "SNK", "Mechanized Attack (World)", 0 )
1025GAME( 1989, mechattj, mechatt,  mechatt,  mechattj, driver_device, 0, ROT0,  "SNK", "Mechanized Attack (Japan)", 0 )
1026GAME( 1989, mechattu, mechatt,  mechatt,  mechattu, driver_device, 0, ROT0,  "SNK", "Mechanized Attack (US)", 0 )
1027GAME( 1989, mechattu1,mechatt,  mechatt,  mechattu, driver_device, 0, ROT0,  "SNK", "Mechanized Attack (US, Version 1, Single Player)", 0 )
1024GAME( 1989, mechatt,  0,        mechatt,  mechatt,  driver_device, 0, ROT0,  "SNK", "Mechanized Attack (World)", GAME_SUPPORTS_SAVE )
1025GAME( 1989, mechattj, mechatt,  mechatt,  mechattj, driver_device, 0, ROT0,  "SNK", "Mechanized Attack (Japan)", GAME_SUPPORTS_SAVE )
1026GAME( 1989, mechattu, mechatt,  mechatt,  mechattu, driver_device, 0, ROT0,  "SNK", "Mechanized Attack (US)", GAME_SUPPORTS_SAVE )
1027GAME( 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
r244732r244733
55public:
66   bbusters_state(const machine_config &mconfig, device_type type, const char *tag)
77      : 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"),
1114      m_ram(*this, "ram"),
1215      m_videoram(*this, "videoram"),
1316      m_pf1_data(*this, "pf1_data"),
1417      m_pf2_data(*this, "pf2_data"),
1518      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") { }
2020
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;
2224   required_device<buffered_spriteram16_device> m_spriteram;
2325   optional_device<buffered_spriteram16_device> m_spriteram2;
24
26   
27   optional_shared_ptr<UINT16> m_eprom_data;
2528   required_shared_ptr<UINT16> m_ram;
2629   required_shared_ptr<UINT16> m_videoram;
2730   required_shared_ptr<UINT16> m_pf1_data;
r244732r244733
3134
3235   int m_sound_status;
3336   int m_gun_select;
34
3537   tilemap_t *m_fix_tilemap;
3638   tilemap_t *m_pf1_tilemap;
3739   tilemap_t *m_pf2_tilemap;
3840   const UINT8 *m_scale_table_ptr;
3941   UINT8 m_scale_line_count;
4042
41
4243   DECLARE_READ16_MEMBER(sound_status_r);
4344   DECLARE_WRITE8_MEMBER(sound_status_w);
4445   DECLARE_WRITE16_MEMBER(sound_cpu_w);
r244732r244733
4950   DECLARE_WRITE16_MEMBER(three_gun_output_w);
5051   DECLARE_READ16_MEMBER(kludge_r);
5152   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);
5658   TILE_GET_INFO_MEMBER(get_pf1_tile_info);
5759   TILE_GET_INFO_MEMBER(get_pf2_tile_info);
60   
61   virtual void machine_start();
5862   DECLARE_VIDEO_START(bbuster);
5963   DECLARE_VIDEO_START(mechatt);
64   
6065   UINT32 screen_update_bbuster(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6166   UINT32 screen_update_mechatt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
6267   void screen_eof_bbuster(screen_device &screen, bool state);
6368   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);
6570   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;
7071};
trunk/src/mame/video/bbusters.c
r244732r244733
2727
2828/******************************************************************************/
2929
30TILE_GET_INFO_MEMBER(bbusters_state::get_bbusters_tile_info)
30TILE_GET_INFO_MEMBER(bbusters_state::get_tile_info)
3131{
3232   UINT16 tile = m_videoram[tile_index];
3333
r244732r244733
4848   SET_TILE_INFO_MEMBER(4,tile&0xfff,tile>>12,0);
4949}
5050
51WRITE16_MEMBER(bbusters_state::bbusters_video_w)
51WRITE16_MEMBER(bbusters_state::video_w)
5252{
5353   COMBINE_DATA(&m_videoram[offset]);
5454   m_fix_tilemap->mark_tile_dirty(offset);
5555}
5656
57WRITE16_MEMBER(bbusters_state::bbusters_pf1_w)
57WRITE16_MEMBER(bbusters_state::pf1_w)
5858{
5959   COMBINE_DATA(&m_pf1_data[offset]);
6060   m_pf1_tilemap->mark_tile_dirty(offset);
6161}
6262
63WRITE16_MEMBER(bbusters_state::bbusters_pf2_w)
63WRITE16_MEMBER(bbusters_state::pf2_w)
6464{
6565   COMBINE_DATA(&m_pf2_data[offset]);
6666   m_pf2_tilemap->mark_tile_dirty(offset);
r244732r244733
7070
7171VIDEO_START_MEMBER(bbusters_state,bbuster)
7272{
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);
7474   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);
7575   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);
7676
7777   m_pf1_tilemap->set_transparent_pen(15);
7878   m_fix_tilemap->set_transparent_pen(15);
79   
80   save_item(NAME(m_scale_line_count));
7981}
8082
8183VIDEO_START_MEMBER(bbusters_state,mechatt)
8284{
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);
8486   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);
8587   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);
8688
8789   m_pf1_tilemap->set_transparent_pen(15);
8890   m_fix_tilemap->set_transparent_pen(15);
91   
92   save_item(NAME(m_scale_line_count));
8993}
9094
9195/******************************************************************************/
r244732r244733
143147   return gfx->get_data((sprite+code) % gfx->elements()) + ((dy%16) * gfx->rowbytes());
144148}
145149
146void 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)
150void 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)
147151{
148152   gfx_element *gfx = m_gfxdecode->gfx(bank);
149153   pen_t pen_base = gfx->colorbase() + gfx->granularity() * (color % gfx->colors());
r244732r244733
237241            scale=source[offs+0]&0x7;
238242            m_scale_table_ptr = scale_table+0x387f+(0x80*scale);
239243            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);
241245            break;
242246         case 1: /* 2 x 2 */
243247            scale=source[offs+0]&0xf;
244248            m_scale_table_ptr = scale_table+0x707f+(0x80*scale);
245249            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);
247251            break;
248252         case 2: /* 64 by 64 block (2 x 2) x 2 */
249253            scale=source[offs+0]&0x1f;
250254            m_scale_table_ptr = scale_table+0xa07f+(0x80*scale);
251255            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);
253257            break;
254258         case 3: /* 2 x 2 x 2 x 2 */
255259            scale=source[offs+0]&0x3f;
256260            m_scale_table_ptr = scale_table+0xc07f+(0x80*scale);
257261            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);
259263            break;
260264      }
261265   }


Previous 199869 Revisions Next


© 1997-2024 The MAME Team