Previous 199869 Revisions Next

r18466 Thursday 11th October, 2012 at 21:51:32 UTC by O. Galibert
(mess) upd765: Implement LOCK [O. Galibert]
[src/mess/machine]upd765.c upd765.h

trunk/src/mess/machine/upd765.c
r18465r18466
132132      poll_timer = NULL;
133133
134134   cur_irq = false;
135   locked = false;
135136}
136137
137138void upd765_family_device::device_reset()
138139{
140   dor = dor_reset;
141   locked = false;
142}
143
144void upd765_family_device::soft_reset()
145{
139146   main_phase = PHASE_CMD;
140147   for(int i=0; i<4; i++) {
141148      flopi[i].main_state = IDLE;
r18465r18466
150157   fifo_pos = 0;
151158   command_pos = 0;
152159   result_pos = 0;
153   fifocfg = FIF_DIS;
160   if(!locked)
161      fifocfg = FIF_DIS;
154162   cur_live.fi = 0;
155163   drq = false;
156164   cur_live.tm = attotime::never;
r18465r18466
159167   cur_live.fi = NULL;
160168   tc_done = false;
161169   st0 = st1 = st2 = st3 = 0x00;
162   dor = dor_reset;
163170
164171   check_irq();
165172   if(ready_polled)
r18465r18466
240247   logerror("%s: dor = %02x\n", tag(), data);
241248   UINT8 diff = dor ^ data;
242249   dor = data;
243   if(diff & 4) {
244      UINT8 tmp = dor_reset;
245      dor_reset = dor;
246      device_reset();
247      dor_reset = tmp;
248   }
250   if(diff & 4)
251      soft_reset();
249252
250253   for(int i=0; i<4; i++) {
251254      floppy_info &fi = flopi[i];
r18465r18466
972975   case 0x13:
973976      return command_pos == 4 ? C_CONFIGURE          : C_INCOMPLETE;
974977
978   case 0x14:
979      return C_LOCK;
980
975981   default:
976982      return C_INVALID;
977983   }
r18465r18466
9971003      format_track_start(flopi[command[1] & 3]);
9981004      break;
9991005
1006   case C_LOCK:
1007      locked = command[0] & 0x80;
1008      main_phase = PHASE_RESULT;
1009      result[0] = locked ? 0x10 : 0x00;
1010      result_pos = 1;
1011      logerror("%s: command lock (%s)\n", tag(), locked ? "on" : "off");
1012      break;
1013
10001014   case C_PERPENDICULAR:
10011015      logerror("%s: command perpendicular\n", tag());
10021016      main_phase = PHASE_CMD;
trunk/src/mess/machine/upd765.h
r18465r18466
284284
285285   live_info cur_live, checkpoint_live;
286286   line_cb intrq_cb, drq_cb;
287   bool cur_irq, data_irq, drq, internal_drq, tc, tc_done;
287   bool cur_irq, data_irq, drq, internal_drq, tc, tc_done, locked;
288288   floppy_info flopi[4];
289289
290290   int fifo_pos, fifo_expected, command_pos, result_pos;
r18465r18466
304304   enum {
305305      C_CONFIGURE,
306306      C_FORMAT_TRACK,
307      C_LOCK,
307308      C_PERPENDICULAR,
308309      C_READ_DATA,
309310      C_READ_ID,
r18465r18466
321322
322323   void delay_cycles(emu_timer *tm, int cycles);
323324   void check_irq();
325   void soft_reset();
324326   void fifo_expect(int size, bool write);
325327   void fifo_push(UINT8 data, bool internal);
326328   UINT8 fifo_pop(bool internal);

Previous 199869 Revisions Next


© 1997-2024 The MAME Team