Previous 199869 Revisions Next

r19475 Tuesday 11th December, 2012 at 20:08:52 UTC by Curt Coder
(MESS) comx35: FDC WIP. (nw)
[src/emu/cpu/cosmac]cosmac.c
[src/emu/machine]wd_fdc.c
[src/mess/drivers]comx35.c
[src/mess/machine]comx_eb.c comx_fd.c comx_fd.h

trunk/src/emu/machine/wd_fdc.c
r19474r19475
104104   intrq = false;
105105   drq = false;
106106   hld = false;
107   intrq_cond = 0;
107108   live_abort();
108109}
109110
trunk/src/emu/cpu/cosmac/cosmac.c
r19474r19475
199199     m_direct(NULL)
200200{
201201   for (int i = 0; i < 4; i++)
202      EF[i] = 0;
202      EF[i] = CLEAR_LINE;
203203}
204204
205205
trunk/src/mess/machine/comx_eb.c
r19474r19475
256256   {
257257      if (m_expansion_slot[slot] != NULL)
258258      {
259         if (m_expansion_slot[slot]->ef4_r() == ASSERT_LINE)
260         {
261            state = ASSERT_LINE;
262            break;
263         }
259         state |= m_expansion_slot[slot]->ef4_r();
264260      }
265261   }
266262
r19474r19475
276272{
277273   for (int slot = 0; slot < MAX_EB_SLOTS; slot++)
278274   {
279      if (BIT(m_select, slot) && m_expansion_slot[slot] != NULL)
275      if (m_expansion_slot[slot] != NULL)
280276      {
281277         m_expansion_slot[slot]->q_w(state);
282278      }
trunk/src/mess/machine/comx_fd.c
r19474r19475
9494   SLOT_INTERFACE( "525qd", FLOPPY_525_QD )
9595SLOT_INTERFACE_END
9696
97void comx_fd_device::intrq_w(bool state)
98{
99   m_intrq = state;
100}
10197
102void comx_fd_device::drq_w(bool state)
103{
104   m_drq = state;
105}
106
107
10898//-------------------------------------------------
10999//  MACHINE_CONFIG_FRAGMENT( comx_fd )
110100//-------------------------------------------------
r19474r19475
143133   m_fdc(*this, WD1770_TAG),
144134   m_floppy0(*this, WD1770_TAG":0"),
145135   m_floppy1(*this, WD1770_TAG":1"),
146   m_ds(0),
147136   m_q(0),
148137   m_addr(0),
149   m_intrq(0),
150   m_drq(0),
151138   m_disb(1)
152139{
153140}
r19474r19475
163150   m_rom = memregion("c000")->base();
164151
165152   // initialize floppy controller
166   m_fdc->setup_intrq_cb(wd_fdc_t::line_cb(FUNC(comx_fd_device::intrq_w), this));
167   m_fdc->setup_drq_cb(wd_fdc_t::line_cb(FUNC(comx_fd_device::drq_w), this));
168153   m_fdc->dden_w(1);
169154
170155   // state saving
171156   save_item(NAME(m_ds));
172157   save_item(NAME(m_q));
173158   save_item(NAME(m_addr));
174   save_item(NAME(m_intrq));
175   save_item(NAME(m_drq));
176159   save_item(NAME(m_disb));
177160}
178161
r19474r19475
183166
184167void comx_fd_device::device_reset()
185168{
169   m_fdc->set_floppy(NULL);
186170   m_fdc->reset();
171
172   m_addr = 0;
173   m_disb = 1;
187174}
188175
189176
r19474r19475
197184
198185   if (m_ds && !m_disb)
199186   {
200      state = m_drq ? ASSERT_LINE : CLEAR_LINE;
187      state = !m_fdc->drq_r();
201188   }
202189
203190   return state;
r19474r19475
248235   {
249236      if (m_q)
250237      {
251         data = m_intrq ? 1 : 0;
238         data = 0xfe | m_fdc->intrq_r();
239         logerror("%s FDC intrq read %02x\n", machine().describe_context(), data);
252240      }
253241      else
254242      {
255243         data = m_fdc->gen_r(m_addr);
244         logerror("%s FDC read %u:%02x\n", machine().describe_context(), m_addr,data);
256245      }
257246   }
258247
trunk/src/mess/machine/comx_fd.h
r19474r19475
3737   virtual const rom_entry *device_rom_region() const;
3838   virtual machine_config_constructor device_mconfig_additions() const;
3939
40   // not really public
41   void intrq_w(bool state);
42   void drq_w(bool state);
43
4440   DECLARE_FLOPPY_FORMATS( floppy_formats );
4541
4642protected:
4743   // device-level overrides
44   virtual void device_config_complete() { m_shortname = "comx_fd"; }
4845   virtual void device_start();
4946   virtual void device_reset();
50   virtual void device_config_complete() { m_shortname = "comx_fd"; }
5147
5248   // device_comx_expansion_card_interface overrides
5349   virtual int comx_ef4_r();
r19474r19475
5753   virtual void comx_io_w(address_space &space, offs_t offset, UINT8 data);
5854
5955private:
60   inline void update_ef4();
61
6256   // internal state
6357   required_device<wd1770_t> m_fdc;
6458   required_device<floppy_connector> m_floppy0;
6559   required_device<floppy_connector> m_floppy1;
6660
6761   // floppy state
68   int m_ds;               // device select
69   UINT8 *m_rom;
62   const UINT8 *m_rom;
7063   int m_q;                // FDC register select
7164   int m_addr;             // FDC address
72   bool m_intrq;           // interrupt request
73   bool m_drq;             // data request
7465   int m_disb;             // data request disable
7566};
7667
trunk/src/mess/drivers/comx35.c
r19474r19475
251251
252252void comx35_state::check_interrupt()
253253{
254   m_maincpu->set_input_line(COSMAC_INPUT_LINE_INT, m_cr1 | m_int);
254   m_maincpu->set_input_line(COSMAC_INPUT_LINE_INT, m_cr1 || m_int);
255255}
256256
257257READ_LINE_MEMBER( comx35_state::clear_r )
r19474r19475
457457{
458458   // clear the RAM since DOS card will go crazy if RAM is not all zeroes
459459   UINT8 *ram = m_ram->pointer();
460   memset(ram, 0, 0x8000);
460   memset(ram, 0, m_ram->size());
461461
462462   // find memory regions
463463   m_rom = memregion(CDP1802_TAG)->base();

Previous 199869 Revisions Next


© 1997-2024 The MAME Team