void Datasette::_executeFalling() { c64->cia1.triggerFallingEdgeOnFlagPin(); // Schedule next pulse advanceHead(); uint64_t length = pulseLength(); nextRisingEdge = length / 2; nextFallingEdge = length; }
void Datasette::pressPlay() { if (!hasTape()) return; debug("Datasette::pressPlay\n"); playKey = true; // Schedule first pulse uint64_t length = pulseLength(); nextRisingEdge = length / 2; nextFallingEdge = length; }
void Datasette::pressPlay() { if (!hasTape()) return; debug("Datasette::pressPlay\n"); // nextFallingEdge = 0.5 * PAL_CYCLES_PER_SECOND; /* kick off in 0.5 seconds */ // nextRisingEdge = -1; // Schedule first pulse uint64_t length = pulseLength(); nextRisingEdge = length / 2; nextFallingEdge = length; playKey = true; // c64->putMessage(MSG_VC1530_PLAY, true); }
void Datasette::advanceHead(bool silent) { // Return if end of tape is already reached if (head == size) return; // Update head and headInCycles int length, skip; length = pulseLength(&skip); head += skip; headInCycles += length; // Send message if the tapeCounter (in seconds) changes uint32_t newHeadInSeconds = headInCycles / PAL_CYCLES_PER_SECOND; if (newHeadInSeconds != headInSeconds && !silent) c64->putMessage(MSG_VC1530_PROGRESS, newHeadInSeconds); // Update headInSeconds headInSeconds = newHeadInSeconds; }