Previous 199869 Revisions Next

r34838 Wednesday 4th February, 2015 at 17:36:27 UTC by Osso
goodejan.c, sengokmj.c: added save state support (nw)
[src/mame/drivers]goodejan.c sengokmj.c

trunk/src/mame/drivers/goodejan.c
r243349r243350
7878public:
7979   goodejan_state(const machine_config &mconfig, device_type type, const char *tag)
8080      : driver_device(mconfig, type, tag),
81      m_maincpu(*this, "maincpu"),
82      m_gfxdecode(*this, "gfxdecode"),
83      m_palette(*this, "palette"),
8184      m_sc0_vram(*this, "sc0_vram"),
8285      m_sc1_vram(*this, "sc1_vram"),
8386      m_sc2_vram(*this, "sc2_vram"),
8487      m_sc3_vram(*this, "sc3_vram"),
85      m_spriteram16(*this, "sprite_ram"),
86      m_maincpu(*this, "maincpu"),
87      m_gfxdecode(*this, "gfxdecode"),
88      m_palette(*this, "palette") { }
88      m_spriteram16(*this, "sprite_ram") { }
8989
90   required_device<cpu_device> m_maincpu;
91   required_device<gfxdecode_device> m_gfxdecode;
92   required_device<palette_device> m_palette;
93
9094   required_shared_ptr<UINT16> m_sc0_vram;
9195   required_shared_ptr<UINT16> m_sc1_vram;
9296   required_shared_ptr<UINT16> m_sc2_vram;
9397   required_shared_ptr<UINT16> m_sc3_vram;
9498   required_shared_ptr<UINT16> m_spriteram16;
95   required_device<cpu_device> m_maincpu;
96   required_device<gfxdecode_device> m_gfxdecode;
97   required_device<palette_device> m_palette;
99
98100   tilemap_t *m_sc0_tilemap;
99101   tilemap_t *m_sc1_tilemap;
100102   tilemap_t *m_sc2_tilemap;
101103   tilemap_t *m_sc3_tilemap;
104   
102105   UINT16 m_mux_data;
103106   UINT16 m_seibucrtc_sc0bank;
104   DECLARE_WRITE16_MEMBER(goodejan_gfxbank_w);
107   UINT16 m_layer_en;
108   UINT16 m_scrollram[6];
109   
110   DECLARE_WRITE16_MEMBER(gfxbank_w);
105111   DECLARE_READ16_MEMBER(mahjong_panel_r);
106112   DECLARE_WRITE16_MEMBER(mahjong_panel_w);
107113   DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
108114   DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
109115   DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
110116   DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
117   DECLARE_WRITE16_MEMBER(layer_en_w);
118   DECLARE_WRITE16_MEMBER(layer_scroll_w);
119   
111120   TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
112121   TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
113122   TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
114123   TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
115   INTERRUPT_GEN_MEMBER(goodejan_irq);
116   DECLARE_WRITE16_MEMBER(layer_en_w);
117   DECLARE_WRITE16_MEMBER(layer_scroll_w);
118   UINT16 m_layer_en;
119   UINT16 m_scrollram[6];
124   
125   INTERRUPT_GEN_MEMBER(irq);
126   
120127   void seibucrtc_sc0bank_w(UINT16 data);
121128   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
122129   virtual void video_start();
123   UINT32 screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
130   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
124131};
125132
126133/*******************************
r243349r243350
348355   m_sc3_tilemap->set_transparent_pen(15);
349356
350357   m_seibucrtc_sc0bank = 0;
358   
359   save_item(NAME(m_mux_data));
360   save_item(NAME(m_seibucrtc_sc0bank));
361   save_item(NAME(m_layer_en));
362   save_item(NAME(m_scrollram));
351363}
352364
353UINT32 goodejan_state::screen_update_goodejan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
365UINT32 goodejan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
354366{
355367   bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
356368
r243349r243350
381393#define GOODEJAN_MHZ3 12000000
382394
383395
384WRITE16_MEMBER(goodejan_state::goodejan_gfxbank_w)
396WRITE16_MEMBER(goodejan_state::gfxbank_w)
385397{
386398   seibucrtc_sc0bank_w((data & 0x100)>>8);
387399}
r243349r243350
423435
424436/* totmejan CRTC is at 8000-804f,goodejan is at 8000-807f */
425437static ADDRESS_MAP_START( common_io_map, AS_IO, 16, goodejan_state )
426   AM_RANGE(0x9000, 0x9001) AM_WRITE(goodejan_gfxbank_w)
438   AM_RANGE(0x9000, 0x9001) AM_WRITE(gfxbank_w)
427439   AM_RANGE(0xb000, 0xb003) AM_WRITENOP
428440   AM_RANGE(0xb004, 0xb005) AM_WRITE(mahjong_panel_w)
429441
r243349r243350
592604   GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x100, 0x10 ) /* Text */
593605GFXDECODE_END
594606
595INTERRUPT_GEN_MEMBER(goodejan_state::goodejan_irq)
607INTERRUPT_GEN_MEMBER(goodejan_state::irq)
596608{
597609   device.execute().set_input_line_and_vector(0,HOLD_LINE,0x208/4);
598610/* vector 0x00c is just a reti */
r243349r243350
616628   MCFG_CPU_ADD("maincpu", V30, GOODEJAN_MHZ2/2)
617629   MCFG_CPU_PROGRAM_MAP(goodejan_map)
618630   MCFG_CPU_IO_MAP(goodejan_io_map)
619   MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, goodejan_irq)
631   MCFG_CPU_VBLANK_INT_DRIVER("screen", goodejan_state, irq)
620632
621633   SEIBU_SOUND_SYSTEM_CPU(GOODEJAN_MHZ1/2)
622634
r243349r243350
626638   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
627639   MCFG_SCREEN_SIZE(32*8, 32*8)
628640   MCFG_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1) //TODO: dynamic resolution
629   MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update_goodejan)
641   MCFG_SCREEN_UPDATE_DRIVER(goodejan_state, screen_update)
630642   MCFG_SCREEN_PALETTE("palette")
631643
632644   MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
r243349r243350
742754   ROM_LOAD( "fmj08.083", 0x000, 0x100, CRC(9657b7ad) SHA1(e9b469c2b3534593f7fe0ea19cbbf93b55957e42) )
743755ROM_END
744756
745GAME( 1991, totmejan, 0,        totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS )
746GAME( 1991, goodejan, 0,        goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS )
747GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS )
757GAME( 1991, totmejan, 0,        totmejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Tottemo E Jong", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
758GAME( 1991, goodejan, 0,        goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 1)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
759GAME( 1991, goodejana,goodejan, goodejan, goodejan, driver_device, 0, ROT0, "Seibu Kaihatsu (Tecmo license)", "Good E Jong -Kachinuki Mahjong Syoukin Oh!!- (set 2)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
trunk/src/mame/drivers/sengokmj.c
r243349r243350
6666public:
6767   sengokmj_state(const machine_config &mconfig, device_type type, const char *tag)
6868      : driver_device(mconfig, type, tag),
69      m_maincpu(*this, "maincpu"),
70      m_gfxdecode(*this, "gfxdecode"),
71      m_palette(*this, "palette"),
6972      m_sc0_vram(*this, "sc0_vram"),
7073      m_sc1_vram(*this, "sc1_vram"),
7174      m_sc2_vram(*this, "sc2_vram"),
7275      m_sc3_vram(*this, "sc3_vram"),
73      m_spriteram16(*this, "sprite_ram"),
74      m_maincpu(*this, "maincpu"),
75      m_gfxdecode(*this, "gfxdecode"),
76      m_palette(*this, "palette") { }
76      m_spriteram16(*this, "sprite_ram") { }
7777
78   required_device<cpu_device> m_maincpu;
79   required_device<gfxdecode_device> m_gfxdecode;
80   required_device<palette_device> m_palette;
81
7882   required_shared_ptr<UINT16> m_sc0_vram;
7983   required_shared_ptr<UINT16> m_sc1_vram;
8084   required_shared_ptr<UINT16> m_sc2_vram;
8185   required_shared_ptr<UINT16> m_sc3_vram;
8286   required_shared_ptr<UINT16> m_spriteram16;
83   required_device<cpu_device> m_maincpu;
84   required_device<gfxdecode_device> m_gfxdecode;
85   required_device<palette_device> m_palette;
87
8688   tilemap_t *m_sc0_tilemap;
8789   tilemap_t *m_sc1_tilemap;
8890   tilemap_t *m_sc2_tilemap;
8991   tilemap_t *m_sc3_tilemap;
90   UINT16 m_sengokumj_mux_data;
92   
93   UINT16 m_mux_data;
9194   UINT8 m_hopper_io;
9295   UINT16 m_layer_en;
9396   UINT16 m_scrollram[6];
97   
9498   DECLARE_READ16_MEMBER(mahjong_panel_r);
9599   DECLARE_WRITE16_MEMBER(mahjong_panel_w);
96   DECLARE_WRITE16_MEMBER(sengokmj_out_w);
97   DECLARE_READ16_MEMBER(sengokmj_system_r);
100   DECLARE_WRITE16_MEMBER(out_w);
101   DECLARE_READ16_MEMBER(system_r);
98102   DECLARE_WRITE16_MEMBER(seibucrtc_sc0vram_w);
99103   DECLARE_WRITE16_MEMBER(seibucrtc_sc1vram_w);
100104   DECLARE_WRITE16_MEMBER(seibucrtc_sc2vram_w);
101105   DECLARE_WRITE16_MEMBER(seibucrtc_sc3vram_w);
106   DECLARE_WRITE16_MEMBER(layer_en_w);
107   DECLARE_WRITE16_MEMBER(layer_scroll_w);
108   
102109   TILE_GET_INFO_MEMBER(seibucrtc_sc0_tile_info);
103110   TILE_GET_INFO_MEMBER(seibucrtc_sc1_tile_info);
104111   TILE_GET_INFO_MEMBER(seibucrtc_sc2_tile_info);
105112   TILE_GET_INFO_MEMBER(seibucrtc_sc3_tile_info);
106   INTERRUPT_GEN_MEMBER(sengokmj_interrupt);
107   DECLARE_WRITE16_MEMBER(layer_en_w);
108   DECLARE_WRITE16_MEMBER(layer_scroll_w);
113   
114   INTERRUPT_GEN_MEMBER(interrupt);
109115
116   virtual void machine_start();
117   virtual void video_start();
118
110119   void draw_sprites(bitmap_ind16 &bitmap,const rectangle &cliprect,int pri);
111   virtual void video_start();
112   UINT32 screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
120   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
113121};
114122
115123
r243349r243350
294302   m_sc2_tilemap->set_transparent_pen(15);
295303   m_sc1_tilemap->set_transparent_pen(15);
296304   m_sc3_tilemap->set_transparent_pen(15);
305
306   save_item(NAME(m_layer_en));
307   save_item(NAME(m_scrollram));
297308}
298309
299UINT32 sengokmj_state::screen_update_sengokmj(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
310UINT32 sengokmj_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
300311{
301312   bitmap.fill(m_palette->pen(0x7ff), cliprect); //black pen
302313
r243349r243350
323334}
324335
325336
337void sengokmj_state::machine_start()
338{
339   save_item(NAME(m_mux_data));
340   save_item(NAME(m_hopper_io));
341}
326342
327343
328344/* Multiplexer device for the mahjong panel */
r243349r243350
334350
335351   for(i=0;i<5;i++)
336352   {
337      if(m_sengokumj_mux_data & 1 << i)
353      if(m_mux_data & 1 << i)
338354         res = ioport(mpnames[i])->read();
339355   }
340356
r243349r243350
343359
344360WRITE16_MEMBER(sengokmj_state::mahjong_panel_w)
345361{
346   m_sengokumj_mux_data = (data & 0x3f00) >> 8;
362   m_mux_data = (data & 0x3f00) >> 8;
347363
348364   if(data & 0xc0ff)
349365      logerror("Write to mux %04x\n",data);
350366}
351367
352WRITE16_MEMBER(sengokmj_state::sengokmj_out_w)
368WRITE16_MEMBER(sengokmj_state::out_w)
353369{
354370   /* ---- ---- ---x ---- J.P. Signal (?)*/
355371   /* ---- ---- ---- -x-- Coin counter (done AFTER you press start)*/
r243349r243350
362378//  popmessage("%02x",m_hopper_io);
363379}
364380
365READ16_MEMBER(sengokmj_state::sengokmj_system_r)
381READ16_MEMBER(sengokmj_state::system_r)
366382{
367383   return (ioport("SYSTEM")->read() & 0xffbf) | m_hopper_io;
368384}
r243349r243350
387403//  AM_RANGE(0x8080, 0x8081) CRTC extra register?
388404//  AM_RANGE(0x80c0, 0x80c1) CRTC extra register?
389405//  AM_RANGE(0x8100, 0x8101) AM_WRITENOP // always 0
390   AM_RANGE(0x8180, 0x8181) AM_WRITE(sengokmj_out_w)
406   AM_RANGE(0x8180, 0x8181) AM_WRITE(out_w)
391407   AM_RANGE(0x8140, 0x8141) AM_WRITE(mahjong_panel_w)
392408   AM_RANGE(0xc000, 0xc001) AM_READ_PORT("DSW1")
393409   AM_RANGE(0xc002, 0xc003) AM_READ(mahjong_panel_r)
394   AM_RANGE(0xc004, 0xc005) AM_READ(sengokmj_system_r) //switches
410   AM_RANGE(0xc004, 0xc005) AM_READ(system_r) //switches
395411ADDRESS_MAP_END
396412
397413
r243349r243350
538554   GFXDECODE_ENTRY( "tx_gfx", 0, charlayout, 0x700, 0x10 ) /* Text */
539555GFXDECODE_END
540556
541INTERRUPT_GEN_MEMBER(sengokmj_state::sengokmj_interrupt)
557INTERRUPT_GEN_MEMBER(sengokmj_state::interrupt)
542558{
543559   device.execute().set_input_line_and_vector(0,HOLD_LINE,0xc8/4);
544560}
r243349r243350
560576   MCFG_CPU_ADD("maincpu", V30, 16000000/2) /* V30-8 */
561577   MCFG_CPU_PROGRAM_MAP(sengokmj_map)
562578   MCFG_CPU_IO_MAP(sengokmj_io_map)
563   MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state,  sengokmj_interrupt)
579   MCFG_CPU_VBLANK_INT_DRIVER("screen", sengokmj_state,  interrupt)
564580
565581   SEIBU_SOUND_SYSTEM_CPU(14318180/4)
566582
r243349r243350
572588   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
573589   MCFG_SCREEN_SIZE(64*8, 32*8)
574590   MCFG_SCREEN_VISIBLE_AREA(0, 320-1, 16, 256-1) //TODO: dynamic resolution
575   MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update_sengokmj)
591   MCFG_SCREEN_UPDATE_DRIVER(sengokmj_state, screen_update)
576592   MCFG_SCREEN_PALETTE("palette")
577593
578594   MCFG_DEVICE_ADD("crtc", SEIBU_CRTC, 0)
r243349r243350
624640   ROM_LOAD( "rs006.89", 0x000, 0x200, CRC(96f7646e) SHA1(400a831b83d6ac4d2a46ef95b97b1ee237099e44) ) /* Priority */
625641ROM_END
626642
627GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS )
643GAME( 1991, sengokmj, 0, sengokmj, sengokmj, driver_device, 0, ROT0, "Sigma", "Sengoku Mahjong [BET] (Japan)", GAME_IMPERFECT_GRAPHICS | GAME_SUPPORTS_SAVE )
628644/*Non-Bet Version?*/


Previous 199869 Revisions Next


© 1997-2024 The MAME Team