Exemplo n.º 1
0
 private void seek(int driveNum, int head, int cyl) {
   this.statusRegMain &= ~STM_BUSY;
   this.statusReg0 = 0;
   if ((driveNum >= 0) && (driveNum < this.seekStatus.length)) {
     this.seekStatus[driveNum] = ((head << 2) & HEAD_MASK) | driveNum;
     FloppyDiskDrive drive = getDrive(driveNum);
     if (drive != null) {
       if (drive.getCylinder() == cyl) {
         this.seekStatus[driveNum] |= ST0_SEEK_END;
         this.interruptReq = true;
       } else {
         if (driveNum > 0) {
           this.statusRegMain |= (1 << driveNum);
         } else {
           this.statusRegMain |= 0x01;
         }
         drive.setSeekMode(head, cyl);
         this.remainSeekSteps[driveNum] = 77;
         if (!this.seekMode) {
           this.tStateStepCounter = 0;
           this.seekMode = true;
         }
       }
     } else {
       this.seekStatus[driveNum] |= ST0_ABNORMAL_TERMINATION;
       this.seekStatus[driveNum] |= ST0_NOT_READY;
       this.seekStatus[driveNum] |= ST0_SEEK_END;
       this.interruptReq = true;
     }
   } else {
     this.statusReg0 |= ST0_ABORT_BECAUSE_READY_CHANGED;
     this.statusReg0 |= ST0_SEEK_END;
     this.statusReg0 |= ST0_NOT_READY;
     this.statusReg0 |= ((head << 2) & HEAD_MASK);
     this.statusReg0 |= (driveNum & DRIVE_MASK);
     this.interruptReq = true;
   }
 }