Previous 199869 Revisions Next

r19066 Tuesday 20th November, 2012 at 07:37:54 UTC by O. Galibert
upd765: Better integration and support of FM [O. Galibert]
[src/mess/machine]upd765.c upd765.h

trunk/src/mess/machine/upd765.c
r19065r19066
505505   fifo_push(data, false);
506506}
507507
508void upd765_family_device::live_start(floppy_info &fi, int state, bool mfm)
508void upd765_family_device::live_start(floppy_info &fi, int state)
509509{
510510   cur_live.tm = machine().time();
511511   cur_live.state = state;
r19065r19066
630630               cur_live.bit_counter);
631631#endif
632632
633         if(cur_live.shift_reg == 0x4489) {
633         if(mfm && cur_live.shift_reg == 0x4489) {
634634            cur_live.crc = 0x443b;
635635            cur_live.data_separator_phase = false;
636636            cur_live.bit_counter = 0;
637637            cur_live.state = READ_HEADER_BLOCK_HEADER;
638638         }
639
640         if(!mfm && cur_live.shift_reg == 0xf57e) {
641            cur_live.crc = 0xef21;
642            cur_live.data_separator_phase = false;
643            cur_live.bit_counter = 0;
644            cur_live.state = READ_ID_BLOCK;
645         }
639646         break;
640647
641648      case READ_HEADER_BLOCK_HEADER: {
r19065r19066
674681         break;
675682      }
676683
677      case SEARCH_ADDRESS_MARK_HEADER_FM:
678         if(read_one_bit(limit))
679            return;
680#if 0
681         fprintf(stderr, "%s: shift = %04x data=%02x c=%d\n", tts(cur_live.tm).cstr(), cur_live.shift_reg,
682               (cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
683               (cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
684               (cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
685               (cur_live.shift_reg & 0x0100 ? 0x10 : 0x00) |
686               (cur_live.shift_reg & 0x0040 ? 0x08 : 0x00) |
687               (cur_live.shift_reg & 0x0010 ? 0x04 : 0x00) |
688               (cur_live.shift_reg & 0x0004 ? 0x02 : 0x00) |
689               (cur_live.shift_reg & 0x0001 ? 0x01 : 0x00),
690               cur_live.bit_counter);
691#endif
692
693         if(cur_live.shift_reg == 0xf57e) {
694            cur_live.crc = 0xef21;
695            cur_live.data_separator_phase = false;
696            cur_live.bit_counter = 0;
697            cur_live.state = READ_ID_BLOCK;
698         }
699         break;
700
701684      case READ_ID_BLOCK: {
702685         if(read_one_bit(limit))
703686            return;
r19065r19066
730713               (cur_live.shift_reg & 0x0001 ? 0x01 : 0x00),
731714               cur_live.bit_counter >> 4, cur_live.bit_counter & 15);
732715#endif
733         // Large tolerance due to perpendicular recording at extended density
734         if(cur_live.bit_counter > 62*16) {
735            live_delay(SEARCH_ADDRESS_MARK_DATA_FAILED);
736            return;
716
717         if(mfm) {
718            // Large tolerance due to perpendicular recording at extended density
719            if(cur_live.bit_counter > 62*16) {
720               live_delay(SEARCH_ADDRESS_MARK_DATA_FAILED);
721               return;
722            }
723
724            if(cur_live.bit_counter >= 28*16 && cur_live.shift_reg == 0x4489) {
725               cur_live.crc = 0x443b;
726               cur_live.data_separator_phase = false;
727               cur_live.bit_counter = 0;
728               cur_live.state = READ_DATA_BLOCK_HEADER;
729            }
730
731         } else {
732            if(cur_live.bit_counter > 23*16) {
733               live_delay(SEARCH_ADDRESS_MARK_DATA_FAILED);
734               return;
735            }
736
737            if(cur_live.bit_counter >= 11*16 && (cur_live.shift_reg == 0xf56a || cur_live.shift_reg == 0xf56f)) {
738               cur_live.crc = cur_live.shift_reg == 0xf56a ? 0x8fe7 : 0xbf84;
739               cur_live.data_separator_phase = false;
740               cur_live.bit_counter = 0;
741               cur_live.state = READ_SECTOR_DATA;
742            }
737743         }
738744
739         if(cur_live.bit_counter >= 28*16 && cur_live.shift_reg == 0x4489) {
740            cur_live.crc = 0x443b;
741            cur_live.data_separator_phase = false;
742            cur_live.bit_counter = 0;
743            cur_live.state = READ_DATA_BLOCK_HEADER;
744         }
745745         break;
746746
747747      case READ_DATA_BLOCK_HEADER: {
r19065r19066
787787         cur_live.state = IDLE;
788788         return;
789789
790      case SEARCH_ADDRESS_MARK_DATA_FM:
791         if(read_one_bit(limit))
792            return;
793#if 0
794         fprintf(stderr, "%s: shift = %04x data=%02x c=%d.%x\n", tts(cur_live.tm).cstr(), cur_live.shift_reg,
795               (cur_live.shift_reg & 0x4000 ? 0x80 : 0x00) |
796               (cur_live.shift_reg & 0x1000 ? 0x40 : 0x00) |
797               (cur_live.shift_reg & 0x0400 ? 0x20 : 0x00) |
798               (cur_live.shift_reg & 0x0100 ? 0x10 : 0x00) |
799               (cur_live.shift_reg & 0x0040 ? 0x08 : 0x00) |
800               (cur_live.shift_reg & 0x0010 ? 0x04 : 0x00) |
801               (cur_live.shift_reg & 0x0004 ? 0x02 : 0x00) |
802               (cur_live.shift_reg & 0x0001 ? 0x01 : 0x00),
803               cur_live.bit_counter >> 4, cur_live.bit_counter & 15);
804#endif
805         if(cur_live.bit_counter > 23*16) {
806            live_delay(SEARCH_ADDRESS_MARK_DATA_FAILED);
807            return;
808         }
809
810         if(cur_live.bit_counter >= 11*16 && (cur_live.shift_reg == 0xf56a || cur_live.shift_reg == 0xf56f)) {
811            cur_live.crc = cur_live.shift_reg == 0xf56a ? 0x8fe7 : 0xbf84;
812            cur_live.data_separator_phase = false;
813            cur_live.bit_counter = 0;
814            cur_live.state = READ_SECTOR_DATA;
815         }
816         break;
817
818790      case READ_SECTOR_DATA: {
819791         if(read_one_bit(limit))
820792            return;
r19065r19066
853825      case WRITE_SECTOR_SKIP_GAP2_BYTE:
854826         if(read_one_bit(limit))
855827            return;
856         if(cur_live.bit_counter != 22*16)
828         if(mfm && cur_live.bit_counter != 22*16)
857829            break;
830         if(!mfm && cur_live.bit_counter != 11*16)
831            break;
858832         cur_live.bit_counter = 0;
859833         cur_live.byte_counter = 0;
860834         live_delay(WRITE_SECTOR_DATA);
861835         return;
862836
863837      case WRITE_SECTOR_DATA:
864         if(cur_live.byte_counter < 12)
865            live_write_mfm(0x00);
866         else if(cur_live.byte_counter < 15)
867            live_write_raw(0x4489);
868         else if(cur_live.byte_counter < 16) {
869            cur_live.crc = 0xcdb4;
870            live_write_mfm(command[0] & 0x08 ? 0xf8 : 0xfb);
871         } else if(cur_live.byte_counter < 16+sector_size)
872            live_write_mfm(tc_done && !fifo_pos? 0x00 : fifo_pop(true));
873         else if(cur_live.byte_counter < 16+sector_size+2)
874            live_write_mfm(cur_live.crc >> 8);
875         else if(cur_live.byte_counter < 16+sector_size+2+command[7])
876            live_write_mfm(0x4e);
877         else {
878            cur_live.pll.stop_writing(cur_live.fi->dev, cur_live.tm);
879            cur_live.state = IDLE;
880            return;
838         if(mfm) {
839            if(cur_live.byte_counter < 12)
840               live_write_mfm(0x00);
841            else if(cur_live.byte_counter < 15)
842               live_write_raw(0x4489);
843            else if(cur_live.byte_counter < 16) {
844               cur_live.crc = 0xcdb4;
845               live_write_mfm(command[0] & 0x08 ? 0xf8 : 0xfb);
846            } else if(cur_live.byte_counter < 16+sector_size)
847               live_write_mfm(tc_done && !fifo_pos? 0x00 : fifo_pop(true));
848            else if(cur_live.byte_counter < 16+sector_size+2)
849               live_write_mfm(cur_live.crc >> 8);
850            else if(cur_live.byte_counter < 16+sector_size+2+command[7])
851               live_write_mfm(0x4e);
852            else {
853               cur_live.pll.stop_writing(cur_live.fi->dev, cur_live.tm);
854               cur_live.state = IDLE;
855               return;
856            }
857
858         } else {
859            if(cur_live.byte_counter < 6)
860               live_write_fm(0x00);
861            else if(cur_live.byte_counter < 7) {
862               cur_live.crc = 0xffff;
863               live_write_raw(command[0] & 0x08 ? 0xf56a : 0xf56f);
864            } else if(cur_live.byte_counter < 7+sector_size)
865               live_write_fm(tc_done && !fifo_pos? 0x00 : fifo_pop(true));
866            else if(cur_live.byte_counter < 7+sector_size+2)
867               live_write_fm(cur_live.crc >> 8);
868            else if(cur_live.byte_counter < 7+sector_size+2+command[7])
869               live_write_fm(0xff);
870            else {
871               cur_live.pll.stop_writing(cur_live.fi->dev, cur_live.tm);
872               cur_live.state = IDLE;
873               return;
874            }
881875         }
882876         cur_live.state = WRITE_SECTOR_DATA_BYTE;
883877         cur_live.bit_counter = 16;
r19065r19066
887881      case WRITE_TRACK_PRE_SECTORS:
888882         if(!cur_live.byte_counter && command[3])
889883            fifo_expect(4, true);
890         if(cur_live.byte_counter < 80)
891            live_write_mfm(0x4e);
892         else if(cur_live.byte_counter < 92)
893            live_write_mfm(0x00);
894         else if(cur_live.byte_counter < 95)
895            live_write_raw(0x5224);
896         else if(cur_live.byte_counter < 96)
897            live_write_mfm(0xfc);
898         else if(cur_live.byte_counter < 146)
899            live_write_mfm(0x4e);
900         else {
901            cur_live.state = WRITE_TRACK_SECTOR;
902            cur_live.byte_counter = 0;
903            break;
884         if(mfm) {
885            if(cur_live.byte_counter < 80)
886               live_write_mfm(0x4e);
887            else if(cur_live.byte_counter < 92)
888               live_write_mfm(0x00);
889            else if(cur_live.byte_counter < 95)
890               live_write_raw(0x5224);
891            else if(cur_live.byte_counter < 96)
892               live_write_mfm(0xfc);
893            else if(cur_live.byte_counter < 146)
894               live_write_mfm(0x4e);
895            else {
896               cur_live.state = WRITE_TRACK_SECTOR;
897               cur_live.byte_counter = 0;
898               break;
899            }
900         } else {
901            if(cur_live.byte_counter < 40)
902               live_write_fm(0xff);
903            else if(cur_live.byte_counter < 46)
904               live_write_fm(0x00);
905            else if(cur_live.byte_counter < 47)
906               live_write_raw(0xf77a);
907            else if(cur_live.byte_counter < 73)
908               live_write_fm(0xff);
909            else {
910               cur_live.state = WRITE_TRACK_SECTOR;
911               cur_live.byte_counter = 0;
912               break;
913            }
904914         }
905915         cur_live.state = WRITE_TRACK_PRE_SECTORS_BYTE;
906916         cur_live.bit_counter = 16;
r19065r19066
913923            if(command[3])
914924               fifo_expect(4, true);
915925         }
916         if(cur_live.byte_counter < 12)
917            live_write_mfm(0x00);
918         else if(cur_live.byte_counter < 15)
919            live_write_raw(0x4489);
920         else if(cur_live.byte_counter < 16) {
921            cur_live.crc = 0xcdb4;
922            live_write_mfm(0xfe);
923         } else if(cur_live.byte_counter < 20)
924            live_write_mfm(fifo_pop(true));
925         else if(cur_live.byte_counter < 22)
926            live_write_mfm(cur_live.crc >> 8);
927         else if(cur_live.byte_counter < 44)
928            live_write_mfm(0x4e);
929         else if(cur_live.byte_counter < 56)
930            live_write_mfm(0x00);
931         else if(cur_live.byte_counter < 59)
932            live_write_raw(0x4489);
933         else if(cur_live.byte_counter < 60) {
934            cur_live.crc = 0xcdb4;
935            live_write_mfm(0xfb);
936         } else if(cur_live.byte_counter < 60+sector_size)
937            live_write_mfm(command[5]);
938         else if(cur_live.byte_counter < 62+sector_size)
939            live_write_mfm(cur_live.crc >> 8);
940         else if(cur_live.byte_counter < 62+sector_size+command[4])
941            live_write_mfm(0x4e);
942         else {
943            cur_live.byte_counter = 0;
944            cur_live.state = command[3] ? WRITE_TRACK_SECTOR : WRITE_TRACK_POST_SECTORS;
945            break;
926         if(mfm) {
927            if(cur_live.byte_counter < 12)
928               live_write_mfm(0x00);
929            else if(cur_live.byte_counter < 15)
930               live_write_raw(0x4489);
931            else if(cur_live.byte_counter < 16) {
932               cur_live.crc = 0xcdb4;
933               live_write_mfm(0xfe);
934            } else if(cur_live.byte_counter < 20)
935               live_write_mfm(fifo_pop(true));
936            else if(cur_live.byte_counter < 22)
937               live_write_mfm(cur_live.crc >> 8);
938            else if(cur_live.byte_counter < 44)
939               live_write_mfm(0x4e);
940            else if(cur_live.byte_counter < 56)
941               live_write_mfm(0x00);
942            else if(cur_live.byte_counter < 59)
943               live_write_raw(0x4489);
944            else if(cur_live.byte_counter < 60) {
945               cur_live.crc = 0xcdb4;
946               live_write_mfm(0xfb);
947            } else if(cur_live.byte_counter < 60+sector_size)
948               live_write_mfm(command[5]);
949            else if(cur_live.byte_counter < 62+sector_size)
950               live_write_mfm(cur_live.crc >> 8);
951            else if(cur_live.byte_counter < 62+sector_size+command[4])
952               live_write_mfm(0x4e);
953            else {
954               cur_live.byte_counter = 0;
955               cur_live.state = command[3] ? WRITE_TRACK_SECTOR : WRITE_TRACK_POST_SECTORS;
956               break;
957            }
958
959         } else {
960            if(cur_live.byte_counter < 6)
961               live_write_fm(0x00);
962            else if(cur_live.byte_counter < 7) {
963               cur_live.crc = 0xffff;
964               live_write_raw(0xf57e);
965            } else if(cur_live.byte_counter < 11)
966               live_write_fm(fifo_pop(true));
967            else if(cur_live.byte_counter < 13)
968               live_write_fm(cur_live.crc >> 8);
969            else if(cur_live.byte_counter < 24)
970               live_write_fm(0xff);
971            else if(cur_live.byte_counter < 30)
972               live_write_fm(0x00);
973            else if(cur_live.byte_counter < 31) {
974               cur_live.crc = 0xffff;
975               live_write_raw(0xf56f);
976            } else if(cur_live.byte_counter < 31+sector_size)
977               live_write_fm(command[5]);
978            else if(cur_live.byte_counter < 33+sector_size)
979               live_write_fm(cur_live.crc >> 8);
980            else if(cur_live.byte_counter < 33+sector_size+command[4])
981               live_write_fm(0xff);
982            else {
983               cur_live.byte_counter = 0;
984               cur_live.state = command[3] ? WRITE_TRACK_SECTOR : WRITE_TRACK_POST_SECTORS;
985               break;
986            }
946987         }
947988         cur_live.state = WRITE_TRACK_SECTOR_BYTE;
948989         cur_live.bit_counter = 16;
r19065r19066
950991         break;
951992
952993      case WRITE_TRACK_POST_SECTORS:
953         live_write_mfm(0x4e);
994         if(mfm)
995            live_write_mfm(0x4e);
996         else
997            live_write_fm(0xff);
954998         cur_live.state = WRITE_TRACK_POST_SECTORS_BYTE;
955999         cur_live.bit_counter = 16;
9561000         checkpoint();
r19065r19066
13191363{
13201364   fi.main_state = READ_DATA;
13211365   fi.sub_state = HEAD_LOAD_DONE;
1366   mfm = command[0] & 0x40;
13221367   logerror("%s: command read%s data%s%s%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
13231368          tag(),
13241369          command[0] & 0x08 ? " deleted" : "",
r19065r19066
13891434      case SEEK_DONE:
13901435         fi.counter = 0;
13911436         fi.sub_state = SCAN_ID;
1392         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1437         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
13931438         return;
13941439
13951440      case SCAN_ID:
r19065r19066
14101455               fi.sub_state = COMMAND_DONE;
14111456               break;
14121457            }
1413            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1458            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
14141459            return;
14151460         }
14161461         logerror("%s: reading sector %02x %02x %02x %02x\n",
r19065r19066
14221467         sector_size = calc_sector_size(cur_live.idbuf[3]);
14231468         fifo_expect(sector_size, false);
14241469         fi.sub_state = SECTOR_READ;
1425         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_DATA : SEARCH_ADDRESS_MARK_DATA_FM, command[0] & 0x40);
1470         live_start(fi, SEARCH_ADDRESS_MARK_DATA);
14261471         return;
14271472
14281473      case SCAN_ID_FAILED:
r19065r19066
14941539{
14951540   fi.main_state = WRITE_DATA;
14961541   fi.sub_state = HEAD_LOAD_DONE;
1542   mfm = command[0] & 0x40;
14971543   logerror("%s: command write%s data%s%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
14981544          tag(),
14991545          command[0] & 0x08 ? " deleted" : "",
r19065r19066
15271573      case HEAD_LOAD_DONE:
15281574         fi.counter = 0;
15291575         fi.sub_state = SCAN_ID;
1530         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1576         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
15311577         return;
15321578
15331579      case SCAN_ID:
15341580         if(!sector_matches()) {
1535            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1581            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
15361582            return;
15371583         }
15381584         if(cur_live.crc) {
r19065r19066
15451591         sector_size = calc_sector_size(cur_live.idbuf[3]);
15461592         fifo_expect(sector_size, true);
15471593         fi.sub_state = SECTOR_WRITTEN;
1548         live_start(fi, WRITE_SECTOR_SKIP_GAP2, command[0] & 0x40);
1594         live_start(fi, WRITE_SECTOR_SKIP_GAP2);
15491595         return;
15501596
15511597      case SCAN_ID_FAILED:
r19065r19066
16051651{
16061652   fi.main_state = READ_TRACK;
16071653   fi.sub_state = HEAD_LOAD_DONE;
1654   mfm = command[0] & 0x40;
16081655
16091656   logerror("%s: command read track%s cmd=%02x sel=%x chrn=(%d, %d, %d, %d) eot=%02x gpl=%02x dtl=%02x rate=%d\n",
16101657          tag(),
r19065r19066
16671714      case SEEK_DONE:
16681715         fi.counter = 0;
16691716         fi.sub_state = SCAN_ID;
1670         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1717         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
16711718         return;
16721719
16731720      case SCAN_ID:
16741721         if(cur_live.crc) {
16751722            fprintf(stderr, "Header CRC error\n");
1676            live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1723            live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
16771724            return;
16781725         }
16791726         sector_size = calc_sector_size(cur_live.idbuf[3]);
16801727         fifo_expect(sector_size, false);
16811728         fi.sub_state = SECTOR_READ;
1682         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_DATA : SEARCH_ADDRESS_MARK_DATA_FM, command[0] & 0x40);
1729         live_start(fi, SEARCH_ADDRESS_MARK_DATA);
16831730         return;
16841731
16851732      case SCAN_ID_FAILED:
r19065r19066
17251772{
17261773   fi.main_state = FORMAT_TRACK;
17271774   fi.sub_state = HEAD_LOAD_DONE;
1775   mfm = command[0] & 0x40;
17281776
17291777   logerror("%s: command format track %s h=%02x n=%02x sc=%02x gpl=%02x d=%02x\n",
17301778          tag(),
r19065r19066
17531801         logerror("%s: index found, writing track\n", tag());
17541802         fi.sub_state = TRACK_DONE;
17551803         cur_live.pll.start_writing(machine().time());
1756         live_start(fi, WRITE_TRACK_PRE_SECTORS, command[0] & 0x40);
1804         live_start(fi, WRITE_TRACK_PRE_SECTORS);
17571805         return;
17581806
17591807      case TRACK_DONE:
r19065r19066
17801828{
17811829   fi.main_state = READ_ID;
17821830   fi.sub_state = HEAD_LOAD_DONE;
1831   mfm = command[0] & 0x40;
17831832
17841833   logerror("%s: command read id%s, rate=%d\n",
17851834          tag(),
r19065r19066
18061855      case HEAD_LOAD_DONE:
18071856         fi.counter = 0;
18081857         fi.sub_state = SCAN_ID;
1809         live_start(fi, command[0] & 0x40 ? SEARCH_ADDRESS_MARK_HEADER : SEARCH_ADDRESS_MARK_HEADER_FM, command[0] & 0x40);
1858         live_start(fi, SEARCH_ADDRESS_MARK_HEADER);
18101859         return;
18111860
18121861      case SCAN_ID:
r19065r19066
19291978      floppy_info &fi = flopi[fid];
19301979      if(fi.dev != floppy)
19311980         continue;
1981      fprintf(stderr, "floppy %d index %d sub_state %d\n", fid, state, fi.sub_state);
19321982
19331983      if(fi.live)
19341984         live_sync();
r19065r19066
20812131
20822132void upd765_family_device::live_write_fm(UINT8 fm)
20832133{
2084   bool context = cur_live.data_bit_context;
2085   UINT16 raw = 0;
2086   for(int i=0; i<8; i++) {
2087      bool bit = fm & (0x80 >> i);
2088      raw |= 0x8000 >> (2*i);
2089      if(bit)
2134   UINT16 raw = 0xaaaa;
2135   for(int i=0; i<8; i++)
2136      if(fm & (0x80 >> i))
20902137         raw |= 0x4000 >> (2*i);
2091      context = bit;
2092   }
20932138   cur_live.data_reg = fm;
20942139   cur_live.shift_reg = raw;
2095   cur_live.data_bit_context = context;
2140   cur_live.data_bit_context = fm & 1;
20962141   //  logerror("write %02x   %04x %04x\n", fm, cur_live.crc, raw);
20972142}
20982143
trunk/src/mess/machine/upd765.h
r19065r19066
208208
209209      // Live states
210210      SEARCH_ADDRESS_MARK_HEADER,
211      SEARCH_ADDRESS_MARK_HEADER_FM,
212211      READ_HEADER_BLOCK_HEADER,
213212      READ_DATA_BLOCK_HEADER,
214213      READ_ID_BLOCK,
215214      SEARCH_ADDRESS_MARK_DATA,
216      SEARCH_ADDRESS_MARK_DATA_FM,
217215      SEARCH_ADDRESS_MARK_DATA_FAILED,
218216      READ_SECTOR_DATA,
219217      READ_SECTOR_DATA_BYTE,
r19065r19066
288286
289287   live_info cur_live, checkpoint_live;
290288   line_cb intrq_cb, drq_cb;
291   bool cur_irq, polled_irq, data_irq, drq, internal_drq, tc, tc_done, locked;
289   bool cur_irq, polled_irq, data_irq, drq, internal_drq, tc, tc_done, locked, mfm;
292290   floppy_info flopi[4];
293291
294292   int fifo_pos, fifo_expected, command_pos, result_pos;
r19065r19066
368366   void index_callback(floppy_image_device *floppy, int state);
369367   bool sector_matches() const;
370368
371   void live_start(floppy_info &fi, int live_state, bool mfm);
369   void live_start(floppy_info &fi, int live_state);
372370   void live_abort();
373371   void checkpoint();
374372   void rollback();

Previous 199869 Revisions Next


© 1997-2024 The MAME Team