Exemplo n.º 1
0
void
Datasette::_executeFalling()
{
    c64->cia1.triggerFallingEdgeOnFlagPin();
    
    // Schedule next pulse
    advanceHead();
    uint64_t length = pulseLength();
    nextRisingEdge = length / 2;
    nextFallingEdge = length;
}
Exemplo n.º 2
0
void
Datasette::pressPlay()
{
    if (!hasTape())
        return;
    
    debug("Datasette::pressPlay\n");
    playKey = true;

    // Schedule first pulse
    uint64_t length = pulseLength();
    nextRisingEdge = length / 2;
    nextFallingEdge = length;
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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;
}