trunk/hash/psx.xml
| r250227 | r250228 | |
| 2 | 2 | <!DOCTYPE softwarelist SYSTEM "softwarelist.dtd"> |
| 3 | 3 | <softwarelist name="psx" description="Sony Playstation CD-ROMs"> |
| 4 | 4 | |
| 5 | | <!-- Interactive CD Sampler Discs--> |
| 5 | <!-- todo, reconvert original dumps using current CHDMAN version - Feb 2014 --> |
| 6 | 6 | |
| 7 | | <!-- size="364872255" crc="536126e5" --> |
| 8 | | <software name="intcdv1m"> |
| 9 | | <description>Interactive CD Sampler Disc - Volume 01 (M Rated)</description> |
| 10 | | <year>1995</year> |
| 11 | | <publisher>SCEA</publisher> |
| 12 | | <part name="cdrom" interface="psx_cdrom"> |
| 13 | | <diskarea name="cdrom"> |
| 14 | | <disk name="Interactive CD Sampler Disc - Volume 1 (m rated)" sha1="4bc8e61f799ecd19c1b8207943eaab8359d34858"/> |
| 15 | | </diskarea> |
| 16 | | </part> |
| 17 | | </software> |
| 18 | | |
| 19 | | <!-- size="428110417" crc="48bd3d35" --> |
| 20 | | <software name="intcdv2"> |
| 21 | | <description>Interactive CD Sampler Disc - Volume 02</description> |
| 22 | | <year>1996</year> |
| 23 | | <publisher>SCEA</publisher> |
| 24 | | <part name="cdrom" interface="psx_cdrom"> |
| 25 | | <diskarea name="cdrom"> |
| 26 | | <disk name="Interactive CD Sampler Disc - Volume 2" sha1="5801f9972e483b9e2a7f316796b57b74d8baa5e7"/> |
| 27 | | </diskarea> |
| 28 | | </part> |
| 29 | | </software> |
| 30 | | |
| 31 | | <!-- size="476195663" crc="fb8d356b" --> |
| 32 | | <software name="intcdv30"> |
| 33 | | <description>Interactive CD Sampler Disc - Volume 03 (1.0)</description> |
| 34 | | <year>1996</year> |
| 35 | | <publisher>SCEA</publisher> |
| 36 | | <part name="cdrom" interface="psx_cdrom"> |
| 37 | | <diskarea name="cdrom"> |
| 38 | | <disk name="Interactive CD Sampler Disc - Volume 3 (1.0)" sha1="f82e72d70b10badb35a91a09950d0d89db50855c"/> |
| 39 | | </diskarea> |
| 40 | | </part> |
| 41 | | </software> |
| 42 | | |
| 43 | | <!-- size="487436207" crc="336304eb" --> |
| 44 | | <software name="intcdv31"> |
| 45 | | <description>Interactive CD Sampler Disc - Volume 03 (1.1)</description> |
| 46 | | <year>1996</year> |
| 47 | | <publisher>SCEA</publisher> |
| 48 | | <part name="cdrom" interface="psx_cdrom"> |
| 49 | | <diskarea name="cdrom"> |
| 50 | | <disk name="Interactive CD Sampler Disc - Volume 3 (1.1)" sha1="5f6fa89b8c9b31b3dabdc7ac06806bc721d2aa16"/> |
| 51 | | </diskarea> |
| 52 | | </part> |
| 53 | | </software> |
| 54 | | |
| 55 | | <!-- size="487436203" crc="d96b31d2" --> |
| 56 | | <software name="intcdv32"> |
| 57 | | <description>Interactive CD Sampler Disc - Volume 03 (1.2)</description> |
| 58 | | <year>1996</year> |
| 59 | | <publisher>SCEA</publisher> |
| 60 | | <part name="cdrom" interface="psx_cdrom"> |
| 61 | | <diskarea name="cdrom"> |
| 62 | | <disk name="Interactive CD Sampler Disc - Volume 3 (1.2)" sha1="20f261877d3f63bd9215ca791800417ff7287e46"/> |
| 63 | | </diskarea> |
| 64 | | </part> |
| 65 | | </software> |
| 66 | | |
| 67 | | <!-- size="354903558" crc="67ca3059" --> |
| 68 | | <software name="intcdv4"> |
| 69 | | <description>Interactive CD Sampler Disc - Volume 04</description> |
| 70 | | <year>1997</year> |
| 71 | | <publisher>SCEA</publisher> |
| 72 | | <part name="cdrom" interface="psx_cdrom"> |
| 73 | | <diskarea name="cdrom"> |
| 74 | | <disk name="Interactive CD Sampler Disc - Volume 4" sha1="c353a52e8b7831f11d3ce8ea771e865e9ba3431a"/> |
| 75 | | </diskarea> |
| 76 | | </part> |
| 77 | | </software> |
| 78 | | |
| 79 | | <!-- size="291855185" crc="8119ed78" --> |
| 80 | | <software name="intcdv5"> |
| 81 | | <description>Interactive CD Sampler Disc - Volume 05</description> |
| 82 | | <year>1997</year> |
| 83 | | <publisher>SCEA</publisher> |
| 84 | | <part name="cdrom" interface="psx_cdrom"> |
| 85 | | <diskarea name="cdrom"> |
| 86 | | <disk name="Interactive CD Sampler Disc - Volume 5" sha1="9aef2ff7583b61d24302a35831a25ed5549610e1"/> |
| 87 | | </diskarea> |
| 88 | | </part> |
| 89 | | </software> |
| 90 | | |
| 91 | | <!-- size="427620748" crc="917b5f35" --> |
| 92 | | <software name="intcdv6"> |
| 93 | | <description>Interactive CD Sampler Disc - Volume 06</description> |
| 94 | | <year>1998</year> |
| 95 | | <publisher>SCEA</publisher> |
| 96 | | <part name="cdrom" interface="psx_cdrom"> |
| 97 | | <diskarea name="cdrom"> |
| 98 | | <disk name="Interactive CD Sampler Disc - Volume 6" sha1="c35833fdd8a46016b3ccafa9ae08f68c10309737"/> |
| 99 | | </diskarea> |
| 100 | | </part> |
| 101 | | </software> |
| 102 | | |
| 103 | | <!-- size="397092409" crc="17f17815" --> |
| 104 | | <software name="intcdv7"> |
| 105 | | <description>Interactive CD Sampler Disc - Volume 07</description> |
| 106 | | <year>1998</year> |
| 107 | | <publisher>SCEA</publisher> |
| 108 | | <part name="cdrom" interface="psx_cdrom"> |
| 109 | | <diskarea name="cdrom"> |
| 110 | | <disk name="Interactive CD Sampler Disc - Volume 7" sha1="81db574e4599e022cfac938516cff29bb09d1388"/> |
| 111 | | </diskarea> |
| 112 | | </part> |
| 113 | | </software> |
| 114 | | |
| 115 | | <!-- size="420000809" crc="91d8b335" --> |
| 116 | | <software name="intcdv8"> |
| 117 | | <description>Interactive CD Sampler Disc - Volume 08</description> |
| 118 | | <year>1998</year> |
| 119 | | <publisher>SCEA</publisher> |
| 120 | | <part name="cdrom" interface="psx_cdrom"> |
| 121 | | <diskarea name="cdrom"> |
| 122 | | <disk name="Interactive CD Sampler Disc - Volume 8" sha1="7f23e2d284a104e6914d34527960567111914264"/> |
| 123 | | </diskarea> |
| 124 | | </part> |
| 125 | | </software> |
| 126 | | |
| 127 | | <!-- size="389598196" crc="993e0ab1" --> |
| 128 | | <software name="intcdv9"> |
| 129 | | <description>Interactive CD Sampler Disc - Volume 09</description> |
| 130 | | <year>1998</year> |
| 131 | | <publisher>SCEA</publisher> |
| 132 | | <part name="cdrom" interface="psx_cdrom"> |
| 133 | | <diskarea name="cdrom"> |
| 134 | | <disk name="Interactive CD Sampler Disc - Volume 9" sha1="286559ce34f06a7f2eb2b441e9188da0e158d107"/> |
| 135 | | </diskarea> |
| 136 | | </part> |
| 137 | | </software> |
| 138 | | |
| 139 | | <!-- size="365007076" crc="5f5fd01f" --> |
| 140 | | <software name="intcdv10"> |
| 141 | | <description>Interactive CD Sampler Disc - Volume 10</description> |
| 142 | | <year>1999</year> |
| 143 | | <publisher>SCEA</publisher> |
| 144 | | <part name="cdrom" interface="psx_cdrom"> |
| 145 | | <diskarea name="cdrom"> |
| 146 | | <disk name="Interactive CD Sampler Disc - Volume 10" sha1="8c414a1e26ac98d07f774cc8b16eb2fa8da0ca61"/> |
| 147 | | </diskarea> |
| 148 | | </part> |
| 149 | | </software> |
| 150 | | |
| 151 | | <!-- size="272935197" crc="82e6fdf0" --> |
| 152 | | <software name="intcdv11"> |
| 153 | | <description>Interactive CD Sampler Disc - Volume 11</description> |
| 154 | | <year>1999</year> |
| 155 | | <publisher>SCEA</publisher> |
| 156 | | <part name="cdrom" interface="psx_cdrom"> |
| 157 | | <diskarea name="cdrom"> |
| 158 | | <disk name="Interactive CD Sampler Disc - Volume 11" sha1="3029004840d98c2789d2a0d93bdd762b3c56df0f"/> |
| 159 | | </diskarea> |
| 160 | | </part> |
| 161 | | </software> |
| 162 | | |
| 163 | | <!-- size="149681460" crc="99551669" --> |
| 164 | | <software name="intcdtru"> |
| 165 | | <description>Toys R Us - Interactive CD Sampler Disc</description> |
| 166 | | <year>1998</year> |
| 167 | | <publisher>SCEA</publisher> |
| 168 | | <part name="cdrom" interface="psx_cdrom"> |
| 169 | | <diskarea name="cdrom"> |
| 170 | | <disk name="Toys R Us - Interactive CD Sampler Disc" sha1="4abae391a7ad1e38c2ee7cbd7401caebcf091df3"/> |
| 171 | | </diskarea> |
| 172 | | </part> |
| 173 | | </software> |
| 174 | | |
| 175 | | <!-- size="93662349" crc="59bd7278" --> |
| 176 | | <software name="intcdff7"> |
| 177 | | <description>Final Fantasy VII Interactive Sampler CD</description> |
| 178 | | <year>1996</year> |
| 179 | | <publisher>SCEA</publisher> |
| 180 | | <part name="cdrom" interface="psx_cdrom"> |
| 181 | | <diskarea name="cdrom"> |
| 182 | | <disk name="Final Fantasy VII Interactive Sampler CD" sha1="0a88439b32be5172e79847f79ae33b6ba22b1de6"/> |
| 183 | | </diskarea> |
| 184 | | </part> |
| 185 | | </software> |
| 186 | | |
| 187 | 7 | <!-- |
| 188 | 8 | *********************** |
| 189 | 9 | NON-REDUMP Rips |
| r250227 | r250228 | |
| 207 | 27 | that subtle errors are introduced either in this procedure, or in the original creation of the mdf/mds/cdi image. These should |
| 208 | 28 | be verified with the original media, and are marked as bad dumps. |
| 209 | 29 | --> |
| 210 | | <!-- todo, reconvert original dumps using current CHDMAN version - Feb 2014 --> |
| 211 | 30 | |
| 31 | |
| 212 | 32 | <!-- Pirate disks --> |
| 213 | 33 | |
| 214 | 34 | <software name="ddrdmp" supported="no"> |
trunk/src/mame/drivers/namcos23.cpp
| r250227 | r250228 | |
| 86 | 86 | return |
| 87 | 87 | |
| 88 | 88 | |
| 89 | | c8000000: |
| 90 | | 8011e384: |
| 91 | | if((a2000000.w & 0xfff0 != 0x0080) (c417_r, 808e or 008e) |
| 92 | | +10.w = 2 |
| 93 | | +16.w = 42 |
| 94 | | +16.w = 23c0 |
| 95 | | +10.w = 3 |
| 96 | | 801deaf0.w *0x28 -> +12.w (fixed) |
| 97 | | |
| 98 | | |
| 99 | | |
| 100 | | |
| 101 | | ':maincpu' (801142FC): unmapped program memory write to 0C800010 = 00020000 & FFFF0000 |
| 102 | | ':maincpu' (801143A8): unmapped program memory write to 0C800010 = 00020000 & FFFF0000 |
| 103 | | ':maincpu' (801143B4): unmapped program memory write to 0C800014 = 00000042 & 0000FFFF |
| 104 | | ':maincpu' (801143C0): unmapped program memory write to 0C800014 = 000023C0 & 0000FFFF |
| 105 | | ':maincpu' (801143CC): unmapped program memory write to 0C800010 = 00030000 & FFFF0000 |
| 106 | | ':maincpu' (801143E0): unmapped program memory write to 0C800010 = 00000000 & 0000FFFF |
| 107 | | ':maincpu' (801143E0): unmapped program memory write to 0C800010 = 00000000 & 0000FFFF |
| 108 | | ':maincpu' (801143E0): unmapped program memory write to 0C800010 = 00000000 & 0000FFFF |
| 109 | | ':maincpu' (801143E0): unmapped program memory write to 0C800010 = 00000000 & 0000FFFF |
| 110 | | |
| 111 | 89 | **************************************************************************** |
| 112 | 90 | |
| 113 | 91 | Namco System 23 and Super System 23 Hardware Overview (last updated 7th April 2013 at 12.49am) |
| r250227 | r250228 | |
| 1545 | 1523 | DECLARE_WRITE16_MEMBER(iob_p6_w); |
| 1546 | 1524 | DECLARE_READ8_MEMBER(iob_gun_r); |
| 1547 | 1525 | DECLARE_READ16_MEMBER(iob_analog_r); |
| 1548 | | DECLARE_WRITE16_MEMBER(c435_state_pio_w); |
| 1549 | | DECLARE_WRITE16_MEMBER(c435_state_reset_w); |
| 1550 | 1526 | DECLARE_DRIVER_INIT(s23); |
| 1551 | 1527 | TILE_GET_INFO_MEMBER(TextTilemapGetInfo); |
| 1552 | 1528 | DECLARE_VIDEO_START(s23); |
| r250227 | r250228 | |
| 1561 | 1537 | UINT16 nthword(const UINT32 *pSource, int offs); |
| 1562 | 1538 | inline INT32 u32_to_s24(UINT32 v); |
| 1563 | 1539 | inline INT32 u32_to_s10(UINT32 v); |
| 1564 | | float f24_to_f32(UINT32 v); |
| 1565 | | |
| 1566 | 1540 | INT32 *c435_getv(UINT16 id); |
| 1567 | 1541 | INT16 *c435_getm(UINT16 id); |
| 1568 | 1542 | |
| 1569 | | void c435_state_set_interrupt(const UINT16 *param); |
| 1570 | | void c435_state_set_projection_matrix_line(const UINT16 *param); |
| 1571 | | void c435_state_set(UINT16 type, const UINT16 *param); |
| 1572 | | int c435_get_state_entry_size(UINT16 type); |
| 1573 | | |
| 1574 | 1543 | void c435_matrix_matrix_mul(); |
| 1575 | 1544 | void c435_matrix_set(); |
| 1576 | 1545 | void c435_vector_set(); |
| 1577 | 1546 | void c435_matrix_vector_mul(); |
| 1578 | 1547 | void c435_vector_matrix_mul(); |
| 1579 | | void c435_state_set(); |
| 1580 | 1548 | void c435_scaling_set(); |
| 1549 | void c435_state_set_interrupt(); |
| 1550 | void c435_state_set(); |
| 1581 | 1551 | void c435_render(); |
| 1582 | 1552 | void c435_flush(); |
| 1583 | 1553 | |
| r250227 | r250228 | |
| 1632 | 1602 | return v & 0x200 ? v | 0xfffffe00 : v & 0x1ff; |
| 1633 | 1603 | } |
| 1634 | 1604 | |
| 1635 | | float namcos23_state::f24_to_f32(UINT32 v) |
| 1636 | | { |
| 1637 | | // 8 bits exponent, 16 mantissa |
| 1638 | | // mantissa is 16-bits signed, 2-complement |
| 1639 | | // value is m * 2**(e-46) |
| 1640 | | // 1 is e=32, m=0x4000, -1 is e=31, m=0x8000 |
| 1641 | 1605 | |
| 1642 | | // This code turns it into a standard float |
| 1643 | | if(!v) |
| 1644 | | return 0; |
| 1645 | | |
| 1646 | | UINT32 r = v & 0x8000 ? 0x80000000 : 0; |
| 1647 | | UINT16 m = r ? -v : v; |
| 1648 | | UINT8 e = (v >> 16) + 0x60; |
| 1649 | | while(!(m & 0x8000)) { |
| 1650 | | m <<= 1; |
| 1651 | | e--; |
| 1652 | | } |
| 1653 | | |
| 1654 | | r = r | (e << 23) | ((m & 0x7fff) << 8); |
| 1655 | | return *(float *)&r; |
| 1656 | | } |
| 1657 | | |
| 1658 | 1606 | INLINE UINT8 light(UINT8 c, float l) |
| 1659 | 1607 | { |
| 1660 | 1608 | if(l < 1) |
| r250227 | r250228 | |
| 1684 | 1632 | return m_matrices[id]; |
| 1685 | 1633 | } |
| 1686 | 1634 | |
| 1687 | | void namcos23_state::c435_state_set_interrupt(const UINT16 *param) |
| 1688 | | { |
| 1689 | | if(param[0] & 1) |
| 1690 | | update_main_interrupts(m_main_irqcause | MAIN_C435_IRQ); |
| 1691 | | else |
| 1692 | | update_main_interrupts(m_main_irqcause & ~MAIN_C435_IRQ); |
| 1693 | | } |
| 1694 | | |
| 1695 | | void namcos23_state::c435_state_set_projection_matrix_line(const UINT16 *param) |
| 1696 | | { |
| 1697 | | // timecrs2: |
| 1698 | | // sx = 640/2, sy = 480/2, t = tan(fov/2) (fov=45 degrees) |
| 1699 | | // line 1: 1 0 -(sx-a)/(sx/t) 0 -1 0 -(sx+a)/(sx/t) 0 |
| 1700 | | // line 2: 0 1 -(sy-b)/(sx/t) 0 0 -1 -(sy+b)/(sx/t) 0 |
| 1701 | | // line 3: 0 0 -1 c 0 0 0 sx/t |
| 1702 | | |
| 1703 | | char buf[4096]; |
| 1704 | | char *p = buf; |
| 1705 | | p += sprintf(p, "projection matrix line:"); |
| 1706 | | for(int i=0; i<8; i++) |
| 1707 | | p += sprintf(p, " %f", f24_to_f32((param[2*i+1] << 16) | param[2*i+2])); |
| 1708 | | p += sprintf(p, "\n"); |
| 1709 | | logerror(buf); |
| 1710 | | } |
| 1711 | | |
| 1712 | | void namcos23_state::c435_state_set(UINT16 type, const UINT16 *param) |
| 1713 | | { |
| 1714 | | switch(type) { |
| 1715 | | case 0x0001: c435_state_set_interrupt(param); break; |
| 1716 | | case 0x00c8: c435_state_set_projection_matrix_line(param); break; |
| 1717 | | default: { |
| 1718 | | char buf[4096]; |
| 1719 | | char *p = buf; |
| 1720 | | p += sprintf(buf, "WARNING: Unhandled state type %04x :", type); |
| 1721 | | for(int i=0; i<c435_get_state_entry_size(type); i++) |
| 1722 | | p += sprintf(p, " %04x", param[i]); |
| 1723 | | p += sprintf(p, "\n"); |
| 1724 | | logerror(buf); |
| 1725 | | break; |
| 1726 | | } |
| 1727 | | } |
| 1728 | | } |
| 1729 | | |
| 1730 | | WRITE16_MEMBER(namcos23_state::c435_state_reset_w) |
| 1731 | | { |
| 1732 | | m_c435_buffer_pos = 0; |
| 1733 | | } |
| 1734 | | |
| 1735 | | WRITE16_MEMBER(namcos23_state::c435_state_pio_w) |
| 1736 | | { |
| 1737 | | m_c435_buffer[m_c435_buffer_pos++] = data; |
| 1738 | | int psize = c435_get_state_entry_size(m_c435_buffer[0]); |
| 1739 | | if(m_c435_buffer_pos < psize+1) |
| 1740 | | return; |
| 1741 | | c435_state_set(m_c435_buffer[0], m_c435_buffer+1); |
| 1742 | | m_c435_buffer_pos = 0; |
| 1743 | | } |
| 1744 | | |
| 1745 | | int namcos23_state::c435_get_state_entry_size(UINT16 type) |
| 1746 | | { |
| 1747 | | switch(type) { |
| 1748 | | case 0x0001: return 1; |
| 1749 | | case 0x0009: return 19; |
| 1750 | | case 0x0042: return 41; |
| 1751 | | case 0x0046: return 13; |
| 1752 | | case 0x00c0: return 33; |
| 1753 | | case 0x00c6: return 13; |
| 1754 | | case 0x00c8: return 17; |
| 1755 | | default: |
| 1756 | | logerror("WARNING: Unknown size for state type %04x\n", type); |
| 1757 | | return -1; |
| 1758 | | } |
| 1759 | | } |
| 1760 | | |
| 1761 | 1635 | void namcos23_state::c435_matrix_matrix_mul() // 0.0 |
| 1762 | 1636 | { |
| 1763 | 1637 | if((m_c435_buffer[0] & 0xf) != 4) { |
| 1764 | 1638 | logerror("WARNING: c435_matrix_matrix_mul with size %d\n", m_c435_buffer[0] & 0xf); |
| 1765 | 1639 | return; |
| 1766 | 1640 | } |
| 1767 | | if(m_c435_buffer[0] != 0x0004) |
| 1768 | | logerror("WARNING: c435_matrix_matrix_mul header %04x\n", m_c435_buffer[0]); |
| 1769 | 1641 | if(m_c435_buffer[3] != 0xffff) |
| 1770 | 1642 | logerror("WARNING: c435_matrix_matrix_mul with +2=%04x\n", m_c435_buffer[3]); |
| 1771 | 1643 | |
| r250227 | r250228 | |
| 1791 | 1663 | return; |
| 1792 | 1664 | } |
| 1793 | 1665 | |
| 1794 | | if(m_c435_buffer[0] != 0x0814 && m_c435_buffer[0] != 0x1014) |
| 1795 | | logerror("WARNING: c435_matrix_vector_mul header %04x\n", m_c435_buffer[0]); |
| 1796 | | |
| 1797 | | |
| 1798 | 1666 | if(m_c435_buffer[3] != 0xffff) { |
| 1799 | 1667 | INT32 *t = c435_getv(m_c435_buffer[1]); |
| 1800 | 1668 | const INT16 *m = c435_getm(m_c435_buffer[2]); |
| r250227 | r250228 | |
| 1822 | 1690 | logerror("WARNING: c435_matrix_set with size %d\n", m_c435_buffer[0] & 0xf); |
| 1823 | 1691 | return; |
| 1824 | 1692 | } |
| 1825 | | |
| 1826 | | if(m_c435_buffer[0] != 0x004a) |
| 1827 | | logerror("WARNING: c435_matrix_set header %04x\n", m_c435_buffer[0]); |
| 1828 | | |
| 1829 | 1693 | INT16 *t = c435_getm(m_c435_buffer[1]); |
| 1830 | 1694 | for(int i=0; i<9; i++) |
| 1831 | 1695 | t[i] = m_c435_buffer[i+2]; |
| r250227 | r250228 | |
| 1837 | 1701 | logerror("WARNING: c435_vector_set with size %d\n", m_c435_buffer[0] & 0xf); |
| 1838 | 1702 | return; |
| 1839 | 1703 | } |
| 1840 | | if(m_c435_buffer[0] != 0x057) |
| 1841 | | logerror("WARNING: c435_vector_set header %04x\n", m_c435_buffer[0]); |
| 1842 | | |
| 1843 | 1704 | INT32 *t = c435_getv(m_c435_buffer[1]); |
| 1844 | 1705 | for(int i=0; i<3; i++) |
| 1845 | 1706 | t[i] = u32_to_s24((m_c435_buffer[2*i+2] << 16) | m_c435_buffer[2*i+3]); |
| r250227 | r250228 | |
| 1854 | 1715 | m_scaling = m_c435_buffer[1]; |
| 1855 | 1716 | } |
| 1856 | 1717 | |
| 1718 | void namcos23_state::c435_state_set_interrupt() // 4.f.0001 |
| 1719 | { |
| 1720 | if(m_c435_buffer[0] != 0x4f02) { |
| 1721 | logerror("WARNING: c435_state_set_interrupt with size %d\n", m_c435_buffer[0] & 0xff); |
| 1722 | return; |
| 1723 | } |
| 1724 | if(m_c435_buffer[2] & 1) |
| 1725 | update_main_interrupts(m_main_irqcause | MAIN_C435_IRQ); |
| 1726 | else |
| 1727 | update_main_interrupts(m_main_irqcause & ~MAIN_C435_IRQ); |
| 1728 | } |
| 1729 | |
| 1857 | 1730 | void namcos23_state::c435_state_set() // 4.f |
| 1858 | 1731 | { |
| 1859 | 1732 | if((m_c435_buffer[0] & 0xff) == 0) { |
| 1860 | | logerror("WARNING: c435_state_set with zero size\n"); |
| 1733 | logerror("WARNING: c435_state_set with size %d\n", m_c435_buffer[0] & 0xff); |
| 1861 | 1734 | return; |
| 1862 | 1735 | } |
| 1863 | | int size = c435_get_state_entry_size(m_c435_buffer[1]); |
| 1864 | | if(size != (m_c435_buffer[0] & 0xff)-1) |
| 1865 | | { |
| 1866 | | logerror("WARNING: c435_state_set size disagreement (type=%04x, got %d, expected %d)\n", m_c435_buffer[1], (m_c435_buffer[0] & 0xff)-1, size); |
| 1867 | | return; |
| 1736 | switch(m_c435_buffer[1]) { |
| 1737 | case 0x0001: c435_state_set_interrupt(); break; |
| 1738 | default: |
| 1739 | logerror("WARNING: c435_state_set(%04x, ...)\n", m_c435_buffer[1]); |
| 1740 | break; |
| 1868 | 1741 | } |
| 1869 | | |
| 1870 | | c435_state_set(m_c435_buffer[1], m_c435_buffer+2); |
| 1871 | 1742 | } |
| 1872 | 1743 | |
| 1873 | 1744 | void namcos23_state::c435_render() // 8 |
| 1874 | 1745 | { |
| 1875 | 1746 | if((m_c435_buffer[0] & 0xf) != 3) { |
| 1876 | | logerror("WARNING: c435_render with size %d, header %04x\n", m_c435_buffer[0] & 0xf, m_c435_buffer[0]); |
| 1747 | logerror("WARNING: c435_render with size %d, header %04x", m_c435_buffer[0] & 0xf, m_c435_buffer[0]); |
| 1877 | 1748 | return; |
| 1878 | 1749 | } |
| 1879 | 1750 | |
| r250227 | r250228 | |
| 1897 | 1768 | re->model.scaling = use_scaling ? m_scaling / 16384.0 : 1.0; |
| 1898 | 1769 | memcpy(re->model.m, m, sizeof(re->model.m)); |
| 1899 | 1770 | memcpy(re->model.v, v, sizeof(re->model.v)); |
| 1900 | | // re->model.v[2] *= 768/420.0; |
| 1901 | | |
| 1902 | 1771 | if(0) |
| 1903 | | logerror("Render %04x (%f %f %f %f %f %f %f %f %f) (%f %f %f) %f\n", |
| 1772 | fprintf(stderr, "Render %04x (%f %f %f %f %f %f %f %f %f) (%f %f %f)\n", |
| 1904 | 1773 | re->model.model, |
| 1905 | 1774 | re->model.m[0]/16384.0, re->model.m[1]/16384.0, re->model.m[2]/16384.0, |
| 1906 | 1775 | re->model.m[3]/16384.0, re->model.m[4]/16384.0, re->model.m[5]/16384.0, |
| 1907 | 1776 | re->model.m[6]/16384.0, re->model.m[7]/16384.0, re->model.m[8]/16384.0, |
| 1908 | | re->model.v[0]/16384.0, re->model.v[1]/16384.0, re->model.v[2]/16384.0, |
| 1909 | | re->model.scaling); |
| 1777 | re->model.v[0]/16384.0, re->model.v[1]/16384.0, re->model.v[2]/16384.0); |
| 1910 | 1778 | |
| 1911 | 1779 | render.count[render.cur]++; |
| 1912 | 1780 | } |
| r250227 | r250228 | |
| 1962 | 1830 | } |
| 1963 | 1831 | |
| 1964 | 1832 | if(!known) { |
| 1965 | | char buf[4096]; |
| 1966 | | char *p = buf; |
| 1967 | | p += sprintf(p, "c435 -"); |
| 1833 | logerror("c435 -"); |
| 1968 | 1834 | for(int i=0; i<m_c435_buffer_pos; i++) |
| 1969 | | p += sprintf(p, " %04x", m_c435_buffer[i]); |
| 1970 | | p += sprintf(p, "\n"); |
| 1971 | | logerror(buf); |
| 1835 | logerror(" %04x", m_c435_buffer[i]); |
| 1836 | logerror("\n"); |
| 1972 | 1837 | } |
| 1973 | 1838 | |
| 1974 | 1839 | m_c435_buffer_pos = 0; |
| r250227 | r250228 | |
| 2065 | 1930 | // 640/(3.125/3.75) = 768 |
| 2066 | 1931 | // 480/(2.34375/3.75) = 768 |
| 2067 | 1932 | |
| 2068 | | #if 1 |
| 2069 | | pv.x = 320 + 768*pv.x; |
| 2070 | | pv.y = 240 - 768*pv.y; |
| 2071 | | #else |
| 2072 | | pv.x = 320 + 410*pv.x; |
| 2073 | | pv.y = 240 - 410*pv.y; |
| 2074 | | #endif |
| 2075 | | |
| 1933 | pv.x = 320 + 768 * pv.x; |
| 1934 | pv.y = 240 - 768 * pv.y; |
| 2076 | 1935 | pv.p[0] = 1.0f / pv.p[0]; |
| 2077 | 1936 | } |
| 2078 | 1937 | |
| r250227 | r250228 | |
| 2098 | 1957 | void namcos23_state::render_one_model(const namcos23_render_entry *re) |
| 2099 | 1958 | { |
| 2100 | 1959 | render_t &render = m_render; |
| 2101 | | if(re->model.model < 0x80) { |
| 2102 | | logerror("WARNING: model %02x requested\n", re->model.model); |
| 2103 | | return; |
| 2104 | | } |
| 2105 | | |
| 2106 | | if(re->model.model == 3486) |
| 2107 | | return; |
| 2108 | | |
| 2109 | 1960 | UINT32 adr = m_ptrom[re->model.model]; |
| 2110 | 1961 | if(adr >= m_ptrom_limit) { |
| 2111 | 1962 | logerror("WARNING: model %04x base address %08x out-of-bounds - pointram?\n", re->model.model, adr); |
| r250227 | r250228 | |
| 2910 | 2761 | AM_RANGE(0x0a000000, 0x0affffff) AM_ROM AM_REGION("data", 0x1000000) AM_MIRROR(0x1000000) |
| 2911 | 2762 | AM_RANGE(0x0c000000, 0x0c00001f) AM_READWRITE16(c412_r, c412_w, 0xffffffff) |
| 2912 | 2763 | AM_RANGE(0x0c400000, 0x0c400007) AM_READWRITE16(c421_r, c421_w, 0xffffffff) |
| 2913 | | AM_RANGE(0x0c800010, 0x0c800013) AM_WRITE16(c435_state_reset_w, 0xffff0000) |
| 2914 | | AM_RANGE(0x0c800014, 0x0c800017) AM_WRITE16(c435_state_pio_w, 0x0000ffff) |
| 2915 | 2764 | AM_RANGE(0x0d000000, 0x0d00000f) AM_READWRITE16(ctl_r, ctl_w, 0xffffffff) |
| 2916 | 2765 | AM_RANGE(0x0e800000, 0x0e800003) AM_READWRITE16(sub_comm_r, sub_comm_w, 0xffffffff) // not sure |
| 2917 | 2766 | AM_RANGE(0x0fc00000, 0x0fffffff) AM_WRITENOP AM_ROM AM_REGION("user1", 0) |