Previous 199869 Revisions Next

r36109 Wednesday 25th February, 2015 at 18:15:57 UTC by Osso
jchan.c: added save state support (nw)
[/branches/kale/src/mame/drivers]jchan.c

branches/kale/src/mame/drivers/jchan.c
r244620r244621
217217   UINT32* m_sprite_regs32_2;
218218   int m_irq_sub_enable;
219219
220   DECLARE_WRITE16_MEMBER(jchan_ctrl_w);
221   DECLARE_READ16_MEMBER(jchan_ctrl_r);
220   DECLARE_WRITE16_MEMBER(ctrl_w);
221   DECLARE_READ16_MEMBER(ctrl_r);
222222   DECLARE_WRITE16_MEMBER(main2sub_cmd_w);
223223   DECLARE_WRITE16_MEMBER(sub2main_cmd_w);
224   DECLARE_WRITE16_MEMBER(jchan_suprnova_sprite32_1_w);
225   DECLARE_WRITE16_MEMBER(jchan_suprnova_sprite32regs_1_w);
226   DECLARE_WRITE16_MEMBER(jchan_suprnova_sprite32_2_w);
227   DECLARE_WRITE16_MEMBER(jchan_suprnova_sprite32regs_2_w);
224   DECLARE_WRITE16_MEMBER(sknsspr_sprite32_1_w);
225   DECLARE_WRITE16_MEMBER(sknsspr_sprite32regs_1_w);
226   DECLARE_WRITE16_MEMBER(sknsspr_sprite32_2_w);
227   DECLARE_WRITE16_MEMBER(sknsspr_sprite32regs_2_w);
228228
229229   DECLARE_DRIVER_INIT(jchan);
230230   virtual void video_start();
231   UINT32 screen_update_jchan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
232   TIMER_DEVICE_CALLBACK_MEMBER(jchan_vblank);
231   
232   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
233   
234   TIMER_DEVICE_CALLBACK_MEMBER(vblank);
233235};
234236
235237
r244620r244621
248250//  if it is incorrect jchan2 will crash when
249251//  certain characters win/lose but no finish
250252//  move was performed
251TIMER_DEVICE_CALLBACK_MEMBER(jchan_state::jchan_vblank)
253TIMER_DEVICE_CALLBACK_MEMBER(jchan_state::vblank)
252254{
253255   int scanline = param;
254256
r244620r244621
276278
277279void jchan_state::video_start()
278280{
279   /* so we can use suprnova.c */
281   /* so we can use sknsspr.c */
280282   m_sprite_ram32_1 = auto_alloc_array(machine(), UINT32, 0x4000/4);
281283   m_sprite_ram32_2 = auto_alloc_array(machine(), UINT32, 0x4000/4);
282284
r244620r244621
288290
289291   m_spritegen1->skns_sprite_kludge(0,0);
290292   m_spritegen2->skns_sprite_kludge(0,0);
293   
294   save_item(NAME(m_irq_sub_enable));
295   save_pointer(NAME(m_sprite_ram32_1), 0x4000/4);
296   save_pointer(NAME(m_sprite_ram32_2), 0x4000/4);
297   save_pointer(NAME(m_sprite_regs32_1), 0x40/4);
298   save_pointer(NAME(m_sprite_regs32_2), 0x40/4);
291299}
292300
293301
r244620r244621
296304
297305
298306
299UINT32 jchan_state::screen_update_jchan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
307UINT32 jchan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
300308{
301309   int x,y;
302310   UINT16* src1;
r244620r244621
361369    $f00000 is the only location also written
362370*/
363371
364WRITE16_MEMBER(jchan_state::jchan_ctrl_w)
372WRITE16_MEMBER(jchan_state::ctrl_w)
365373{
366374   m_irq_sub_enable = data & 0x8000; // hack / guess!
367375}
368376
369READ16_MEMBER(jchan_state::jchan_ctrl_r)
377READ16_MEMBER(jchan_state::ctrl_r)
370378{
371379   switch(offset)
372380   {
r244620r244621
374382      case 2/2: return ioport("P2")->read();
375383      case 4/2: return ioport("SYSTEM")->read();
376384      case 6/2: return ioport("EXTRA")->read();
377      default: logerror("jchan_ctrl_r unknown!"); break;
385      default: logerror("ctrl_r unknown!"); break;
378386   }
379387   return m_ctrl[offset];
380388}
r244620r244621
400408}
401409
402410/* ram convert for suprnova (requires 32-bit stuff) */
403WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32_1_w)
411WRITE16_MEMBER(jchan_state::sknsspr_sprite32_1_w)
404412{
405413   COMBINE_DATA(&m_spriteram_1[offset]);
406414   offset>>=1;
407415   m_sprite_ram32_1[offset]=(m_spriteram_1[offset*2+1]<<16) | (m_spriteram_1[offset*2]);
408416}
409417
410WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32regs_1_w)
418WRITE16_MEMBER(jchan_state::sknsspr_sprite32regs_1_w)
411419{
412420   COMBINE_DATA(&m_sprregs_1[offset]);
413421   offset>>=1;
414422   m_sprite_regs32_1[offset]=(m_sprregs_1[offset*2+1]<<16) | (m_sprregs_1[offset*2]);
415423}
416424
417WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32_2_w)
425WRITE16_MEMBER(jchan_state::sknsspr_sprite32_2_w)
418426{
419427   COMBINE_DATA(&m_spriteram_2[offset]);
420428   offset>>=1;
421429   m_sprite_ram32_2[offset]=(m_spriteram_2[offset*2+1]<<16) | (m_spriteram_2[offset*2]);
422430}
423431
424WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32regs_2_w)
432WRITE16_MEMBER(jchan_state::sknsspr_sprite32regs_2_w)
425433{
426434   COMBINE_DATA(&m_sprregs_2[offset]);
427435   offset>>=1;
r244620r244621
443451   AM_RANGE(0x400000, 0x403fff) AM_RAM AM_SHARE("mainsub_shared")
444452
445453   /* 1st sprite layer */
446   AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE(jchan_suprnova_sprite32_1_w) AM_SHARE("spriteram_1")
447   AM_RANGE(0x600000, 0x60003f) AM_RAM_WRITE(jchan_suprnova_sprite32regs_1_w) AM_SHARE("sprregs_1")
454   AM_RANGE(0x500000, 0x503fff) AM_RAM_WRITE(sknsspr_sprite32_1_w) AM_SHARE("spriteram_1")
455   AM_RANGE(0x600000, 0x60003f) AM_RAM_WRITE(sknsspr_sprite32regs_1_w) AM_SHARE("sprregs_1")
448456
449457   AM_RANGE(0x700000, 0x70ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // palette for sprites?
450458
451   AM_RANGE(0xf00000, 0xf00007) AM_READWRITE(jchan_ctrl_r, jchan_ctrl_w) AM_SHARE("ctrl")
459   AM_RANGE(0xf00000, 0xf00007) AM_READWRITE(ctrl_r, ctrl_w) AM_SHARE("ctrl")
452460
453461   AM_RANGE(0xf80000, 0xf80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w)   // watchdog
454462ADDRESS_MAP_END
r244620r244621
465473   AM_RANGE(0x600000, 0x60001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device,  kaneko_tmap_regs_r, kaneko_tmap_regs_w)
466474
467475   /* background sprites */
468   AM_RANGE(0x700000, 0x703fff) AM_RAM_WRITE(jchan_suprnova_sprite32_2_w) AM_SHARE("spriteram_2")
469   AM_RANGE(0x780000, 0x78003f) AM_RAM_WRITE(jchan_suprnova_sprite32regs_2_w) AM_SHARE("sprregs_2")
476   AM_RANGE(0x700000, 0x703fff) AM_RAM_WRITE(sknsspr_sprite32_2_w) AM_SHARE("spriteram_2")
477   AM_RANGE(0x780000, 0x78003f) AM_RAM_WRITE(sknsspr_sprite32regs_2_w) AM_SHARE("sprregs_2")
470478
471479   AM_RANGE(0x800000, 0x800003) AM_DEVWRITE8("ymz", ymz280b_device, write, 0x00ff) // sound
472480
r244620r244621
583591
584592   MCFG_CPU_ADD("maincpu", M68000, 16000000)
585593   MCFG_CPU_PROGRAM_MAP(jchan_main)
586   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", jchan_state, jchan_vblank, "screen", 0, 1)
594   MCFG_TIMER_DRIVER_ADD_SCANLINE("scantimer", jchan_state, vblank, "screen", 0, 1)
587595
588596   MCFG_CPU_ADD("sub", M68000, 16000000)
589597   MCFG_CPU_PROGRAM_MAP(jchan_sub)
r244620r244621
596604   MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0))
597605   MCFG_SCREEN_SIZE(64*8, 64*8)
598606   MCFG_SCREEN_VISIBLE_AREA(0*8, 40*8-1, 0*8, 30*8-1)
599   MCFG_SCREEN_UPDATE_DRIVER(jchan_state, screen_update_jchan)
607   MCFG_SCREEN_UPDATE_DRIVER(jchan_state, screen_update)
600608   MCFG_SCREEN_PALETTE("palette")
601609
602610   MCFG_PALETTE_ADD("palette", 0x10000)
r244620r244621
714722
715723
716724/* game drivers */
717GAME( 1995, jchan,     0,        jchan,    jchan, jchan_state,    jchan,    ROT0, "Kaneko", "Jackie Chan - The Kung-Fu Master", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL)
718GAME( 1995, jchan2,    0,        jchan,    jchan2, jchan_state,   jchan,    ROT0, "Kaneko", "Jackie Chan in Fists of Fire", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL )
725GAME( 1995, jchan,     0,        jchan,    jchan, jchan_state,    jchan,    ROT0, "Kaneko", "Jackie Chan - The Kung-Fu Master", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )
726GAME( 1995, jchan2,    0,        jchan,    jchan2, jchan_state,   jchan,    ROT0, "Kaneko", "Jackie Chan in Fists of Fire", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL | GAME_SUPPORTS_SAVE )


Previous 199869 Revisions Next


© 1997-2024 The MAME Team