trunk/src/mame/video/namcos22.c
| r21718 | r21719 | |
| 1623 | 1623 | #endif |
| 1624 | 1624 | /* |
| 1625 | 1625 | 0x980000: 00060000 00010000 02ff0000 000007ff |
| 1626 | | ^ enable bits, 7 = disable |
| 1626 | ^ misc control |
| 1627 | 1627 | ^^^^ base |
| 1628 | 1628 | ^^^^ base + num sprites |
| 1629 | 1629 | ^^^^ ^^^^ deltax |
| r21718 | r21719 | |
| 1643 | 1643 | additional sorting/color data for sprite at 0x9a0000 |
| 1644 | 1644 | */ |
| 1645 | 1645 | |
| 1646 | | /* 'enable' bits function: |
| 1647 | | bit 0: sprites on? |
| 1646 | /* misc control bits function: |
| 1647 | bit 0: sprites on |
| 1648 | 1648 | bit 1: ??? (always set, except in alpinr2b. it's not x-resolution) |
| 1649 | 1649 | bit 2: y-resolution? (always set, except in cybrcycc) |
| 1650 | | all bits set means off (aquajet) */ |
| 1651 | | int enable = spriteram32[0]>>16&5; |
| 1650 | */ |
| 1651 | int sprites_on = (spriteram32[0]>>16 & 1) ? 0 : 1; |
| 1652 | int y_lowres = (spriteram32[0]>>16 & 4) ? 0 : 1; |
| 1652 | 1653 | |
| 1653 | | int y_lowres = (enable & 4) ? 0 : 1; |
| 1654 | | |
| 1655 | 1654 | int deltax = (spriteram32[1]&0xffff) + (spriteram32[2]&0xffff) + 0x2d; |
| 1656 | 1655 | int deltay = (spriteram32[3]>>16) + (0x2a >> y_lowres); |
| 1657 | 1656 | |
| 1658 | 1657 | int base = spriteram32[0] & 0xffff; // alpinesa/alpinr2b |
| 1659 | 1658 | int num_sprites = ((spriteram32[1]>>16) - base) + 1; |
| 1660 | 1659 | |
| 1661 | | if( num_sprites > 0 && num_sprites < 0x400 && enable != 5 ) |
| 1660 | if( sprites_on && num_sprites > 0 && num_sprites < 0x400 ) |
| 1662 | 1661 | { |
| 1663 | 1662 | pSource = &spriteram32[0x04000/4 + base*4]; |
| 1664 | 1663 | pPal = &spriteram32[0x20000/4 + base*2]; |
| r21718 | r21719 | |
| 1670 | 1669 | 0x940000 -x------ sprite chip busy? |
| 1671 | 1670 | 0x940018 xxxx---- clr.w $940018.l |
| 1672 | 1671 | |
| 1673 | | 0x940030 xxxxxxxx 0x0600000 - enable bits? |
| 1672 | 0x940030 xxxxxxxx 0x0600000 - misc control |
| 1674 | 1673 | 0x940034 xxxxxxxx 0x3070b0f |
| 1675 | 1674 | |
| 1676 | 1675 | 0x940040 xxxxxxxx sprite attribute size high bit means busy? |
| r21718 | r21719 | |
| 1681 | 1680 | 0x940060..0x94007c set#2 |
| 1682 | 1681 | */ |
| 1683 | 1682 | |
| 1683 | sprites_on = (state->m_vics_control[0x30/4]>>24 & 1) ? 0 : 1; |
| 1684 | y_lowres = (state->m_vics_control[0x30/4]>>24 & 4) ? 0 : 1; |
| 1685 | |
| 1684 | 1686 | // where do the games store the number of sprites to be processed by vics??? |
| 1685 | 1687 | // the current default implementation (using spritelist size) is clearly wrong and causes problems in dirtdash and airco22b |
| 1686 | 1688 | num_sprites = state->m_vics_control[0x40/4] >> 4 & 0x1ff; // no +1 |
| r21718 | r21719 | |
| 1689 | 1691 | if (state->m_gametype == NAMCOS22_DIRT_DASH) |
| 1690 | 1692 | num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0x4000)/4] & 0xff) + 1; |
| 1691 | 1693 | |
| 1692 | | if( num_sprites > 0 ) |
| 1694 | if( sprites_on && num_sprites > 0 ) |
| 1693 | 1695 | { |
| 1694 | 1696 | pSource = &state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]; |
| 1695 | 1697 | pPal = &state->m_vics_data[(state->m_vics_control[0x58/4]&0xffff)/4]; |
| r21718 | r21719 | |
| 1701 | 1703 | // airco22b number of sprites for set#2 is stored in set#1 - it does not use set 1, or main set for sprites |
| 1702 | 1704 | if (state->m_gametype == NAMCOS22_AIR_COMBAT22) |
| 1703 | 1705 | { |
| 1704 | | enable = state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]>>16&5; |
| 1705 | | if (enable != 5) |
| 1706 | | num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4+1]>>16)+1; |
| 1707 | | else |
| 1708 | | num_sprites = 0; |
| 1706 | sprites_on = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4]>>16&1) ? 0 : 1; |
| 1707 | num_sprites = (state->m_vics_data[(state->m_vics_control[0x48/4]&0xffff)/4+1]>>16)+1; |
| 1709 | 1708 | } |
| 1710 | 1709 | |
| 1711 | | if( num_sprites > 0 ) |
| 1710 | if( sprites_on && num_sprites > 0 ) |
| 1712 | 1711 | { |
| 1713 | 1712 | pSource = &state->m_vics_data[(state->m_vics_control[0x68/4]&0xffff)/4]; |
| 1714 | 1713 | pPal = &state->m_vics_data[(state->m_vics_control[0x78/4]&0xffff)/4]; |