Previous 199869 Revisions Next

r32314 Tuesday 23rd September, 2014 at 15:14:39 UTC by Michael Zapf
Removed some debugging output; fixed FM value for Index AM. (nw)
[src/emu/machine]wd_fdc.c

trunk/src/emu/machine/wd_fdc.c
r32313r32314
3838#define TRACE_COMP 0
3939
4040// Shows command invocation
41#define TRACE_COMMAND 1
41#define TRACE_COMMAND 0
4242
4343// Shows sync actions
4444#define TRACE_SYNC 0
r32313r32314
203203
204204void wd_fdc_t::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
205205{
206   if (TRACE_EVENT) logerror("%s: Event fired for timer %d\n", tag(), (int)id);
206   if (TRACE_EVENT) logerror("%s: Event fired for timer %s\n", tag(), (id==TM_GEN)? "TM_GEN" : (id==TM_CMD)? "TM_CMD" : (id==TM_TRACK)? "TM_TRACK" : "TM_SECTOR");
207207   live_sync();
208208
209209   switch(id) {
r32313r32314
273273         }
274274
275275         if(main_state == SEEK && track == data) {
276            logerror("track=%d data=%d\n", track, data);
277276            sub_state = SEEK_DONE;
278277         }
279278
r32313r32314
304303         return;
305304
306305      case SEEK_WAIT_STEP_TIME_DONE: {
307         if (TRACE_STATE) logerror("%s: SEEK_WAIT_STEP_TIME\n", tag());
306         if (TRACE_STATE) logerror("%s: SEEK_WAIT_STEP_TIME_DONE\n", tag());
308307         bool done = false;
309308         switch(main_state) {
310309         case RESTORE:
r32313r32314
392391bool wd_fdc_t::sector_matches() const
393392{
394393   if(TRACE_MATCH)
395      logerror("%s: matching %02x %02x %02x %02x - %02x %02x\n", tag(),
394      logerror("%s: matching read T=%02x H=%02x S=%02x L=%02x - searched T=%02x S=%02x\n", tag(),
396395               cur_live.idbuf[0], cur_live.idbuf[1], cur_live.idbuf[2], cur_live.idbuf[3],
397396               track, sector);
398397
r32313r32314
14901489   for(;;) {
14911490      switch(cur_live.state) {
14921491      case SEARCH_ADDRESS_MARK_HEADER:
1493         if (TRACE_STATE) logerror("%s: SEARCH_ADDRESS_MARK_HEADER\n", tag());
14941492         if(read_one_bit(limit))
14951493            return;
14961494
r32313r32314
15241522         break;
15251523
15261524      case READ_HEADER_BLOCK_HEADER: {
1527         if (TRACE_STATE) logerror("%s: READ_HEADER_BLOCK_HEADER\n", tag());
1528
15291525         if(read_one_bit(limit))
15301526            return;
15311527
r32313r32314
15661562      }
15671563
15681564      case READ_ID_BLOCK_TO_LOCAL: {
1569         if (TRACE_STATE) logerror("%s: READ_ID_BLOCK_TO_LOCAL\n", tag());
15701565         if(read_one_bit(limit))
15711566            return;
15721567         if(cur_live.bit_counter & 15)
r32313r32314
15821577      }
15831578
15841579      case READ_ID_BLOCK_TO_DMA:
1585         if (TRACE_STATE) logerror("%s: READ_ID_BLOCK_TO_DMA\n", tag());
15861580         if(read_one_bit(limit))
15871581            return;
15881582         if(cur_live.bit_counter & 15)
r32313r32314
15911585         return;
15921586
15931587      case READ_ID_BLOCK_TO_DMA_BYTE:
1594         if (TRACE_STATE) logerror("%s: READ_ID_BLOCK_TO_DMA_BYTE\n", tag());
15951588         data = cur_live.data_reg;
15961589         if(cur_live.bit_counter == 16)
15971590            sector = data;
r32313r32314
16121605         break;
16131606
16141607      case SEARCH_ADDRESS_MARK_DATA:
1615         if (TRACE_STATE) logerror("%s: SEARCH_ADDRESS_MARK_DATA\n", tag());
16161608         if(read_one_bit(limit))
16171609            return;
16181610
r32313r32314
16601652         break;
16611653
16621654      case READ_DATA_BLOCK_HEADER: {
1663         if (TRACE_STATE) logerror("%s: READ_DATA_BLOCK_HEADER\n", tag());
16641655         if(read_one_bit(limit))
16651656            return;
16661657
r32313r32314
16981689      }
16991690
17001691      case SEARCH_ADDRESS_MARK_DATA_FAILED:
1701         if (TRACE_STATE) logerror("%s: SEARCH_ADDRESS_MARK_DATA_FAILED\n", tag());
17021692         status |= S_RNF;
17031693         cur_live.state = IDLE;
17041694         return;
17051695
17061696      case READ_SECTOR_DATA: {
1707         if (TRACE_STATE) logerror("%s: READ_SECTOR_DATA\n", tag());
17081697         if(read_one_bit(limit))
17091698            return;
17101699         if(cur_live.bit_counter & 15)
r32313r32314
17261715      }
17271716
17281717      case READ_SECTOR_DATA_BYTE:
1729         if (TRACE_STATE) logerror("%s: READ_SECTOR_DATA_BYTE\n", tag());
17301718         data = cur_live.data_reg;
17311719         set_drq();
17321720         cur_live.state = READ_SECTOR_DATA;
r32313r32314
17341722         break;
17351723
17361724      case READ_TRACK_DATA: {
1737         if (TRACE_STATE) logerror("%s: READ_TRACK_DATA\n", tag());
17381725         if(read_one_bit(limit))
17391726            return;
17401727         if(cur_live.bit_counter != 16
r32313r32314
17641751      }
17651752
17661753      case READ_TRACK_DATA_BYTE:
1767         if (TRACE_STATE) logerror("%s: READ_TRACK_DATA_BYTE\n", tag());
17681754         data = cur_live.data_reg;
17691755         set_drq();
17701756         cur_live.state = READ_TRACK_DATA;
r32313r32314
17721758         break;
17731759
17741760      case WRITE_TRACK_DATA:
1775         if (TRACE_STATE) logerror("%s: WRITE_TRACK_DATA\n", tag());
17761761         if(drq) {
17771762            status |= S_LOST;
17781763            data = 0;
r32313r32314
18231808               cur_live.previous_type = live_info::PT_NONE;
18241809               break;
18251810            case 0xfc:
1826               live_write_raw(0xcf63);
1811               live_write_raw(0xf77a);
18271812               cur_live.previous_type = live_info::PT_NONE;
18281813               break;
18291814            case 0xfe:
r32313r32314
18701855         break;
18711856
18721857      case WRITE_BYTE:
1873         if (TRACE_STATE) logerror("%s: WRITE_BYTE\n", tag());
18741858         if(write_one_bit(limit))
18751859            return;
18761860         if(cur_live.bit_counter == 0) {
r32313r32314
18821866      case WRITE_BYTE_DONE:
18831867         switch(sub_state) {
18841868         case TRACK_DONE:
1885            if (TRACE_STATE) logerror("%s: WRITE_BYTE_DONE / TRACK_DONE\n", tag());
18861869            if(cur_live.previous_type == live_info::PT_CRC_1) {
18871870               cur_live.previous_type = live_info::PT_CRC_2;
18881871               if(dden)
r32313r32314
18971880            break;
18981881
18991882         case SECTOR_WRITE:
1900            if (TRACE_STATE) logerror("%s: WRITE_BYTE_DONE / SECTOR_WRITE\n", tag());
19011883            cur_live.state = WRITE_BYTE;
19021884            cur_live.bit_counter = 16;
19031885            cur_live.byte_counter++;
r32313r32314
19761958         break;
19771959
19781960      case WRITE_SECTOR_PRE:
1979         if (TRACE_STATE) logerror("%s: WRITE_SECTOR_PRE\n", tag());
19801961         if(read_one_bit(limit))
19811962            return;
19821963         if(cur_live.bit_counter != 16)
r32313r32314
19851966         return;
19861967
19871968      case WRITE_SECTOR_PRE_BYTE:
1988         if (TRACE_STATE) logerror("%s: WRITE_SECTOR_PRE_BYTE\n", tag());
19891969         cur_live.state = WRITE_SECTOR_PRE;
19901970         cur_live.byte_counter++;
19911971         cur_live.bit_counter = 0;
r32313r32314
19951975            checkpoint();
19961976            break;
19971977
1998         // MZ: There is an inconsistency in the wd177x specs.
1999         // The flow chart of wd177x for sector writing (page 1-12)
2000         // says that after the sector header there is a 11 byte delay
2001         // before the DR check and another 1 byte delay to the start of
2002         // writing 0x00 (for FM). For MFM we have an additional 11 byte
2003         // delay before the 0x00 sequence.
2004         // However, the text of the section "Write sector" (1-9) and
2005         // pages 1-17 and 1-18 imply that in Gap 2, the 0x00 sequence
2006         // starts 11 bytes after the CRC field in FM and 22 bytes after
2007         // the CRC field in MFM.
1978         // MZ: There is an inconsistency in the wd177x specs; compare
1979         // the flow chart and the text of the section "Write sector" (1-9) and
1980         // pages 1-17 and 1-18.
20081981         //
20091982         // I suppose the sum of the delays in the flow chart should be
20101983         // 11 and 22, so we shorten the 9-byte delay to 8 bytes.

Previous 199869 Revisions Next


© 1997-2024 The MAME Team