Previous 199869 Revisions Next

r30856 Friday 6th June, 2014 at 06:27:51 UTC by Barry Rodewald
fmscsi: removed a hack, corrected status for invalid drives.  This fixes Windows95 booting. (no whatsnew)
[src/mess/machine]fm_scsi.c fm_scsi.h

trunk/src/mess/machine/fm_scsi.c
r30855r30856
7171   m_target = 0;
7272   m_result_length = 0;
7373   m_result_index = 0;
74   stop_transfer();
75   set_input_line(FMSCSI_LINE_INT,0);
76   m_irq_handler(0);
7477
7578   m_phase = SCSI_PHASE_BUS_FREE;
7679}
r30855r30856
109112   }
110113}
111114
115void fmscsi_device::stop_transfer()
116{
117   m_transfer_timer->adjust(attotime::never);  // stop timer
118   m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_STATUS);
119   if(m_output_lines & FMSCSI_LINE_DMAE)
120   {
121      m_drq_handler(0);
122   }
123   logerror("FMSCSI: Stopping transfer : (%i/%i)\n",m_result_index,m_result_length);
124}
125
112126UINT8 fmscsi_device::fmscsi_data_r(void)
113127{
114128   // read from data bus
r30855r30856
126140      if(m_result_index >= m_result_length)
127141      {
128142         // end of data transfer
129         m_transfer_timer->adjust(attotime::never);  // stop timer
130         m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_STATUS);
131         if(m_output_lines & FMSCSI_LINE_DMAE)
132         {
133            m_drq_handler(0);
134         }
135         logerror("FMSCSI: Stopping transfer : (%i/%i)\n",m_result_index,m_result_length);
143         stop_transfer();
136144      }
137145      return m_data;
138146   }
r30855r30856
147155
148156   if(m_phase == SCSI_PHASE_STATUS)
149157   {
150      m_data = 0;  // GOOD status
158      m_data = get_status();
151159      // no command complete message?
152160      m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_MESSAGE_IN);
153161      m_command_index = 0;
r30855r30856
210218         send_command(m_command,m_command_index);
211219         m_result_length = get_length();
212220         phase = legacy_scsi_host_adapter::get_phase();
213         if(m_command[0] == 1)  // rezero unit command - not implemented in SCSI code
214            m_phase_timer->adjust(attotime::from_usec(800),SCSI_PHASE_STATUS);
215         else
216            m_phase_timer->adjust(attotime::from_usec(800),phase);
221         m_phase_timer->adjust(attotime::from_usec(800),phase);
217222
218223         logerror("FMSCSI: Command %02x sent, result length = %i\n",m_command[0],m_result_length);
219224      }
r30855r30856
264269      m_transfer_timer->adjust(attotime::zero,0,attotime::from_hz(3000000));  // arbitrary value for now
265270      read_data(m_buffer,512);
266271      m_result_index = 0;
267      logerror("FMSCSI: Starting transfer (%i)\n",m_result_length);
272      logerror("FMSCSI: Starting transfer in (%i)\n",m_result_length);
268273      break;
269274   case SCSI_PHASE_DATAOUT:
270275      set_input_line(FMSCSI_LINE_CD,0);
r30855r30856
274279      // start transfer timer
275280      m_transfer_timer->adjust(attotime::zero,0,attotime::from_hz(3000000));  // arbitrary value for now
276281      m_result_index = 0;
277      logerror("FMSCSI: Starting transfer (%i)\n",m_result_length);
282      logerror("FMSCSI: Starting transfer out (%i)\n",m_result_length);
278283      break;
279284   case SCSI_PHASE_MESSAGE_IN:
280285      set_input_line(FMSCSI_LINE_CD,1);
trunk/src/mess/machine/fm_scsi.h
r30855r30856
7575   static const device_timer_id TIMER_PHASE = 1;
7676
7777   int get_scsi_cmd_len(UINT8 cbyte);
78   void stop_transfer();
7879
7980   devcb_write_line m_irq_handler;
8081   devcb_write_line m_drq_handler;

Previous 199869 Revisions Next


© 1997-2024 The MAME Team