trunk/src/emu/machine/mc68901.c
| r26797 | r26798 | |
| 293 | 293 | |
| 294 | 294 | inline void mc68901_device::gpio_input(int bit, int state) |
| 295 | 295 | { |
| 296 | | if (state != BIT(m_gpip, bit)) |
| 296 | if (state != BIT(m_gpio_input, bit)) |
| 297 | 297 | { |
| 298 | 298 | if (state == BIT(m_aer, bit)) |
| 299 | 299 | { |
| r26797 | r26798 | |
| 309 | 309 | |
| 310 | 310 | |
| 311 | 311 | if (state) |
| 312 | | m_gpip &= ~(1 << bit); |
| 312 | m_gpio_input |= (1 << bit); |
| 313 | 313 | else |
| 314 | | m_gpip |= (1 << bit); |
| 314 | m_gpio_input &= ~(1 << bit); |
| 315 | 315 | } |
| 316 | 316 | } |
| 317 | 317 | |
| r26797 | r26798 | |
| 328 | 328 | mc68901_device::mc68901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) |
| 329 | 329 | : device_t(mconfig, MC68901, "Motorola MC68901", tag, owner, clock, "mc68901", __FILE__), |
| 330 | 330 | device_serial_interface(mconfig, *this), |
| 331 | | m_gpip(0), |
| 332 | | m_tsr(TSR_BUFFER_EMPTY) |
| 331 | m_gpio_input(0) |
| 333 | 332 | { |
| 334 | 333 | } |
| 335 | 334 | |
| r26797 | r26798 | |
| 364 | 363 | m_start_bit_hack_for_external_clocks = true; |
| 365 | 364 | |
| 366 | 365 | /* resolve callbacks */ |
| 367 | | m_in_gpio_func.resolve(m_in_gpio_cb, *this); |
| 368 | 366 | m_out_gpio_func.resolve(m_out_gpio_cb, *this); |
| 369 | 367 | m_out_so_func.resolve(m_out_so_cb, *this); |
| 370 | 368 | m_out_tao_func.resolve(m_out_tao_cb, *this); |
| r26797 | r26798 | |
| 554 | 552 | { |
| 555 | 553 | switch (offset) |
| 556 | 554 | { |
| 557 | | case REGISTER_GPIP: |
| 558 | | m_gpip = m_in_gpio_func(0); |
| 559 | | return m_gpip; |
| 555 | case REGISTER_GPIP: return (m_gpio_input & ~m_ddr) | (m_gpip & m_ddr); |
| 560 | 556 | |
| 561 | 557 | case REGISTER_AER: return m_aer; |
| 562 | 558 | case REGISTER_DDR: return m_ddr; |
trunk/src/mess/drivers/x68k.c
| r26797 | r26798 | |
| 1212 | 1212 | { |
| 1213 | 1213 | if(state == CLEAR_LINE) |
| 1214 | 1214 | { |
| 1215 | | m_mfp.gpio |= 0x08; |
| 1216 | 1215 | m_mfpdev->i3_w(1); |
| 1217 | 1216 | } |
| 1218 | 1217 | else |
| 1219 | 1218 | { |
| 1220 | | m_mfp.gpio &= ~0x08; |
| 1221 | 1219 | m_mfpdev->i3_w(0); |
| 1222 | 1220 | } |
| 1223 | 1221 | } |
| 1224 | 1222 | |
| 1225 | | READ8_MEMBER( x68k_state::mfp_gpio_r ) |
| 1226 | | { |
| 1227 | | UINT8 data = m_mfp.gpio; |
| 1228 | | |
| 1229 | | data &= ~(m_crtc.hblank << 7); |
| 1230 | | data &= ~(m_crtc.vblank << 4); |
| 1231 | | data |= 0x23; // GPIP5 is unused, always 1 |
| 1232 | | |
| 1233 | | return data; |
| 1234 | | } |
| 1235 | | |
| 1236 | 1223 | WRITE8_MEMBER(x68k_state::x68030_adpcm_w) |
| 1237 | 1224 | { |
| 1238 | 1225 | switch(offset) |
| r26797 | r26798 | |
| 1428 | 1415 | 0, /* receive clock */ |
| 1429 | 1416 | 0, /* transmit clock */ |
| 1430 | 1417 | DEVCB_DRIVER_LINE_MEMBER(x68k_state,mfp_irq_callback), /* interrupt */ |
| 1431 | | DEVCB_DRIVER_MEMBER(x68k_state, mfp_gpio_r), /* GPIO read */ |
| 1432 | 1418 | DEVCB_NULL, /* GPIO write */ |
| 1433 | 1419 | DEVCB_NULL, /* TAO */ |
| 1434 | 1420 | DEVCB_DRIVER_LINE_MEMBER(x68k_state, mfp_tbo_w), /* TBO */ |
| r26797 | r26798 | |
| 1755 | 1741 | // start HBlank timer |
| 1756 | 1742 | m_scanline_timer->adjust(machine().primary_screen->scan_period(), 1); |
| 1757 | 1743 | |
| 1758 | | m_mfp.gpio = 0xfb; |
| 1744 | /// TODO: get callbacks to trigger these |
| 1745 | m_mfpdev->i0_w(1); // alarm |
| 1746 | m_mfpdev->i1_w(1); // expon |
| 1747 | m_mfpdev->i2_w(0); // pow sw |
| 1748 | m_mfpdev->i3_w(1); // fmirq |
| 1749 | m_mfpdev->i4_w(1); // v-disp |
| 1750 | m_mfpdev->i5_w(1); // unused (always set) |
| 1751 | m_mfpdev->i6_w(1); // cirq |
| 1752 | m_mfpdev->i7_w(1); // h-sync |
| 1759 | 1753 | |
| 1760 | 1754 | // reset output values |
| 1761 | 1755 | output_set_value("key_led_kana",1); |
trunk/src/mess/drivers/atarist.c
| r26797 | r26798 | |
| 1896 | 1896 | // MC68901_INTERFACE( mfp_intf ) |
| 1897 | 1897 | //------------------------------------------------- |
| 1898 | 1898 | |
| 1899 | | READ8_MEMBER( st_state::mfp_gpio_r ) |
| 1900 | | { |
| 1901 | | /* |
| 1902 | | |
| 1903 | | bit description |
| 1904 | | |
| 1905 | | 0 Centronics BUSY |
| 1906 | | 1 RS232 DCD |
| 1907 | | 2 RS232 CTS |
| 1908 | | 3 Blitter done |
| 1909 | | 4 Keyboard/MIDI |
| 1910 | | 5 FDC |
| 1911 | | 6 RS232 RI |
| 1912 | | 7 Monochrome monitor detect |
| 1913 | | |
| 1914 | | */ |
| 1915 | | |
| 1916 | | UINT8 data = 0; |
| 1917 | | |
| 1918 | | // centronics busy |
| 1919 | | data |= m_centronics->busy_r(); |
| 1920 | | |
| 1921 | | // data carrier detect |
| 1922 | | data |= m_rs232->dcd_r() << 1; |
| 1923 | | |
| 1924 | | // clear to send |
| 1925 | | data |= m_rs232->cts_r() << 2; |
| 1926 | | |
| 1927 | | // blitter done |
| 1928 | | data |= m_blitter_done << 3; |
| 1929 | | |
| 1930 | | // keyboard/MIDI interrupt |
| 1931 | | data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4; |
| 1932 | | |
| 1933 | | // floppy interrupt request |
| 1934 | | data |= !m_fdc->intrq_r() << 5; |
| 1935 | | |
| 1936 | | // ring indicator |
| 1937 | | data |= m_rs232->ri_r() << 6; |
| 1938 | | |
| 1939 | | // monochrome monitor detect |
| 1940 | | data |= m_monochrome << 7; |
| 1941 | | |
| 1942 | | return data; |
| 1943 | | } |
| 1944 | | |
| 1945 | 1899 | WRITE_LINE_MEMBER( st_state::mfp_tdo_w ) |
| 1946 | 1900 | { |
| 1947 | 1901 | m_mfp->clock_w(state); |
| r26797 | r26798 | |
| 1953 | 1907 | 0, /* receive clock */ |
| 1954 | 1908 | 0, /* transmit clock */ |
| 1955 | 1909 | DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */ |
| 1956 | | DEVCB_DRIVER_MEMBER(st_state, mfp_gpio_r), /* GPIO read */ |
| 1957 | 1910 | DEVCB_NULL, /* GPIO write */ |
| 1958 | 1911 | DEVCB_NULL, /* TAO */ |
| 1959 | 1912 | DEVCB_NULL, /* TBO */ |
| r26797 | r26798 | |
| 1967 | 1920 | // MC68901_INTERFACE( atariste_mfp_intf ) |
| 1968 | 1921 | //------------------------------------------------- |
| 1969 | 1922 | |
| 1970 | | READ8_MEMBER( ste_state::mfp_gpio_r ) |
| 1971 | | { |
| 1972 | | /* |
| 1973 | | |
| 1974 | | bit description |
| 1975 | | |
| 1976 | | 0 Centronics BUSY |
| 1977 | | 1 RS232 DCD |
| 1978 | | 2 RS232 CTS |
| 1979 | | 3 Blitter done |
| 1980 | | 4 Keyboard/MIDI |
| 1981 | | 5 FDC |
| 1982 | | 6 RS232 RI |
| 1983 | | 7 Monochrome monitor detect / DMA sound active |
| 1984 | | |
| 1985 | | */ |
| 1986 | | |
| 1987 | | UINT8 data = 0; |
| 1988 | | |
| 1989 | | // centronics busy |
| 1990 | | data |= m_centronics->busy_r(); |
| 1991 | | |
| 1992 | | // data carrier detect |
| 1993 | | data |= m_rs232->dcd_r() << 1; |
| 1994 | | |
| 1995 | | // clear to send |
| 1996 | | data |= m_rs232->cts_r() << 2; |
| 1997 | | |
| 1998 | | // blitter done |
| 1999 | | data |= m_blitter_done << 3; |
| 2000 | | |
| 2001 | | // keyboard/MIDI interrupt |
| 2002 | | data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4; |
| 2003 | | |
| 2004 | | // floppy interrupt request |
| 2005 | | data |= !m_fdc->intrq_r() << 5; |
| 2006 | | |
| 2007 | | // ring indicator |
| 2008 | | data |= m_rs232->ri_r() << 6; |
| 2009 | | |
| 2010 | | // monochrome monitor detect, DMA sound active |
| 2011 | | data |= (m_monochrome ^ m_dmasnd_active) << 7; |
| 2012 | | |
| 2013 | | return data; |
| 2014 | | } |
| 2015 | | |
| 2016 | 1923 | static MC68901_INTERFACE( atariste_mfp_intf ) |
| 2017 | 1924 | { |
| 2018 | 1925 | Y1, /* timer clock */ |
| 2019 | 1926 | 0, /* receive clock */ |
| 2020 | 1927 | 0, /* transmit clock */ |
| 2021 | 1928 | DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */ |
| 2022 | | DEVCB_DRIVER_MEMBER(ste_state, mfp_gpio_r), /* GPIO read */ |
| 2023 | 1929 | DEVCB_NULL, /* GPIO write */ |
| 2024 | 1930 | DEVCB_NULL, /* TAO */ |
| 2025 | 1931 | DEVCB_NULL, /* TBO */ |
| r26797 | r26798 | |
| 2033 | 1939 | // MC68901_INTERFACE( stbook_mfp_intf ) |
| 2034 | 1940 | //------------------------------------------------- |
| 2035 | 1941 | |
| 2036 | | READ8_MEMBER( stbook_state::mfp_gpio_r ) |
| 2037 | | { |
| 2038 | | /* |
| 2039 | 1942 | |
| 2040 | | bit description |
| 1943 | // TODO power alarms (i7_w) |
| 2041 | 1944 | |
| 2042 | | 0 Centronics BUSY |
| 2043 | | 1 RS232 DCD |
| 2044 | | 2 RS232 CTS |
| 2045 | | 3 Blitter done |
| 2046 | | 4 Keyboard/MIDI |
| 2047 | | 5 FDC |
| 2048 | | 6 RS232 RI |
| 2049 | | 7 POWER ALARMS |
| 2050 | | |
| 2051 | | */ |
| 2052 | | |
| 2053 | | UINT8 data = 0; |
| 2054 | | |
| 2055 | | // centronics busy |
| 2056 | | data |= m_centronics->busy_r(); |
| 2057 | | |
| 2058 | | // data carrier detect |
| 2059 | | data |= m_rs232->dcd_r() << 1; |
| 2060 | | |
| 2061 | | // clear to send |
| 2062 | | data |= m_rs232->cts_r() << 2; |
| 2063 | | |
| 2064 | | // blitter done |
| 2065 | | data |= m_blitter_done << 3; |
| 2066 | | |
| 2067 | | // keyboard/MIDI interrupt |
| 2068 | | data |= (!(m_acia_ikbd_irq || m_acia_midi_irq)) << 4; |
| 2069 | | |
| 2070 | | // floppy data request |
| 2071 | | data |= !m_fdc->intrq_r() << 5; |
| 2072 | | |
| 2073 | | // ring indicator |
| 2074 | | data |= m_rs232->ri_r() << 6; |
| 2075 | | |
| 2076 | | // TODO power alarms |
| 2077 | | |
| 2078 | | return data; |
| 2079 | | } |
| 2080 | | |
| 2081 | 1945 | static MC68901_INTERFACE( stbook_mfp_intf ) |
| 2082 | 1946 | { |
| 2083 | 1947 | Y1, /* timer clock */ |
| 2084 | 1948 | 0, /* receive clock */ |
| 2085 | 1949 | 0, /* transmit clock */ |
| 2086 | 1950 | DEVCB_CPU_INPUT_LINE(M68000_TAG, M68K_IRQ_6), /* interrupt */ |
| 2087 | | DEVCB_DRIVER_MEMBER(stbook_state, mfp_gpio_r), /* GPIO read */ |
| 2088 | 1951 | DEVCB_NULL, /* GPIO write */ |
| 2089 | 1952 | DEVCB_NULL, /* TAO */ |
| 2090 | 1953 | DEVCB_NULL, /* TBO */ |
| r26797 | r26798 | |
| 2265 | 2128 | |
| 2266 | 2129 | m_fdc->setup_drq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_drq_w), this)); |
| 2267 | 2130 | m_fdc->setup_intrq_cb(wd1772_t::line_cb(FUNC(st_state::fdc_intrq_w), this)); |
| 2131 | |
| 2132 | /// TODO: get callbacks to trigger these. |
| 2133 | m_mfp->i0_w(1); |
| 2134 | m_mfp->i5_w(1); |
| 2135 | m_mfp->i7_w(1); |
| 2268 | 2136 | } |
| 2269 | 2137 | |
| 2270 | 2138 | |
| r26797 | r26798 | |
| 2310 | 2178 | |
| 2311 | 2179 | /* register for state saving */ |
| 2312 | 2180 | state_save(); |
| 2181 | |
| 2182 | /// TODO: get callbacks to trigger these. |
| 2183 | m_mfp->i0_w(1); |
| 2184 | m_mfp->i5_w(1); |
| 2185 | m_mfp->i7_w(1); |
| 2313 | 2186 | } |
| 2314 | 2187 | |
| 2315 | 2188 | |
| r26797 | r26798 | |
| 2346 | 2219 | |
| 2347 | 2220 | /* register for state saving */ |
| 2348 | 2221 | ste_state::state_save(); |
| 2222 | |
| 2223 | /// TODO: get callbacks to trigger these. |
| 2224 | m_mfp->i0_w(1); |
| 2225 | m_mfp->i5_w(1); |
| 2349 | 2226 | } |
| 2350 | 2227 | |
| 2351 | 2228 | FLOPPY_FORMATS_MEMBER( st_state::floppy_formats ) |