Previous 15994 Revisions Next

r15372 Thursday 31st May, 2012 at 19:47:53 UTC by Curt Coder
[WANGPC] DMA WIP. (nw)
[src/mess/drivers]wangpc.c
[src/mess/includes]wangpc.h
[src/mess/machine]wangpcbus.c wangpcbus.h

src/mess/machine/wangpcbus.c
r15371r15372
257257   return retVal;
258258}
259259 
260 
261260//-------------------------------------------------
262261//  dack_w - DMA write
263262//-------------------------------------------------
264263 
265void wangpcbus_device::dack_w(int line,UINT8 data)
264void wangpcbus_device::dack_w(int line, UINT8 data)
266265{
267266   device_wangpcbus_card_interface *entry = m_device_list.first();
268267 
r15371r15372
277276   }
278277}
279278 
279READ8_MEMBER( wangpcbus_device::dack0_r ) { return dack_r(0); }
280WRITE8_MEMBER( wangpcbus_device::dack0_w ) { dack_w(0, data); }
281READ8_MEMBER( wangpcbus_device::dack1_r ) { return dack_r(1); }
282WRITE8_MEMBER( wangpcbus_device::dack1_w ) { dack_w(1, data); }
283READ8_MEMBER( wangpcbus_device::dack2_r ) { return dack_r(2); }
284WRITE8_MEMBER( wangpcbus_device::dack2_w ) { dack_w(2, data); }
285READ8_MEMBER( wangpcbus_device::dack3_r ) { return dack_r(3); }
286WRITE8_MEMBER( wangpcbus_device::dack3_w ) { dack_w(3, data); }
280287 
288 
281289//-------------------------------------------------
282290//  tc_w - terminal count
283291//-------------------------------------------------
284292 
285void wangpcbus_device::tc_w(int state)
293WRITE_LINE_MEMBER( wangpcbus_device::tc_w )
286294{
287295   device_wangpcbus_card_interface *entry = m_device_list.first();
288296 
r15371r15372
294302}
295303 
296304 
305 
297306//**************************************************************************
298//  DEVICE S100 CARD INTERFACE
307//  DEVICE WANG PC BUS CARD INTERFACE
299308//**************************************************************************
300309 
301310//-------------------------------------------------
src/mess/machine/wangpcbus.h
r15371r15372
109109 
110110   void add_wangpcbus_card(device_wangpcbus_card_interface *card, int sid);
111111 
112   // computer interface
112113   DECLARE_READ16_MEMBER( mrdc_r );
113114   DECLARE_WRITE16_MEMBER( amwc_w );
114115 
115116   DECLARE_READ16_MEMBER( sad_r );
116117   DECLARE_WRITE16_MEMBER( sad_w );
117118 
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
118134   DECLARE_WRITE_LINE_MEMBER( irq2_w );
119135   DECLARE_WRITE_LINE_MEMBER( irq3_w );
120136   DECLARE_WRITE_LINE_MEMBER( irq4_w );
r15371r15372
126142   DECLARE_WRITE_LINE_MEMBER( drq3_w );
127143   DECLARE_WRITE_LINE_MEMBER( ioerror_w );
128144 
129   UINT8 dack_r(int line);
130   void dack_w(int line, UINT8 data);
131   void tc_w(int state);
132 
133145protected:
134146   // device-level overrides
135147   virtual void device_start();
src/mess/includes/wangpc.h
r15371r15372
141141   DECLARE_WRITE_LINE_MEMBER( eop_w );
142142   DECLARE_READ8_MEMBER( memr_r );
143143   DECLARE_WRITE8_MEMBER( memw_w );
144   DECLARE_READ8_MEMBER( ior1_r );
145144   DECLARE_READ8_MEMBER( ior2_r );
146   DECLARE_READ8_MEMBER( ior3_r );
147   DECLARE_WRITE8_MEMBER( iow1_w );
148145   DECLARE_WRITE8_MEMBER( iow2_w );
149   DECLARE_WRITE8_MEMBER( iow3_w );
150146   DECLARE_WRITE_LINE_MEMBER( dack0_w );
151147   DECLARE_WRITE_LINE_MEMBER( dack1_w );
152148   DECLARE_WRITE_LINE_MEMBER( dack2_w );
r15371r15372
169165   static void on_disk0_change(device_image_interface &image);
170166   static void on_disk1_change(device_image_interface &image);
171167 
172   UINT8 m_dma_page[3];
173   int m_dma_channel;
168   UINT8 m_dma_page[4];
169   int m_dack;
174170 
175171   int m_timer2_irq;
176172   int m_acknlg;
src/mess/drivers/wangpc.c
r15371r15372
691691READ8_MEMBER( wangpc_state::memr_r )
692692{
693693   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;
695695 
696   return program->read_byte(page_offset + offset);
696   return program->read_byte(addr);
697697}
698698 
699699WRITE8_MEMBER( wangpc_state::memw_w )
700700{
701701   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;
703703 
704   program->write_byte(page_offset + offset, data);
704   program->write_byte(addr, data);
705705}
706706 
707READ8_MEMBER( wangpc_state::ior1_r )
708{
709   return m_bus->dack_r(1);
710}
711 
712707READ8_MEMBER( wangpc_state::ior2_r )
713708{
714709   if (m_fdc_dma_enable)
r15371r15372
717712      return upd765_dack_r(m_fdc, 0);
718713}
719714 
720READ8_MEMBER( wangpc_state::ior3_r )
721{
722   return m_bus->dack_r(3);
723}
724 
725WRITE8_MEMBER( wangpc_state::iow1_w )
726{
727   m_bus->dack_w(1, data);
728}
729 
730715WRITE8_MEMBER( wangpc_state::iow2_w )
731716{
732717   if (m_fdc_dma_enable)
r15371r15372
735720      upd765_dack_w(m_fdc, 0, data);
736721}
737722 
738WRITE8_MEMBER( wangpc_state::iow3_w )
739{
740   m_bus->dack_w(3, data);
741}
742 
743723WRITE_LINE_MEMBER( wangpc_state::dack0_w )
744724{
745   if (!state) m_dma_channel = 0;
725   if (!state) m_dack = 0;
746726}
747727 
748728WRITE_LINE_MEMBER( wangpc_state::dack1_w )
749729{
750   if (!state) m_dma_channel = 1;
730   if (!state) m_dack = 1;
751731}
752732 
753733WRITE_LINE_MEMBER( wangpc_state::dack2_w )
754734{
755   if (!state) m_dma_channel = 2;
735   if (!state) m_dack = 2;
756736}
757737 
758738WRITE_LINE_MEMBER( wangpc_state::dack3_w )
759739{
760   if (!state) m_dma_channel = 3;
740   if (!state) m_dack = 3;
761741}
762742 
763743static I8237_INTERFACE( dmac_intf )
r15371r15372
767747   DEVCB_DRIVER_MEMBER(wangpc_state, memr_r),
768748   DEVCB_DRIVER_MEMBER(wangpc_state, memw_w),
769749   { DEVCB_NULL,
770     DEVCB_DRIVER_MEMBER(wangpc_state, ior1_r),
750     DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack1_r),
771751     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) },
773753   { DEVCB_NULL,
774     DEVCB_DRIVER_MEMBER(wangpc_state, iow1_w),
754     DEVCB_DEVICE_MEMBER(WANGPC_BUS_TAG, wangpcbus_device, dack1_w),
775755     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) },
777757   { DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack0_w),
778758     DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack1_w),
779759     DEVCB_DRIVER_LINE_MEMBER(wangpc_state, dack2_w),
r15371r15372
11941174 
11951175   // state saving
11961176   save_item(NAME(m_dma_page));
1197   save_item(NAME(m_dma_channel));
1177   save_item(NAME(m_dack));
11981178   save_item(NAME(m_timer2_irq));
11991179   save_item(NAME(m_acknlg));
12001180   save_item(NAME(m_dav));

Previous 15994 Revisions Next


© 1998-2018 The MESS Team