src/mess/machine/wangpcbus.c
| r15371 | r15372 | |
| 257 | 257 | return retVal;
|
| 258 | 258 | }
|
| 259 | 259 | |
| 260 | | |
| 261 | 260 | //-------------------------------------------------
|
| 262 | 261 | // dack_w - DMA write
|
| 263 | 262 | //-------------------------------------------------
|
| 264 | 263 | |
| 265 | | void wangpcbus_device::dack_w(int line,UINT8 data)
|
| 264 | void wangpcbus_device::dack_w(int line, UINT8 data)
|
| 266 | 265 | {
|
| 267 | 266 | device_wangpcbus_card_interface *entry = m_device_list.first();
|
| 268 | 267 | |
| r15371 | r15372 | |
| 277 | 276 | }
|
| 278 | 277 | }
|
| 279 | 278 | |
| 279 | READ8_MEMBER( wangpcbus_device::dack0_r ) { return dack_r(0); }
|
| 280 | WRITE8_MEMBER( wangpcbus_device::dack0_w ) { dack_w(0, data); }
|
| 281 | READ8_MEMBER( wangpcbus_device::dack1_r ) { return dack_r(1); }
|
| 282 | WRITE8_MEMBER( wangpcbus_device::dack1_w ) { dack_w(1, data); }
|
| 283 | READ8_MEMBER( wangpcbus_device::dack2_r ) { return dack_r(2); }
|
| 284 | WRITE8_MEMBER( wangpcbus_device::dack2_w ) { dack_w(2, data); }
|
| 285 | READ8_MEMBER( wangpcbus_device::dack3_r ) { return dack_r(3); }
|
| 286 | WRITE8_MEMBER( wangpcbus_device::dack3_w ) { dack_w(3, data); }
|
| 280 | 287 | |
| 288 | |
| 281 | 289 | //-------------------------------------------------
|
| 282 | 290 | // tc_w - terminal count
|
| 283 | 291 | //-------------------------------------------------
|
| 284 | 292 | |
| 285 | | void wangpcbus_device::tc_w(int state)
|
| 293 | WRITE_LINE_MEMBER( wangpcbus_device::tc_w )
|
| 286 | 294 | {
|
| 287 | 295 | device_wangpcbus_card_interface *entry = m_device_list.first();
|
| 288 | 296 | |
| r15371 | r15372 | |
| 294 | 302 | }
|
| 295 | 303 | |
| 296 | 304 | |
| 305 | |
| 297 | 306 | //**************************************************************************
|
| 298 | | // DEVICE S100 CARD INTERFACE
|
| 307 | // DEVICE WANG PC BUS CARD INTERFACE
|
| 299 | 308 | //**************************************************************************
|
| 300 | 309 | |
| 301 | 310 | //-------------------------------------------------
|
src/mess/machine/wangpcbus.h
| r15371 | r15372 | |
| 109 | 109 | |
| 110 | 110 | void add_wangpcbus_card(device_wangpcbus_card_interface *card, int sid);
|
| 111 | 111 | |
| 112 | // computer interface
|
| 112 | 113 | DECLARE_READ16_MEMBER( mrdc_r );
|
| 113 | 114 | DECLARE_WRITE16_MEMBER( amwc_w );
|
| 114 | 115 | |
| 115 | 116 | DECLARE_READ16_MEMBER( sad_r );
|
| 116 | 117 | DECLARE_WRITE16_MEMBER( sad_w );
|
| 117 | 118 | |
| 119 | UINT8 dack_r(int line);
|
| 120 | void dack_w(int line, UINT8 data);
|
| 121 | |
| 122 | DECLARE_READ8_MEMBER( dack0_r );
|
| 123 | DECLARE_WRITE8_MEMBER( dack0_w );
|
| 124 | DECLARE_READ8_MEMBER( dack1_r );
|
| 125 | DECLARE_WRITE8_MEMBER( dack1_w );
|
| 126 | DECLARE_READ8_MEMBER( dack2_r );
|
| 127 | DECLARE_WRITE8_MEMBER( dack2_w );
|
| 128 | DECLARE_READ8_MEMBER( dack3_r );
|
| 129 | DECLARE_WRITE8_MEMBER( dack3_w );
|
| 130 | |
| 131 | DECLARE_WRITE_LINE_MEMBER( tc_w );
|
| 132 | |
| 133 | // peripheral interface
|
| 118 | 134 | DECLARE_WRITE_LINE_MEMBER( irq2_w );
|
| 119 | 135 | DECLARE_WRITE_LINE_MEMBER( irq3_w );
|
| 120 | 136 | DECLARE_WRITE_LINE_MEMBER( irq4_w );
|
| r15371 | r15372 | |
| 126 | 142 | DECLARE_WRITE_LINE_MEMBER( drq3_w );
|
| 127 | 143 | DECLARE_WRITE_LINE_MEMBER( ioerror_w );
|
| 128 | 144 | |
| 129 | | UINT8 dack_r(int line);
|
| 130 | | void dack_w(int line, UINT8 data);
|
| 131 | | void tc_w(int state);
|
| 132 | | |
| 133 | 145 | protected:
|
| 134 | 146 | // device-level overrides
|
| 135 | 147 | virtual void device_start();
|
src/mess/includes/wangpc.h
| r15371 | r15372 | |
| 141 | 141 | DECLARE_WRITE_LINE_MEMBER( eop_w );
|
| 142 | 142 | DECLARE_READ8_MEMBER( memr_r );
|
| 143 | 143 | DECLARE_WRITE8_MEMBER( memw_w );
|
| 144 | | DECLARE_READ8_MEMBER( ior1_r );
|
| 145 | 144 | DECLARE_READ8_MEMBER( ior2_r );
|
| 146 | | DECLARE_READ8_MEMBER( ior3_r );
|
| 147 | | DECLARE_WRITE8_MEMBER( iow1_w );
|
| 148 | 145 | DECLARE_WRITE8_MEMBER( iow2_w );
|
| 149 | | DECLARE_WRITE8_MEMBER( iow3_w );
|
| 150 | 146 | DECLARE_WRITE_LINE_MEMBER( dack0_w );
|
| 151 | 147 | DECLARE_WRITE_LINE_MEMBER( dack1_w );
|
| 152 | 148 | DECLARE_WRITE_LINE_MEMBER( dack2_w );
|
| r15371 | r15372 | |
| 169 | 165 | static void on_disk0_change(device_image_interface &image);
|
| 170 | 166 | static void on_disk1_change(device_image_interface &image);
|
| 171 | 167 | |
| 172 | | UINT8 m_dma_page[3];
|
| 173 | | int m_dma_channel;
|
| 168 | UINT8 m_dma_page[4];
|
| 169 | int m_dack;
|
| 174 | 170 | |
| 175 | 171 | int m_timer2_irq;
|
| 176 | 172 | int m_acknlg;
|
src/mess/drivers/wangpc.c
| r15371 | r15372 | |
| 691 | 691 | READ8_MEMBER( wangpc_state::memr_r )
|
| 692 | 692 | {
|
| 693 | 693 | address_space *program = m_maincpu->memory().space(AS_PROGRAM);
|
| 694 | | offs_t page_offset = m_dma_page[m_dma_channel] << 16;
|
| 694 | offs_t addr = (m_dma_page[m_dack] << 16) | offset;
|
| 695 | 695 | |
| 696 | | return program->read_byte(page_offset + offset);
|
| 696 | return program->read_byte(addr);
|
| 697 | 697 | }
|
| 698 | 698 | |
| 699 | 699 | WRITE8_MEMBER( wangpc_state::memw_w )
|
| 700 | 700 | {
|
| 701 | 701 | address_space *program = m_maincpu->memory().space(AS_PROGRAM);
|
| 702 | | offs_t page_offset = m_dma_page[m_dma_channel] << 16;
|
| 702 | offs_t addr = (m_dma_page[m_dack] << 16) | offset;
|
| 703 | 703 | |
| 704 | | program->write_byte(page_offset + offset, data);
|
| 704 | program->write_byte(addr, data);
|
| 705 | 705 | }
|
| 706 | 706 | |
| 707 | | READ8_MEMBER( wangpc_state::ior1_r )
|
| 708 | | {
|
| 709 | | return m_bus->dack_r(1);
|
| 710 | | }
|
| 711 | | |
| 712 | 707 | READ8_MEMBER( wangpc_state::ior2_r )
|
| 713 | 708 | {
|
| 714 | 709 | if (m_fdc_dma_enable)
|
| r15371 | r15372 | |
| 717 | 712 | return upd765_dack_r(m_fdc, 0);
|
| 718 | 713 | }
|
| 719 | 714 | |
| 720 | | READ8_MEMBER( wangpc_state::ior3_r )
|
| 721 | | {
|
| 722 | | return m_bus->dack_r(3);
|
| 723 | | }
|
| 724 | | |
| 725 | | WRITE8_MEMBER( wangpc_state::iow1_w )
|
| 726 | | {
|
| 727 | | m_bus->dack_w(1, data);
|
| 728 | | }
|
| 729 | | |
| 730 | 715 | WRITE8_MEMBER( wangpc_state::iow2_w )
|
| 731 | 716 | {
|
| 732 | 717 | if (m_fdc_dma_enable)
|
| r15371 | r15372 | |
| 735 | 720 | upd765_dack_w(m_fdc, 0, data);
|
| 736 | 721 | }
|
| 737 | 722 | |
| 738 | | WRITE8_MEMBER( wangpc_state::iow3_w )
|
| 739 | | {
|
| 740 | | m_bus->dack_w(3, data);
|
| 741 | | }
|
| 742 | | |
| 743 | 723 | WRITE_LINE_MEMBER( wangpc_state::dack0_w )
|
| 744 | 724 | {
|
| 745 | | if (!state) m_dma_channel = 0;
|
| 725 | if (!state) m_dack = 0;
|
| 746 | 726 | }
|
| 747 | 727 | |
| 748 | 728 | WRITE_LINE_MEMBER( wangpc_state::dack1_w )
|
| 749 | 729 | {
|
| 750 | | if (!state) m_dma_channel = 1;
|
| 730 | if (!state) m_dack = 1;
|
| 751 | 731 | }
|
| 752 | 732 | |
| 753 | 733 | WRITE_LINE_MEMBER( wangpc_state::dack2_w )
|
| 754 | 734 | {
|
| 755 | | if (!state) m_dma_channel = 2;
|
| 735 | if (!state) m_dack = 2;
|
| 756 | 736 | }
|
| 757 | 737 | |
| 758 | 738 | WRITE_LINE_MEMBER( wangpc_state::dack3_w )
|
| 759 | 739 | {
|
| 760 | | if (!state) m_dma_channel = 3;
|
| 740 | if (!state) m_dack = 3;
|
| 761 | 741 | }
|
| 762 | 742 | |
| 763 | 743 | static I8237_INTERFACE( dmac_intf )
|
| r15371 | r15372 | |
| 767 | 747 | DEVCB_DRIVER_MEMBER(wangpc_state, memr_r),
|
| 768 | 748 | DEVCB_DRIVER_MEMBER(wangpc_state, memw_w),
|
| 769 | 749 | { DEVCB_NULL,
|
| 770 | | DEVCB_DRIVER_MEMBER(wangpc_state, ior1_r),
|
| 750 | DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack1_r),
|
| 771 | 751 | DEVCB_DRIVER_MEMBER(wangpc_state, ior2_r),
|
| 772 | | DEVCB_DRIVER_MEMBER(wangpc_state, ior3_r) },
|
| 752 | DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack3_r) },
|
| 773 | 753 | { DEVCB_NULL,
|
| 774 | | DEVCB_DRIVER_MEMBER(wangpc_state, iow1_w),
|
| 754 | DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack1_w),
|
| 775 | 755 | DEVCB_DRIVER_MEMBER(wangpc_state, iow2_w),
|
| 776 | | DEVCB_DRIVER_MEMBER(wangpc_state, iow3_w) },
|
| 756 | DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack3_w) },
|
| 777 | 757 | { DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack0_w),
|
| 778 | 758 | DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack1_w),
|
| 779 | 759 | DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack2_w),
|
| r15371 | r15372 | |
| 1194 | 1174 | |
| 1195 | 1175 | // state saving
|
| 1196 | 1176 | save_item(NAME(m_dma_page));
|
| 1197 | | save_item(NAME(m_dma_channel));
|
| 1177 | save_item(NAME(m_dack));
|
| 1198 | 1178 | save_item(NAME(m_timer2_irq));
|
| 1199 | 1179 | save_item(NAME(m_acknlg));
|
| 1200 | 1180 | save_item(NAME(m_dav));
|