trunk/src/mame/drivers/namcos22.c
| r21542 | r21543 | |
| 5257 | 5257 | COMBINE_DATA(&m_su_82); |
| 5258 | 5258 | } |
| 5259 | 5259 | |
| 5260 | | // for MCU BIOS v1.30 |
| 5260 | // for MCU BIOS v1.20/v1.30 |
| 5261 | 5261 | READ16_MEMBER(namcos22_state::mcu130_speedup_r) |
| 5262 | 5262 | { |
| 5263 | 5263 | if ((space.device().safe_pc() == 0xc12a) && (!(m_su_82 & 0xff00))) |
| r21542 | r21543 | |
| 5289 | 5289 | static void install_130_speedup(running_machine &machine) |
| 5290 | 5290 | { |
| 5291 | 5291 | namcos22_state *state = machine.driver_data<namcos22_state>(); |
| 5292 | | // install speedup cheat for 1.30 MCU BIOS |
| 5292 | // install speedup cheat for 1.20/1.30 MCU BIOS |
| 5293 | 5293 | if (MCU_SPEEDUP) |
| 5294 | 5294 | state->m_mcu->space(AS_PROGRAM).install_readwrite_handler(0x82, 0x83, read16_delegate(FUNC(namcos22_state::mcu130_speedup_r),state), write16_delegate(FUNC(namcos22_state::mcu_speedup_w),state)); |
| 5295 | 5295 | } |
| r21542 | r21543 | |
| 5363 | 5363 | namcos22_init(machine(), NAMCOS22_AIR_COMBAT22); |
| 5364 | 5364 | |
| 5365 | 5365 | // S22-BIOS ver1.20 namco all rights reserved 94/12/21 |
| 5366 | install_130_speedup(machine()); |
| 5366 | 5367 | } |
| 5367 | 5368 | |
| 5368 | 5369 | DRIVER_INIT_MEMBER(namcos22_state,propcycl) |
| r21542 | r21543 | |
| 5511 | 5512 | /* Super System22 games */ |
| 5512 | 5513 | GAME( 1994, alpinerd, 0, namcos22s, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.D)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) |
| 5513 | 5514 | GAME( 1994, alpinerc, alpinerd, namcos22s, alpiner, namcos22_state, alpiner, ROT0, "Namco", "Alpine Racer (Rev. AR2 Ver.C)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) |
| 5514 | | GAME( 1995, airco22b, 0, namcos22s, airco22, namcos22_state, airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // boots but missing sprite clear DMA? |
| 5515 | GAME( 1995, airco22b, 0, namcos22s, airco22, namcos22_state, airco22, ROT0, "Namco", "Air Combat 22 (Rev. ACS1 Ver.B, Japan)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS|GAME_NOT_WORKING ) // various problems |
| 5515 | 5516 | GAME( 1995, cybrcycc, 0, namcos22s, cybrcycc, namcos22_state, cybrcyc, ROT0, "Namco", "Cyber Cycles (Rev. CB2 Ver.C)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 95/04/04 |
| 5516 | 5517 | GAME( 1995, dirtdash, 0, namcos22s, dirtdash, namcos22_state, dirtdash, ROT0, "Namco", "Dirt Dash (Rev. DT2)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 95/12/20 20:01:56 |
| 5517 | 5518 | GAME( 1995, timecris, 0, timecris, timecris, namcos22_state, timecris, ROT0, "Namco", "Time Crisis (Rev. TS2 Ver.B)" , GAME_IMPERFECT_SOUND|GAME_IMPERFECT_GRAPHICS ) // 96/04/02 18:48:00 |
trunk/src/mame/video/namcos22.c
| r21542 | r21543 | |
| 7 | 7 | * - texture u/v mapping is often 1 pixel off, resulting in many glitch lines/gaps between textures |
| 8 | 8 | * - tokyowar tanks are not shootable, same for timecris helicopter, there's still a very small hitbox but almost impossible to hit |
| 9 | 9 | * (is this related to dsp? or cpu?) |
| 10 | | * - find out how/where vics num_sprites is determined exactly, it causes major sprite problems in airco22b |
| 11 | | * dirtdash would have this issue too, if not for the current workaround |
| 10 | * - find out how/where vics num_sprites is determined exactly, currently a workaround is needed for airco22b and dirtdash |
| 12 | 11 | * - improve ss22 fogging: |
| 13 | 12 | * + scene changes too rapidly sometimes, eg. dirtdash snow level finish (see attract), or aquajet going down the waterfall |
| 14 | 13 | * + 100% fog if you start dirtdash at the hill level |
| r21542 | r21543 | |
| 1622 | 1621 | } |
| 1623 | 1622 | if (machine.input().code_pressed(KEYCODE_S)) |
| 1624 | 1623 | popmessage("%s",msg1); |
| 1625 | | else popmessage("[S] shows spite/vics regs"); |
| 1624 | else popmessage("[S] shows sprite/vics regs"); |
| 1626 | 1625 | #endif |
| 1627 | 1626 | /* |
| 1628 | 1627 | 0x980000: 00060000 00010000 02ff0000 000007ff |
| r21542 | r21543 | |
| 1647 | 1646 | */ |
| 1648 | 1647 | |
| 1649 | 1648 | /* 'enable' bits function: |
| 1650 | | bit 0: affects spritecount by 1? (alpinr2b) |
| 1649 | bit 0: sprites on? |
| 1651 | 1650 | bit 1: ??? (always set, except in alpinr2b. it's not x-resolution) |
| 1652 | 1651 | bit 2: y-resolution? (always set, except in cybrcycc) |
| 1653 | 1652 | all bits set means off (aquajet) */ |
| 1654 | | int enable = spriteram32[0]>>16&7; |
| 1653 | int enable = spriteram32[0]>>16&5; |
| 1655 | 1654 | |
| 1656 | 1655 | int y_lowres = (enable & 4) ? 0 : 1; |
| 1657 | 1656 | |
| r21542 | r21543 | |
| 1659 | 1658 | int deltay = (spriteram32[3]>>16) + (0x2a >> y_lowres); |
| 1660 | 1659 | |
| 1661 | 1660 | int base = spriteram32[0] & 0xffff; // alpinesa/alpinr2b |
| 1662 | | int num_sprites = (spriteram32[1]>>16) - base; |
| 1663 | | num_sprites += (~enable & 1); |
| 1661 | int num_sprites = ((spriteram32[1]>>16) - base) + 1; |
| 1664 | 1662 | |
| 1665 | | if( num_sprites > 0 && num_sprites < 0x400 && enable != 7 ) |
| 1663 | if( num_sprites > 0 && num_sprites < 0x400 && enable != 5 ) |
| 1666 | 1664 | { |
| 1667 | 1665 | pSource = &spriteram32[0x04000/4 + base*4]; |
| 1668 | 1666 | pPal = &spriteram32[0x20000/4 + base*2]; |
| r21542 | r21543 | |
| 1690 | 1688 | num_sprites = state->m_vics_control[0x40/4] >> 4 & 0x1ff; // no +1 |
| 1691 | 1689 | |
| 1692 | 1690 | // dirtdash sprite list starts at xxx4, number of sprites is stored in xxx0, it doesn't use set#2 |
| 1693 | | if (state->m_gametype == NAMCOS22_DIRT_DASH) num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0x4000)/4] & 0xff) + 1; |
| 1691 | if (state->m_gametype == NAMCOS22_DIRT_DASH) |
| 1692 | num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0x4000)/4] & 0xff) + 1; |
| 1694 | 1693 | |
| 1695 | 1694 | if( num_sprites > 0 ) |
| 1696 | 1695 | { |
| r21542 | r21543 | |
| 1700 | 1699 | } |
| 1701 | 1700 | |
| 1702 | 1701 | num_sprites = state->m_vics_control[0x60/4] >> 4 & 0x1ff; // no +1 |
| 1702 | |
| 1703 | // airco22b number of sprites for set#2 is stored in set#1 - it does not use set 1, or main set for sprites |
| 1704 | if (state->m_gametype == NAMCOS22_AIR_COMBAT22) |
| 1705 | { |
| 1706 | enable = state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]>>16&5; |
| 1707 | if (enable != 5) |
| 1708 | num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4+1]>>16)+1; |
| 1709 | else |
| 1710 | num_sprites = 0; |
| 1711 | } |
| 1712 | |
| 1703 | 1713 | if( num_sprites > 0 ) |
| 1704 | 1714 | { |
| 1705 | 1715 | pSource = &state->m_vics_data[(state->m_vics_control[0x68/4]&0xffff)/4]; |