Previous 199869 Revisions Next

r35305 Thursday 26th February, 2015 at 17:18:37 UTC by Osso
pturn.c: added save state support (nw)
pooyan.c: removed unused member variable (nw)
[src/mame/drivers]pooyan.c pturn.c
[src/mame/includes]pooyan.h
[src/mame/video]pooyan.c

trunk/src/mame/drivers/pooyan.c
r243816r243817
2424 *
2525 *************************************/
2626
27INTERRUPT_GEN_MEMBER(pooyan_state::pooyan_interrupt)
27INTERRUPT_GEN_MEMBER(pooyan_state::interrupt)
2828{
2929   if (m_irq_enable)
3030      device.execute().set_input_line(INPUT_LINE_NMI, ASSERT_LINE);
r243816r243817
4747
4848static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pooyan_state )
4949   AM_RANGE(0x0000, 0x7fff) AM_ROM
50   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(pooyan_colorram_w) AM_SHARE("colorram")
51   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(pooyan_videoram_w) AM_SHARE("videoram")
50   AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
51   AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
5252   AM_RANGE(0x8800, 0x8fff) AM_RAM
5353   AM_RANGE(0x9000, 0x90ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram")
5454   AM_RANGE(0x9400, 0x94ff) AM_MIRROR(0x0b00) AM_RAM AM_SHARE("spriteram2")
r243816r243817
6262   AM_RANGE(0xa180, 0xa180) AM_MIRROR(0x5e78) AM_WRITE(irq_enable_w)
6363   AM_RANGE(0xa181, 0xa181) AM_MIRROR(0x5e78) AM_DEVWRITE("timeplt_audio", timeplt_audio_device, sh_irqtrigger_w)
6464   AM_RANGE(0xa183, 0xa183) AM_MIRROR(0x5e78) AM_WRITENOP // ???
65   AM_RANGE(0xa187, 0xa187) AM_MIRROR(0x5e78) AM_WRITE(pooyan_flipscreen_w)
65   AM_RANGE(0xa187, 0xa187) AM_MIRROR(0x5e78) AM_WRITE(flipscreen_w)
6666ADDRESS_MAP_END
6767
6868
r243816r243817
187187   /* basic machine hardware */
188188   MCFG_CPU_ADD("maincpu", Z80, MASTER_CLOCK/3/2)
189189   MCFG_CPU_PROGRAM_MAP(main_map)
190   MCFG_CPU_VBLANK_INT_DRIVER("screen", pooyan_state,  pooyan_interrupt)
190   MCFG_CPU_VBLANK_INT_DRIVER("screen", pooyan_state,  interrupt)
191191
192192
193193   /* video hardware */
r243816r243817
195195   MCFG_SCREEN_REFRESH_RATE(60)
196196   MCFG_SCREEN_SIZE(32*8, 32*8)
197197   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
198   MCFG_SCREEN_UPDATE_DRIVER(pooyan_state, screen_update_pooyan)
198   MCFG_SCREEN_UPDATE_DRIVER(pooyan_state, screen_update)
199199   MCFG_SCREEN_PALETTE("palette")
200200
201201   MCFG_GFXDECODE_ADD("gfxdecode", "palette", pooyan)
trunk/src/mame/drivers/pturn.c
r243816r243817
8484public:
8585   pturn_state(const machine_config &mconfig, device_type type, const char *tag)
8686      : driver_device(mconfig, type, tag),
87      m_videoram(*this, "videoram"),
88      m_spriteram(*this, "spriteram"),
8987      m_maincpu(*this, "maincpu"),
9088      m_gfxdecode(*this, "gfxdecode"),
91      m_palette(*this, "palette") { }
89      m_palette(*this, "palette"),
90      m_videoram(*this, "videoram"),
91      m_spriteram(*this, "spriteram") { }
9292
93   required_device<cpu_device> m_maincpu;
94   required_device<gfxdecode_device> m_gfxdecode;
95   required_device<palette_device> m_palette;
96
9397   required_shared_ptr<UINT8> m_videoram;
98   required_shared_ptr<UINT8> m_spriteram;
99
94100   tilemap_t *m_fgmap;
95101   tilemap_t *m_bgmap;
96102   int m_bgbank;
r243816r243817
100106   int m_bgcolor;
101107   int m_nmi_main;
102108   int m_nmi_sub;
103   required_shared_ptr<UINT8> m_spriteram;
104   DECLARE_WRITE8_MEMBER(pturn_videoram_w);
109
110   DECLARE_WRITE8_MEMBER(videoram_w);
105111   DECLARE_WRITE8_MEMBER(nmi_main_enable_w);
106112   DECLARE_WRITE8_MEMBER(nmi_sub_enable_w);
107   DECLARE_WRITE8_MEMBER(sound_w);
108113   DECLARE_WRITE8_MEMBER(bgcolor_w);
109114   DECLARE_WRITE8_MEMBER(bg_scrollx_w);
110115   DECLARE_WRITE8_MEMBER(fgpalette_w);
r243816r243817
112117   DECLARE_WRITE8_MEMBER(fgbank_w);
113118   DECLARE_WRITE8_MEMBER(bgbank_w);
114119   DECLARE_WRITE8_MEMBER(flip_w);
115   DECLARE_READ8_MEMBER(pturn_custom_r);
116   DECLARE_READ8_MEMBER(pturn_protection_r);
117   DECLARE_READ8_MEMBER(pturn_protection2_r);
120   DECLARE_READ8_MEMBER(custom_r);
121   DECLARE_READ8_MEMBER(protection_r);
122   DECLARE_READ8_MEMBER(protection2_r);
123
124   TILE_GET_INFO_MEMBER(get_tile_info);
125   TILE_GET_INFO_MEMBER(get_bg_tile_info);
126     
118127   DECLARE_DRIVER_INIT(pturn);
119   TILE_GET_INFO_MEMBER(get_pturn_tile_info);
120   TILE_GET_INFO_MEMBER(get_pturn_bg_tile_info);
128   virtual void machine_start();
121129   virtual void machine_reset();
122130   virtual void video_start();
123   UINT32 screen_update_pturn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
124   INTERRUPT_GEN_MEMBER(pturn_sub_intgen);
125   INTERRUPT_GEN_MEMBER(pturn_main_intgen);
126   required_device<cpu_device> m_maincpu;
127   required_device<gfxdecode_device> m_gfxdecode;
128   required_device<palette_device> m_palette;
131   
132   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
133   
134   INTERRUPT_GEN_MEMBER(sub_intgen);
135   INTERRUPT_GEN_MEMBER(main_intgen);
129136};
130137
131138
r243816r243817
139146   0xa0, 0xb0, 0xe0, 0xf0
140147};
141148
142TILE_GET_INFO_MEMBER(pturn_state::get_pturn_tile_info)
149TILE_GET_INFO_MEMBER(pturn_state::get_tile_info)
143150{
144   UINT8 *videoram = m_videoram;
145   int tileno;
146   tileno = videoram[tile_index];
151   int tileno = m_videoram[tile_index];
147152
148153   tileno=tile_lookup[tileno>>4]|(tileno&0xf)|(m_fgbank<<8);
149154
r243816r243817
152157
153158
154159
155TILE_GET_INFO_MEMBER(pturn_state::get_pturn_bg_tile_info)
160TILE_GET_INFO_MEMBER(pturn_state::get_bg_tile_info)
156161{
157   int tileno,palno;
158   tileno = memregion("user1")->base()[tile_index];
159   palno=m_bgpalette;
162   int tileno = memregion("user1")->base()[tile_index];
163   int palno=m_bgpalette;
160164   if(palno==1)
161165   {
162166      palno=25;
r243816r243817
166170
167171void pturn_state::video_start()
168172{
169   m_fgmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(pturn_state::get_pturn_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,32,32);
173   m_fgmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(pturn_state::get_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,32,32);
170174   m_fgmap->set_transparent_pen(0);
171   m_bgmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(pturn_state::get_pturn_bg_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,32,32*8);
175   m_bgmap = &machine().tilemap().create(m_gfxdecode, tilemap_get_info_delegate(FUNC(pturn_state::get_bg_tile_info),this),TILEMAP_SCAN_ROWS,8, 8,32,32*8);
172176   m_bgmap->set_transparent_pen(0);
177   
178   save_item(NAME(m_bgbank));
179   save_item(NAME(m_fgbank));
180   save_item(NAME(m_bgpalette));
181   save_item(NAME(m_fgpalette));
182   save_item(NAME(m_bgcolor));
173183}
174184
175UINT32 pturn_state::screen_update_pturn(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
185UINT32 pturn_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
176186{
177   UINT8 *spriteram = m_spriteram;
178   int offs;
179   int sx, sy;
180   int flipx, flipy;
181
182187   bitmap.fill(m_bgcolor, cliprect);
183188   m_bgmap->draw(screen, bitmap, cliprect, 0,0);
184   for ( offs = 0x80-4 ; offs >=0 ; offs -= 4)
189   for (int offs = 0x80-4 ; offs >=0 ; offs -= 4)
185190   {
186      sy=256-spriteram[offs]-16 ;
187      sx=spriteram[offs+3]-16 ;
191      int sy=256-m_spriteram[offs]-16 ;
192      int sx=m_spriteram[offs+3]-16 ;
188193
189      flipx=spriteram[offs+1]&0x40;
190      flipy=spriteram[offs+1]&0x80;
194      int flipx=m_spriteram[offs+1]&0x40;
195      int flipy=m_spriteram[offs+1]&0x80;
191196
192197
193198      if (flip_screen_x())
r243816r243817
205210      if(sx|sy)
206211      {
207212         m_gfxdecode->gfx(2)->transpen(bitmap,cliprect,
208         spriteram[offs+1] & 0x3f ,
209         (spriteram[offs+2] & 0x1f),
213         m_spriteram[offs+1] & 0x3f ,
214         (m_spriteram[offs+2] & 0x1f),
210215         flipx, flipy,
211216         sx,sy,0);
212217      }
r243816r243817
216221}
217222
218223#ifdef UNUSED_FUNCTION
219READ8_MEMBER(pturn_state::pturn_protection_r)
224READ8_MEMBER(pturn_state::protection_r)
220225{
221226   return 0x66;
222227}
223228
224READ8_MEMBER(pturn_state::pturn_protection2_r)
229READ8_MEMBER(pturn_state::protection2_r)
225230{
226231   return 0xfe;
227232}
228233#endif
229234
230WRITE8_MEMBER(pturn_state::pturn_videoram_w)
235WRITE8_MEMBER(pturn_state::videoram_w)
231236{
232   UINT8 *videoram = m_videoram;
233   videoram[offset]=data;
237   m_videoram[offset]=data;
234238   m_fgmap->mark_tile_dirty(offset);
235239}
236240
r243816r243817
245249   m_nmi_sub = data;
246250}
247251
248WRITE8_MEMBER(pturn_state::sound_w)
249{
250   soundlatch_byte_w(space,0,data);
251}
252
253
254252WRITE8_MEMBER(pturn_state::bgcolor_w)
255253{
256254   m_bgcolor=data;
r243816r243817
292290}
293291
294292
295READ8_MEMBER(pturn_state::pturn_custom_r)
293READ8_MEMBER(pturn_state::custom_r)
296294{
297295   int addr = (int)offset + 0xc800;
298296
r243816r243817
321319static ADDRESS_MAP_START( main_map, AS_PROGRAM, 8, pturn_state )
322320   AM_RANGE(0x0000, 0x7fff) AM_ROM
323321   AM_RANGE(0xc000, 0xc7ff) AM_RAM
324   AM_RANGE(0xc800, 0xcfff) AM_WRITENOP AM_READ(pturn_custom_r)
322   AM_RANGE(0xc800, 0xcfff) AM_WRITENOP AM_READ(custom_r)
325323
326324   AM_RANGE(0xdfe0, 0xdfe0) AM_NOP
327325
328   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(pturn_videoram_w) AM_SHARE("videoram")
326   AM_RANGE(0xe000, 0xe3ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
329327   AM_RANGE(0xe400, 0xe400) AM_WRITE(fgpalette_w)
330   AM_RANGE(0xe800, 0xe800) AM_WRITE(sound_w)
328   AM_RANGE(0xe800, 0xe800) AM_WRITE(soundlatch_byte_w)
331329
332330   AM_RANGE(0xf000, 0xf0ff) AM_RAM AM_SHARE("spriteram")
333331
r243816r243817
467465   PORT_DIPSETTING(    0x80, DEF_STR( Japanese ) )
468466INPUT_PORTS_END
469467
470INTERRUPT_GEN_MEMBER(pturn_state::pturn_sub_intgen)
468INTERRUPT_GEN_MEMBER(pturn_state::sub_intgen)
471469{
472470   if(m_nmi_sub)
473471   {
r243816r243817
475473   }
476474}
477475
478INTERRUPT_GEN_MEMBER(pturn_state::pturn_main_intgen)
476INTERRUPT_GEN_MEMBER(pturn_state::main_intgen)
479477{
480478   if (m_nmi_main)
481479   {
r243816r243817
483481   }
484482}
485483
484void pturn_state::machine_start()
485{
486   save_item(NAME(m_nmi_main));
487   save_item(NAME(m_nmi_sub));
488}
489
486490void pturn_state::machine_reset()
487491{
488492   address_space &space = m_maincpu->space(AS_PROGRAM);
r243816r243817
492496static MACHINE_CONFIG_START( pturn, pturn_state )
493497   MCFG_CPU_ADD("maincpu", Z80, 12000000/3)
494498   MCFG_CPU_PROGRAM_MAP(main_map)
495   MCFG_CPU_VBLANK_INT_DRIVER("screen", pturn_state,  pturn_main_intgen)
499   MCFG_CPU_VBLANK_INT_DRIVER("screen", pturn_state,  main_intgen)
496500
497501   MCFG_CPU_ADD("audiocpu", Z80, 12000000/3)
498502   MCFG_CPU_PROGRAM_MAP(sub_map)
499   MCFG_CPU_PERIODIC_INT_DRIVER(pturn_state, pturn_sub_intgen, 3*60)
503   MCFG_CPU_PERIODIC_INT_DRIVER(pturn_state, sub_intgen, 3*60)
500504
501505
502506   MCFG_SCREEN_ADD("screen", RASTER)
r243816r243817
504508   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
505509   MCFG_SCREEN_SIZE(32*8, 32*8)
506510   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
507   MCFG_SCREEN_UPDATE_DRIVER(pturn_state, screen_update_pturn)
511   MCFG_SCREEN_UPDATE_DRIVER(pturn_state, screen_update)
508512   MCFG_SCREEN_PALETTE("palette")
509513
510514   MCFG_PALETTE_ADD_RRRRGGGGBBBB_PROMS("palette", 0x100)
r243816r243817
561565DRIVER_INIT_MEMBER(pturn_state,pturn)
562566{
563567   /*
564   m_maincpu->space(AS_PROGRAM).install_read_handler(0xc0dd, 0xc0dd, read8_delegate(FUNC(pturn_state::pturn_protection_r), this));
565   m_maincpu->space(AS_PROGRAM).install_read_handler(0xc0db, 0xc0db, read8_delegate(FUNC(pturn_state::pturn_protection2_r), this));
568   m_maincpu->space(AS_PROGRAM).install_read_handler(0xc0dd, 0xc0dd, read8_delegate(FUNC(pturn_state::protection_r), this));
569   m_maincpu->space(AS_PROGRAM).install_read_handler(0xc0db, 0xc0db, read8_delegate(FUNC(pturn_state::protection2_r), this));
566570   */
567571}
568572
569GAME( 1984, pturn,  0, pturn,  pturn, pturn_state,  pturn, ROT90,   "Jaleco", "Parallel Turn",  GAME_IMPERFECT_COLORS )
573GAME( 1984, pturn,  0, pturn,  pturn, pturn_state,  pturn, ROT90,   "Jaleco", "Parallel Turn",  GAME_IMPERFECT_COLORS | GAME_SUPPORTS_SAVE )
trunk/src/mame/includes/pooyan.h
r243816r243817
33public:
44   pooyan_state(const machine_config &mconfig, device_type type, const char *tag)
55      : driver_device(mconfig, type, tag),
6      m_maincpu(*this, "maincpu"),
7      m_gfxdecode(*this, "gfxdecode"),
8      m_palette(*this, "palette"),
69      m_colorram(*this, "colorram"),
710      m_videoram(*this, "videoram"),
811      m_spriteram(*this, "spriteram"),
9      m_spriteram2(*this, "spriteram2"),
10      m_maincpu(*this, "maincpu"),
11      m_gfxdecode(*this, "gfxdecode"),
12      m_palette(*this, "palette") { }
12      m_spriteram2(*this, "spriteram2") { }
1313
14   /* devices */
15   required_device<cpu_device> m_maincpu;
16   required_device<gfxdecode_device> m_gfxdecode;
17   required_device<palette_device> m_palette;
18
1419   /* memory pointers */
1520   required_shared_ptr<UINT8> m_colorram;
1621   required_shared_ptr<UINT8> m_videoram;
r243816r243817
2126   tilemap_t  *m_bg_tilemap;
2227
2328   /* misc */
24   UINT8    m_irq_toggle;
2529   UINT8    m_irq_enable;
2630
27   /* devices */
28   required_device<cpu_device> m_maincpu;
29   required_device<gfxdecode_device> m_gfxdecode;
30   required_device<palette_device> m_palette;
31
3231   DECLARE_WRITE8_MEMBER(irq_enable_w);
33   DECLARE_WRITE8_MEMBER(pooyan_videoram_w);
34   DECLARE_WRITE8_MEMBER(pooyan_colorram_w);
35   DECLARE_WRITE8_MEMBER(pooyan_flipscreen_w);
32   DECLARE_WRITE8_MEMBER(videoram_w);
33   DECLARE_WRITE8_MEMBER(colorram_w);
34   DECLARE_WRITE8_MEMBER(flipscreen_w);
35   
3636   TILE_GET_INFO_MEMBER(get_bg_tile_info);
37   
3738   virtual void machine_start();
3839   virtual void machine_reset();
3940   virtual void video_start();
4041   DECLARE_PALETTE_INIT(pooyan);
41   UINT32 screen_update_pooyan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
42   INTERRUPT_GEN_MEMBER(pooyan_interrupt);
42   
43   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
4344   void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect );
45   
46   INTERRUPT_GEN_MEMBER(interrupt);
4447};
trunk/src/mame/video/pooyan.c
r243816r243817
124124 *
125125 *************************************/
126126
127WRITE8_MEMBER(pooyan_state::pooyan_videoram_w)
127WRITE8_MEMBER(pooyan_state::videoram_w)
128128{
129129   m_videoram[offset] = data;
130130   m_bg_tilemap->mark_tile_dirty(offset);
131131}
132132
133133
134WRITE8_MEMBER(pooyan_state::pooyan_colorram_w)
134WRITE8_MEMBER(pooyan_state::colorram_w)
135135{
136136   m_colorram[offset] = data;
137137   m_bg_tilemap->mark_tile_dirty(offset);
138138}
139139
140140
141WRITE8_MEMBER(pooyan_state::pooyan_flipscreen_w)
141WRITE8_MEMBER(pooyan_state::flipscreen_w)
142142{
143143   flip_screen_set(~data & 0x01);
144144}
r243816r243817
153153
154154void pooyan_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect )
155155{
156   UINT8 *spriteram = m_spriteram;
157   UINT8 *spriteram_2 = m_spriteram2;
158   int offs;
159
160   for (offs = 0x10; offs < 0x40; offs += 2)
156   for (int offs = 0x10; offs < 0x40; offs += 2)
161157   {
162      int sx = spriteram[offs];
163      int sy = 240 - spriteram_2[offs + 1];
158      int sx = m_spriteram[offs];
159      int sy = 240 - m_spriteram2[offs + 1];
164160
165      int code = spriteram[offs + 1];
166      int color = spriteram_2[offs] & 0x0f;
167      int flipx = ~spriteram_2[offs] & 0x40;
168      int flipy = spriteram_2[offs] & 0x80;
161      int code = m_spriteram[offs + 1];
162      int color = m_spriteram2[offs] & 0x0f;
163      int flipx = ~m_spriteram2[offs] & 0x40;
164      int flipy = m_spriteram2[offs] & 0x80;
169165
170166
171167         m_gfxdecode->gfx(1)->transmask(bitmap,cliprect,
r243816r243817
185181 *
186182 *************************************/
187183
188UINT32 pooyan_state::screen_update_pooyan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
184UINT32 pooyan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
189185{
190186   m_bg_tilemap->draw(screen, bitmap, cliprect, 0, 0);
191187   draw_sprites(bitmap, cliprect);


Previous 199869 Revisions Next


© 1997-2024 The MAME Team