trunk/src/mame/drivers/model3.c
| r243054 | r243055 | |
| 1756 | 1756 | |
| 1757 | 1757 | READ64_MEMBER(model3_state::model3_security_r) |
| 1758 | 1758 | { |
| 1759 | | UINT64 retvalue = U64(0xffffffffffffffff); |
| 1760 | | |
| 1761 | 1759 | switch(offset) |
| 1762 | 1760 | { |
| 1763 | | case 0x00 / 8: retvalue = 0; break; /* status */ |
| 1761 | case 0x00/8: return 0; /* status */ |
| 1764 | 1762 | case 0x1c/8: /* security board data read */ |
| 1765 | 1763 | { |
| 1766 | 1764 | if (core_stricmp(machine().system().name, "vs299") == 0 || |
| 1767 | 1765 | core_stricmp(machine().system().name, "vs2v991") == 0) |
| 1768 | 1766 | { |
| 1769 | | retvalue = (UINT64)vs299_prot_data[m_prot_data_ptr++] << 48; |
| 1767 | return (UINT64)vs299_prot_data[m_prot_data_ptr++] << 48; |
| 1770 | 1768 | } |
| 1771 | 1769 | else if (core_stricmp(machine().system().name, "swtrilgy") == 0 || |
| 1772 | 1770 | core_stricmp(machine().system().name, "swtrilgya") == 0) |
| r243054 | r243055 | |
| 1776 | 1774 | { |
| 1777 | 1775 | m_prot_data_ptr = 0; |
| 1778 | 1776 | } |
| 1779 | | retvalue = data; |
| 1777 | return data; |
| 1780 | 1778 | } |
| 1781 | 1779 | else if (core_stricmp(machine().system().name, "fvipers2") == 0) |
| 1782 | 1780 | { |
| r243054 | r243055 | |
| 1785 | 1783 | { |
| 1786 | 1784 | m_prot_data_ptr = 0; |
| 1787 | 1785 | } |
| 1788 | | retvalue = data; |
| 1786 | return data; |
| 1789 | 1787 | } |
| 1790 | 1788 | else if (core_stricmp(machine().system().name, "spikeout") == 0 || |
| 1791 | 1789 | core_stricmp(machine().system().name, "spikeofe") == 0) |
| r243054 | r243055 | |
| 1795 | 1793 | { |
| 1796 | 1794 | m_prot_data_ptr = 0; |
| 1797 | 1795 | } |
| 1798 | | retvalue = data; |
| 1796 | return data; |
| 1799 | 1797 | } |
| 1800 | 1798 | else if (core_stricmp(machine().system().name, "eca") == 0 || |
| 1801 | 1799 | core_stricmp(machine().system().name, "ecax") == 0) |
| r243054 | r243055 | |
| 1805 | 1803 | { |
| 1806 | 1804 | m_prot_data_ptr = 0; |
| 1807 | 1805 | } |
| 1808 | | retvalue = data; |
| 1806 | return data; |
| 1809 | 1807 | } |
| 1810 | 1808 | else if (core_stricmp(machine().system().name, "oceanhun") == 0) |
| 1811 | 1809 | { |
| r243054 | r243055 | |
| 1814 | 1812 | { |
| 1815 | 1813 | m_prot_data_ptr = 0; |
| 1816 | 1814 | } |
| 1817 | | retvalue = data; |
| 1815 | return data; |
| 1818 | 1816 | } |
| 1819 | 1817 | else |
| 1820 | 1818 | { |
| 1821 | | retvalue = 0; |
| 1819 | return 0; |
| 1822 | 1820 | } |
| 1823 | | break; |
| 1824 | 1821 | } |
| 1825 | 1822 | } |
| 1826 | | printf("model3_security_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff)); |
| 1827 | | |
| 1828 | | return retvalue; |
| 1823 | return U64(0xffffffffffffffff); |
| 1829 | 1824 | } |
| 1830 | 1825 | |
| 1831 | | READ64_MEMBER(model3_state::model3_5881prot_r) |
| 1832 | | { |
| 1833 | | UINT64 retvalue = U64(0xffffffffffffffff); |
| 1834 | | |
| 1835 | | if (offset == 0x00 / 8) |
| 1836 | | { |
| 1837 | | retvalue = 0; |
| 1838 | | } |
| 1839 | | else if (offset == 0x18 / 8) |
| 1840 | | { |
| 1841 | | if (first_read == 1) |
| 1842 | | { |
| 1843 | | // the RAM based schemes expect a dummy value before the start of the stream |
| 1844 | | // to match the previous simulation I use 0xffff here |
| 1845 | | first_read = 0; |
| 1846 | | retvalue = 0xffff << 16; |
| 1847 | | } |
| 1848 | | else |
| 1849 | | { |
| 1850 | | UINT8* base; |
| 1851 | | retvalue = m_cryptdevice->do_decrypt(base); |
| 1852 | | // retvalue = ((retvalue & 0xff00) >> 8) | ((retvalue & 0x00ff) << 8); // don't endian swap the return value on this hardware |
| 1853 | | retvalue <<= 16; |
| 1854 | | } |
| 1855 | | |
| 1856 | | // printf("model3_5881prot_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff)); |
| 1857 | | } |
| 1858 | | else |
| 1859 | | { |
| 1860 | | printf("model3_5881prot_r offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(retvalue >> 32), (UINT32)(retvalue & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff)); |
| 1861 | | } |
| 1862 | | |
| 1863 | | return retvalue; |
| 1864 | | |
| 1865 | | |
| 1866 | | } |
| 1867 | | |
| 1868 | | WRITE64_MEMBER(model3_state::model3_5881prot_w) |
| 1869 | | { |
| 1870 | | if (offset == 0x10 / 8) |
| 1871 | | { |
| 1872 | | // code is copied to RAM first, so base address is always 0 |
| 1873 | | m_cryptdevice->set_addr_low(0); |
| 1874 | | m_cryptdevice->set_addr_high(0); |
| 1875 | | |
| 1876 | | if (data != 0) |
| 1877 | | printf("model3_5881prot_w address isn't 0?\n"); |
| 1878 | | |
| 1879 | | first_read = 1; |
| 1880 | | } |
| 1881 | | else if (offset == 0x18 / 8) |
| 1882 | | { |
| 1883 | | UINT16 subkey = data >> (32 + 16); |
| 1884 | | subkey = ((subkey & 0xff00) >> 8) | ((subkey & 0x00ff) << 8); // endian swap the sub-key for this hardware |
| 1885 | | printf("model3_5881prot_w setting subkey %04x\n", subkey); |
| 1886 | | m_cryptdevice->set_subkey(subkey); |
| 1887 | | } |
| 1888 | | else |
| 1889 | | { |
| 1890 | | printf("model3_5881prot_w offset %08x : %08x%08x (%08x%08x)\n", offset * 8, (UINT32)(data >> 32), (UINT32)(data & 0xffffffff), (UINT32)(mem_mask >> 32), (UINT32)(mem_mask & 0xffffffff)); |
| 1891 | | } |
| 1892 | | |
| 1893 | | |
| 1894 | | |
| 1895 | | } |
| 1896 | | |
| 1897 | 1826 | WRITE64_MEMBER(model3_state::daytona2_rombank_w) |
| 1898 | 1827 | { |
| 1899 | 1828 | if (ACCESSING_BITS_56_63) |
| r243054 | r243055 | |
| 1918 | 1847 | AM_RANGE(0xf00c0000, 0xf00dffff) AM_MIRROR(0x0e000000) AM_RAM AM_SHARE("backup") /* backup SRAM */ |
| 1919 | 1848 | AM_RANGE(0xf0100000, 0xf010003f) AM_MIRROR(0x0e000000) AM_READWRITE(model3_sys_r, model3_sys_w ) |
| 1920 | 1849 | AM_RANGE(0xf0140000, 0xf014003f) AM_MIRROR(0x0e000000) AM_READWRITE(model3_rtc_r, model3_rtc_w ) |
| 1850 | AM_RANGE(0xf0180000, 0xf019ffff) AM_MIRROR(0x0e000000) AM_RAM /* Security Board RAM */ |
| 1851 | AM_RANGE(0xf01a0000, 0xf01a003f) AM_MIRROR(0x0e000000) AM_READ(model3_security_r ) /* Security board */ |
| 1921 | 1852 | |
| 1922 | 1853 | AM_RANGE(0xf1000000, 0xf10f7fff) AM_READWRITE(model3_char_r, model3_char_w ) /* character RAM */ |
| 1923 | 1854 | AM_RANGE(0xf10f8000, 0xf10fffff) AM_READWRITE(model3_tile_r, model3_tile_w ) /* tilemaps */ |
| r243054 | r243055 | |
| 5660 | 5591 | MCFG_SOUND_ROUTE(0, "rspeaker", 2.0) |
| 5661 | 5592 | MACHINE_CONFIG_END |
| 5662 | 5593 | |
| 5663 | | UINT16 model3_state::crypt_read_callback(UINT32 addr) |
| 5664 | | { |
| 5665 | | UINT16 dat = 0; |
| 5666 | | if (addr < 0x8000) |
| 5667 | | { |
| 5668 | | dat = m_maincpu->space().read_word((0xf0180000 + 4 * addr)); // every other word is unused in this RAM, probably 32-bit ram on 64-bit bus? |
| 5669 | | } |
| 5670 | | |
| 5671 | | // dat = ((dat & 0xff00) >> 8) | ((dat & 0x00ff) << 8); |
| 5672 | | // printf("reading %04x\n", dat); |
| 5673 | | return dat; |
| 5674 | | } |
| 5675 | | |
| 5676 | | static MACHINE_CONFIG_DERIVED( model3_21_5881, model3_21 ) |
| 5677 | | MCFG_DEVICE_ADD("315_5881", SEGA315_5881_CRYPT, 0) |
| 5678 | | MCFG_SET_READ_CALLBACK(model3_state, crypt_read_callback) |
| 5679 | | MACHINE_CONFIG_END |
| 5680 | | |
| 5681 | | |
| 5682 | 5594 | static void interleave_vroms(running_machine &machine) |
| 5683 | 5595 | { |
| 5684 | 5596 | model3_state *state = machine.driver_data<model3_state>(); |
| r243054 | r243055 | |
| 5710 | 5622 | } |
| 5711 | 5623 | } |
| 5712 | 5624 | |
| 5713 | | DRIVER_INIT_MEMBER(model3_state, genprot) |
| 5714 | | { |
| 5715 | | INT64 key = get_315_5881_key(machine()); |
| 5716 | | |
| 5717 | | m_maincpu->space(AS_PROGRAM).install_ram(0xf0180000, 0xf019ffff, 0, 0x0e000000); |
| 5718 | | |
| 5719 | | if (key != -1) |
| 5720 | | { |
| 5721 | | // m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf01a0000, 0xf01a003f, read64_delegate(FUNC(model3_state::model3_5881prot_r), this), write64_delegate(FUNC(model3_state::model3_5881prot_w), this)); |
| 5722 | | m_cryptdevice->set_key(key); |
| 5723 | | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_5881prot_r), this), write64_delegate(FUNC(model3_state::model3_5881prot_w), this) ); |
| 5724 | | } |
| 5725 | | else |
| 5726 | | { |
| 5727 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xf01a0000, 0xf01a003f, 0, 0x0e000000, read64_delegate(FUNC(model3_state::model3_security_r), this) ); |
| 5728 | | } |
| 5729 | | } |
| 5730 | | |
| 5731 | 5625 | DRIVER_INIT_MEMBER(model3_state,model3_10) |
| 5732 | 5626 | { |
| 5733 | 5627 | interleave_vroms(machine()); |
| r243054 | r243055 | |
| 5948 | 5842 | |
| 5949 | 5843 | DRIVER_INIT_MEMBER(model3_state,swtrilgy) |
| 5950 | 5844 | { |
| 5951 | | |
| 5952 | 5845 | UINT32 *rom = (UINT32*)memregion("user1")->base(); |
| 5953 | 5846 | DRIVER_INIT_CALL(model3_20); |
| 5954 | 5847 | |
| r243054 | r243055 | |
| 5959 | 5852 | |
| 5960 | 5853 | rom[(0x043dc^4)/4] = 0x48000090; // skip force feedback setup |
| 5961 | 5854 | rom[(0xf6e44^4)/4] = 0x60000000; |
| 5962 | | |
| 5963 | | |
| 5964 | | DRIVER_INIT_CALL(genprot); |
| 5965 | | |
| 5966 | 5855 | } |
| 5967 | 5856 | |
| 5968 | 5857 | DRIVER_INIT_MEMBER(model3_state,swtrilga) |
| r243054 | r243055 | |
| 6114 | 6003 | GAME( 1999, vs299, vs2v991, model3_20, model3, model3_state, vs299, ROT0, "Sega", "Virtua Striker 2 '99", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6115 | 6004 | |
| 6116 | 6005 | /* Model 3 Step 2.1 */ |
| 6117 | | GAME( 1998, daytona2, 0, model3_21, daytona2, model3_state, daytona2, ROT0, "Sega", "Daytona USA 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6118 | | GAME( 1998, dayto2pe, 0, model3_21, daytona2, model3_state, dayto2pe, ROT0, "Sega", "Daytona USA 2 Power Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6119 | | GAME( 1998, dirtdvls, 0, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 1) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6120 | | GAME( 1998, dirtdvlsa, dirtdvls, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 2) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6121 | | GAME( 1998, swtrilgy, 0, model3_21_5881, swtrilgy, model3_state, swtrilgy, ROT0, "Sega / LucasArts", "Star Wars Trilogy (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6122 | | GAME( 1998, swtrilgya, swtrilgy, model3_21_5881, swtrilgy, model3_state, swtrilga, ROT0, "Sega / LucasArts", "Star Wars Trilogy", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6123 | | GAME( 1998, spikeout, 0, model3_21, model3, model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6124 | | GAME( 1998, spikeofe, 0, model3_21, model3, model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6125 | | GAME( 1998, magtruck, 0, model3_21, eca, model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6126 | | GAME( 1999, eca, 0, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6127 | | GAME( 1999, ecax, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (Export)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6128 | | GAME( 1999, ecap, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (US location test?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6006 | GAME( 1998, daytona2, 0, model3_21, daytona2, model3_state, daytona2, ROT0, "Sega", "Daytona USA 2 (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6007 | GAME( 1998, dayto2pe, 0, model3_21, daytona2, model3_state, dayto2pe, ROT0, "Sega", "Daytona USA 2 Power Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6008 | GAME( 1998, dirtdvls, 0, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 1) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6009 | GAME( 1998, dirtdvlsa, dirtdvls, model3_21, scud, model3_state, dirtdvls, ROT0, "Sega", "Dirt Devils (set 2) (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6010 | GAME( 1998, swtrilgy, 0, model3_21, swtrilgy, model3_state, swtrilgy, ROT0, "Sega / LucasArts", "Star Wars Trilogy (Revision A)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6011 | GAME( 1998, swtrilgya, swtrilgy, model3_21, swtrilgy, model3_state, swtrilga, ROT0, "Sega / LucasArts", "Star Wars Trilogy", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6012 | GAME( 1998, spikeout, 0, model3_21, model3, model3_state, spikeout, ROT0, "Sega", "Spikeout (Revision C)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6013 | GAME( 1998, spikeofe, 0, model3_21, model3, model3_state, spikeofe, ROT0, "Sega", "Spikeout Final Edition", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6014 | GAME( 1998, magtruck, 0, model3_21, eca, model3_state, magtruck, ROT0, "Sega", "Magical Truck Adventure", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6015 | GAME( 1999, eca, 0, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6016 | GAME( 1999, ecax, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (Export)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 6017 | GAME( 1999, ecap, eca, model3_21, eca, model3_state, eca, ROT0, "Sega", "Emergency Call Ambulance (US location test?)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
trunk/src/mame/drivers/stv.c
| r243054 | r243055 | |
| 3007 | 3007 | |
| 3008 | 3008 | //GAME YEAR, NAME, PARENT, MACH, INP, INIT, MONITOR |
| 3009 | 3009 | /* Playable */ |
| 3010 | | GAME( 1998, astrass, stvbios, stv, stv6b, stv_state, astrass, ROT0, "Sunsoft", "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3010 | GAME( 1998, astrass, stvbios, stv, stv6b, stv_state, astrass, ROT0, "Sunsoft", "Astra SuperStars (J 980514 V1.002)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3011 | 3011 | GAME( 1995, bakubaku, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Baku Baku Animal (J 950407 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3012 | 3012 | GAME( 1996, batmanfr, stvbios, batmanfr, stv, stv_state, batmanfr, ROT0, "Acclaim", "Batman Forever (JUE 960507 V1.000)", GAME_NO_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3013 | 3013 | GAME( 1996, colmns97, stvbios, stv, stv, stv_state, colmns97, ROT0, "Sega", "Columns '97 (JET 961209 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3014 | 3014 | GAME( 1997, cotton2, stvbios, stv, stv, stv_state, cotton2, ROT0, "Success", "Cotton 2 (JUET 970902 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3015 | 3015 | GAME( 1998, cottonbm, stvbios, stv, stv, stv_state, cottonbm, ROT0, "Success", "Cotton Boomerang (JUET 980709 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3016 | 3016 | GAME( 1995, critcrsh, stvbios, stv, critcrsh, stv_state, critcrsh, ROT0, "Sega", "Critter Crusher (EA 951204 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3017 | | GAME( 1999, danchih, stvbios, stv, stvmp, stv_state, danchih, ROT0, "Altron (Tecmo license)", "Danchi de Hanafuda (J 990607 V1.400)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3017 | GAME( 1999, danchih, stvbios, stv, stvmp, stv_state, danchih, ROT0, "Altron (Tecmo license)", "Danchi de Hanafuda (J 990607 V1.400)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3018 | 3018 | GAME( 2000, danchiq, stvbios, stv, stv, stv_state, danchiq, ROT0, "Altron", "Danchi de Quiz Okusan Yontaku Desuyo! (J 001128 V1.200)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3019 | 3019 | GAME( 1996, diehard, stvbios, stv, stv, stv_state, diehard, ROT0, "Sega", "Die Hard Arcade (UET 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3020 | 3020 | GAME( 1996, dnmtdeka, diehard, stv, stv, stv_state, dnmtdeka, ROT0, "Sega", "Dynamite Deka (J 960515 V1.000)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3021 | 3021 | GAME( 1995, ejihon, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Ejihon Tantei Jimusyo (J 950613 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3022 | GAME( 1998, elandore, stvbios, stv, stv6b, stv_state, elandore, ROT0, "Sai-Mate", "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3023 | GAME( 1999, ffreveng, stvbios, stv, stv, stv_state, ffreveng, ROT0, "Capcom", "Final Fight Revenge (JUET 990714 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3022 | 3024 | GAME( 1995, fhboxers, stvbios, stv, stv, stv_state, fhboxers, ROT0, "Sega", "Funky Head Boxers (JUETBKAL 951218 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3023 | 3025 | GAME( 1997, findlove, stvbios, stv, stv, stv_state, stv, ROT0, "Daiki / FCF", "Zenkoku Seifuku Bishoujo Grand Prix Find Love (J 971212 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3024 | | GAME( 1994, gaxeduel, stvbios, stv, stv6b, stv_state, gaxeduel, ROT0, "Sega", "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS) |
| 3026 | GAME( 1994, gaxeduel, stvbios, stv, stv6b, stv_state, gaxeduel, ROT0, "Sega", "Golden Axe - The Duel (JUETL 950117 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS) |
| 3025 | 3027 | GAME( 1998, grdforce, stvbios, stv, stv, stv_state, grdforce, ROT0, "Success", "Guardian Force (JUET 980318 V0.105)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3026 | | GAME( 1998, groovef, stvbios, stv, stv6b, stv_state, groovef, ROT0, "Atlus", "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3028 | GAME( 1998, groovef, stvbios, stv, stv6b, stv_state, groovef, ROT0, "Atlus", "Groove on Fight - Gouketsuji Ichizoku 3 (J 970416 V1.001)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3027 | 3029 | GAME( 1997, hanagumi, stvbios, stv, stv, stv_state, hanagumi, ROT0, "Sega", "Sakura Taisen - Hanagumi Taisen Columns (J 971007 V1.010)", GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3028 | 3030 | GAME( 1996, introdon, stvbios, stv, stv, stv_state, stv, ROT0, "Sunsoft / Success", "Karaoke Quiz Intro Don Don! (J 960213 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3029 | | GAME( 1995, kiwames, stvbios, stv, stvmp, stv_state, stvmp, ROT0, "Athena", "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3031 | GAME( 1995, kiwames, stvbios, stv, stvmp, stv_state, stvmp, ROT0, "Athena", "Pro Mahjong Kiwame S (J 951020 V1.208)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3030 | 3032 | GAME( 1997, maruchan, stvbios, stv, stv, stv_state, maruchan, ROT0, "Sega / Toyosuisan", "Maru-Chan de Goo! (J 971216 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3031 | 3033 | GAME( 1996, mausuke, stvbios, stv, stv, stv_state, mausuke, ROT0, "Data East", "Mausuke no Ojama the World (J 960314 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3032 | 3034 | GAME( 1998, myfairld, stvbios, stv, myfairld, stv_state, stvmp, ROT0, "Micronet", "Virtual Mahjong 2 - My Fair Lady (J 980608 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| r243054 | r243055 | |
| 3044 | 3046 | GAME( 1995, sandor, stvbios, stv, stv, stv_state, sandor, ROT0, "Sega", "Puzzle & Action: Sando-R (J 951114 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3045 | 3047 | GAME( 1997, thunt, sandor, stv, stv, stv_state, thunt, ROT0, "Sega", "Puzzle & Action: Treasure Hunt (JUET 970901 V2.00E)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3046 | 3048 | GAME( 1997, thuntk, sandor, stv, stv, stv_state, sandor, ROT0, "Sega / Deniam", "Puzzle & Action: BoMulEul Chajara (JUET 970125 V2.00K)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3049 | GAME( 1998, twcup98, stvbios, stv, stv, stv_state, twcup98, ROT0, "Tecmo", "Tecmo World Cup '98 (JUET 980410 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3047 | 3050 | GAME( 1995, smleague, stvbios, stv, stv, stv_state, smleague, ROT0, "Sega", "Super Major League (U 960108 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3048 | 3051 | GAME( 1995, finlarch, smleague,stv, stv, stv_state, finlarch, ROT0, "Sega", "Final Arch (J 950714 V1.001)", GAME_NOT_WORKING | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3049 | 3052 | GAME( 1996, sokyugrt, stvbios, stv, stv, stv_state, sokyugrt, ROT0, "Raizing / Eighting", "Soukyugurentai / Terra Diver (JUET 960821 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| r243054 | r243055 | |
| 3053 | 3056 | GAME( 1997, winterht, stvbios, stv, stv, stv_state, winterht, ROT0, "Sega", "Winter Heat (JUET 971012 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3054 | 3057 | GAME( 1997, znpwfv, stvbios, stv, stv, stv_state, znpwfv, ROT0, "Sega", "Zen Nippon Pro-Wrestling Featuring Virtua (J 971123 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3055 | 3058 | |
| 3056 | | /* Almost */ |
| 3057 | | GAME( 1998, twcup98, stvbios, stv, stv, stv_state, twcup98, ROT0, "Tecmo", "Tecmo World Cup '98 (JUET 980410 V1.000)", GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3058 | | GAME( 1998, elandore, stvbios, stv, stv6b, stv_state, elandore, ROT0, "Sai-Mate", "Touryuu Densetsu Elan-Doree / Elan Doree - Legend of Dragoon (JUET 980922 V1.006)", GAME_NOT_WORKING | GAME_UNEMULATED_PROTECTION | GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3059 | | |
| 3060 | 3059 | /* Unemulated printer / camera devices */ |
| 3061 | 3060 | GAME( 1998, stress, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Stress Busters (J 981020 V1.000)", GAME_NOT_WORKING | GAME_IMPERFECT_GRAPHICS | GAME_IMPERFECT_SOUND ) |
| 3062 | 3061 | GAME( 1997, nclubv3, stvbios, stv, stv, stv_state, nameclv3, ROT0, "Sega", "Name Club Ver.3 (J 970723 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS | GAME_NOT_WORKING ) |
| r243054 | r243055 | |
| 3083 | 3082 | GAME( 1997, techbowl, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Technical Bowling (J 971212 V1.000)", GAME_NOT_WORKING ) |
| 3084 | 3083 | GAME( 1999, micrombc, stvbios, stv, stv, stv_state, stv, ROT0, "Sega", "Microman Battle Charge (J 990326 V1.000)", GAME_NOT_WORKING ) |
| 3085 | 3084 | |
| 3086 | | /* Black screen */ |
| 3087 | | GAME( 1999, ffreveng, stvbios, stv, stv, stv_state, ffreveng, ROT0, "Capcom", "Final Fight Revenge (JUET 990714 V1.000)", GAME_IMPERFECT_SOUND | GAME_IMPERFECT_GRAPHICS ) |
| 3088 | | |
| 3089 | 3085 | /* CD games */ |
| 3090 | 3086 | GAME( 1995, sfish2, 0, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (UET 951106 V1.10e)", GAME_NO_SOUND | GAME_NOT_WORKING ) |
| 3091 | 3087 | GAME( 1995, sfish2j, sfish2, stv, stv, stv_state, stv, ROT0, "Sega", "Sport Fishing 2 (J 951201 V1.100)", GAME_NO_SOUND | GAME_NOT_WORKING ) |