diff --git a/src/drive.cpp b/src/drive.cpp index dbe73e6..ac821a6 100644 --- a/src/drive.cpp +++ b/src/drive.cpp @@ -72,8 +72,13 @@ void Disk2Drive::rotateDiskOneBit() { this->disk.rotateOneBit(this->head.position()); bitBufferRead <<= 1; - bitBufferRead |= this->disk.getBit(this->head.position()); - if (bitBufferRead & 0x0Fu) { + + const bool exists(this->disk.exists(this->head.position())); + if (exists) { + bitBufferRead |= this->disk.getBit(this->head.position()); + } + + if ((bitBufferRead & 0x0Fu) && exists) { this->pulse = (bitBufferRead & 0x02u) >> 1; } else { this->pulse = randomBit(); diff --git a/src/wozfile.cpp b/src/wozfile.cpp index 0f851ef..a7fe800 100644 --- a/src/wozfile.cpp +++ b/src/wozfile.cpp @@ -533,19 +533,11 @@ void WozFile::rotateOneBit(std::uint8_t currentQuarterTrack) { } } - +bool WozFile::exists(std::uint8_t currentQuarterTrack) { + return isLoaded() && (this->tmap[currentQuarterTrack] != 0xFFu); +} bool WozFile::getBit(std::uint8_t currentQuarterTrack) { - if (!isLoaded()) { -// printf("No disk to read from; will generate random data.\n"); - return false; // there's no disk, so no pulse - } - - if (this->tmap[currentQuarterTrack] == 0xFFu) { -// printf("Reading from uninitialized track; will generate random data.\n"); - return false; // empty track - } - return this->trk[this->tmap[currentQuarterTrack]][this->byt] & this->bit; } diff --git a/src/wozfile.h b/src/wozfile.h index 07bfb04..915ff67 100644 --- a/src/wozfile.h +++ b/src/wozfile.h @@ -131,6 +131,7 @@ public: } void rotateOneBit(std::uint8_t currentQuarterTrack); + bool exists(std::uint8_t currentQuarterTrack); bool getBit(std::uint8_t currentQuarterTrack); void setBit(std::uint8_t currentQuarterTrack, bool on); void rawSet();