Previous 199869 Revisions Next

r36265 Thursday 5th March, 2015 at 17:18:31 UTC by Osso
speedbal.c, timelimt.c: added save state support (nw)
[src/mame/drivers]speedbal.c timelimt.c
[src/mame/includes]speedbal.h timelimt.h
[src/mame/video]speedbal.c timelimt.c

trunk/src/mame/drivers/speedbal.c
r244776r244777
3333#include "includes/speedbal.h"
3434#include "speedbal.lh"
3535
36WRITE8_MEMBER(speedbal_state::speedbal_coincounter_w)
36
37void speedbal_state::machine_start()
3738{
39   save_item(NAME(m_leds_start));
40   save_item(NAME(m_leds_shiftreg));
41}
42
43WRITE8_MEMBER(speedbal_state::coincounter_w)
44{
3845   coin_counter_w(machine(), 0, data & 0x80);
3946   coin_counter_w(machine(), 1, data & 0x40);
4047   flip_screen_set(data & 8); // also changes data & 0x10 at the same time too (flipx and flipy?)
r244776r244777
4451static ADDRESS_MAP_START( main_cpu_map, AS_PROGRAM, 8, speedbal_state )
4552   AM_RANGE(0x0000, 0xdbff) AM_ROM
4653   AM_RANGE(0xdc00, 0xdfff) AM_RAM AM_SHARE("share1") // shared with SOUND
47   AM_RANGE(0xe000, 0xe1ff) AM_RAM_WRITE(speedbal_background_videoram_w) AM_SHARE("bg_videoram")
48   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(speedbal_foreground_videoram_w) AM_SHARE("fg_videoram")
54   AM_RANGE(0xe000, 0xe1ff) AM_RAM_WRITE(background_videoram_w) AM_SHARE("bg_videoram")
55   AM_RANGE(0xe800, 0xefff) AM_RAM_WRITE(foreground_videoram_w) AM_SHARE("fg_videoram")
4956   AM_RANGE(0xf000, 0xf5ff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette")
5057   AM_RANGE(0xf600, 0xfeff) AM_RAM
5158   AM_RANGE(0xff00, 0xffff) AM_RAM AM_SHARE("spriteram")
5259ADDRESS_MAP_END
5360
54WRITE8_MEMBER(speedbal_state::speedbal_maincpu_50_w)
61WRITE8_MEMBER(speedbal_state::maincpu_50_w)
5562{
56   //logerror("%s: speedbal_maincpu_50_w %02x\n", this->machine().describe_context(), data);
63   //logerror("%s: maincpu_50_w %02x\n", this->machine().describe_context(), data);
5764}
5865
5966static ADDRESS_MAP_START( main_cpu_io_map, AS_IO, 8, speedbal_state )
r244776r244777
6269   AM_RANGE(0x10, 0x10) AM_READ_PORT("DSW1")
6370   AM_RANGE(0x20, 0x20) AM_READ_PORT("P1")
6471   AM_RANGE(0x30, 0x30) AM_READ_PORT("P2")
65   AM_RANGE(0x40, 0x40) AM_WRITE(speedbal_coincounter_w)
66   AM_RANGE(0x50, 0x50) AM_WRITE(speedbal_maincpu_50_w)
72   AM_RANGE(0x40, 0x40) AM_WRITE(coincounter_w)
73   AM_RANGE(0x50, 0x50) AM_WRITE(maincpu_50_w)
6774ADDRESS_MAP_END
6875
6976static ADDRESS_MAP_START( sound_cpu_map, AS_PROGRAM, 8, speedbal_state )
r244776r244777
264271   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(2500) /* not accurate */)
265272   MCFG_SCREEN_SIZE(32*8, 32*8)
266273   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
267   MCFG_SCREEN_UPDATE_DRIVER(speedbal_state, screen_update_speedbal)
274   MCFG_SCREEN_UPDATE_DRIVER(speedbal_state, screen_update)
268275   MCFG_SCREEN_PALETTE("palette")
269276
270277   MCFG_GFXDECODE_ADD("gfxdecode", "palette", speedbal)
r244776r244777
375382
376383
377384
378GAMEL( 1987, speedbal, 0,        speedbal, speedbal, speedbal_state, speedbal, ROT270, "Tecfri / Desystem S.A.", "Speed Ball", 0, layout_speedbal )
379GAMEL( 1988, musicbal, 0,        speedbal, musicbal, speedbal_state, musicbal, ROT270, "Tecfri / Desystem S.A.", "Music Ball", 0, layout_speedbal )
385GAMEL( 1987, speedbal, 0,        speedbal, speedbal, speedbal_state, speedbal, ROT270, "Tecfri / Desystem S.A.", "Speed Ball", GAME_SUPPORTS_SAVE, layout_speedbal )
386GAMEL( 1988, musicbal, 0,        speedbal, musicbal, speedbal_state, musicbal, ROT270, "Tecfri / Desystem S.A.", "Music Ball", GAME_SUPPORTS_SAVE, layout_speedbal )
trunk/src/mame/drivers/timelimt.c
r244776r244777
2121
2222void timelimt_state::machine_start()
2323{
24   save_item(NAME(m_nmi_enabled));
2425}
2526
2627void timelimt_state::machine_reset()
r244776r244777
4445static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, timelimt_state )
4546   AM_RANGE(0x0000, 0x7fff) AM_ROM     /* rom */
4647   AM_RANGE(0x8000, 0x87ff) AM_RAM     /* ram */
47   AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(timelimt_videoram_w) AM_SHARE("videoram") /* video ram */
48   AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(timelimt_bg_videoram_w) AM_SHARE("bg_videoram")/* background ram */
48   AM_RANGE(0x8800, 0x8bff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram") /* video ram */
49   AM_RANGE(0x9000, 0x97ff) AM_RAM_WRITE(bg_videoram_w) AM_SHARE("bg_videoram")/* background ram */
4950   AM_RANGE(0x9800, 0x98ff) AM_RAM AM_SHARE("spriteram")   /* sprite ram */
5051   AM_RANGE(0xa000, 0xa000) AM_READ_PORT("INPUTS")
5152   AM_RANGE(0xa800, 0xa800) AM_READ_PORT("SYSTEM")
r244776r244777
5455   AM_RANGE(0xb003, 0xb003) AM_WRITE(sound_reset_w)/* sound reset ? */
5556   AM_RANGE(0xb800, 0xb800) AM_WRITE(soundlatch_byte_w) /* sound write */
5657   AM_RANGE(0xb800, 0xb800) AM_READNOP     /* NMI ack? */
57   AM_RANGE(0xc800, 0xc800) AM_WRITE(timelimt_scroll_x_lsb_w)
58   AM_RANGE(0xc801, 0xc801) AM_WRITE(timelimt_scroll_x_msb_w)
59   AM_RANGE(0xc802, 0xc802) AM_WRITE(timelimt_scroll_y_w)
58   AM_RANGE(0xc800, 0xc800) AM_WRITE(scroll_x_lsb_w)
59   AM_RANGE(0xc801, 0xc801) AM_WRITE(scroll_x_msb_w)
60   AM_RANGE(0xc802, 0xc802) AM_WRITE(scroll_y_w)
6061   AM_RANGE(0xc803, 0xc803) AM_WRITENOP        /* ???? bit 0 used only */
6162   AM_RANGE(0xc804, 0xc804) AM_WRITENOP        /* ???? not used */
6263ADDRESS_MAP_END
r244776r244777
204205
205206/***************************************************************************/
206207
207INTERRUPT_GEN_MEMBER(timelimt_state::timelimt_irq)
208INTERRUPT_GEN_MEMBER(timelimt_state::irq)
208209{
209210   if ( m_nmi_enabled )
210211      device.execute().set_input_line(INPUT_LINE_NMI, PULSE_LINE);
r244776r244777
218219   MCFG_CPU_ADD("maincpu", Z80, 5000000)   /* 5.000 MHz */
219220   MCFG_CPU_PROGRAM_MAP(main_map)
220221   MCFG_CPU_IO_MAP(main_io_map)
221   MCFG_CPU_VBLANK_INT_DRIVER("screen", timelimt_state,  timelimt_irq)
222   MCFG_CPU_VBLANK_INT_DRIVER("screen", timelimt_state,  irq)
222223
223224   MCFG_CPU_ADD("audiocpu", Z80,18432000/6)    /* 3.072 MHz */
224225   MCFG_CPU_PROGRAM_MAP(sound_map)
r244776r244777
234235   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
235236   MCFG_SCREEN_SIZE(32*8, 32*8)
236237   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
237   MCFG_SCREEN_UPDATE_DRIVER(timelimt_state, screen_update_timelimt)
238   MCFG_SCREEN_UPDATE_DRIVER(timelimt_state, screen_update)
238239   MCFG_SCREEN_PALETTE("palette")
239240
240241   MCFG_GFXDECODE_ADD("gfxdecode", "palette", timelimt)
r244776r244777
317318   ROM_LOAD( "57.bin", 0x0040, 0x0020, CRC(18455a79) SHA1(e4d64368560e3116a922588129f5f91a4c520f7d) )
318319ROM_END
319320
320GAME( 1983, timelimt, 0, timelimt, timelimt, driver_device, 0, ROT90, "Chuo Co. Ltd", "Time Limit", GAME_IMPERFECT_COLORS )
321GAME( 1984, progress, 0, timelimt, progress, driver_device, 0, ROT90, "Chuo Co. Ltd", "Progress", 0 )
321GAME( 1983, timelimt, 0, timelimt, timelimt, driver_device, 0, ROT90, "Chuo Co. Ltd", "Time Limit", GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
322GAME( 1984, progress, 0, timelimt, progress, driver_device, 0, ROT90, "Chuo Co. Ltd", "Progress", GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/speedbal.h
r244776r244777
44   speedbal_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
66      m_maincpu(*this, "maincpu"),
7      m_gfxdecode(*this, "gfxdecode"),
8      m_palette(*this, "palette"),
79      m_spriteram(*this, "spriteram"),
810      m_background_videoram(*this, "bg_videoram"),
9      m_foreground_videoram(*this, "fg_videoram"),
10      m_gfxdecode(*this, "gfxdecode"),
11      m_palette(*this, "palette")
11      m_foreground_videoram(*this, "fg_videoram")
1212   { }
1313
1414   required_device<cpu_device> m_maincpu;
15   required_device<gfxdecode_device> m_gfxdecode;
16   required_device<palette_device> m_palette;
17
1518   required_shared_ptr<UINT8> m_spriteram;
1619   required_shared_ptr<UINT8> m_background_videoram;
1720   required_shared_ptr<UINT8> m_foreground_videoram;
18   required_device<gfxdecode_device> m_gfxdecode;
19   required_device<palette_device> m_palette;
2021
2122   bool m_leds_start;
2223   UINT32 m_leds_shiftreg;
23
2424   tilemap_t *m_bg_tilemap;
2525   tilemap_t *m_fg_tilemap;
2626
2727   DECLARE_DRIVER_INIT(speedbal);
2828   DECLARE_DRIVER_INIT(musicbal);
29   virtual void machine_start();
30   virtual void video_start();
2931
30   DECLARE_WRITE8_MEMBER(speedbal_coincounter_w);
31   DECLARE_WRITE8_MEMBER(speedbal_foreground_videoram_w);
32   DECLARE_WRITE8_MEMBER(speedbal_background_videoram_w);
33
34   DECLARE_WRITE8_MEMBER(speedbal_maincpu_50_w);
32   DECLARE_WRITE8_MEMBER(coincounter_w);
33   DECLARE_WRITE8_MEMBER(foreground_videoram_w);
34   DECLARE_WRITE8_MEMBER(background_videoram_w);
35   DECLARE_WRITE8_MEMBER(maincpu_50_w);
3536   DECLARE_WRITE8_MEMBER(leds_output_block);
3637   DECLARE_WRITE8_MEMBER(leds_start_block);
3738   DECLARE_WRITE8_MEMBER(leds_shift_bit);
3839
3940   TILE_GET_INFO_MEMBER(get_tile_info_bg);
4041   TILE_GET_INFO_MEMBER(get_tile_info_fg);
41   virtual void video_start();
42   UINT32 screen_update_speedbal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
42   
43   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4344   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
4445};
trunk/src/mame/includes/timelimt.h
r244776r244777
33public:
44   timelimt_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_videoram(*this, "videoram"),
7      m_bg_videoram(*this, "bg_videoram"),
8      m_spriteram(*this, "spriteram"),
96      m_maincpu(*this, "maincpu"),
107      m_audiocpu(*this, "audiocpu"),
118      m_gfxdecode(*this, "gfxdecode"),
12      m_palette(*this, "palette") { }
9      m_palette(*this, "palette"),
10      m_videoram(*this, "videoram"),
11      m_bg_videoram(*this, "bg_videoram"),
12      m_spriteram(*this, "spriteram") { }
1313
14   required_device<cpu_device> m_maincpu;
15   required_device<cpu_device> m_audiocpu;
16   required_device<gfxdecode_device> m_gfxdecode;
17   required_device<palette_device> m_palette;
18
1419   required_shared_ptr<UINT8> m_videoram;
20   required_shared_ptr<UINT8> m_bg_videoram;
21   required_shared_ptr<UINT8> m_spriteram;
22
1523   int m_nmi_enabled;
16   required_shared_ptr<UINT8> m_bg_videoram;
1724   int m_scrollx;
1825   int m_scrolly;
1926   tilemap_t *m_bg_tilemap;
2027   tilemap_t *m_fg_tilemap;
21   required_shared_ptr<UINT8> m_spriteram;
28
2229   DECLARE_WRITE8_MEMBER(nmi_enable_w);
2330   DECLARE_WRITE8_MEMBER(sound_reset_w);
24   DECLARE_WRITE8_MEMBER(timelimt_videoram_w);
25   DECLARE_WRITE8_MEMBER(timelimt_bg_videoram_w);
26   DECLARE_WRITE8_MEMBER(timelimt_scroll_x_lsb_w);
27   DECLARE_WRITE8_MEMBER(timelimt_scroll_x_msb_w);
28   DECLARE_WRITE8_MEMBER(timelimt_scroll_y_w);
31   DECLARE_WRITE8_MEMBER(videoram_w);
32   DECLARE_WRITE8_MEMBER(bg_videoram_w);
33   DECLARE_WRITE8_MEMBER(scroll_x_lsb_w);
34   DECLARE_WRITE8_MEMBER(scroll_x_msb_w);
35   DECLARE_WRITE8_MEMBER(scroll_y_w);
36   
2937   TILE_GET_INFO_MEMBER(get_bg_tile_info);
3038   TILE_GET_INFO_MEMBER(get_fg_tile_info);
39   
3140   virtual void machine_start();
3241   virtual void machine_reset();
3342   virtual void video_start();
3443   DECLARE_PALETTE_INIT(timelimt);
35   UINT32 screen_update_timelimt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
36   INTERRUPT_GEN_MEMBER(timelimt_irq);
44   
45   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
3746   void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect);
38   required_device<cpu_device> m_maincpu;
39   required_device<cpu_device> m_audiocpu;
40   required_device<gfxdecode_device> m_gfxdecode;
41   required_device<palette_device> m_palette;
47   
48   INTERRUPT_GEN_MEMBER(irq);
4249};
trunk/src/mame/video/speedbal.c
r244776r244777
5454 *                                   *
5555 *************************************/
5656
57WRITE8_MEMBER(speedbal_state::speedbal_foreground_videoram_w)
57WRITE8_MEMBER(speedbal_state::foreground_videoram_w)
5858{
5959   m_foreground_videoram[offset] = data;
6060   m_fg_tilemap->mark_tile_dirty(offset>>1);
r244776r244777
6666 *                                   *
6767 *************************************/
6868
69WRITE8_MEMBER(speedbal_state::speedbal_background_videoram_w)
69WRITE8_MEMBER(speedbal_state::background_videoram_w)
7070{
7171   m_background_videoram[offset] = data;
7272   m_bg_tilemap->mark_tile_dirty(offset>>1);
r244776r244777
8181
8282void speedbal_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
8383{
84   UINT8 *spriteram = m_spriteram;
8584   int x,y,code,color,offset,flipx,flipy;
8685
8786   /* Drawing sprites: 64 in total */
8887
8988   for (offset = 0;offset < m_spriteram.bytes();offset += 4)
9089   {
91      if(!(spriteram[offset + 2] & 0x80))
90      if(!(m_spriteram[offset + 2] & 0x80))
9291         continue;
9392
94      x = 243 - spriteram[offset + 3];
95      y = 239 - spriteram[offset + 0];
93      x = 243 - m_spriteram[offset + 3];
94      y = 239 - m_spriteram[offset + 0];
9695
97      code = (spriteram[offset + 1]) | ((spriteram[offset + 2] & 0x40) << 2);
96      code = (m_spriteram[offset + 1]) | ((m_spriteram[offset + 2] & 0x40) << 2);
9897
99      color = spriteram[offset + 2] & 0x0f;
98      color = m_spriteram[offset + 2] & 0x0f;
10099
101100      flipx = flipy = 0;
102101
r244776r244777
121120 *                                   *
122121 *************************************/
123122
124UINT32 speedbal_state::screen_update_speedbal(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
123UINT32 speedbal_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
125124{
126125   m_bg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
127126   m_fg_tilemap->draw(screen, bitmap, cliprect, TILEMAP_DRAW_LAYER1, 0);
trunk/src/mame/video/timelimt.c
r244776r244777
6161
6262TILE_GET_INFO_MEMBER(timelimt_state::get_fg_tile_info)
6363{
64   UINT8 *videoram = m_videoram;
65   SET_TILE_INFO_MEMBER(0, videoram[tile_index], 0, 0);
64   SET_TILE_INFO_MEMBER(0, m_videoram[tile_index], 0, 0);
6665}
6766
6867void timelimt_state::video_start()
r244776r244777
7473         8, 8, 32, 32);
7574
7675   m_fg_tilemap->set_transparent_pen(0);
76   
77   save_item(NAME(m_scrollx));
78   save_item(NAME(m_scrolly));
7779}
7880
7981/***************************************************************************/
8082
81WRITE8_MEMBER(timelimt_state::timelimt_videoram_w)
83WRITE8_MEMBER(timelimt_state::videoram_w)
8284{
83   UINT8 *videoram = m_videoram;
84   videoram[offset] = data;
85   m_videoram[offset] = data;
8586   m_fg_tilemap->mark_tile_dirty(offset);
8687}
8788
88WRITE8_MEMBER(timelimt_state::timelimt_bg_videoram_w)
89WRITE8_MEMBER(timelimt_state::bg_videoram_w)
8990{
9091   m_bg_videoram[offset] = data;
9192   m_bg_tilemap->mark_tile_dirty(offset);
9293}
9394
94WRITE8_MEMBER(timelimt_state::timelimt_scroll_x_lsb_w)
95WRITE8_MEMBER(timelimt_state::scroll_x_lsb_w)
9596{
9697   m_scrollx &= 0x100;
9798   m_scrollx |= data & 0xff;
9899}
99100
100WRITE8_MEMBER(timelimt_state::timelimt_scroll_x_msb_w)
101WRITE8_MEMBER(timelimt_state::scroll_x_msb_w)
101102{
102103   m_scrollx &= 0xff;
103104   m_scrollx |= ( data & 1 ) << 8;
104105}
105106
106WRITE8_MEMBER(timelimt_state::timelimt_scroll_y_w)
107WRITE8_MEMBER(timelimt_state::scroll_y_w)
107108{
108109   m_scrolly = data;
109110}
r244776r244777
111112
112113void timelimt_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
113114{
114   UINT8 *spriteram = m_spriteram;
115   int offs;
116
117   for( offs = m_spriteram.bytes(); offs >= 0; offs -= 4 )
115   for( int offs = m_spriteram.bytes(); offs >= 0; offs -= 4 )
118116   {
119      int sy = 240 - spriteram[offs];
120      int sx = spriteram[offs+3];
121      int code = spriteram[offs+1] & 0x3f;
122      int attr = spriteram[offs+2];
123      int flipy = spriteram[offs+1] & 0x80;
124      int flipx = spriteram[offs+1] & 0x40;
117      int sy = 240 - m_spriteram[offs];
118      int sx = m_spriteram[offs+3];
119      int code = m_spriteram[offs+1] & 0x3f;
120      int attr = m_spriteram[offs+2];
121      int flipy = m_spriteram[offs+1] & 0x80;
122      int flipx = m_spriteram[offs+1] & 0x40;
125123
126124      code += ( attr & 0x80 ) ? 0x40 : 0x00;
127125      code += ( attr & 0x40 ) ? 0x80 : 0x00;
r244776r244777
135133}
136134
137135
138UINT32 timelimt_state::screen_update_timelimt(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
136UINT32 timelimt_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
139137{
140138   m_bg_tilemap->set_scrollx(0, m_scrollx);
141139   m_bg_tilemap->set_scrolly(0, m_scrolly);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team