trunk/src/mame/drivers/coolridr.c
| r21419 | r21420 | |
| 480 | 480 | void flush_pal_data( UINT16 offset ); |
| 481 | 481 | int m_gfx_index; |
| 482 | 482 | int m_color_bank; |
| 483 | UINT32 m_rgb_ctrl[2]; |
| 483 | 484 | |
| 484 | 485 | osd_work_queue * m_work_queue[2]; // work queue, one per screen |
| 485 | 486 | static void *draw_tile_row_threaded(void *param, int threadid); |
| r21419 | r21420 | |
| 1782 | 1783 | } |
| 1783 | 1784 | } |
| 1784 | 1785 | |
| 1785 | | |
| 1786 | 1786 | void coolridr_state::flush_pal_data( UINT16 offset ) |
| 1787 | 1787 | { |
| 1788 | 1788 | int r,g,b; |
| 1789 | int screen_type = (offset & 0x400) >> 10; |
| 1790 | int rgb_setting = m_rgb_ctrl[screen_type] & ~0x1f; |
| 1791 | int rgb_gradient = m_rgb_ctrl[screen_type] & 0x1f; |
| 1792 | |
| 1789 | 1793 | r = ((m_h1_pal[offset] & 0x7c00) >> 10); |
| 1790 | 1794 | g = ((m_h1_pal[offset] & 0x03e0) >> 5); |
| 1791 | 1795 | b = ((m_h1_pal[offset] & 0x001f) >> 0); |
| 1796 | if(rgb_setting == 0x1240) /* fade-in / outs */ |
| 1797 | { |
| 1798 | r -= rgb_gradient; |
| 1799 | g -= rgb_gradient; |
| 1800 | b -= rgb_gradient; |
| 1801 | if(r < 0) { r = 0; } |
| 1802 | if(g < 0) { g = 0; } |
| 1803 | if(b < 0) { b = 0; } |
| 1804 | } |
| 1805 | else if(rgb_setting == 0x920) /* at bike select, addition */ |
| 1806 | { |
| 1807 | r += rgb_gradient; |
| 1808 | g += rgb_gradient; |
| 1809 | b += rgb_gradient; |
| 1810 | if(r > 0x1f) { r = 0x1f; } |
| 1811 | if(g > 0x1f) { g = 0x1f; } |
| 1812 | if(b > 0x1f) { b = 0x1f; } |
| 1813 | } |
| 1814 | else if(rgb_setting == 0x800) /* when you get hit TODO: algo might be different. */ |
| 1815 | { |
| 1816 | g &= (0x1f - rgb_gradient); |
| 1817 | b &= (0x1f - rgb_gradient); |
| 1818 | } |
| 1819 | else if(rgb_gradient) |
| 1820 | { |
| 1821 | popmessage("%08x %08x",rgb_setting,rgb_gradient); |
| 1822 | } |
| 1823 | |
| 1792 | 1824 | palette_set_color_rgb(machine(),offset,pal5bit(r),pal5bit(g),pal5bit(b)); |
| 1793 | 1825 | } |
| 1794 | 1826 | |
| r21419 | r21420 | |
| 1837 | 1869 | printf("unk values to %02x dst %08x\n",cmd,dst); |
| 1838 | 1870 | dst &= 0x000fffff; |
| 1839 | 1871 | |
| 1840 | | /* TODO: might as well improve the dirty handling */ |
| 1841 | 1872 | for(int i=0;i<size;i++) |
| 1842 | 1873 | { |
| 1843 | 1874 | m_h1_pcg[dst] = space.read_byte(src); |
| r21419 | r21420 | |
| 1876 | 1907 | case 0x24: /* unknown table */ |
| 1877 | 1908 | case 0x30: /* screen 1 - 0x80 at boot, then 0x808080 */ |
| 1878 | 1909 | case 0x34: /* screen 2 / */ |
| 1879 | | case 0x40: /* screen 1 - almost certainly RGB brightness (at least bits 4 - 0) */ |
| 1880 | | case 0x44: /* screen 2 / */ |
| 1881 | 1910 | case 0x50: /* screen 1 - unknown */ |
| 1882 | 1911 | case 0x54: /* screen 2 / */ |
| 1883 | 1912 | //printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]); |
| 1884 | 1913 | dma_index+=4; |
| 1885 | 1914 | break; |
| 1915 | case 0x40: /* screen 1 - almost certainly RGB brightness (at least bits 4 - 0) */ |
| 1916 | case 0x44: /* screen 2 / */ |
| 1917 | m_rgb_ctrl[(cmd & 4) >> 2] = m_framebuffer_vram[(0+dma_index)/4] & 0xffffff; |
| 1918 | for(int i=((cmd & 4) * 0x100);i<((cmd & 4) * 0x100)+0x400;i++) |
| 1919 | flush_pal_data( i ); |
| 1920 | dma_index+=4; |
| 1921 | break; |
| 1886 | 1922 | default: |
| 1887 | 1923 | printf("%02x %08x\n",cmd,m_framebuffer_vram[(0+dma_index)/4]); |
| 1888 | 1924 | dma_index+=4; |