trunk/src/mess/drivers/atari400.c
| r31992 | r31993 | |
| 303 | 303 | UINT8 m_mmu, m_ext_bank; |
| 304 | 304 | |
| 305 | 305 | void setup_ram(int bank,UINT32 size); |
| 306 | | void setup_cart(int type); |
| 306 | void setup_cart(a800_cart_slot_device *slot); |
| 307 | 307 | |
| 308 | 308 | // start helper (until GTIA & ANTIC are device-fied) |
| 309 | 309 | void common_start(); |
| r31992 | r31993 | |
| 1832 | 1832 | } |
| 1833 | 1833 | } |
| 1834 | 1834 | |
| 1835 | | void a400_state::setup_cart(int type) |
| 1835 | void a400_state::setup_cart(a800_cart_slot_device *slot) |
| 1836 | 1836 | { |
| 1837 | 1837 | m_cart_disabled = 0; |
| 1838 | 1838 | m_last_offs = -1; |
| 1839 | 1839 | |
| 1840 | | switch (type) |
| 1840 | switch (slot->get_cart_type()) |
| 1841 | 1841 | { |
| 1842 | 1842 | case A800_8K: |
| 1843 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1843 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1844 | 1844 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1845 | 1845 | break; |
| 1846 | 1846 | case A800_8K_RIGHT: |
| 1847 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x9fff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot2)); |
| 1847 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0x9fff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1848 | 1848 | m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0x9fff); |
| 1849 | 1849 | break; |
| 1850 | 1850 | case A800_16K: |
| 1851 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1851 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1852 | 1852 | m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); |
| 1853 | 1853 | break; |
| 1854 | 1854 | case A800_PHOENIX: |
| 1855 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1855 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1856 | 1856 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1857 | 1857 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1858 | 1858 | break; |
| 1859 | 1859 | case A800_BBSB: |
| 1860 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1861 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x9fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1860 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1861 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x8000, 0x9fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot)); |
| 1862 | 1862 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1863 | 1863 | break; |
| 1864 | 1864 | case A800_OSS034M: |
| r31992 | r31993 | |
| 1867 | 1867 | case A800_OSS8K: |
| 1868 | 1868 | case A800_TURBO64: |
| 1869 | 1869 | case A800_TURBO128: |
| 1870 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1870 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1871 | 1871 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1872 | 1872 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1873 | 1873 | break; |
| 1874 | 1874 | case A800_MICROCALC: |
| 1875 | 1875 | // this can also disable ROM when reading in 0xd500-0xd5ff |
| 1876 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1876 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1877 | 1877 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1878 | 1878 | m_maincpu->space(AS_PROGRAM).install_readwrite_handler(0xd500, 0xd5ff, read8_delegate(FUNC(a400_state::read_d5xx), this), write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1879 | 1879 | break; |
| 1880 | 1880 | case A800_EXPRESS: |
| 1881 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1881 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1882 | 1882 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1883 | 1883 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd570, 0xd57f, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1884 | 1884 | break; |
| 1885 | 1885 | case A800_DIAMOND: |
| 1886 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1886 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1887 | 1887 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1888 | 1888 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5d0, 0xd5df, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1889 | 1889 | break; |
| 1890 | 1890 | case A800_WILLIAMS: |
| 1891 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1891 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1892 | 1892 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1893 | 1893 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd50f, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1894 | 1894 | break; |
| 1895 | 1895 | case A800_SPARTADOS: |
| 1896 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1896 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1897 | 1897 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1898 | 1898 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd5e0, 0xd5ef, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1899 | 1899 | break; |
| 1900 | 1900 | case A800_TELELINK2: |
| 1901 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1902 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x90ff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1901 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1902 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x9000, 0x90ff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot)); |
| 1903 | 1903 | m_maincpu->space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); |
| 1904 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0xd501, 0xd501, read8_delegate(FUNC(a800_cart_slot_device::read_d5xx),(a800_cart_slot_device*)m_cartslot)); |
| 1905 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd502, 0xd502, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)m_cartslot)); |
| 1904 | m_maincpu->space(AS_PROGRAM).install_read_handler(0xd501, 0xd501, read8_delegate(FUNC(a800_cart_slot_device::read_d5xx),(a800_cart_slot_device*)slot)); |
| 1905 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd502, 0xd502, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)slot)); |
| 1906 | 1906 | break; |
| 1907 | 1907 | case A800_BLIZZARD: |
| 1908 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1908 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1909 | 1909 | m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); |
| 1910 | 1910 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a400_state::disable_cart), this)); |
| 1911 | 1911 | break; |
| 1912 | 1912 | case A800_XEGS: |
| 1913 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1913 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x8000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1914 | 1914 | m_maincpu->space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); |
| 1915 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)m_cartslot)); |
| 1915 | m_maincpu->space(AS_PROGRAM).install_write_handler(0xd500, 0xd5ff, write8_delegate(FUNC(a800_cart_slot_device::write_d5xx),(a800_cart_slot_device*)slot)); |
| 1916 | 1916 | break; |
| 1917 | 1917 | case A5200_4K: |
| 1918 | 1918 | case A5200_8K: |
| 1919 | 1919 | case A5200_16K: |
| 1920 | 1920 | case A5200_32K: |
| 1921 | 1921 | case A5200_16K_2CHIPS: |
| 1922 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1922 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1923 | 1923 | m_maincpu->space(AS_PROGRAM).unmap_write(0x4000, 0xbfff); |
| 1924 | 1924 | break; |
| 1925 | 1925 | case A5200_BBSB: |
| 1926 | | m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1927 | | m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x5fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)m_cartslot)); |
| 1926 | m_maincpu->space(AS_PROGRAM).install_read_handler(0x4000, 0xbfff, read8_delegate(FUNC(a800_cart_slot_device::read_80xx),(a800_cart_slot_device*)slot)); |
| 1927 | m_maincpu->space(AS_PROGRAM).install_write_handler(0x4000, 0x5fff, write8_delegate(FUNC(a800_cart_slot_device::write_80xx),(a800_cart_slot_device*)slot)); |
| 1928 | 1928 | m_maincpu->space(AS_PROGRAM).unmap_write(0x6000, 0xbfff); |
| 1929 | 1929 | break; |
| 1930 | 1930 | } |
| r31992 | r31993 | |
| 1957 | 1957 | setup_ram(0, m_ram->size()); |
| 1958 | 1958 | setup_ram(1, m_ram->size()); |
| 1959 | 1959 | setup_ram(2, m_ram->size()); |
| 1960 | | setup_cart(m_cartslot->get_cart_type()); |
| 1960 | setup_cart(m_cartslot); |
| 1961 | 1961 | |
| 1962 | 1962 | save_item(NAME(m_cart_disabled)); |
| 1963 | 1963 | save_item(NAME(m_last_offs)); |
| r31992 | r31993 | |
| 1970 | 1970 | setup_ram(0, m_ram->size()); |
| 1971 | 1971 | setup_ram(1, m_ram->size()); |
| 1972 | 1972 | setup_ram(2, m_ram->size()); |
| 1973 | | setup_cart(m_cartslot->get_cart_type()); |
| 1974 | | setup_cart(m_cartslot2->get_cart_type()); |
| 1973 | setup_cart(m_cartslot); |
| 1974 | setup_cart(m_cartslot2); |
| 1975 | 1975 | |
| 1976 | 1976 | save_item(NAME(m_cart_disabled)); |
| 1977 | 1977 | save_item(NAME(m_last_offs)); |
| r31992 | r31993 | |
| 1982 | 1982 | m_mmu = 0xfd; |
| 1983 | 1983 | m_ext_bank = 0x03; // only used by a130xe |
| 1984 | 1984 | common_start(); |
| 1985 | | setup_cart(m_cartslot->get_cart_type()); |
| 1985 | setup_cart(m_cartslot); |
| 1986 | 1986 | |
| 1987 | 1987 | save_item(NAME(m_cart_disabled)); |
| 1988 | 1988 | save_item(NAME(m_last_offs)); |
| r31992 | r31993 | |
| 1994 | 1994 | MACHINE_START_MEMBER( a400_state, a5200 ) |
| 1995 | 1995 | { |
| 1996 | 1996 | a5200_start(); |
| 1997 | | setup_cart(m_cartslot->get_cart_type()); |
| 1997 | setup_cart(m_cartslot); |
| 1998 | 1998 | |
| 1999 | 1999 | save_item(NAME(m_cart_disabled)); |
| 2000 | 2000 | save_item(NAME(m_last_offs)); |