• R/O
  • HTTP
  • SSH
  • HTTPS

common_source_project-fm7: 提交

Common Source Code Project for Qt (a.k.a for FM-7).


Commit MetaInfo

修訂7b1c8f2b85e41cbfa8bb08813bd8011cba372007 (tree)
時間2018-02-24 01:20:59
作者K.Ohta <whatisthis.sowhat@gmai...>
CommiterK.Ohta

Log Message

[VM][MB8877] SEEK COMMAND: Fix seek target what difference betweeen track register and physical drive.Thank to Haserin.

Change Summary

差異

--- a/source/src/vm/mb8877.cpp
+++ b/source/src/vm/mb8877.cpp
@@ -822,19 +822,20 @@ void MB8877::event_callback(int event_id, int err)
822822 //#ifdef _FDC_DEBUG_LOG
823823 //this->out_debug_log(_T("FDC\tSEEK START\n"));
824824 //#endif
825- if(seektrk > (uint8_t)(fdc[drvreg].track & 0xff)) {
826- if((fdc[drvreg].track < 0xff) && (fdc[drvreg].track >= 0)) fdc[drvreg].track++;
825+ if(seektrk > fdc[drvreg].track) {
826+ fdc[drvreg].track++;
827827 if(d_noise_seek != NULL) d_noise_seek->play();
828828 //need_after_irq = true;
829- } else if(seektrk < (uint8_t)(fdc[drvreg].track & 0xff)) {
830- if((fdc[drvreg].track <= 0xff) && (fdc[drvreg].track > 0)) fdc[drvreg].track--;
829+ } else if(seektrk < fdc[drvreg].track) {
830+ fdc[drvreg].track--;
831831 if(d_noise_seek != NULL) d_noise_seek->play();
832832 //need_after_irq = true;
833833 }
834- if((cmdreg & 0x10) || ((cmdreg & 0xf0) == 0)) {
834+ // Not update track register if "SEEK" command.Thanks to Haserin. 20180224 K.O.
835+ if((((cmdreg & 0x10) != 0) && (cmdreg >= 0x20)) || ((cmdreg & 0xf0) == 0)) {
835836 trkreg = fdc[drvreg].track;
836837 }
837- if(seektrk != (uint8_t)(fdc[drvreg].track & 0xff)) {
838+ if((uint8_t)seektrk != (uint8_t)fdc[drvreg].track) {
838839 //if(need_after_irq) {
839840 //set_drq(false);
840841 //set_irq(true); // 20180118 K.O Turn ON IRQ -> Turn OFF DRQ
@@ -1123,7 +1124,6 @@ void MB8877::process_cmd()
11231124 };
11241125 if(fdc_debug_log) this->out_debug_log(_T("FDC\tCMD=%2xh (%s) DATA=%2xh DRV=%d TRK=%3d SIDE=%d SEC=%2d\n"), cmdreg, cmdstr[cmdreg >> 4], datareg, drvreg, trkreg, sidereg, secreg);
11251126 //#endif
1126-
11271127 switch(cmdreg & 0xf8) {
11281128 // type-1
11291129 case 0x00: case 0x08:
@@ -1234,13 +1234,12 @@ void MB8877::cmd_seek()
12341234 // verify
12351235 if(trkreg != fdc[drvreg].track) {
12361236 status |= FDC_ST_SEEKERR;
1237- trkreg = fdc[drvreg].track;
1237+ trkreg = fdc[drvreg].track; // Reload track register when verify: Really OK? 20180224 K.O
12381238 }
12391239 }
12401240
1241-// seektrk = (uint8_t)(fdc[drvreg].track + datareg - trkreg);
1242- seektrk = datareg;
1243-
1241+ seektrk = (uint8_t)(fdc[drvreg].track + datareg - trkreg); // Seek target is differ when drive's track != trkreg.Thanks to Haserin and Ryu Takegami.
1242+ //seektrk = (int)((int8_t)datareg);
12441243 //#if defined(_FM77AV40) || defined(_FM77AV40EX) || defined(_FM77AV40SX) || defined(_FM77AV20) || defined(_FM77AV20EX)
12451244 if(type_fm77av_2dd) {
12461245 if(disk[drvreg]->drive_type != DRIVE_TYPE_2D) {
@@ -1253,13 +1252,9 @@ void MB8877::cmd_seek()
12531252 } else {
12541253 seektrk = (seektrk > 41) ? 41 : (seektrk < 0) ? 0 : seektrk;
12551254 }
1255+
12561256 seekvct = !(seektrk > fdc[drvreg].track);
1257- // Fix wrong seek (to overtrack and overflow)
1258- // Followup from XM7.
1259- // Thanks to Haserin and Ryu Takegami.
1260- if((seekvct) && ((trkreg - datareg) > (uint8_t)(fdc[drvreg].track))) {
1261- seektrk = 0;
1262- }
1257+ // Update track register by data register.Thanks to Ryu Takegami. 20180224 K.O
12631258 trkreg = datareg;
12641259 set_irq(false);
12651260 set_drq(false);
@@ -1521,7 +1516,8 @@ void MB8877::cmd_forceint()
15211516 } else if(seektrk < fdc[drvreg].track) {
15221517 if((fdc[drvreg].track <= 0xff) && (fdc[drvreg].track > 0)) fdc[drvreg].track--;
15231518 }
1524- if((cmdreg_tmp & 0x10) || ((cmdreg_tmp & 0xf0) == 0)) {
1519+ // Not update track register if "SEEK" command.Thanks to Haserin. 20180224 K.O.
1520+ if((((cmdreg_tmp & 0x10) != 0) && (cmdreg_tmp >= 0x20)) || ((cmdreg_tmp & 0xf0) == 0)) {
15251521 trkreg = fdc[drvreg].track;
15261522 }
15271523 }
Show on old repository browser