Previous 199869 Revisions Next

r35113 Wednesday 18th February, 2015 at 17:27:40 UTC by Osso
progolf.c: added save state support (nw)
[src/mame/drivers]progolf.c

trunk/src/mame/drivers/progolf.c
r243624r243625
6464public:
6565   progolf_state(const machine_config &mconfig, device_type type, const char *tag)
6666      : driver_device(mconfig, type, tag),
67      m_fbram(*this, "fbram"),
6867      m_maincpu(*this, "maincpu"),
6968      m_audiocpu(*this, "audiocpu"),
7069      m_gfxdecode(*this, "gfxdecode"),
71      m_palette(*this, "palette")  { }
70      m_palette(*this, "palette"),
71      m_videoram(*this, "videoram"),
72      m_fbram(*this, "fbram")  { }
7273
73   UINT8 *m_videoram;
74   required_device<cpu_device> m_maincpu;
75   required_device<cpu_device> m_audiocpu;
76   required_device<gfxdecode_device> m_gfxdecode;
77   required_device<palette_device> m_palette;
78
79   required_shared_ptr<UINT8> m_videoram;
80   required_shared_ptr<UINT8> m_fbram;
81   
7482   UINT8 m_char_pen;
7583   UINT8 m_char_pen_vreg;
7684   UINT8 *m_fg_fb;
77   required_shared_ptr<UINT8> m_fbram;
7885   UINT8 m_scrollx_hi;
7986   UINT8 m_scrollx_lo;
8087   UINT8 m_gfx_switch;
8188   UINT8 m_sound_cmd;
82   DECLARE_WRITE8_MEMBER(progolf_charram_w);
83   DECLARE_WRITE8_MEMBER(progolf_char_vregs_w);
84   DECLARE_WRITE8_MEMBER(progolf_scrollx_lo_w);
85   DECLARE_WRITE8_MEMBER(progolf_scrollx_hi_w);
86   DECLARE_WRITE8_MEMBER(progolf_flip_screen_w);
89   
90   DECLARE_WRITE8_MEMBER(charram_w);
91   DECLARE_WRITE8_MEMBER(char_vregs_w);
92   DECLARE_WRITE8_MEMBER(scrollx_lo_w);
93   DECLARE_WRITE8_MEMBER(scrollx_hi_w);
94   DECLARE_WRITE8_MEMBER(flip_screen_w);
8795   DECLARE_WRITE8_MEMBER(audio_command_w);
8896   DECLARE_READ8_MEMBER(audio_command_r);
89   DECLARE_READ8_MEMBER(progolf_videoram_r);
90   DECLARE_WRITE8_MEMBER(progolf_videoram_w);
97   DECLARE_READ8_MEMBER(videoram_r);
98   DECLARE_WRITE8_MEMBER(videoram_w);
99   
91100   DECLARE_INPUT_CHANGED_MEMBER(coin_inserted);
101   
102   virtual void machine_start();
92103   virtual void video_start();
93104   DECLARE_PALETTE_INIT(progolf);
94   UINT32 screen_update_progolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
95   required_device<cpu_device> m_maincpu;
96   required_device<cpu_device> m_audiocpu;
97   required_device<gfxdecode_device> m_gfxdecode;
98   required_device<palette_device> m_palette;
105   
106   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
99107};
100108
101109
110void progolf_state::machine_start()
111{
112   save_item(NAME(m_sound_cmd));
113}
102114
103
104115void progolf_state::video_start()
105116{
106117   m_scrollx_hi = 0;
107118   m_scrollx_lo = 0;
108119
109120   m_fg_fb = auto_alloc_array(machine(), UINT8, 0x2000*8);
110   m_videoram = auto_alloc_array(machine(), UINT8, 0x1000);
121   
122   save_item(NAME(m_char_pen));
123   save_item(NAME(m_char_pen_vreg));
124   save_pointer(NAME(m_fg_fb), 0x2000*8);
125   save_item(NAME(m_scrollx_hi));
126   save_item(NAME(m_scrollx_lo));
127   save_item(NAME(m_gfx_switch));
111128}
112129
113130
114UINT32 progolf_state::screen_update_progolf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
131UINT32 progolf_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
115132{
116   UINT8 *videoram = m_videoram;
117133   int count,color,x,y,xi,yi;
118134
119135   {
r243624r243625
125141      {
126142         for(y=0;y<32;y++)
127143         {
128            int tile = videoram[count];
144            int tile = m_videoram[count];
129145
130146            m_gfxdecode->gfx(0)->opaque(bitmap,cliprect,tile,1,0,0,(256-x*8)+scroll,y*8);
131147            /* wrap-around */
r243624r243625
163179   return 0;
164180}
165181
166WRITE8_MEMBER(progolf_state::progolf_charram_w)
182WRITE8_MEMBER(progolf_state::charram_w)
167183{
168184   int i;
169185   m_fbram[offset] = data;
r243624r243625
185201   }
186202}
187203
188WRITE8_MEMBER(progolf_state::progolf_char_vregs_w)
204WRITE8_MEMBER(progolf_state::char_vregs_w)
189205{
190206   m_char_pen = data & 0x07;
191207   m_gfx_switch = data & 0xf0;
192208   m_char_pen_vreg = data & 0x30;
193209}
194210
195WRITE8_MEMBER(progolf_state::progolf_scrollx_lo_w)
211WRITE8_MEMBER(progolf_state::scrollx_lo_w)
196212{
197213   m_scrollx_lo = data;
198214}
199215
200WRITE8_MEMBER(progolf_state::progolf_scrollx_hi_w)
216WRITE8_MEMBER(progolf_state::scrollx_hi_w)
201217{
202218   m_scrollx_hi = data;
203219}
204220
205WRITE8_MEMBER(progolf_state::progolf_flip_screen_w)
221WRITE8_MEMBER(progolf_state::flip_screen_w)
206222{
207223   flip_screen_set(data & 1);
208224   if(data & 0xfe)
r243624r243625
221237   return m_sound_cmd;
222238}
223239
224READ8_MEMBER(progolf_state::progolf_videoram_r)
240READ8_MEMBER(progolf_state::videoram_r)
225241{
226   UINT8 *videoram = m_videoram;
227242   UINT8 *gfx_rom = memregion("gfx1")->base();
228243
229244   if (offset >= 0x0800)
r243624r243625
235250      else if (m_gfx_switch == 0x70)
236251         return gfx_rom[offset + 0x2000];
237252      else
238         return videoram[offset];
253         return m_videoram[offset];
239254   } else {
240255      if      (m_gfx_switch == 0x10)
241256         return gfx_rom[offset];
r243624r243625
244259      else if (m_gfx_switch == 0x30)
245260         return gfx_rom[offset + 0x2000];
246261      else
247         return videoram[offset];
262         return m_videoram[offset];
248263   }
249264}
250265
251WRITE8_MEMBER(progolf_state::progolf_videoram_w)
266WRITE8_MEMBER(progolf_state::videoram_w)
252267{
253   UINT8 *videoram = m_videoram;
254268   //if(m_gfx_switch & 0x40)
255   videoram[offset] = data;
269   m_videoram[offset] = data;
256270}
257271
258272static ADDRESS_MAP_START( main_cpu, AS_PROGRAM, 8, progolf_state )
259273   AM_RANGE(0x0000, 0x5fff) AM_RAM
260   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(progolf_charram_w) AM_SHARE("fbram")
261   AM_RANGE(0x8000, 0x8fff) AM_READWRITE(progolf_videoram_r,progolf_videoram_w)
262   AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN2") AM_WRITE(progolf_char_vregs_w)
263   AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_WRITE(progolf_scrollx_hi_w) //p1 inputs
264   AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_WRITE(progolf_scrollx_lo_w) //p2 inputs
265   AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") AM_WRITE(progolf_flip_screen_w)   /* VBLANK */
274   AM_RANGE(0x6000, 0x7fff) AM_RAM_WRITE(charram_w) AM_SHARE("fbram")
275   AM_RANGE(0x8000, 0x8fff) AM_READWRITE(videoram_r, videoram_w) AM_SHARE("videoram")
276   AM_RANGE(0x9000, 0x9000) AM_READ_PORT("IN2") AM_WRITE(char_vregs_w)
277   AM_RANGE(0x9200, 0x9200) AM_READ_PORT("P1") AM_WRITE(scrollx_hi_w) //p1 inputs
278   AM_RANGE(0x9400, 0x9400) AM_READ_PORT("P2") AM_WRITE(scrollx_lo_w) //p2 inputs
279   AM_RANGE(0x9600, 0x9600) AM_READ_PORT("IN0") AM_WRITE(flip_screen_w)   /* VBLANK */
266280   AM_RANGE(0x9800, 0x9800) AM_READ_PORT("DSW1")
267281   AM_RANGE(0x9800, 0x9800) AM_DEVWRITE("crtc", mc6845_device, address_w)
268282   AM_RANGE(0x9801, 0x9801) AM_DEVWRITE("crtc", mc6845_device, register_w)
r243624r243625
362376   PORT_DIPUNUSED( 0x80, IP_ACTIVE_HIGH )
363377INPUT_PORTS_END
364378
365static const gfx_layout progolf_charlayout =
379static const gfx_layout charlayout =
366380{
367381   8,8,            /* 8*8 characters */
368382   RGN_FRAC(1,3),  /* 512 characters */
r243624r243625
374388};
375389
376390static GFXDECODE_START( progolf )
377   GFXDECODE_ENTRY( "gfx1", 0x0000, progolf_charlayout, 0, 8 ) /* sprites */
391   GFXDECODE_ENTRY( "gfx1", 0x0000, charlayout, 0, 8 ) /* sprites */
378392GFXDECODE_END
379393
380394
r243624r243625
423437   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(3072))
424438   MCFG_SCREEN_SIZE(256, 256)
425439   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 0*8, 32*8-1)
426   MCFG_SCREEN_UPDATE_DRIVER(progolf_state, screen_update_progolf)
440   MCFG_SCREEN_UPDATE_DRIVER(progolf_state, screen_update)
427441   MCFG_SCREEN_PALETTE("palette")
428442
429443   MCFG_GFXDECODE_ADD("gfxdecode", "palette", progolf)
r243624r243625
500514
501515
502516// this uses DECO222 style encryption
503GAME( 1981, progolf,  0,       progolf, progolf, driver_device, 0,       ROT270, "Data East Corporation", "18 Holes Pro Golf (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL )
517GAME( 1981, progolf,  0,       progolf, progolf, driver_device, 0,       ROT270, "Data East Corporation", "18 Holes Pro Golf (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
504518// this uses DECO CPU-6 as custom module CPU (the same as Zoar, are we sure? our Zoar has different encryption, CPU-7 style)
505GAME( 1981, progolfa, progolf, progolfa,progolf, driver_device, 0,       ROT270, "Data East Corporation", "18 Holes Pro Golf (set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL )
519GAME( 1981, progolfa, progolf, progolfa,progolf, driver_device, 0,       ROT270, "Data East Corporation", "18 Holes Pro Golf (set 2)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )


Previous 199869 Revisions Next


© 1997-2024 The MAME Team