Previous 199869 Revisions Next

r19038 Monday 19th November, 2012 at 12:41:01 UTC by O. Galibert
upd765: Handle the rate correctly in FM [O. Galibert]
[src/mess/drivers]apc.c
[src/mess/machine]upd765.c upd765.h

trunk/src/mess/machine/upd765.c
r19037r19038
505505   fifo_push(data, false);
506506}
507507
508void upd765_family_device::live_start(floppy_info &fi, int state)
508void upd765_family_device::live_start(floppy_info &fi, int state, bool mfm)
509509{
510510   cur_live.tm = machine().time();
511511   cur_live.state = state;
r19037r19038
520520   cur_live.data_bit_context = false;
521521   cur_live.byte_counter = 0;
522522   cur_live.pll.reset(cur_live.tm);
523   cur_live.pll.set_clock(attotime::from_hz(cur_rate*2));
523   cur_live.pll.set_clock(attotime::from_hz(mfm ? 2*cur_rate : cur_rate));
524524   checkpoint_live = cur_live;
525525   fi.live = true;
526526
r19037r19038
13891389      case SEEK_DONE:
13901390         fi.counter = 0;
13911391         fi.sub_state = SCAN_ID;
1392         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM);
1392         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
13931393         return;
13941394
13951395      case SCAN_ID:
r19037r19038
14101410               fi.sub_state = COMMAND_DONE;
14111411               break;
14121412            }
1413            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM);
1413            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
14141414            return;
14151415         }
14161416         logerror("%s: reading sector %02x %02x %02x %02x\n",
r19037r19038
14221422         sector_size = calc_sector_size(cur_live.idbuf[3]);
14231423         fifo_expect(sector_size, false);
14241424         fi.sub_state = SECTOR_READ;
1425         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_DATA : SEARCH_ADDRESS_MARK_DATA_FM);
1425         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_DATA : SEARCH_ADDRESS_MARK_DATA_FM, command[0] & 0x40);
14261426         return;
14271427
14281428      case SCAN_ID_FAILED:
r19037r19038
15271527      case HEAD_LOAD_DONE:
15281528         fi.counter = 0;
15291529         fi.sub_state = SCAN_ID;
1530         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1530         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
15311531         return;
15321532
15331533      case SCAN_ID:
15341534         if(!sector_matches()) {
1535            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1535            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
15361536            return;
15371537         }
15381538         if(cur_live.crc) {
15391539            fprintf(stderr, "Header CRC error\n");
1540            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1540            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
15411541            return;
15421542         }
15431543         sector_size = calc_sector_size(cur_live.idbuf[3]);
15441544         fifo_expect(sector_size, true);
15451545         fi.sub_state = SECTOR_WRITTEN;
1546         live_start(fi, WRITE_SECTOR_SKIP_GAP2);
1546         live_start(fi, WRITE_SECTOR_SKIP_GAP2, command[0] & 0x40);
15471547         return;
15481548
15491549      case SCAN_ID_FAILED:
r19037r19038
16651665      case SEEK_DONE:
16661666         fi.counter = 0;
16671667         fi.sub_state = SCAN_ID;
1668         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1668         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
16691669         return;
16701670
16711671      case SCAN_ID:
16721672         if(cur_live.crc) {
16731673            fprintf(stderr, "Header CRC error\n");
1674            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1674            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
16751675            return;
16761676         }
16771677         sector_size = calc_sector_size(cur_live.idbuf[3]);
16781678         fifo_expect(sector_size, false);
16791679         fi.sub_state = SECTOR_READ;
1680         live_start(fi, SEARCH_ADDRESS_MARK_DATA);
1680         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_DATA : SEARCH_ADDRESS_MARK_DATA_FM, command[0] & 0x40);
16811681         return;
16821682
16831683      case SCAN_ID_FAILED:
r19037r19038
17511751         logerror("%s: index found, writing track\n", tag());
17521752         fi.sub_state = TRACK_DONE;
17531753         cur_live.pll.start_writing(machine().time());
1754         live_start(fi, WRITE_TRACK_PRE_SECTORS);
1754         live_start(fi, WRITE_TRACK_PRE_SECTORS, command[0] & 0x40);
17551755         return;
17561756
17571757      case TRACK_DONE:
r19037r19038
18041804      case HEAD_LOAD_DONE:
18051805         fi.counter = 0;
18061806         fi.sub_state = SCAN_ID;
1807         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
1807         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
18081808         return;
18091809
18101810      case SCAN_ID:
trunk/src/mess/machine/upd765.h
r19037r19038
368368   void index_callback(floppy_image_device *floppy, int state);
369369   bool sector_matches() const;
370370
371   void live_start(floppy_info &fi, int live_state);
371   void live_start(floppy_info &fi, int live_state, bool mfm);
372372   void live_abort();
373373   void checkpoint();
374374   void rollback();
trunk/src/mess/drivers/apc.c
r19037r19038
482482
483483void apc_state::machine_start()
484484{
485   m_fdc->set_rate(500000);
485486   m_fdc->setup_intrq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_irq), this));
486487   m_fdc->setup_drq_cb(upd765a_device::line_cb(FUNC(apc_state::fdc_drq), this));
487488}

Previous 199869 Revisions Next


© 1997-2024 The MAME Team