trunk/src/mess/includes/cbm2.h
| r21396 | r21397 | |
| 175 | 175 | int *crtccs, int *cs1, int *sidcs, int *extprtcs, int *ciacs, int *aciacs, int *tript1cs, int *tript2cs); |
| 176 | 176 | |
| 177 | 177 | UINT8 read_keyboard(); |
| 178 | void set_busy2(int state); |
| 178 | 179 | |
| 179 | 180 | DECLARE_READ8_MEMBER( read ); |
| 180 | 181 | DECLARE_WRITE8_MEMBER( write ); |
| r21396 | r21397 | |
| 206 | 207 | DECLARE_WRITE8_MEMBER( ext_tpi_pb_w ); |
| 207 | 208 | DECLARE_WRITE8_MEMBER( ext_tpi_pc_w ); |
| 208 | 209 | |
| 210 | DECLARE_WRITE_LINE_MEMBER( ext_cia_irq_w ); |
| 209 | 211 | DECLARE_READ8_MEMBER( ext_cia_pb_r ); |
| 210 | 212 | DECLARE_WRITE8_MEMBER( ext_cia_pb_w ); |
| 211 | 213 | |
| r21396 | r21397 | |
| 234 | 236 | UINT8 m_tpi2_pb; |
| 235 | 237 | UINT8 m_cia_pa; |
| 236 | 238 | |
| 239 | UINT8 m_ext_cia_pb; |
| 240 | UINT8 m_ext_tpi_pb; |
| 241 | |
| 237 | 242 | // timers |
| 238 | 243 | emu_timer *m_todclk_timer; |
| 239 | 244 | }; |
trunk/src/mess/drivers/cbm2.c
| r21396 | r21397 | |
| 1696 | 1696 | // tpi6525_interface ext_tpi_intf |
| 1697 | 1697 | //------------------------------------------------- |
| 1698 | 1698 | |
| 1699 | void cbm2_state::set_busy2(int state) |
| 1700 | { |
| 1701 | m_busy2 = state; |
| 1702 | |
| 1703 | if (m_busy2) |
| 1704 | { |
| 1705 | m_busen1 = m_dramon; |
| 1706 | } |
| 1707 | else |
| 1708 | { |
| 1709 | m_busen1 = 0; |
| 1710 | } |
| 1711 | } |
| 1712 | |
| 1699 | 1713 | READ8_MEMBER( cbm2_state::ext_tpi_pb_r ) |
| 1700 | 1714 | { |
| 1701 | 1715 | /* |
| r21396 | r21397 | |
| 1703 | 1717 | bit description |
| 1704 | 1718 | |
| 1705 | 1719 | 0 _BUSY1 |
| 1706 | | 1 CIA PB1 |
| 1707 | | 2 CIA PB2 |
| 1708 | | 3 CIA PB3 |
| 1709 | | 4 CIA PB4 |
| 1710 | | 5 CIA PB5 |
| 1720 | 1 _BUSY2 |
| 1721 | 2 _REQ |
| 1722 | 3 _ACK |
| 1723 | 4 DATA/_CMD |
| 1724 | 5 DIR |
| 1711 | 1725 | 6 1 |
| 1712 | 1726 | 7 1 |
| 1713 | 1727 | |
| r21396 | r21397 | |
| 1718 | 1732 | // _BUSY1 |
| 1719 | 1733 | data |= !m_busen1; |
| 1720 | 1734 | |
| 1735 | // _BUSY2 |
| 1736 | data |= m_busy2 << 1; |
| 1737 | |
| 1721 | 1738 | // CIA |
| 1722 | | data = m_ext_cia->pb_r() & 0x3e; |
| 1739 | data |= m_ext_tpi_pb & m_ext_cia_pb & 0x3c; |
| 1723 | 1740 | |
| 1724 | 1741 | return data; |
| 1725 | 1742 | } |
| r21396 | r21397 | |
| 1730 | 1747 | |
| 1731 | 1748 | bit description |
| 1732 | 1749 | |
| 1733 | | 0 U22B CL |
| 1734 | | 1 |
| 1750 | 0 |
| 1751 | 1 _BUSY2 |
| 1735 | 1752 | 2 |
| 1736 | 1753 | 3 |
| 1737 | 1754 | 4 |
| r21396 | r21397 | |
| 1741 | 1758 | |
| 1742 | 1759 | */ |
| 1743 | 1760 | |
| 1761 | m_ext_tpi_pb = data; |
| 1762 | |
| 1744 | 1763 | // _BUSY2 |
| 1745 | | if (!BIT(data, 0)) |
| 1764 | if (!BIT(data, 1)) |
| 1746 | 1765 | { |
| 1747 | | logerror("BUSY2 1\n"); |
| 1748 | | m_busy2 = 1; |
| 1749 | | m_busen1 = m_dramon; |
| 1766 | set_busy2(0); |
| 1750 | 1767 | } |
| 1751 | 1768 | |
| 1769 | // FLAG |
| 1752 | 1770 | m_ext_cia->flag_w(BIT(data, 6)); |
| 1753 | 1771 | } |
| 1754 | 1772 | |
| r21396 | r21397 | |
| 1763 | 1781 | 2 |
| 1764 | 1782 | 3 |
| 1765 | 1783 | 4 |
| 1766 | | 5 U22B CLK |
| 1784 | 5 BSYCLK |
| 1767 | 1785 | 6 |
| 1768 | 1786 | 7 |
| 1769 | 1787 | |
| r21396 | r21397 | |
| 1772 | 1790 | // _BUSY2 |
| 1773 | 1791 | if (BIT(data, 5)) |
| 1774 | 1792 | { |
| 1775 | | logerror("BUSY2 1\n"); |
| 1776 | | m_busy2 = 1; |
| 1777 | | m_busen1 = m_dramon; |
| 1793 | set_busy2(1); |
| 1778 | 1794 | } |
| 1779 | 1795 | } |
| 1780 | 1796 | |
| r21396 | r21397 | |
| 1796 | 1812 | // MOS6526_INTERFACE( ext_cia_intf ) |
| 1797 | 1813 | //------------------------------------------------- |
| 1798 | 1814 | |
| 1815 | WRITE_LINE_MEMBER( cbm2_state::ext_cia_irq_w ) |
| 1816 | { |
| 1817 | m_tpi1->i3_w(!state); |
| 1818 | } |
| 1819 | |
| 1799 | 1820 | READ8_MEMBER( cbm2_state::ext_cia_pb_r ) |
| 1800 | 1821 | { |
| 1801 | 1822 | /* |
| r21396 | r21397 | |
| 1803 | 1824 | bit description |
| 1804 | 1825 | |
| 1805 | 1826 | 0 _BUSY1 |
| 1806 | | 1 TPI PB1 |
| 1807 | | 2 TPI PB2 |
| 1808 | | 3 TPI PB3 |
| 1809 | | 4 TPI PB4 |
| 1810 | | 5 TPI PB5 |
| 1827 | 1 _BUSY2 |
| 1828 | 2 _REQ |
| 1829 | 3 _ACK |
| 1830 | 4 DATA/_CMD |
| 1831 | 5 DIR |
| 1811 | 1832 | 6 1 |
| 1812 | 1833 | 7 1 |
| 1813 | 1834 | |
| r21396 | r21397 | |
| 1818 | 1839 | // _BUSY1 |
| 1819 | 1840 | data |= !m_busen1; |
| 1820 | 1841 | |
| 1842 | // _BUSY2 |
| 1843 | data |= m_busy2 << 1; |
| 1844 | |
| 1821 | 1845 | // TPI |
| 1822 | | data |= tpi6525_portb_r(m_ext_tpi, space, 0) & 0x3e; |
| 1846 | data |= m_ext_tpi_pb & m_ext_cia_pb & 0x3c; |
| 1823 | 1847 | |
| 1824 | 1848 | return data; |
| 1825 | 1849 | } |
| r21396 | r21397 | |
| 1830 | 1854 | |
| 1831 | 1855 | bit description |
| 1832 | 1856 | |
| 1833 | | 0 U22B CL |
| 1834 | | 1 |
| 1857 | 0 |
| 1858 | 1 _BUSY2 |
| 1835 | 1859 | 2 |
| 1836 | 1860 | 3 |
| 1837 | 1861 | 4 |
| 1838 | 1862 | 5 |
| 1839 | | 6 PIC IR0, U29B CL, U22B PR |
| 1840 | | 7 PIC IR7 |
| 1863 | 6 _INT1 |
| 1864 | 7 _INT2 |
| 1841 | 1865 | |
| 1842 | 1866 | */ |
| 1843 | 1867 | |
| 1868 | m_ext_cia_pb = data; |
| 1869 | |
| 1844 | 1870 | // _BUSY2 |
| 1845 | | if (!BIT(data, 0)) |
| 1871 | if (!BIT(data, 1)) |
| 1846 | 1872 | { |
| 1847 | | logerror("BUSY2 1\n"); |
| 1848 | | m_busy2 = 1; |
| 1849 | | m_busen1 = m_dramon; |
| 1873 | set_busy2(0); |
| 1850 | 1874 | } |
| 1851 | | else if (!BIT(data, 6)) |
| 1875 | |
| 1876 | if (!BIT(data, 6)) |
| 1852 | 1877 | { |
| 1853 | | logerror("BUSY2 0\n"); |
| 1854 | | m_busy2 = 0; |
| 1855 | | m_busen1 = 0; |
| 1878 | set_busy2(0); |
| 1856 | 1879 | } |
| 1857 | 1880 | |
| 1858 | 1881 | m_ext_pic->ir0_w(!BIT(data, 6)); |
| r21396 | r21397 | |
| 2077 | 2100 | m_tpi1_irq = CLEAR_LINE; |
| 2078 | 2101 | m_user_irq = CLEAR_LINE; |
| 2079 | 2102 | |
| 2103 | m_ext_tpi_pb = 0xff; |
| 2104 | m_ext_cia_pb = 0xff; |
| 2105 | |
| 2080 | 2106 | m_maincpu->reset(); |
| 2081 | 2107 | |
| 2082 | 2108 | if (m_crtc) m_crtc->reset(); |
| r21396 | r21397 | |
| 2399 | 2425 | |
| 2400 | 2426 | MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf) |
| 2401 | 2427 | MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf) |
| 2402 | | MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 60, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i3_w)) |
| 2428 | MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 60, DEVWRITELINE(DEVICE_SELF, cbm2_state, ext_cia_irq_w)) |
| 2403 | 2429 | MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w)) |
| 2404 | | //MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL) |
| 2430 | MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_device, pa_r), NULL) |
| 2405 | 2431 | MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL) |
| 2406 | 2432 | |
| 2407 | 2433 | MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop") |
| r21396 | r21397 | |
| 2458 | 2484 | |
| 2459 | 2485 | MCFG_PIC8259_ADD(EXT_I8259A_TAG, ext_pic_intf) |
| 2460 | 2486 | MCFG_TPI6525_ADD(EXT_MOS6525_TAG, ext_tpi_intf) |
| 2461 | | MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 50, DEVWRITELINE(MOS6525_1_TAG, tpi6525_device, i3_w)) |
| 2487 | MCFG_MOS6526_ADD(EXT_MOS6526_TAG, XTAL_18MHz/9, 50, DEVWRITELINE(DEVICE_SELF, cbm2_state, ext_cia_irq_w)) |
| 2462 | 2488 | MCFG_MOS6526_SERIAL_CALLBACKS(DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, cnt_w), DEVWRITELINE(CBM2_USER_PORT_TAG, cbm2_user_port_device, sp_w)) |
| 2463 | | //MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_porta_r), NULL) |
| 2489 | MCFG_MOS6526_PORT_A_CALLBACKS(DEVREAD8(EXT_MOS6525_TAG, tpi6525_device, pa_r), NULL) |
| 2464 | 2490 | MCFG_MOS6526_PORT_B_CALLBACKS(DEVREAD8(DEVICE_SELF, cbm2_state, ext_cia_pb_r), DEVWRITE8(DEVICE_SELF, cbm2_state, ext_cia_pb_w), NULL) |
| 2465 | 2491 | |
| 2466 | 2492 | MCFG_SOFTWARE_LIST_ADD("flop_list2", "bx256hp_flop") |