branches/kale/src/mame/drivers/jchan.c
| r244620 | r244621 | |
| 217 | 217 | UINT32* m_sprite_regs32_2; |
| 218 | 218 | int m_irq_sub_enable; |
| 219 | 219 | |
| 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); |
| 222 | 222 | DECLARE_WRITE16_MEMBER(main2sub_cmd_w); |
| 223 | 223 | 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); |
| 228 | 228 | |
| 229 | 229 | DECLARE_DRIVER_INIT(jchan); |
| 230 | 230 | 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); |
| 233 | 235 | }; |
| 234 | 236 | |
| 235 | 237 | |
| r244620 | r244621 | |
| 248 | 250 | // if it is incorrect jchan2 will crash when |
| 249 | 251 | // certain characters win/lose but no finish |
| 250 | 252 | // move was performed |
| 251 | | TIMER_DEVICE_CALLBACK_MEMBER(jchan_state::jchan_vblank) |
| 253 | TIMER_DEVICE_CALLBACK_MEMBER(jchan_state::vblank) |
| 252 | 254 | { |
| 253 | 255 | int scanline = param; |
| 254 | 256 | |
| r244620 | r244621 | |
| 276 | 278 | |
| 277 | 279 | void jchan_state::video_start() |
| 278 | 280 | { |
| 279 | | /* so we can use suprnova.c */ |
| 281 | /* so we can use sknsspr.c */ |
| 280 | 282 | m_sprite_ram32_1 = auto_alloc_array(machine(), UINT32, 0x4000/4); |
| 281 | 283 | m_sprite_ram32_2 = auto_alloc_array(machine(), UINT32, 0x4000/4); |
| 282 | 284 | |
| r244620 | r244621 | |
| 288 | 290 | |
| 289 | 291 | m_spritegen1->skns_sprite_kludge(0,0); |
| 290 | 292 | 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); |
| 291 | 299 | } |
| 292 | 300 | |
| 293 | 301 | |
| r244620 | r244621 | |
| 296 | 304 | |
| 297 | 305 | |
| 298 | 306 | |
| 299 | | UINT32 jchan_state::screen_update_jchan(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 307 | UINT32 jchan_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) |
| 300 | 308 | { |
| 301 | 309 | int x,y; |
| 302 | 310 | UINT16* src1; |
| r244620 | r244621 | |
| 361 | 369 | $f00000 is the only location also written |
| 362 | 370 | */ |
| 363 | 371 | |
| 364 | | WRITE16_MEMBER(jchan_state::jchan_ctrl_w) |
| 372 | WRITE16_MEMBER(jchan_state::ctrl_w) |
| 365 | 373 | { |
| 366 | 374 | m_irq_sub_enable = data & 0x8000; // hack / guess! |
| 367 | 375 | } |
| 368 | 376 | |
| 369 | | READ16_MEMBER(jchan_state::jchan_ctrl_r) |
| 377 | READ16_MEMBER(jchan_state::ctrl_r) |
| 370 | 378 | { |
| 371 | 379 | switch(offset) |
| 372 | 380 | { |
| r244620 | r244621 | |
| 374 | 382 | case 2/2: return ioport("P2")->read(); |
| 375 | 383 | case 4/2: return ioport("SYSTEM")->read(); |
| 376 | 384 | case 6/2: return ioport("EXTRA")->read(); |
| 377 | | default: logerror("jchan_ctrl_r unknown!"); break; |
| 385 | default: logerror("ctrl_r unknown!"); break; |
| 378 | 386 | } |
| 379 | 387 | return m_ctrl[offset]; |
| 380 | 388 | } |
| r244620 | r244621 | |
| 400 | 408 | } |
| 401 | 409 | |
| 402 | 410 | /* ram convert for suprnova (requires 32-bit stuff) */ |
| 403 | | WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32_1_w) |
| 411 | WRITE16_MEMBER(jchan_state::sknsspr_sprite32_1_w) |
| 404 | 412 | { |
| 405 | 413 | COMBINE_DATA(&m_spriteram_1[offset]); |
| 406 | 414 | offset>>=1; |
| 407 | 415 | m_sprite_ram32_1[offset]=(m_spriteram_1[offset*2+1]<<16) | (m_spriteram_1[offset*2]); |
| 408 | 416 | } |
| 409 | 417 | |
| 410 | | WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32regs_1_w) |
| 418 | WRITE16_MEMBER(jchan_state::sknsspr_sprite32regs_1_w) |
| 411 | 419 | { |
| 412 | 420 | COMBINE_DATA(&m_sprregs_1[offset]); |
| 413 | 421 | offset>>=1; |
| 414 | 422 | m_sprite_regs32_1[offset]=(m_sprregs_1[offset*2+1]<<16) | (m_sprregs_1[offset*2]); |
| 415 | 423 | } |
| 416 | 424 | |
| 417 | | WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32_2_w) |
| 425 | WRITE16_MEMBER(jchan_state::sknsspr_sprite32_2_w) |
| 418 | 426 | { |
| 419 | 427 | COMBINE_DATA(&m_spriteram_2[offset]); |
| 420 | 428 | offset>>=1; |
| 421 | 429 | m_sprite_ram32_2[offset]=(m_spriteram_2[offset*2+1]<<16) | (m_spriteram_2[offset*2]); |
| 422 | 430 | } |
| 423 | 431 | |
| 424 | | WRITE16_MEMBER(jchan_state::jchan_suprnova_sprite32regs_2_w) |
| 432 | WRITE16_MEMBER(jchan_state::sknsspr_sprite32regs_2_w) |
| 425 | 433 | { |
| 426 | 434 | COMBINE_DATA(&m_sprregs_2[offset]); |
| 427 | 435 | offset>>=1; |
| r244620 | r244621 | |
| 443 | 451 | AM_RANGE(0x400000, 0x403fff) AM_RAM AM_SHARE("mainsub_shared") |
| 444 | 452 | |
| 445 | 453 | /* 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") |
| 448 | 456 | |
| 449 | 457 | AM_RANGE(0x700000, 0x70ffff) AM_RAM_DEVWRITE("palette", palette_device, write) AM_SHARE("palette") // palette for sprites? |
| 450 | 458 | |
| 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") |
| 452 | 460 | |
| 453 | 461 | AM_RANGE(0xf80000, 0xf80001) AM_READWRITE(watchdog_reset16_r, watchdog_reset16_w) // watchdog |
| 454 | 462 | ADDRESS_MAP_END |
| r244620 | r244621 | |
| 465 | 473 | AM_RANGE(0x600000, 0x60001f) AM_DEVREADWRITE("view2_0", kaneko_view2_tilemap_device, kaneko_tmap_regs_r, kaneko_tmap_regs_w) |
| 466 | 474 | |
| 467 | 475 | /* 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") |
| 470 | 478 | |
| 471 | 479 | AM_RANGE(0x800000, 0x800003) AM_DEVWRITE8("ymz", ymz280b_device, write, 0x00ff) // sound |
| 472 | 480 | |
| r244620 | r244621 | |
| 583 | 591 | |
| 584 | 592 | MCFG_CPU_ADD("maincpu", M68000, 16000000) |
| 585 | 593 | 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) |
| 587 | 595 | |
| 588 | 596 | MCFG_CPU_ADD("sub", M68000, 16000000) |
| 589 | 597 | MCFG_CPU_PROGRAM_MAP(jchan_sub) |
| r244620 | r244621 | |
| 596 | 604 | MCFG_SCREEN_VBLANK_TIME(ATTOSECONDS_IN_USEC(0)) |
| 597 | 605 | MCFG_SCREEN_SIZE(64*8, 64*8) |
| 598 | 606 | 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) |
| 600 | 608 | MCFG_SCREEN_PALETTE("palette") |
| 601 | 609 | |
| 602 | 610 | MCFG_PALETTE_ADD("palette", 0x10000) |
| r244620 | r244621 | |
| 714 | 722 | |
| 715 | 723 | |
| 716 | 724 | /* game drivers */ |
| 717 | | GAME( 1995, jchan, 0, jchan, jchan, jchan_state, jchan, ROT0, "Kaneko", "Jackie Chan - The Kung-Fu Master", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL) |
| 718 | | GAME( 1995, jchan2, 0, jchan, jchan2, jchan_state, jchan, ROT0, "Kaneko", "Jackie Chan in Fists of Fire", GAME_IMPERFECT_GRAPHICS | GAME_NO_COCKTAIL ) |
| 725 | GAME( 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 ) |
| 726 | GAME( 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 ) |